Kod: Zaznacz cały
//procedury obsługi LCD
//z kursu w EdW
//instrukcje opóźnienia
int main(void)
{
//----------------------------------------------
// Inicjacja - uwaga: uproszczona, może wymagać
// zmian przy zmianie przyporządkowania portów
DDR(LCD_DPORT) = 1<<LCD_E | 1<<LCD_RS |
0x0F<<LCD_D4;
LCDinit();
TCCR2=(1<<WGM20)|(0<<WGM21)|(1<<CS20)|(0<<CS21)|(0<<CS22)|(0<<COM20)|(1<<COM21);
ADMUX = 0xC0; //2,56V wewnętrzne; ADC0
ADCSRA = (1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(0<<ADIE); //włączony, włączone przerwania, prescale =2
DDRB = 0xff;
//OCR2 = 0xff;
int aaa;
int bbb;
// Koniec inicjacji
//----------------------------------------------
// \/ Bez tego, czasami zerowanie z poziomu programatora
// \/ powoduje śmieci na wyświetlaczu.
LCDcls();
LCDstr("hello");
while(1)
{
ADMUX = ADMUX & 0xfc;//przełącz na kanał 2
ADMUX |= 1<<MUX1;
ADCSRA |= 1<<ADSC; //zacznij
while(ADCSRA&(0x01<<ADSC)) {}; //czkaj koniec konwersji
aaa = ((ADCH*256) + ADCL)*5;
aaa = aaa/2;
ADMUX = ADMUX & 0xf8;//przełącz na kanał 0
ADCSRA |= 1<<ADSC; //zacznij
while(ADCSRA&(0x01<<ADSC)) {}; //czkaj koniec konwersji
bbb = ((ADCH*256) + ADCL)*5; //w mV
bbb=bbb/2;
LCDcls();
LCDstr("ADC=");
char swynik[10];
LCDstr(itoa(nap, swynik, 10));
LCDstr("mV");
OCR2 = 1;
czekaj(500);
}
return 0;
}
Wyświetla tylko jedną wartość, która nie odpowiada napięciu na ADC0, po zmianie napięcia na ADC0, nie zmienia się wartość na wyświetlaczu.
Proszę o pomoc.