www.mikrocontroller.net

Forum: Compiler & IDEs Handhabung AD Wandler


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Frage zum Handling des ADC von einem AT90PWM3:

Ich möchte eine Signal mit 2kHz abtasten und über den ADC wandeln. Die
Abrtastrate gerneriere ich mir über einen Timer Interrupt.

Muss ich den ADC in Single Convertion oder im Dauermode betreiben?

Das Problem im Singe Convertion Mode ist das warten auf ADIF Bit im
ADCSRA Register. Ehe das Bit gesetzt ist, ist der Timer schon wieder
übergelaufen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du stellst als Triggersource einfach den Timer OVF Interrupt ein.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das problem ist, ich muss in der interruptroutine mehrere AD Kanäle
abfragen und eine Berechnung durchführen. Den Timer OVF Löst meine ISR
aus. Du meinst als Tiggersorce für den AD Wandler? Wie handhabe ich das
dann mit mehreren Kanälen? Die können ja nur sequentiell abgefragt
werden.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
musst du wirklich 2khz haben bzw alle syncron einlesen???

ggf. sample mit 2k*anzahl der kanäle schnell und immer nen anderen.. im
endeffekt hast dann pro kanal 2k aber halt versetzt...

73

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauche die Kanäle (es sind 2 Strück) Zeitgleich für die Berechnung.
Das Problem ist, der nächste Timer OVF passiert noch wärend der
Berechnung, weil die AD Wandler zu lange brauchen.

Was wäre denn wenn ich den ADC im Free running mode betreibe und dann
einfach nur aller 500µs den aktuellen Wert auslese und
weiterverarbeite? Würde das funktionieren?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du die dinger gleichzeitig gesampled brauchst dann musst du 2 adcs
haben.. die avrs haben 1nen adc mit nem multiplexer davor...

wenn die samples zeitlich versetzt gemacht werden dürfen dann setz den
timer auf 4khz und sample abwechselnd die kanäle...

das mit dem zu langsamen adc kannst eigentlich nur durch schnellere
adcs kompensieren... ka wie lang so ein channel switch dauert... aber
samplen bis 30ksps sollte für nen avr kein prob sein... vllt hast du
irgendwelche prescaler-werte im adc nicht richtig initialisiert...

73

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein geringer Zeitversatz ist durchaus denkbar.
Ich stelle mir das folgendermaßen vor:

mein Zeitfenster beträgt 500µs
Der Interrupt wir ausgelöst, und die ISR aufgerufen.
Der erste AD Kanal wird abgefragt,
Der zweite Kanal wird abgefragt,
die Berechnung wird gemacht,
Die Daten werden ausgegeben,
Die ISR verlassen

Der DAC ist schon so initialisiert, dass er mit dem höchsten Tak läuft
im Highspeed Mode.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein so bringt das nix.

Besser ist:

Der ADC Start wird automatisch vom Timer ausgeführt. (Trigger Source
= Timer OVF, diese Einstellung gibts!)



ADC-ISR wird aufgerufen (Also jedesmal wenn ein Kanal fertig ausgelesen
wurde):

ADC-Daten werden in eine Variable gesichert
Flag für neue Daten wird gesetzt
Abzufragender Kanal wird für nächsten Start umgestellt.
ISR verlassen


mainloop: (Also was der Prozessor im Idle macht)

Prüfen ob Flag gesetzt
Wenn ja:
  Berechnungen durchführen und Sachen ausgeben



So würde ich das machen und so ist es nur eine saubere Programmierung.
Die ISR sollte nur so kurz wie es nur geht sein, damit andere
Interrupts nicht unnötig hinausgezögert oder sogar ausgelassen werden.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul: Im Highspeed Mode bekommt der ADC 200kHz Clocktakt. Damit
erreicht er etwa 20ks/s. Und das sind 10mal mehr als deine 2kHz. Also
irgndetwas stimmt bei dir nicht.

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.