Help ... Masalah pada ATmega8535

A

akhir

Guest
Hi ...

i mensimulasikan menggunakan ATMega8535 ADC proteus dan mengkompilasi kode C dengan
Kode Visi AVR.

sini adalah skema.

<img src="http://images.elektroda.net/56_1169724096.gif" border="0" alt="Help...Problem on ATmega8535" title="Help ... Soal pada ATmega8535"/>

saya mencoba untuk membaca input analog dari PORTA.0 menggunakan modus berjalan bebas,
dan menampilkan nilai pada layar LCD.

sini adalah kode c ..

# include "mega8535.h"
# include "stdio.h"
# include "delay.h"
# include "lcd.h"
# asm / / Alphanumeric LCD Module fungsi
. equ __lcd_port = 0x15
# endasm

unsigned int ADC_VALUE;

unsigned int read_adc (unsigned char adc_input)
(
ADMUX = adc_input;
ADCSRA | = 0x40;
while ((ADCSRA & 0x10) == 0); / / Tunggu sampai AD konversi untuk menyelesaikan
ADCSRA | = 0x10;
kembali ADCW;
)

void main (void)
(
unsigned char SBUF [16];
unsigned int TEMP;

DDRA = 0x00;
DDRC = 0xFF;

lcd_init (16); / / LCD module initialization

ADCSRA = 0x85;
SFIOR & = 0xEF;

while (1)
(
ADC_VALUE = read_adc (0);

lcd_gotoxy (0,0);
sprintf (SBUF, "NILAI:% 4d", ADC_VALUE);
lcd_puts (SBUF);
delay_ms (10);

)
)sumber dikompilasi dengan menggunakan CVAVR dan mensimulasikan proteus berdasarkan skema di atas.

simulasi bekerja .. tapi nilai yang ditampilkan di LCD (LCD dispay "1023" terus-menerus) tidak berubah ketika saya mengubah nilai potensiometer ..

apa yang salah dengan kode saya?Thanks for the help ....

 
Hai,
Program Anda mengatur ADMUX = 0, itu berarti menggunakan tegangan referensi = AVref.Try untuk mengatur ADMUX | = 0x40 (referensi tegangan = AVCC), saya pikir akan ok.

 
Ok ...terima kasih atas dukungan

bagaimana kode jika saya menggunakan dua saluran ADC (adc0, adc1) dan ditampilkan

hasilnya pada LCD

 
Hai,

yang ADMUX pertama register yang ditetapkan dalam kode utama
void main ()
(
ADMUX = 0x40;
.......
while (1)
(
/ / kode Anda di sini
)

)

dan dalam read_adc prosedur, Anda dapat menulis:

unsigned int read_adc (unsigned char adc_input)
(
.......
ADMUX & = 0xF0; / / bersihkan adc_input terakhir
ADMUX | = adc_input;
.........
)

atau jika Anda tidak perlu init ADMUX dalam kode utama, Anda dapat menulis:
unsigned int read_adc (unsigned char adc_input)
(
.......
ADMUX = adc_input | 0x40;
......
)

 

Welcome to EDABoard.com

Sponsor

Back
Top