Nie za bardzo mogę ogarnąć przetwornik A/C w ATmega8.
Zrobiłem układ jak na schemacie. Chciałem żeby dioda zapalała się powyżej
1V napięcia na potencjometrze, a do 1V była zgaszona.
Napięciem odniesienia dla mnie miało być AVCC.Korzystam z 8 bitów ADCL.
Konwersja wyzwalana int0.
Program wygląda nastepująco:
Załanczam standartowe biblioteki dla avr (przerwania, delay,io)
Schemat :
Kod:
Układ jednak nie działa ,dioda wogóle nie świeci ... Co robię źle ?
Zrobiłem układ jak na schemacie. Chciałem żeby dioda zapalała się powyżej
1V napięcia na potencjometrze, a do 1V była zgaszona.
Napięciem odniesienia dla mnie miało być AVCC.Korzystam z 8 bitów ADCL.
Konwersja wyzwalana int0.
Program wygląda nastepująco:
Załanczam standartowe biblioteki dla avr (przerwania, delay,io)
Schemat :
Kod:
#define F_CPU 1000000
int main(void){
inicjalizacja();
while(1){
}
}
ISR(INT0_vect){
_delay_ms(80);//eliminuj drgania ze styków
ADMUX|=_BV(ADSC);//start konwersji
_delay_ms(100);//czekaj na wynik
if(ADCL<=0xCC){
PORTB&=~_BV(0);
}
else{
PORTB|=_BV(0);
};
}
void inicjalizacja(void){
//ustawienie portów
DDRB|=_BV(0);
DDRC&=~_BV(0);
DDRD&=~_BV(2);
PORTD|=_BV(2);//pull-up
//ADC
ADMUX|=(_BV(REFS0));
ADMUX&=~(_BV(REFS1)|_BV(ADLAR)|_BV(MUX0)|_BV(MUX1)|_BV(MUX2)|_BV(MUX3));
ADCSRA|=(_BV(ADEN)|_BV(ADSC)|_BV(ADPS));//zapoczątkowanie konwersji
ADCSRA&=~(_BV(ADPS1)|_BV(ADPS0));//preskaler CLK/16 (żeby bylo 50kHz)
//przerwanie INT0
SREG|=_BV(7);//globalna maska przerwan
MCUCR|=_BV(ISC01);
MCUCR&=~_BV(ISC00);
GICR|=_BV(INT0);//maska dla INT0
_delay_ms(100);//czekaj na pierwszą konwersję
}
Układ jednak nie działa ,dioda wogóle nie świeci ... Co robię źle ?