Hallo zusammen,
ich möchte mit meinem ATmega8 die Spannung an PC0 messen.
Laut händischer Messung variiert diese zwischen 4V und 0,4V.
Den ausgelesenen Wert möchte ich dann an PORTB und PORTD ausgeben (Dort
sind LEDs angeschlossen).
Ich dachte es würde so gehen, doch es funktioniert nicht:
1 | #include <avr/io.h>
|
2 | #include <avr/iom8.h>
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | // LEDs an!
|
7 | DDRB=0xFF;
|
8 | PORTB=0xFF;
|
9 | DDRD=0xFF;
|
10 | PORTD=0xFF;
|
11 |
|
12 | // ADC einstellen
|
13 | ADMUX = 0b01000000;
|
14 | //ADMUX = 0b01100000; //Linksbündig
|
15 | ADCSRA = 0b11101100;
|
16 | while(1)
|
17 | {
|
18 | //TODO:: Please write your application code
|
19 | }
|
20 | }
|
21 |
|
22 | ISR(ADC_vect)
|
23 | {
|
24 | PORTB = ADCL;
|
25 | PORTD = ADCH;
|
26 | }
|
Sehr ihr einen Fehler? Hab ich etwas vergessen?
ADMUX ist so eingestellt:
Interne Referenz Avcc
Rechtsbündig in ADCH und ADCL ausrichten
Kanal 0
ADCSRA ist so eingestellt:
ADEN (ADC Enable)
ADSC (ADC Start Conversion)
ADFR (Freerunning-Mode)
ADIE (ADC Interrupt Enable)
Vorteiler 16
Muss ich ADIF selber setzen? Das wird doch vom uC automatisch gesetzt,
oder? Muss ich dieses Bit am Ende meines Interrupt-Handlers löschen für
die nächste Messung oder geschieht dies auch automatisch?
Vielen Dank für jede Antwort!!!