سلام به دوستان و اساتید محترم
من یک برنامه ولت متر با 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]
من یک برنامه ولت متر با 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]
دیدگاه