اطلاعیه

Collapse
No announcement yet.

مشکل با LCD کارکتری

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

    مشکل با LCD کارکتری

    دوستان سلام. مدتیه دارم سعی میکنم که برنامه نویسی با کدویژن رو هم یاد بگیرم (خیلی گیر داره :angry: :angry: :angry: بسکام خیلی عالیه :cry: :cry برای نمایش اعداد روی LCD کارکتری مشکل دارم. خیلی خیلی ممنون میشم اگه یکی از دوستان نمایش یه عدد اعشاری توی LCD رو خیلی ساده و گام به گام توضیح بده. از کدویژن ورژن 3.12 استفاده میکنم. از کد زیر هم برای این برنامه استفاده میکنم:
    کد:
    while (1)
       {
       // Place your code here
       V=read_adc(0);
       lcd_clear();
       sprintf(buffer,"Vin= %.2f v",V);
       lcd_puts(buffer);
       delay_ms(200);
       }
    اما توی خروجی اینو دارم: "Vin= 2f v"
    لطفا راهنمایی کنید. چند روزه که درگیرشم :angry:

    #2
    پاسخ : مشکل با LCD کارکتری

    سلام

    باور کنید این سوالات بارها و بارها در سطح انجمن مطرح شده :NO:

    ببینید برای این کار ابتدا از زبانه project و سپس configure تنظیمات sprintf رو در حالت float قرار بدین. سپس به جای %.2f دات رو بردارین و همون %2f رو بنویسید و تموم.
    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : مشکل با LCD کارکتری

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

      باور کنید این سوالات بارها و بارها در سطح انجمن مطرح شده :NO:

      ببینید برای این کار ابتدا از زبانه project و سپس configure تنظیمات sprintf رو در حالت float قرار بدین. سپس به جای %.2f دات رو بردارین و همون %2f رو بنویسید و تموم.
      موفق باشید
      ممنون از لطفتون. راستش چندبار این مطلب رو سرچ کردم اما چیزی راهنمایی که بتونه مشکلمو حل کنه پیدا نکردم لذا جسارتا پست جدیدی ایجاد کردم. و اما نتیجه اینکه با سپاس از راهنمایی شما، با انجام اون تنظیمات، کمی اوضاع بهتر شده. یعنی پس از اعمال تنظیمات الان روی LCD عدد 0.0000 رو نشون میده. همچنان نمیتونم عددی که تابع ADC برمیگردونه رو نمایش بدم. لطفا در این مورد هم راهنمایی کنید. راهنمایی هایی که در این پست http://www.eca.ir/forum2/index.php?topic=84132.0 ارائه شده بود رو انجام دادم اما نتیجه نگرفتم.

      دیدگاه


        #4
        پاسخ : مشکل با LCD کارکتری

        کل برنامه رو قرار بدین تا بشه کمک کرد چون الان من نمی دونم متغیرها چه نوعی هستن.
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : مشکل با LCD کارکتری

          نوشته اصلی توسط سوران آراسته
          کل برنامه رو قرار بدین تا بشه کمک کرد چون الان من نمی دونم متغیرها چه نوعی هستن.
          کد:
          #include <mega16.h>
          #include <delay.h>
          #include <stdio.h>
          #include <alcd.h>
          
          float V;
          char buffer[32];
          
          #define ADC_VREF_TYPE ((1<<REFS1) | (1<<REFS0) | (0<<ADLAR))
          
          unsigned int read_adc(unsigned char adc_input)
          {
          float v;
          ADMUX=adc_input | ADC_VREF_TYPE;
          delay_us(10);
          ADCSRA|=(1<<ADSC);
          while ((ADCSRA & (1<<ADIF))==0);
          ADCSRA|=(1<<ADIF);
          v=(ADCW*2.54)/1023;
          return v;
          }
          
          void main(void)
          {
          
          ADMUX=ADC_VREF_TYPE;
          ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
          SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
          
          lcd_init(16);
          
          
          while (1)
             {
             V=read_adc(1);
             lcd_clear();
             sprintf(buffer,"Vin= %f v",V);
             lcd_puts(buffer);
             delay_ms(100);
             }
          }
          پیشاپیش سپاسگزارم

          دیدگاه


            #6
            پاسخ : مشکل با LCD کارکتری

            دوست عزیز گویا شما اومدین یک سری تغییرات در کدهای کدویژن قرار دادین.
            در وهله اول باید بگم متیر داخل تابع خوندن کانال های آنالوگ باید از نوع int باشه چرا که هر کانال عددی مابین 0 تا 1023 رو برمی گردونه و اختصاص متغیر از جنس float هرچند مشکل ایجاد نمی کنه اما جالب نیس.(حجم اشغال شده در حافظه بیشتر میشه).

            همچنین برای تبدیل عدد به ولتاژ یک سری عملیات می خواد (در اینجا با توجه به ولتاژ رفرنس باید یک عمل تقسیم صورت بگیره).

            در نهایت من این نمونه کد رو براتون قرار میدم.


            کد:
            #include <mega32a.h>
            #include <delay.h>
            #include <stdio.h>
            #include <alcd.h>
            
            #define ADC_VREF_TYPE 0x40
            
            unsigned int read_adc(unsigned char adc_input)
            {
            ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
            // Delay needed for the stabilization of the ADC input voltage
            delay_us(10);
            // Start the AD conversion
            ADCSRA|=0x40;
            // Wait for the AD conversion to complete
            while ((ADCSRA & 0x10)==0);
            ADCSRA|=0x10;
            return ADCW;
            }
            
            
            
            void main(void)
            {
            
            
            float i;
            char buffer[16];
            
            
            // ADC initialization
            // ADC Clock frequency: 250.000 kHz
            // ADC Voltage Reference: AVCC pin
            ADMUX=ADC_VREF_TYPE & 0xff;
            ADCSRA=0x85;
            
            lcd_init(16);
            
            while (1)
               {
                i=read_adc(3);
                i=i/204.6;
                sprintf(buffer,"%f",i);
                lcd_clear();
                lcd_puts(buffer);
                delay_ms(250);
               }
            }
            چرا ناراحتی پاتریک!
            + امروز ی بچه دیدم سرچهارراه گل میفروخت
            - از دیدنش ناراحت شدی؟
            + نه
            پس چی ناراحتت کرده
            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
            ------------------------------------------------------------------------------------------------------
            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
            ------------------------------------------------------------------------------------------------------
            محصولات

            دیدگاه

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