Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage ATmega128 + SPI + SPOL-Bit


von der mechatroniker (Gast)


Lesenswert?

Hallo,

ich habe hier einen 16-Bit-ADC, der laut Datenblatt folgendermaßen 
ausgelesen werden will (während der Wandlung sollen SS und SCK beide 
high sein).

* SS auf low
* SCK auf low (soll High wenn inaktiv sein). Dann legt der ADC sein Bit 
15 auf MISO.
* SCK auf high und dabei Bit 15 samplen
* SCK auf low, damit gibt der ADC Bit 14 aus.
* SCK auf high und dabei Bit 14 samplen
usw.
* anschließend SCK und SS auf high "parken"

Programmier ich das Ganze per Bitgewackel, funktionierts, sprich ich 
bekomme sinnvolle Werte raus.

Nutze ich die Hardware-SPI vom ATmega128, ist nach meinem Verständnis 
des Datenblatts CPOL = 1 und CPHA = 0 die richtige Einstellung für das 
oben beschriebene Timing. Damit funktionierts aber nicht: Werte bis 32k 
kommen halbiert raus, Werte ab 32k halbiert aber dafür +32k. Anscheinend 
wird das MSB doppelt gesampelt und das LSB gar nicht.

Was kann das sein? Sampelt der ATmega evtl. schon direkt nach dem 
Beschreiben von SPDR, also vor dem ersten Clockzyklus? Wie muß ich die 
SPI konfigurieren?

Grüße, Sebastian

von Jörg G. (joergderxte)


Lesenswert?

Wenn du die Abfolge richtig beschrieben hast (Datenblatt zum adc?), 
probier' mal CPOL=1, CPHA=1, damit der Atmega auf der steigenden Flanke 
(hier: "trailing") liest ("sample't")

von der mechatroniker (Gast)


Lesenswert?

Ah ich bin mittlerweile auch drauf gekommen nach nochmaligem Studieren 
des ATmega-Datenblatts.

CPOL = 1 und CPHA = 0 ergibt Leading Edge = Sample (Falling), Trailing 
Edge = Setup (Rising). Das ist natürlich genau falschrum...

Werds demnächst nochmal probieren...

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.