Guten Tag,
ich habe ein Problem mit der AD-Wandlung bei meinem ATmega16 16PU.
Ich habe ein kleines Programm in C, das am ADC0 eine Spannung einliest
und am PORTD digital wieder ausgibt.
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(ADC_vect)
{
PORTD = ADCH;
}
int main(void)
{
DDRD = 0b11111111;
ADMUX |= (1<<REFS1) | (1<<REFS0) | (1<<ADLAR);
ADCSRA|= (1<<ADEN) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS2);
sei();
while(1)
{
}
}
Mein µC läuft mit 1 MHz internem Takt, den Prescaler habe ich auf 16
eingestellt. Außerdem benutze ich die interne Referenzspannung (REFS1
und REFS0), habe da einen Kondensator 100n gegen Masse. An AVCC ist eine
10µH Spule gegen VCC uns ein 100n gegen Masse.
Der Controller an sich funktioniert, das einfache LED ansteuern
funktioniert.
Leider kann ich Spannungen am ADC0 anlegen wie ich will, da tut sich
nichts. Hat jemand eine Idee woran es liegen kann?
Grüße!
Quizduell schrieb: > Hat jemand eine Idee woran es liegen kann? Es fehlt noch der nötige Programmcode.
Hi
>Was genau fehlt denn an Code?
Der ADC wird nie gestartet -> ADSC-Bit in ADCSRA.
MfG Spess
spess53 schrieb: > Hi > >>Was genau fehlt denn an Code? > > Der ADC wird nie gestartet -> ADSC-Bit in ADCSRA. Holla, der Spess hat mal wieder sowas von recht.
@spess53 Du hast recht, es funktioniert jetzt! :) Ich dachte ich starte die Wandlung schon mit ADATE.
Hi
>Ich dachte ich starte die Wandlung schon mit ADATE.
Da du in ADCSRB keine andere Triggerquelle gewählt hast läuft der ADC im
Free Running Mode. D.h. der ADC triggert sich selbst. Dazu muss er aber
einmal angeschubst werden. Danach läuft er allein.
MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.