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


von tonk (Gast)


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?

von Jörg X. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.