Forum: Mikrocontroller und Digitale Elektronik Einfache Frage zu ADC


von Hans (Gast)


Lesenswert?

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!!!

von SREG (Gast)


Lesenswert?

1. Globale Interrupts nicht freigegeben

von Hans (Gast)


Lesenswert?

Hallo,

natüüürlich - das habe ich wohl vergessen...

Also: interrupt.h einbinden, sei() aufrufen und dann noch PortC als 
Eingang schalten und schon funktionierte alles.

Danke für den Denkanstoß!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.