www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit timing von takt uart und adc


Autor: tonk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tag zusammen

ich habe folgendes problem:
ich muss einen takt für ein bauteil erzeugen der maximal 500 khz 
betragen darf. mit jeder steigenden flanke des taktes wird über eine 
periode lang ein analoger wert von dem bauteil ausgegeben. insgesamt 
sind es ca 16000 analoge werte die nacheinander ausgegeben werden bevor 
eine neue ausgabe startet.

die auflösung der gemessenen analogen werte ist nich so kritisch und 
kann von 2-bis 8bit reichen (je mehr is natürlich besser).
diese werte sollen noch an den pc gesendet werden.

Controller: atmega8

methode 1:
takt mittels timer im ctc-modus erzeugen. adc im freerun-modus laufen 
lassen. bei jedem timer-interrupt und high signal am taktausgang den adc 
wert einlesen und mit uart sofort ausgeben.

methode2:
takt mittels timer im ctc-modus erzeugen. adc im freerun-modus laufen 
lassen. bei jedem timer-interrupt und high signal am taktausgang den adc 
wert einlesen und im mc abspeichern. wenn alle 16000 werte abgespeichert 
sind das ganze datenpaket dann an den pc senden. da der flash ja nich 
gross ist (1k) sind so nur 2 oder 3 bit auflösung der analog werte 
möglich.

der adc des mc kann ja durchaus mit 500 khz laufen und noch 7 oder 8 bit 
auflösung liefern soweit ich hier im forum gelesen habe.

hat jemand noch eine idee wie mann das ganze angehen kann um auf eine 
möglichst schnelle übertragung der daten zu kommen?
sind meine überlegungen überhaupt so machbar?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was denn ist das für ein mysteriöses Bauteil?
Außerdem ist der Zusammenhang zwischen dem timererzeugten Takt und den 
Analogwerten nicht unklar, ist der Takt so eine Art Read-Strobe (d.h. 
kommt das Signal auf eine bestimmte Flanke)?

Aber du wirst ein anderes Problem haben: Der interne ADC kann sogar mit 
1Mhz getaktet werden (bei ~7Bit Auflösung!) -- Das ergibt aber trotzdem 
nur 1000000 / 13.5  = ~75kSps (engl. Sps.: Samples per second (hier: dt. 
Messungen)), dadurch dass das ein "successive approximation"-Wandler 
ist.
Und deine 16000 werte kannst du bei der Geschwindigkeit von 500 kByte/s 
nicht im Flash Speichern (die Programmierzeiten liegen bei einigen ms 
pro Page), vielleicht aber in externem (F)RAM.

Also so wie du das ganz etwas spärlich beschrieben hast, ist es höchst 
wahrscheinlich nicht mit einem Mega8 machbar, eher mit einen Atmega mit 
Externem RAM interface (z.B. mega162) + Externem ADC.
 Vielleicht kann man dir besser helfen wenn du ein bisschen mehr 
Informationen rausgibst.

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.