www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC MUX Problem 4433


Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen

ich brauch noch mal ne Info. Ich bekomme aus dem Kanal 5 ADC Info und
weiß nicht genau wie ich die anderen Kanäle ansprechen muss. Habe schon
Interrupt Routiene und Free Run propiert.Der ADC_MUX Kanal 05 und  04
sollen ausgelesen werden, aber ist immer der selbe Wert. Zur Zeit Free
Run Modus am laufen. Läst sich besser timen.

Danke Berny

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei allgemeinen fragen zu abläufen sollte man als erstes ins Datenblatt
des Controllers gucken, da gibt eine kurze ausführung und eine lange,
lies die dir mal durch, da findest du bestimmt eine Antwort.

http://www.atmel.com/dyn/resources/prod_documents/1042s.pdf   (kurz)
http://www.atmel.com/dyn/resources/prod_documents/...   (lang)

gruß
Chris

Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chris danke, habe es gelesen, verstanden und geht nicht?????
Wie so oft eine einfache Sache, wenn sie richtig erklärt wurde!!!:)

;ADC initialisieren
;ADEN (ADC Enable) = 1
;ADSC (ADC Start Conversion) = 1
;ADFR (ADC Free Run Select) = 1
;ADIF (ADC Interrupt Flag) = 1
;ADIE (ADC Interrupt Enable) = 0
;ADPS2..0 (ADC Prescaler Selct Bits XTAL /2..128)= 64
;ldi temp, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR))+7 ;free Run convert
;out ADCSR, temp
ldi temp, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR))+7
out ADCSR, temp


Die Beispiele hier haben mich auf den Weg gebracht, doch leider nicht
ans Ziel. Wäre klasse wenn jemand der Plan hat eine Antwort hätte. Wie
in anderen Beiträgen zu sehen ist, hängt es immer wieder.

Gruß Berny und hilfe wäre echt klasse, zumindest einen Wegweise, den
Rest finden ich schon raus.

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt dem Wandler auch mitteilen, welchen Kanal Du lesen möchtest....
Register ADMUX

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

Bewertung
0 lesenswert
nicht lesenswert
hier die beschreibung des adc's und ein sourcecode..

grüsse,
bernhard

Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard danke erstmal. Habe das Programm bis auf sbi ADCSR, ADSC
hatte ich diesen Teil gleich.

Doch ein Problem bleibt. Ich erhalte auf Kanal 5 den Wert von 4 und
umgekehrt?


ldi temp, ((1<<ADEN)|(1<<ADFR)|(1<<ADPS2))+(1<<ADPS1)
out ADCSR, temp


z.B.    LDI temp,0x05
ADC_IN:       ; Temp = MUX = Kanal Messung Rück r1-r2
  out ADMUX,temp
  sbi ADCSR, ADIF
  sbi ADCSR, ADSC
ADC_IN_l01:      ; warte auf Conversion complet
  sbis ADCSR,ADIF        ; ADIF Iterrupt flag prüfen
  rjmp ADC_IN_l01
  ldi count,128           ; warten falls Daten nicht ok
ADC_IN_l02:                     ; nur zum testen eingefügt
  dec count
  brne ADC_IN_l02
  in r1, ADCL        ; ADC einlesen
  in r2, ADCH
  ret


Ich weiss nicht, was hier falsch läuft, wenn die Werte immer getdreht
währen, hatte ich die Kanäle einfach vertauscht, aber manchmal
klappts????

Hilfeeee und Gruß Berny

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt evtl. am free-run Modus. Es kann da zu interessanten Effekten
kommen, wenn man mehrere Kanäle abfragen will, denn wenn das Schreiben
des ADMUX-Registers nicht synchron ist, klapperts.

Ich nutze den Interrupt des A/D-Wandlers. Code-Beispiel siehe:
http://www.mikrocontroller.net/forum/read-1-35558.html#36904

Mit ein paar kleineren Änderungen sollte das auch bei Dir laufen.

Autor: bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn du meinen code nimmst (ad kanäle halt umbenennen) müsste es
eigentlich funktionieren...;)...naja, hab auch ziemlich lang
herumgebastelt und nette effekte mit der atmel ad wandlung erlebt ;)

Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info, das funzt prima, habe ich schon probiert, doch kann
ich den Interrupt Modus nicht verwenden, da das auslesen zu einem ganz
bestimmten Zeitpunkt bei Kanal 5 statt finden muss und im
Ausnahmezustand des Timers stattfindet. Ich bekomme die falsche
Spannung des Akkus zurück, halt die Ladespannung und nicht die
Leerlaufspannung.
Wie kann ich den den MUX Befehl syconisieren???

Gruß Berny ??????

Autor: bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moment mein wg mitbewohner sagt ich soll mal mit ihm ein bier trinken
;))..danach, werd ich mal zurückposten ;)

Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War plötzlich ganz einfach,
Dank an alle, ich hoffe die Routine zickt nich noch mal rum,
Der Hinweis Sycronisieren war super klassen, Ich habe einfach den
Interrupt verwendet um die MUX zu sycronisieren und siehe da es läuft
stabil.

Dank an alle und Gruß Berny

ADC_IN:     ; Temp = MUX = Kanal Messung Rück r1-r2
  out ADMUX,temp
  sbi ADCSR, ADIF
  out ADMUX,temp
  sbi ADCSR, ADSC
ADC_IN_l01:    ; warte auf Conversion complet
  sbis ADCSR,ADIF ; ADIF Iterrupt flag prüfen
  rjmp ADC_IN_l01
  ldi count,128
ADC_IN_l02:
  dec count
  brne ADC_IN_l02
  out ADMUX,temp
  sbi ADCSR, ADSC
ADC_IN_l03:
  dec count
  brne ADC_IN_l03
  in r1, ADCL      ; ADC einlesen
  in r2, ADCH
  cbi ADCSR,ADSC  ;Stop ADC Conversion

  ret

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.