اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط USART با کامپیوتر

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

    مشکل در ارتباط USART با کامپیوتر

    سلام به دوستان و اساتید محترم
    من یک برنامه ولت متر با mega16 نوشتم و قراره بعد از زدن کلید، مقدار ولتاژ اندازه گیری شده رو مرتباً توسط USART به کامپیوتر ارسال کنه و همچنین روی lcd نمایش بده
    کار تا نمایش روی lcd درسته.ولی دیتایی که به pc منتقل میکنه بصورت نادرست و ناقص توی ترمینال codevision نشون داده میشه.گاهی عدد بدون اعشار میاد.گاهی فقط اعشارش میاد.گاهی بجای عدد یکسری حروف نشون داده میشه
    خیلی بالا پایینش کردم ولی درست نشد.چندین بار baud rate تغییر دادم و چک کردم ولی هنوز مشکل داره
    راستی اینم بگم که توی دستور printf در هر دو صورتِ ارسال رشته و ارسال عدد،مشکل فوق وجود داره
    کریستال 8مگ استفاده کردم.کاراکترهای buffer1 و buffer2 بدلیل تغییرات در کدنویسی فعلاً بلا استفاده هستن
    لطفا راهنماییم کنید
    [code=c]#include <mega16.h>
    #include <lcd.h>
    #include <stdio.h>
    #include <delay.h>

    #asm
    .equ __lcd_port=0x18 ;PORTB
    #endasm
    #define ADC_VREF_TYPE 0xc0

    unsigned int voltage;

    unsigned int read_adc(unsigned char adc_input){
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }


    void main(void){
    char lcd_buff[10];
    char buffer1[1],buffer2[1]={'s'};
    float output;
    DDRC.0=0;
    PINC.0=1;
    UCSRA=0b00000000;
    UCSRB=0b00011000;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=51;
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;

    while(1){
    if(PINC.0==0){
    while(1){
    voltage=read_adc(0);
    output=((voltage*2.56)/1023)*1000;
    lcd_clear();
    sprintf(lcd_buff,"V=%6.1f mV",output);
    lcd_puts(lcd_buff);
    printf("%8.1f\n",output);
    delay_ms(1000);
    }}}
    }[/code]

    #2
    پاسخ : مشکل در ارتباط USART با کامپیوتر

    نوشته اصلی توسط nicebluesky
    سلام به دوستان و اساتید محترم
    من یک برنامه ولت متر با mega16 نوشتم و قراره بعد از زدن کلید، مقدار ولتاژ اندازه گیری شده رو مرتباً توسط USART به کامپیوتر ارسال کنه و همچنین روی lcd نمایش بده
    کار تا نمایش روی lcd درسته.ولی دیتایی که به pc منتقل میکنه بصورت نادرست و ناقص توی ترمینال codevision نشون داده میشه.گاهی عدد بدون اعشار میاد.گاهی فقط اعشارش میاد.گاهی بجای عدد یکسری حروف نشون داده میشه
    لطفا راهنمایی کنید......

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط USART با کامپیوتر

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

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط USART با کامپیوتر

        سلام
        با تشکر از دوست عزیز mahdi.faani بخاطر راهنمایی
        با انجام تغییرات زیر، مشکل حل شد:
        1)کوتاه کردن مسیر RXD و TXD تا حد ممکن
        2)استفاده از کریستال 11.0592مگاهرتز
        3)تنظیم بادریت روی 9600 (UBRR=71)
        4)هم گراند کردن ماژول (تبدیل TTL به USB) و منبع تغذیه مدار

        دیدگاه

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