ADC hat keine Lust zu funktionieren

Gast #1233986
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
Angehängte Dateien:
Gast #1233995
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.
#1234013
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().
Gast #1234018
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?
#1234020
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.
Gast #1234041
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.