mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei AD Wandlung ATmega8 ???


Autor: HolgerD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich habe da mal ein kleines Problem. Unzwar betreibe ich ein ATmega8
mit 16MHz.
An Pc0 und PC1 will ich Analoge Werte einlesen und an PC2 - PC5 liegen
Schalter an.
da es sich bei meinem Programm um Zeitkritische Sachen handelt, kann
ich mir keine
Interrupts und warten bis Flags gesetzt sind leisten. Die Zyclen müssen
immer
gleich bleiben und demzufolge berechenbar sein.

Hier mal meine Routine:

;-------setze Stackpointer (045F)----------
          ldi    r17, 0x5F
          out    SPL, r17
          ldi    r17, 0x04
          out    SPH, r17
;------------------------------------------

;------setze tasten PORTS ----------------
          ldi    r17, 0x00
          out    DDRC, r17
          ldi    r17, 0xfC
          out    PORTC, r17
;------------------------------------------
.
.
Hier frage ich nun PC0 ab und speichere die Daten in 0x0300 + 0x0301
.
.
  ldi  r17, 0x20  ;1-----------------------
  out  ADMUX, r17  ;1
  ldi  r17, 0xE0  ;1
  out  ADCSRA, r17  ;1

  ldi    r17,0x16    ;----
hx0:  dec    r17    ;   66
  brne   hx0    ;----

  in  r17, ADCH  ;1                   110
  sts  0x300, r17  ;2
  in  r17, ADCL  ;1
  sts  0x301, r17  ;2

Nun will ich jedoch den PC1 abfragen und mach dann folgendes:

  ldi  r17, 0x21  ;1-----------------------
  out  ADMUX, r17  ;1

  ldi    r17,0x16    ;----
hx1:  dec    r17    ;   66
  brne   hx1    ;----

  in  r17, ADCH  ;1
  sts  0x302, r17  ;2
  in  r17, ADCL  ;1
  sts  0x303, r17  ;2

Diese Werte sollen dann in 0x0302 - 0x0303 rein.

Zum Schluss Disable ich die Analogen eingänge wieder um PC2- PC5 als
INPUT zu nutzen:

  ldi  r17, 0x0  ;1
  out  ADMUX, r17  ;1
  ldi  r17, 0x0  ;1
  out  ADCSRA, r17  ;1---------------------

danach passiert ersteinmal ganz viele Takte nichts mehr,
bis er wieder zu dieser Routine zurück kehrt.

Das problem ist nun, dass ich immer nur den Wert aus der erten Routine
erhalte (PC0).
Also beim zweiten mal einlesen (PC1) hat sich nichts verändert.

Da ich den Analog Teil als im Free Run mode betreibe, sollten doch
eigentlich
zwischen wechsel der Ports nur 13 Takte nötig sein, damit der neue Wert
in ADCH ADCL
drinn steht ?

Aber der Wert ändert sich nicht :-(.

Und was ist eigentlich der unterschied zwischen Free Run Mode und
Single Mode ?
Irgendwie verstehe ich das so, das im Single Mode mit max. 200KHz
gescannt wird ?
Was aber bei 16MHz Grundtakt und max. Teiler von 128 überhaupt nicht
möglich wäre.

Autor: HolgerD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok.....

Hat sich wohl erledigt, ich habe nun die Initialiesierung ganz zum
Anfang gepackt und frage in den Routinen nur noch die I/O Register ab.
Man muss wohl nicht immer umschalten um die Schalter an PC2-PC5
abzufragen. das wird wohl auch parallel dazu erledigt.

Aber eine Frage wäre da noch. ich habe Masse und AVcc an die normale
Spannung mit angeschlossen, genau so Aref. Wieso wird bei High nur
0x03CF angezeigt und bei Low 0x001F ???? Da die PIN's ja die volle
Aref Spannung bekommen, sollten die doch 0x03FF anzeigen, genau so wie
bei Low (Masse) die 0x0000 ?

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.