ADC Noise Canceler

Gast #182721
Hallo
Habe ein Problem mit dem Noise Canceler Mode des ATmega8. Wenn ich die
Wandlung "von Hand" :
ADCSRA |= (1<<ADSC);
while(!(ADCSRA & (1<<ADIF)));
anstarte fuzt alles.
Wenn ich jedoch den Sleep Mode aktiviere und auf den Interrupt warte
wacht er nicht mehr auf.
Habe noch keine Beispiele über dieses Problem gefunden.
Vielleicht hat schon jemand Erfahrungen gemacht.

Gruß Lars
Angehängte Dateien:
Gast
Hallo Lars,
ohne den ganzen Code wird´s schwierig zu sagen. Vielleicht sehen wir
dann ja auch das von Jörg angefragte und von Dir bemerkte sei(); vor
der Endlosschleife...

Wenn Deine Funktion adc_init so verwendet wird wie der Name es sagt
(nämlich nur zum Initialisieren), dann "pennt" Dir der Chip ja schon
bei der Initialisierung ein.

Was sagt denn die Simulation (z.B. mit dem AVRStudio) zu Deinem
Programm? Vielleicht kannst Du ja schon da sehen, wo´s hängt. Ganz
nebenbei bemerkt bin ich am Anfang des Jahres auch mit dem Sleep-Mode
und dem ADC gescheitert, allerdings mit einem Tiny26. Leider
unterstützt das Studio bei der Simulation nicht das Wake-Up, so daß ich
dann zähneknirschend ohne Sleep-Modes gearbeitet habe. Aber andere
Fehler ließen sich schon finden ...

Gruß
Lutz
Gast
Nur um Mißverständnissen vorzubeugen, da blöd formuliert:
<Wenn Deine Funktion adc_init so verwendet wird wie der Name es sagt
<(nämlich nur zum Initialisieren), dann "pennt" Dir der Chip ja
schon
<bei der Initialisierung ein.
Das gilt natürlich nur, wenn Dein sei(); dahinter kommt.

Weiterhin kannst Du statt
<adc_data = ADCL;
<adc_data += (ADCH<<8);
adc_data = ADC; schreiben (oder ADCW, steht in der zugehörigen
Headerdatei ioxx.h)
Gast
Hallo
Oh man es können ja Probleme mit dem Sleep Mode auftreten an die man
noch nie gedacht hat.

Danke Lutz und Jörg
Der Chip ist schon beim Initialisieren eingepennt. Jetzt kann ich
immerhin messen.


Habe mal mein ganzes Projekt angehängt. Werde es wenn es fertig ist
auch in der Codesammlung posten.

Habe aber noch einige Probleme:
1. Ich verschicke meine Daten über Interruptgesteuerte UART an den PC.
Aktiviere ich jedoch den Sleep Mode für den Noise canceler ist da
Schluss mit senden. Der Buffer läuft sicherlich über und der uC hängt
sich auf. Deshalb wollte ich den Buffer leeren bevor ich neue Messungen
anstarte. (läuft noch nicht richitg)

2. Umwandlen der Messdaten in einen String ist noch fürchterlich. Das
muss noch schöner gehen.

Gruß Lars
Angehängte Dateien:
Gast
Hallo

@Lutz Müller

  adc_data = ADCL;
  adc_data += (ADCH<<8);
durch
  adc_data = ADCW;
zu ersetzen funzt leider nicht. Es lässt sich kompilieren liefert aber
nicht das gleiche Ergebnis. ADCW ist in iom8.h als 16 Bit beschrieben.
Ich denke bei mir fehlen 2 vom Ergebnis.

Gruß Lars
Gast
Hallo Lars,
bei
>Ich denke bei mir fehlen 2 vom Ergebnis.
kann ich nicht so ganz deuten. Was meinst Du damit? Bei Dir ist
adc_data  als unsigned int deklariert, also mit großer
Wahrscheinlichekeit 16 Bit. Wenn ich mich jetzt vertun sollte: Nimm
statt "unsigned int" "uint16_t" . Bitte beschreibe das Problem
genauer. In Deinem Ansatz liest Du erst das Lowbyte in adc_data, dann
schiebst Du das Highbyte um 8 Stellen (1 Byte) nach links. Das Gleiche
sollte der Compiler für Dich machen wenn Du adc_data = ADCW schreibst.
Kannst Dir ja mal das Assemblerlisting (.lss-Datei) des Compilers bei
beiden Varianten anschauen und vergleichen.

Gruß
Lutz

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.