Kein ADIF!?!?!

Gast #64779
Lesenswert?
• ▲
▼
Nach veilen Versuchen weißich nicht mehr weiter....
Ich will 2 AD-Kanäle einlesen, bekomme aber keine Werte, weil
das Programm (siehe Anhang) in der Zeile "sbis  ADCSR,ADIF    ;Warten 
bis
Wandlung" hängen bleibt.
Kann mir da jemand sagen wo da das Problem liegt?

Danke schonmal....

Gruß
Danny
Angehängte Dateien:
Gast #64780
Lesenswert?
• ▲
▼
Hallo Danny


Du fragst doch in deiner "Fertig" Schleife das ADIE ab. Wird aber nur
gesetzt, wenn auch globalInterrupts frei gegeben werden.

Frag doch einfach nach dem Start de AD Wandlung das ADCSR,ADSC ab. Wird
doch nach Ende der Wandlung auf Null gesetzt.

"ADSC ADC Start Conversion
Mit diesem Bit wird ein Messvorgang gestartet. In der frei laufenden
Betriebsart muss das Bit gesetzt werden, um die kontinuierliche Messung
zu aktivieren.
Wenn das Bit  nach dem Setzen des ADEN-Bits zum ersten Mal gesetzt wird
führt der Controller zuerst eine zusätzliche Wandlung und erst dann die
eigentliche Wandlung aus. Diese zusätzliche Wandlung wird zu
Initialisierungszwecken durchgeführt.
Das Bit bleibt nun so lange auf 1, bis die Umwandlung abgeschlossen
ist, im Initialisierungsfall entsprechend bis die zweite Umwandlung
erfolgt ist und geht danach auf 0. "

MFG

Dieter
Gast #64781
Lesenswert?
• ▲
▼
bleibts in der Realität hängen oder in der Simulation? War zumindest
früher so, dass der A/D-Wandler und der Komparator im AVR-Studio nicht
unterstützt wird, wie es heute ist, weiss ich gar nicht - muss direkt
mal nachsehen.
Gast #64789
Lesenswert?
• ▲
▼
O.k. sehe ich ein. Da ich erst einsteige kann mir bestimmt jemand
verraten wie ich das mache? Komme mit der Beschreibung im Tutorial
nicht ganz klar. (Sowas wie Interrupts für Dummies...)

Danke euch schonmal
Gast #64791
Lesenswert?
• ▲
▼
Hallo

Schau mal in die 8535.def rein. Da sind die Interrupt Adressen mit
Namen abgelegt.

Auszug

.equ  ADCCaddr=$00E  ;ADC Conversion Complete Interrupt Vector Address

Also mußt du schreiben

entweder

ORG 0x00e
      rjmp  adc_int         // zum Beispiel

oder

org ADCCaddr
     rjmp adc_int


Dann macht er bei einem Interrupt deines AD Wandlers eine Sprung nach
ADC_int.


Die könnte dann so aussehen.

; Interrupt Routine. Wird ausgeführt, wenn AD Wandlung beendet ist.
adc_int:

in  hexl,ADCL    ;lowbyte auslesen
in  hexh,ADCH    ;hibyte auslesen

sts     $60,hexl    ;low byte speichern
sts     $68,hexh     ;high byte speichern

reti       ;Rücksprung aus Interrupt

MFG

Dieter

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.