mikrocontroller.net

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


Autor: Danny (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bleibt in beiden Welten hängen.... real wie simulation....

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Globale Interrupts... wie kann ich die freigeben?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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


Mfg

Dirk

Autor: Danny (Gast)
Datum:

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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B. (Gast)
Datum:

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

15 0x00E ADC AD-Wandlung abgeschlossen

MFG

Dieter

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dann müsste ich:

.org ADC
      rjmp fertig?

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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Danny (Gast)
Datum:

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

Gruß Danny

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.