ADC-Ergebnis im freerun sicher lesbar?

OP #5171597
Lesenswert?
• ▲
▼
Moin,

hab hier einen XMega8e5.

Der ADC läuft im freerun bei maximaler Geschwindigkeit (300kSps).

Wenn ich jetzt das Ergebnis auslese (Register "res") und genau den 
falschen Augenblick erwische, hab ich dann nicht RESH von der einen, 
RESL von der anderen Wandlung? Falls dem so ist, was kann man dagegen 
machen?

Finde nix dazu im Datenblatt oder irgenwelchen Posts...

Danke!
Christoph
Persönliche Seite #5171600
Lesenswert?
• ▲
▼
Verwende doch einfach das richtige Datenblatt:
http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42005-8-and-16-bit-AVR-Microcontrollers-XMEGA-E_Manual.pdf

Zitat (Seite 13):

For a read operation, the low byte of the 16-bit register must be read 
before the high byte. When the low byte register is read by the CPU, the 
high byte of the 16-bit register is copied into the temporary register 
in the same clock cycle as the low byte is read. When the high byte is 
read, it is then read from the temporary register. This ensures that the 
low and high bytes of 16-bit registers are always accessed 
simultaneously when reading or writing the register.
Gast #5171603
Lesenswert?
• ▲
▼
Falls es doch mal ein Problem sein sollte (z.B. mit externer Hardware), 
ein Workaround:

zweimal auslesen. Wenn ungleich, dann noch ein drittes Mal auslesen.

Wenn es in diesem Zeitfenster 2 Überläufe geben kann (z.B. durch 
Interrupts), dann dritten mit dem zweitem Wert vergleichen und bei 
Abweichung als ungültig markieren.
Gast #5171605
Lesenswert?
• ▲
▼
Ist vielleicht eine blöde Frage, aber warum nutzt du nicht den Interrupt 
zum lesen? Dann kann dir das doch sowieso egal sein, unabhängig davon, 
dass sowieso das höhere Register beim Lesen vom unteren gesichert wird, 
wie mein Vorredner schon anmerkte.
OP #5171608
Lesenswert?
• ▲
▼
Danke, absolut klar jetzt!
Also sorgt die Hardware mit dem temp-Register-Trick bereits dafür, das 
ich konsistente 16-Bit-Werte bekomme. :)

Warum kein Interrupt: So wenig Last auf der CPU wie möglich, da ich die 
ADC-Ergebnisse per SPI abtransportiere. Der SPI-Bus läuft auch am 
Maximum und der SPI-Interrupt soll die CPU für sich haben.

VG
Gast #5171632
Lesenswert?
• ▲
▼
Christoph M. schrieb:
> Warum kein Interrupt: So wenig Last auf der CPU wie möglich, da ich die
> ADC-Ergebnisse per SPI abtransportiere. Der SPI-Bus läuft auch am
> Maximum und der SPI-Interrupt soll die CPU für sich haben.

Warum dann nicht die, im ADC Interrupt ausgelesenen ADC Werte sofort 
hinterher im gleichen ADC Interrupt per SPI abschicken?
#5171903
Lesenswert?
• ▲
▼
@Christoph M. (chrito)

>Also sorgt die Hardware mit dem temp-Register-Trick bereits dafür, das
>ich konsistente 16-Bit-Werte bekomme. :)

In der Tat, das ist so oder so das große Thema wenn eine 8 Bit CPU 16 
oder gar 32 Bit Werte atomar aus dem IO-Bereich lesen muss. Steht auch 
explizit im Datenblatt.

>Warum kein Interrupt: So wenig Last auf der CPU wie möglich, da ich die
>ADC-Ergebnisse per SPI abtransportiere. Der SPI-Bus läuft auch am
>Maximum und der SPI-Interrupt soll die CPU für sich haben.

Bei 300 ksps scheint mir ein Interrupt so oder so unsinnig bis unmöglich 
zu sein, da macht man alles in einer kompakten Endlosschleife bzw State 
machine. Viel mehr schafft die CPU da sowieso nicht. 300 ksps sind 
gerade mal 100 Takte bei 32 MHz CPU Takt.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.