Forum: Mikrocontroller und Digitale Elektronik Kein ADIF!?!?!


von Danny (Gast)


Angehängte Dateien:

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

von Dieter B. (Gast)


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

von crazy horse (Gast)


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.

von Danny (Gast)


Lesenswert?

Bleibt in beiden Welten hängen.... real wie simulation....

von Danny (Gast)


Lesenswert?

Globale Interrupts... wie kann ich die freigeben?

von Dirk (Gast)


Lesenswert?

Hi,

mit dem befehl "sei" enable global interrupts. Du solltest dir den
Befehlssatz vom AVR downloaden.


Mfg

Dirk

von Danny (Gast)


Lesenswert?

SEI ist in meinem Programm vorhanden, gleich vor main:
Geht aber trotzdem nicht

von Dieter B. (Gast)


Lesenswert?

Hallo

Wenn du Interrupts verwendest, solltest du doch auch die
Interruptvektoren definieren. Sonst springt dein Programm doch auf
Adresse 09 und läuft da fröhlich weiter.

Schau mal unter

http://www.mikrocontroller.net/tutorial/interrupts.htm

MFG

Dieter

von Dieter B. (Gast)


Lesenswert?

Nachtrag.

Sieht aber schön im AVR Studio, wenn du per Hand das ADIF Flag setzt,
dann springt er an Adresse 09 und macht da weiter.

MFG

Dieter

von Dieter B. (Gast)


Lesenswert?

Muß natürlich anstatt 09, 0E lauten.

15 0x00E ADC AD-Wandlung abgeschlossen

MFG

Dieter

von Danny (Gast)


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

von Danny (Gast)


Lesenswert?

Also dann müsste ich:

.org ADC
      rjmp fertig?

Dann bleibe ich doch auch hängen,oder nicht. Oder anderes Sprungziel?

von Dieter B. (Gast)


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

von Danny (Gast)


Lesenswert?

Allen Paletti (hoffe ich). Werde das morgen gleich mal testen.
Danke für deine Hilfe!

Gruß Danny

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
Noch kein Account? Hier anmelden.