اطلاعیه

Collapse
No announcement yet.

سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #61
    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

    دوستان کسی پیشنهادی نداره ؟؟

    دیدگاه


      #62
      پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

      نوشته اصلی توسط RubeuS
      toggle کردن کل پینهای پورت A
      کد:
      PORTA=~PORTA;
      کلا عملگر ~ به منظور نقیض کردن منطقی ( NOT ) بکار میرود.
      برای تاگل کردن یک بیت یا چند بیت خاص هم میتونید از xor استفاده کنید.
      برای مثال PORTA=0xF0 ^ PORTA بیتهای بالایی پورت a رو تاگل میکنه و به بیت های پایینی دست نمیزنه

      دیدگاه


        #63
        پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

        سلام
        یه برنامه دارم درباره ارتباط atmega 8 با rs232.
        قرار بوده تو این برنامه یک بایت دریافت بشه بعد یه ال ای دی روشن بشه.

        کد:
        #include <mega8.h>
        #include <delay.h>
        #include <io.h>
          
        volatile unsigned char b;
        
        void main(void)
        {
          PORTB.0 = 1;
          PORTB.1 = 1;
          
          DDRD = (0<<DDD0)|(1<<DDD1);
          DDRB = (1<<DDB0)|(1<<DDB1);
          //UCSRA = (1<<U2X);
          UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN)|(1<<TXCIE);
          UBRRH = 0;
          UBRRL = 51; // fosc = 8MHZ , Baud Rate = 9600 
          #asm ("sei");
          
          delay_ms(1000);
          PORTB.0 = 0;
          PORTB.1 = 0;
          delay_ms(1000); 
          b=0;
          UDR = 0x31;
          while (1)
            {
             if (b!=0)
              {
              PORTB.0 =~ PORTB.0 ;
              while ( !( UCSRA & (1<<UDRE)) );
              UDR = b + 1;
              delay_ms(100);
              b=0;
              }
            }
        }
        
        interrupt [USART_RXC] void USART_RX_Complete (void)
        {
          PORTB.1 = 1;
          b = UDR;
          delay_ms(1000);
          PORTB.1 = 0;
        }

        این برنامه یه مشکل عجیبی که داره وقتی به کد زیر میرسه
        کد:
             if (b!=0)
        یه مقدار وایمیسته بعد از مدتی میاد از void main (void) شروع میکنه به خوندن یعنی برنامه ریست میشه ؟؟؟!!! :eek:
        چرا اینجوریه؟؟

        دیدگاه


          #64
          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکر&#160

          سلام
          دوستان من یه برنامه با سون سگمنت و ds18b20 نوشتم.
          یه متغیری تعریف کردم (temp)از نوع int که قراره یه مقدار float رو در خودش ذخیره کنه ! (فقط قسمت صحیح مورد نیازه !)
          همچنین یه آیسی ساعت DS1307 بهش وصل شده که ساعت رو ازش میخونیم و نمایش میدیم !

          مشکل فقط در قسمت نمایش مقدار دماست.در واقع در متغیر temp که قراره مقدار دما در اون قرار بگیره یه عدد غیر واقعی با مقدار بسیار زیاد (حدود 100000) قرار میگیره ! که مشکل ساز میشه!
          از کتابخونه خود کدویژن برای DS18b20 استفاده کردم و نمونه برنامه برای نمایش روی LCD با تابع sprintf به درستی کار میکنه.فقط وقتی متغیر رو int تعریف میکنیم عدد بزرگ میشه !

          کد:
          #include <mega8.h>
          #include <delay.h>
          #include <ds18b20.h>
          #include <ds1307.h>
          
          
          #define xtal 8000000
          #define DATA PORTD
          #define LE PORTC
          
          //////////////////////////////////////////// Config DS18B20 //////////////////////////////////////
          
          #asm
            .equ __w1_port=0x18 ;PORTB
            .equ __w1_bit=0
          #endasm
          
          //////////////////////////////////////////// Config DS1307 //////////////////////////////////////
          
          #asm 
            .equ __i2c_port=0x18 ;PORTB
            .equ __sda_bit=5
            .equ __scl_bit=6
          #endasm
          
          unsigned char hour,minute,second,devices;
          unsigned int j,temp;
          const unsigned char adad[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x63,0x39};
          unsigned char data[8];
          
          void main(void){
          
          DDRC=0xFF;
          
          /* initialize the I2C bus */
          i2c_init();
          
          /* initialize the DS1307 RTC */
          rtc_init(0,0,0);
          
          rtc_set_time(21,01,50);
          
          while(1){
          
          rtc_get_time(&hour,&minute,&second);
          
          //////////////////////////////////////////// Read Hour //////////////////////////////////////
          
          data[0]=adad[hour/10];
          data[1]=adad[hour%10];
          
          //////////////////////////////////////////// Read Minute ///////////////////////////////////
          
          data[2]=adad[minute/10];
          data[3]=adad[minute%10];
          data[6]=adad[10]; 
          data[7]=adad[11];
          
          //////////////////////////////////////////// Showing Time //////////////////////////////////////
          
          for(j=0;j<4;j++){
          LE = 0x00;
          DATA = data[j];
          LE = 0x01 << j;
          delay_us(100);
          LE = 0x00;
          }
          delay_ms(50);
          
          //////////////////////////////////////////// Showing Temp //////////////////////////////////////
          //////////////////////////////////////////// Read Temp ///////////////////////////////////
          
          devices = w1_init();
          //while(devices>0){
          
          temp =ds18b20_temperature(0); 
              
          data[4]=adad[temp/10];                                             
          data[5]=adad[temp%10];
          
          for(j=0;j<4;j++){
          LE = 0x00;
          DATA = data[j+4];
          LE = 0x01 <<j;
          delay_us(100);
          LE = 0x00;
          }
          delay_ms(50);
          
          //}
          
          }
          }

          اینم فایل پروتئوس + برنامه C :

          http://www.uploadtak.com/images/p7369_7Segment.zip


          ممنونم
          * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
          * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
          *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
          حضرت علی(ع)
          آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

          دیدگاه


            #65
            پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

            نوشته اصلی توسط احسان نوری
            سلام
            دوستان من یه برنامه با سون سگمنت و ds18b20 نوشتم.
            یه متغیری تعریف کردم (temp)از نوع int که قراره یه مقدار float رو در خودش ذخیره کنه ! (فقط قسمت صحیح مورد نیازه !)
            همچنین یه آیسی ساعت DS1307 بهش وصل شده که ساعت رو ازش میخونیم و نمایش میدیم !

            مشکل فقط در قسمت نمایش مقدار دماست.در واقع در متغیر temp که قراره مقدار دما در اون قرار بگیره یه عدد غیر واقعی با مقدار بسیار زیاد (حدود 100000) قرار میگیره ! که مشکل ساز میشه!
            از کتابخونه خود کدویژن برای DS18b20 استفاده کردم و نمونه برنامه برای نمایش روی LCD با تابع sprintf به درستی کار میکنه.فقط وقتی متغیر رو int تعریف میکنیم عدد بزرگ میشه !

            کد:
            #include <mega8.h>
            #include <delay.h>
            #include <ds18b20.h>
            #include <ds1307.h>
            
            
            #define xtal 8000000
            #define DATA PORTD
            #define LE PORTC
            
            //////////////////////////////////////////// Config DS18B20 //////////////////////////////////////
            
            #asm
              .equ __w1_port=0x18 ;PORTB
              .equ __w1_bit=0
            #endasm
            
            //////////////////////////////////////////// Config DS1307 //////////////////////////////////////
            
            #asm 
              .equ __i2c_port=0x18 ;PORTB
              .equ __sda_bit=5
              .equ __scl_bit=6
            #endasm
            
            unsigned char hour,minute,second,devices;
            unsigned int j,temp;
            const unsigned char adad[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x63,0x39};
            unsigned char data[8];
            
            void main(void){
            
            DDRC=0xFF;
            
            /* initialize the I2C bus */
            i2c_init();
            
            /* initialize the DS1307 RTC */
            rtc_init(0,0,0);
            
            rtc_set_time(21,01,50);
            
            while(1){
            
            rtc_get_time(&hour,&minute,&second);
            
            //////////////////////////////////////////// Read Hour //////////////////////////////////////
            
            data[0]=adad[hour/10];
            data[1]=adad[hour%10];
            
            //////////////////////////////////////////// Read Minute ///////////////////////////////////
            
            data[2]=adad[minute/10];
            data[3]=adad[minute%10];
            data[6]=adad[10]; 
            data[7]=adad[11];
            
            //////////////////////////////////////////// Showing Time //////////////////////////////////////
            
            for(j=0;j<4;j++){
            LE = 0x00;
            DATA = data[j];
            LE = 0x01 << j;
            delay_us(100);
            LE = 0x00;
            }
            delay_ms(50);
            
            //////////////////////////////////////////// Showing Temp //////////////////////////////////////
            //////////////////////////////////////////// Read Temp ///////////////////////////////////
            
            devices = w1_init();
            //while(devices>0){
            
            temp =ds18b20_temperature(0); 
                
            data[4]=adad[temp/10];                                             
            data[5]=adad[temp%10];
            
            for(j=0;j<4;j++){
            LE = 0x00;
            DATA = data[j+4];
            LE = 0x01 <<j;
            delay_us(100);
            LE = 0x00;
            }
            delay_ms(50);
            
            //}
            
            }
            }

            اینم فایل پروتئوس + برنامه C :

            http://www.uploadtak.com/images/p7369_7Segment.zip


            ممنونم
            ببین دوست من.
            شما اگه به help کدویژن رجوع کنی میبینی که خروجی تابع float ds18b20_temperature(unsigned char *addr) از نوع float هستش نه int.
            کارهای زیر رو به ترتیب انجام بده .ببین کارت درست میشه یانه.
            1-یک متغیر float دلخواه تعریف کن.مثلا A.
            2-خط برنامه (temp =ds18b20_temperature(0 رو با این خط عوضش کن: A =ds18b20_temperature(0);
            3-کتابخونه ی math.h رو در اول برنامه ت اضافه کن.
            4- از دستور زیر برای تبدیل float به int استفاده کن.
            temp=ceil(A)
            5-حالا temp رو نشون بده.
            برای جوینده ی علم محدودیتی نیست. "ولو بالسین"

            دیدگاه


              #66
              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

              نوشته اصلی توسط احسان نوری

              یه متغیری تعریف کردم (temp)از نوع int که قراره یه مقدار float رو در خودش ذخیره کنه ! (فقط قسمت صحیح مورد نیازه !)
              در ضمن بیاد داشته باش که میچ متغیر int نمی تونه قسمت صحیح یک متغیری از نوع float رو در خودش ذخیره کنه.
              و هیچ float ی نمی تونه فقط قسمت رو تو خودش ذخیره کنه.
              شما باید حتما دو متغیر از نوع int و float تعریف کنی و سپس با دستورات کتابخونه ی math قسمت صحیح و اعشاری شون رو بکشی بیرون.
              برای جوینده ی علم محدودیتی نیست. "ولو بالسین"

              دیدگاه


                #67
                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                نوشته اصلی توسط m52r65
                در ضمن بیاد داشته باش که میچ متغیر int نمی تونه قسمت صحیح یک متغیری از نوع float رو در خودش ذخیره کنه.
                و هیچ float ی نمی تونه فقط قسمت رو تو خودش ذخیره کنه.
                شما باید حتما دو متغیر از نوع int و float تعریف کنی و سپس با دستورات کتابخونه ی math قسمت صحیح و اعشاری شون رو بکشی بیرون.
                چرا نتونه؟

                میشه ... :agree:

                به این زبون میگن سی ، نه برگ چغندر :icon_razz:
                (کارایی میشه با سی کرد که آدم بعضی موقع ها استغفرالله فکر میکنه خداست)

                با استفاده از casting میشه اینکار رو کرد.
                سرچ کنید ، اگه به نتیجه مطلوب نرسیدید ، بفرمایید تا با مثال توضیح بدم


                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                دیدگاه


                  #68
                  پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                  نوشته اصلی توسط RubeuS
                  چرا نتونه؟

                  میشه ... :agree:

                  به این زبون میگن سی ، نه برگ چغندر :icon_razz:
                  (کارایی میشه با سی کرد که آدم بعضی موقع ها استغفرالله فکر میکنه خداست)

                  با استفاده از casting میشه اینکار رو کرد.
                  سرچ کنید ، اگه به نتیجه مطلوب نرسیدید ، بفرمایید تا با مثال توضیح بدم
                  ممنون

                  منظورتون از casting اینه : ؟

                  کد:
                  temp = (int) ds18b20_temperature(0);
                  اینکار رو هم انجام دادم قبلا چندین بار.جوابگو نیست !
                  فایل پروتئوس رو هم گذاشتم میتونید تست کنید.
                  * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
                  * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
                  *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
                  حضرت علی(ع)
                  آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

                  دیدگاه


                    #69
                    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                    نوشته اصلی توسط احسان نوری
                    ممنون

                    منظورتون از casting اینه : ؟

                    کد:
                    temp = (int) ds18b20_temperature(0);
                    اینکار رو هم انجام دادم قبلا چندین بار.جوابگو نیست !
                    فایل پروتئوس رو هم گذاشتم میتونید تست کنید.
                    ds18b20_temperature یک تابع است که float برمیگردونه؟؟

                    اگر دیدتون از ds18b20_temperature یک متغییر float است، اشتباه میباشد.
                    هیچوقت جلو اسم متغییر پرانتز نمیاد.
                    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                    دیدگاه


                      #70
                      پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                      نوشته اصلی توسط RubeuS
                      ds18b20_temperature یک تابع است که float برمیگردونه؟؟

                      اگر دیدتون از ds18b20_temperature یک متغییر float است، اشتباه میباشد.
                      هیچوقت جلو اسم متغییر پرانتز نمیاد.
                      پس چه کنیم ؟
                      تابع float بر میگردونه .
                      * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
                      * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
                      *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
                      حضرت علی(ع)
                      آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

                      دیدگاه


                        #71
                        پاسخ : سوالات مربوط به زبان C و کدویژن(در میکر&#160

                        سلام
                        پست را اصلاح کردم
                        خروجی تابع Float هست


                        ds18b20_temperature یک تابع است که float برمیگردونه؟؟

                        اگر دیدتون از ds18b20_temperature یک متغییر float است، اشتباه میباشد.
                        هیچوقت جلو اسم متغییر پرانتز نمیاد.
                        کد:
                        float ds18b20_temperature(unsigned char *addr);

                        خروجی تابع Float هست اینو تست کن ببین بهت جواب میده

                        کد:
                        float FloatTemp;
                        
                        FloatTemp = ds18b20_temperature(0);
                        
                        temp =(int)FloatTemp;
                        موفق باشید
                        امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                        دیدگاه


                          #72
                          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                          عذر میخوام ، من پست مربوط به پروژه تون را ندیدم و فقط پست آخر تاپیک را جواب دادم.
                          جناب Sarami خیلی هوشمندانه عمل کردند و مقدار بازگشتی تابع را در یک متغییر float قرار داده و بعد یا استفاده از cast کردن به متغییر temp دادند.
                          البته نباید حالت قبل مشکلی بوجود بیاد ، تابعی که یک مقدار بر میگرده رو میشه cast کرد.
                          اصلا اگر بدون cast کردن هم مقدار اعشاری داخل متغییر عدد صحیح ریخته شود ، مقدار اعشار آن حذف میشود و فقط کامپایلر به شما وارنینگ میده .( البته رفتار کامپایلر های مختلف در این رابطه متفاوت است)

                          قطعا مشکل از جای دیگه ای است.
                          من در پست بعدی یک مثال در این رابطه براتون میزنم.
                          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                          دیدگاه


                            #73
                            پاسخ : پاسخ : سوالات مربوط به زبان C و کدویژن(در میکر 

                            نوشته اصلی توسط Abbas Sarami
                            سلام
                            پست را اصلاح کردم
                            خروجی تابع Float هست

                            کد:
                            float ds18b20_temperature(unsigned char *addr);

                            خروجی تابع Float هست اینو تست کن ببین بهت جواب میده

                            کد:
                            float FloatTemp;
                            
                            FloatTemp = ds18b20_temperature(0);
                            
                            temp =(int)FloatTemp;
                            موفق باشید
                            آقا ممنون
                            ولی نشد که نشد !
                            هنوز همون مشکل بزرگ بودن مقدار متغیر temp وجود داره.
                            در واقع برای نمایش رو سگمنتها میایم برای یکان : temp%10 و دهگان : temp/10.بعد عدد بدست اومده رو روی تک تک سون سگمنتها نشون میدیم.اما چون مقدار temp بزرگه با تقسیم بر 10 یه عدد 2 رقمی تحویل میده که قاعدتا نمیشه یه عدد دو رقمی رو یک سگمنت نشون داد ! با تقسیم بر 100000 عدد صفر رو برمیگردونه.
                            میتونید با پروتئوس هم تست کنید !
                            * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
                            * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
                            *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
                            حضرت علی(ع)
                            آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

                            دیدگاه


                              #74
                              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                              من در کل نفهمیدم مشکلتون کجاست؟
                              cast ؟

                              7سگمنت؟



                              در رابطه با اولی:

                              همونطور که بتون گفتم ، امتحان کردم و بدون cast کردن انجام شد و حتی کامپایلر warning هم نداد. (البته این نقطه ضعف کامپایلر را میرسونه)
                              کد:
                              #include <mega32.h>
                              #include "lcd.h"
                              #include <stdlib.h>
                              float f()
                              {
                                return 1.23;
                              }
                              void main(void) 
                              {
                                int temp;
                                char str[10];
                                lcdInit();
                                ftoa(f(),1,str);
                                lcdPuts(str); //dar line avval bayad 1.23 namayesh dade shavad
                                //...............
                                lcdGotoxy(0,1);
                                
                                temp=f();
                                itoa(temp,str);
                                lcdPuts(str); //dar line dovvom bayad 1 namayesh dade shavad
                                   
                                
                              	while(1);
                              }
                              البته در اینجا از کتابخانه ای که خودم برای lcd نوشتم استفاده شده.(که زیاد فرقی با کتابخانه codvision نداره)



                              در رابطه با مشکل دوم:

                              شما هر دفعه برای بدست آوردن یک رقم باید % بگیری.
                              یعنی اول که % گرفتی ، یکان بهت میده.
                              بعد تقسیم بر 10 میکنی
                              دوباره باید % بگیری تا دهگان بهت بده
                              الی آخر...
                              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                              دیدگاه


                                #75
                                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                                نوشته اصلی توسط RubeuS
                                من در کل نفهمیدم مشکلتون کجاست؟
                                cast ؟

                                7سگمنت؟



                                در رابطه با اولی:

                                همونطور که بتون گفتم ، امتحان کردم و بدون cast کردن انجام شد و حتی کامپایلر warning هم نداد. (البته این نقطه ضعف کامپایلر را میرسونه)
                                کد:
                                #include <mega32.h>
                                #include "lcd.h"
                                #include <stdlib.h>
                                float f()
                                {
                                  return 1.23;
                                }
                                void main(void) 
                                {
                                  int temp;
                                  char str[10];
                                  lcdInit();
                                  ftoa(f(),1,str);
                                  lcdPuts(str); //dar line avval bayad 1.23 namayesh dade shavad
                                  //...............
                                  lcdGotoxy(0,1);
                                  
                                  temp=f();
                                  itoa(temp,str);
                                  lcdPuts(str); //dar line dovvom bayad 1 namayesh dade shavad
                                     
                                  
                                	while(1);
                                }
                                البته در اینجا از کتابخانه ای که خودم برای lcd نوشتم استفاده شده.(که زیاد فرقی با کتابخانه codvision نداره)



                                در رابطه با مشکل دوم:

                                شما هر دفعه برای بدست آوردن یک رقم باید % بگیری.
                                یعنی اول که % گرفتی ، یکان بهت میده.
                                بعد تقسیم بر 10 میکنی
                                دوباره باید % بگیری تا دهگان بهت بده
                                الی آخر...
                                جناب مرتضوی
                                بنده همونطور که قبلا هم گفتم مشکلی برای نمایش روی LCD ندارم و با یه sprintf میتونم نمایشش بدم.
                                مشکل من در نمایش با سون سگمنت هست و این که به عدد صحیح نیاز داریم نه اعشاری !
                                همنوطور که گفتم با تقسیم بر 10 عدد چند رقمی تحویل میده که نشون میده که مقدار متغیر خیلی بزرگ هست.
                                بنده بارها با سون سگمنت کار کرده ام و با روش کار با اون آشنا هستم.
                                اما هرچی هست زیر سر تابع ds18b20_temperature(0) هست که مقدار متغیر رو درست بر نمیگردونه.

                                ممنون
                                * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
                                * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
                                *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
                                حضرت علی(ع)
                                آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

                                دیدگاه

                                لطفا صبر کنید...
                                X