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
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")
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.