Hallo ich bräuchte Hilfe bei dem ADC. Das Eingangssignal wird mit der abtastFrequenz abgetastet und soll als PWM ausgegeben werden. Die PWM funktioniert. Die ADC Messung scheint auch zu funktionieren, da der ADC Interrupt ausgelöst wird. Leider hat die PWM immer einen hohen Wert (an LED per Auge "gemessen") unabhängig von der Eingangsspannung. Die Eingangsspannung geht auf C0 (ADC0) des ATmega8. Wäre nett wenn jemand den Quellcode mal überfliegen könnte. Vielen Dank. Heinz
Du solltest in dein Programm noch die Endlosschleife while( 1 ) ; mit aufnehmen. Ich hab keine Ahnung was der gcc-Startupcode macht, wenn main zu ihm zurückkehrt.
while(1); ist doch in der main Funktion vorhanden. Habe vergessen zu erwähnen, dass der Atmel wie im Tutorial beschaltet ist (interne Referenzspannung). http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC#Interne_Referenzspannung Sowohl die Eingangsspannung an C0 als auch die Spannungen VCC AVCC und AREF habe ich nachgemessen und haben die richtigen Werte.
Wenn ich mich richtig erinnere, läuft der Prozesser auf einem Sprung auf sich selbst auf, wenn die main() {} verlassen wird. Sonst ist da ja nix.
Heinz wrote: > while(1); ist doch in der main Funktion vorhanden. > Tschuldigung. Mein Fehler. Hab im Code nach unten gescrollt und am Ende der letzten Funktion die Schleife vermisst. Hab nur nicht geschnallt, dass das gar nicht die main() ist, sondern eine init().
Kein Problem. Bin leider immer noch nicht schlauer und PJs Beitrag verstehe ich nicht so ganz. Die Hardware ist denke ich korekt. Es wird wohl vielleicht eine Einstellung im Register fehlen?
Teste die Komponenten mal einzeln. 1) Hast du eine Möglichkeit ADCH auszugeben und dir die Werte anzusehen? 2) Lass die PWM mal nicht über den ADC Interrupt laufen, sondern weise im main() einfach mal ein paar Werte an OCR2 zu und sieh nach, ob der Ausgang reagiert. Erst mal das Subsystem identifizieren, welches nicht funktioniert, dann muss man nicht alles nach der fehlenden Einstellung absuchen.
Hi Könnte es sein, das dein ADC wesentlich zu schnell läuft. Ich sehe keine Prescalereinstellungen. MfG Spess
Erstmal danke für deine Hilfe. Zu 1: Ich hab zwar eine 4 Stellige 7 Segment Anzeige hier allerdings halte ich das für zu aufwendig (Programmcode schreiben um die 7 Segmente anzusteuert...) Zu 2: Ich habe die PWM und den ADC Interrupt durch folgenden Code im Interrupt getestet: int i=0; ISR(ADC_vect) { if(i==0) { OCR2=0; } else OCR2=255; i++; if(i==2) i=0; } Dies bei einer Abtastfrequenz von 1 Hz. Hat alles funktioniert. Im ADCH steht somit wohl immer ein hoher Wert drin. @ Spess53 Jop. Das wirds wohl sein. Ich probiers mal aus. Danke.
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.