اطلاعیه

Collapse
No announcement yet.

خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

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

    خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

    سلام من یک پروژه خواندن adc کار میکنم که سورس اون رو هم گذاشتم ، که روی یک پورت وهمچنین روی lcd میخواهم نمایش بده . روی پورت مشکلی نداره ولی روی lcd بصورت اسکی نمایش داده میشه ، اگه ممکنه راهنمایی کنید عدد رو چطوری روی lcd نمایش بدم .
    سورس برنامه با Mikro C هست.

    long tmp;
    // Lcd pinout settings
    sbit LCD_RS at RD4_bit;
    sbit LCD_EN at RD5_bit;
    sbit LCD_D7 at RD3_bit;
    sbit LCD_D6 at RD2_bit;
    sbit LCD_D5 at RD1_bit;
    sbit LCD_D4 at RD0_bit;


    // Pin direction
    sbit LCD_RS_Direction at TRISD4_bit;
    sbit LCD_EN_Direction at TRISD5_bit;
    sbit LCD_D7_Direction at TRISD3_bit;
    sbit LCD_D6_Direction at TRISD2_bit;
    sbit LCD_D5_Direction at TRISD1_bit;
    sbit LCD_D4_Direction at TRISD0_bit;






    void main() {
    ANSEL = 0x04; // Configure AN2 pin as analog
    ANSELH = 0; // Configure other AN pins as digital I/O
    C1ON_bit = 0; // Disable comparators
    C2ON_bit = 0;
    Lcd_Init();
    ADC_Init(); // Initialize ADC module with default settings


    TRISA = 0xFF; // PORTA is input
    TRISC = 0; // PORTC is output
    TRISB = 0; // PORTB is output
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);


    do {
    tmp = ADC_Read(2); // Get 10-bit results of AD conversion
    Lcd_Out(1,2,tmp); // Write text in first row
    PORTB = tmp; // Send lower 8 bits to PORTB
    PORTC = tmp >> 8; // Send 2 most significant bits to RC1, RC0
    } while(1);
    }
    جدیدترین ویرایش توسط hamidtgh; ۱۰:۴۲ ۱۳۹۸/۰۷/۳۰.

    #2
    پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

    نوشته اصلی توسط hamidtgh نمایش پست ها
    سلام من یک پروژه خواندن adc کار میکنم که سورس اون رو هم گذاشتم ، که روی یک پورت وهمچنین روی lcd میخواهم نمایش بده . روی پورت مشکلی نداره ولی روی lcd بصورت اسکی نمایش داده میشه ، اگه ممکنه راهنمایی کنید عدد رو چطوری روی lcd نمایش بدم .
    سورس برنامه با Mikro C هست.

    //unsigned int temp_res;unsigned int tmp;
    // Lcd pinout settings
    sbit LCD_RS at RD4_bit;
    sbit LCD_EN at RD5_bit;
    sbit LCD_D7 at RD3_bit;
    sbit LCD_D6 at RD2_bit;
    sbit LCD_D5 at RD1_bit;
    sbit LCD_D4 at RD0_bit;


    // Pin direction
    sbit LCD_RS_Direction at TRISD4_bit;
    sbit LCD_EN_Direction at TRISD5_bit;
    sbit LCD_D7_Direction at TRISD3_bit;
    sbit LCD_D6_Direction at TRISD2_bit;
    sbit LCD_D5_Direction at TRISD1_bit;
    sbit LCD_D4_Direction at TRISD0_bit;






    void main() {
    ANSEL = 0x04; // Configure AN2 pin as analog
    ANSELH = 0; // Configure other AN pins as digital I/O
    C1ON_bit = 0; // Disable comparators
    C2ON_bit = 0;
    Lcd_Init();
    ADC_Init(); // Initialize ADC module with default settings


    TRISA = 0xFF; // PORTA is input
    TRISC = 0; // PORTC is output
    TRISB = 0; // PORTB is output
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    do {
    tmp = ADC_Read(2); // Get 10-bit results of AD conversion


    Lcd_Out(1,2,tmp); // Write text in first row
    PORTB = tmp; // Send lower 8 bits to PORTB
    PORTC = tmp >> 8; // Send 2 most significant bits to RC1, RC0
    } while(1);
    }


    نوع داده متغیر tmp را تغییر بدهید مثلا از نوع long یا single

    دیدگاه


      #3
      پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

      نوشته اصلی توسط hamidtgh نمایش پست ها
      سلام من یک پروژه خواندن adc کار میکنم که سورس اون رو هم گذاشتم ، که روی یک پورت وهمچنین روی lcd میخواهم نمایش بده . روی پورت مشکلی نداره ولی روی lcd بصورت اسکی نمایش داده میشه ، اگه ممکنه راهنمایی کنید عدد رو چطوری روی lcd نمایش بدم .
      سورس برنامه با Mikro C هست.

      //unsigned int temp_res;unsigned int tmp;
      // Lcd pinout settings
      sbit LCD_RS at RD4_bit;
      sbit LCD_EN at RD5_bit;
      sbit LCD_D7 at RD3_bit;
      sbit LCD_D6 at RD2_bit;
      sbit LCD_D5 at RD1_bit;
      sbit LCD_D4 at RD0_bit;


      // Pin direction
      sbit LCD_RS_Direction at TRISD4_bit;
      sbit LCD_EN_Direction at TRISD5_bit;
      sbit LCD_D7_Direction at TRISD3_bit;
      sbit LCD_D6_Direction at TRISD2_bit;
      sbit LCD_D5_Direction at TRISD1_bit;
      sbit LCD_D4_Direction at TRISD0_bit;






      void main() {
      ANSEL = 0x04; // Configure AN2 pin as analog
      ANSELH = 0; // Configure other AN pins as digital I/O
      C1ON_bit = 0; // Disable comparators
      C2ON_bit = 0;
      Lcd_Init();
      ADC_Init(); // Initialize ADC module with default settings


      TRISA = 0xFF; // PORTA is input
      TRISC = 0; // PORTC is output
      TRISB = 0; // PORTB is output
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Cmd(_LCD_CURSOR_OFF);
      do {
      tmp = ADC_Read(2); // Get 10-bit results of AD conversion


      Lcd_Out(1,2,tmp); // Write text in first row
      PORTB = tmp; // Send lower 8 bits to PORTB
      PORTC = tmp >> 8; // Send 2 most significant bits to RC1, RC0
      } while(1);
      }


      سلام
      من با pic کار نکردم و نمیدونم کتابخونه اش چجوری کار میکنه. ولی معمولا برای lcd های کاراکتری شما باید عدد رو به رشته تبدیل کنید، بعد برای نمایش به lcd بدید. مثلا به شکل زیر:
      char str[17];
      sprintf(str, "%d", tmp);
      Lcd_Out(1,2,str);

      فقط توجه داشته باشید برای استفاده از تابع sprintf باید هدر stdio.h رو به پروژه اتون اضافه کنید.

      دیدگاه


        #4
        پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

        سلام ممنون از پاسخگویی tmp رو long هم کردم جواب نداد

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        سلام متاسفانه موفق نشدم که تبدیل کنم.

        دیدگاه


          #5
          پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

          نوشته اصلی توسط hamidtgh نمایش پست ها
          سلام ممنون از پاسخگویی tmp رو long هم کردم جواب نداد

          دلیل: ادغام دو پست برای جلوگیری از اسپم

          سلام متاسفانه موفق نشدم که تبدیل کنم.
          از help نرم افزار استفاده کن ببین ADC_Read(2) چه نوع داده ای را برمیگردونه

          دیدگاه


            #6
            پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

            خدمت دوستان عزیز با تشکر از شما برنامه رو به اینصورت تغییر دادم درست شد .


            unsigned int tmp;
            char str[10];


            // Lcd pinout settings
            sbit LCD_RS at RD4_bit;
            sbit LCD_EN at RD5_bit;
            sbit LCD_D7 at RD3_bit;
            sbit LCD_D6 at RD2_bit;
            sbit LCD_D5 at RD1_bit;
            sbit LCD_D4 at RD0_bit;


            // Pin direction
            sbit LCD_RS_Direction at TRISD4_bit;
            sbit LCD_EN_Direction at TRISD5_bit;
            sbit LCD_D7_Direction at TRISD3_bit;
            sbit LCD_D6_Direction at TRISD2_bit;
            sbit LCD_D5_Direction at TRISD1_bit;
            sbit LCD_D4_Direction at TRISD0_bit;






            void main() {
            ANSEL = 0x04; // Configure AN2 pin as analog
            ANSELH = 0; // Configure other AN pins as digital I/O
            C1ON_bit = 0; // Disable comparators
            C2ON_bit = 0;
            Lcd_Init();
            ADC_Init(); // Initialize ADC module with default settings


            TRISA = 0xFF; // PORTA is input
            TRISC = 0; // PORTC is output
            TRISB = 0; // PORTB is output


            Lcd_Cmd(_LCD_CURSOR_OFF);


            do {
            tmp = ADC_Read(2); // Get 10-bit results of AD conversion
            PORTB = tmp; // Send lower 8 bits to PORTB
            PORTC = tmp >> 8; // Send 2 most significant bits to RC1, RC0
            sprintl(str, "%u",tmp);
            Lcd_Cmd(_LCD_CLEAR);
            Lcd_Out(1,2,str); // Write text in first row
            delay_ms(50);
            } while(1);
            }


            جدیدترین ویرایش توسط hamidtgh; ۱۵:۳۸ ۱۳۹۸/۰۸/۰۱.

            دیدگاه


              #7
              پاسخ : خواندن مقدار adc و نمایش آن روی lcd در میکرو pic16f887

              دوست عزیز من با این کامپایلر کار نمی کنم ولی از این بابت مطمئنم که فرمان LCD_OUT برای کاراکتر هست و نه برای متغیر. یا باید با یک دستور متغر رو به یک string تبدیل کنید و یا فرمان نمایش متغیر بزارید.
              من از کامپایلر PIC C Compiler استفاده می کنم :
              فرمان در این کامپایلر برای تبدیل: ITOS(int,, string) که البته نیاز یه اینکلود کردن stdllib.h دارید

              دیدگاه

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