Forum: Mikrocontroller und Digitale Elektronik SPI 1 bit fehlt


von Hannes (Gast)


Lesenswert?

Hallo,

Es geht um eine SPI Kommunikation zwischen einem pic und einem Ram 
baustein(23lc1024)

Senden funktioniert prima. EMPFANGEN VOM RAM JEDOCH NICHT:

Das Problem ist, dass bei den Werten dir mir an meinem ASCII LCD 
angezeigt werden, das ganze um 1 bit verschoben ist.
Zbsp: Ich sende                 210, 7,  9,100 (dez)
Es wird angezeigt am LCD (dez): 105, 3,132,255 (außer 255 passt nicht)

Schaut man sich das binär an, so ist zu sehen dass jeweils das am LCD um 
ein bit nach rechts verschoben wird.

Da kommt dann natürlich der Gedanke dass etwas an der Polarity und 
Abtastung nicht in Ordnung sei..nunja, ich habe jetzt JEDE einzelne 
Kombi getestet.

Für die nicht Pic kenner :
CKP : clock polarity: 1=idle is high; 0=idle is low
SMP : 1=input data sampled at end of data output; 0= ..at middle..
CKE : 1=serial output changes from active to idle; 0=..from idle to 
active..

Laut DB sollte es sein: CKP=0 / SMP=1 / CKE=1

1)
CKP=0/SMP=1/CKE=1
CKP=0/SMP=0/CKE=1
CKP=1/SMP=0/CKE=1
Bei denen 3 wird das von oben angzeigt(ein bit verschoben). (Oszi steht 
auf steigende Flanken erkennung)
Am Oszi wird das natürlich richtig angezeigt.

2)
CKP=1/SMP=1/CKE=1
CKP=1/SMP=1/CKE=0
Bei denen 2 wird am Oszi bei fallender Flanken erkennung folgendes 
angezeigt:
OSZI (hex): 69, 03, 84, B2
LCD(dez): 105/3/132/191
PASST(außer das letzte)!! Allerdings sind das NICHT die Werte die ich 
reingeschickt habe.

Was mache ich falsch?

von zyxw (Gast)


Lesenswert?

Bei drei Birs gibt es 8 Möglichkeiten.
Du hast nur 5 getestet. Du musst auch unterscheiden, ob der Fehler beim 
Schreiben oder beim Lesen passiert.

von Hannes (Gast)


Lesenswert?

Ich habe alle 8 getestet, nur waren die nicht erwähnenswert.
Zudem habe ich oben geschrieben dass bei richtiger Einstellung(wie im DB 
angegeben), das Schreiben ohne Probleme funktioniert. Nur das LESEN 
nicht.

von c-hater (Gast)


Lesenswert?

Hannes schrieb:

> Ich habe alle 8 getestet, nur waren die nicht erwähnenswert.
> Zudem habe ich oben geschrieben dass bei richtiger Einstellung(wie im DB
> angegeben), das Schreiben ohne Probleme funktioniert. Nur das LESEN
> nicht.

Und wie genau hast du überprüft, dass das Schreiben funktioniert hat? 
Gab es da irgendwelche magischen LEDs auf dem RAM-Baustein, die dir das 
richtige Bitmuster als abgespeichert angezeigt haben?

Mein Gott, wie blöd muss man sein, um den Knackpunkt nicht zu erkennen, 
der hier nämlich ist: Schreiben mit nachfolgendem Lesen läßt bestenfalls 
erkennen, dass entweder beim Schreiben oder beim Lesen etwas schief 
gegangen sein muss, aber nicht, ob das nun beim Schreiben oder beim 
Lesen passiert ist.

Capisce?

von c-hater_fan (Gast)


Lesenswert?

c-hater schrieb:
> Mein Gott, wie blöd muss man sein, um den Knackpunkt nicht zu erkennen,
> der hier nämlich ist: Schreiben mit nachfolgendem Lesen läßt bestenfalls
> erkennen, dass entweder beim Schreiben oder beim Lesen etwas schief
> gegangen sein muss, aber nicht, ob das nun beim Schreiben oder beim
> Lesen passiert ist.

is dir a bissi heiß gell ;)

von Hannes (Gast)


Lesenswert?

c-hater schrieb:
> Mein Gott, wie blöd muss man sein, um den Knackpunkt nicht zu erkennen,
> der hier nämlich ist: Schreiben mit nachfolgendem Lesen läßt bestenfalls
> erkennen, dass entweder beim Schreiben oder beim Lesen etwas schief
> gegangen sein muss, aber nicht, ob das nun beim Schreiben oder beim
> Lesen passiert ist.
>
> Capisce?

Naja, wenn ich an unterschiedlichen Adressen Daten reinschreibe, und mir 
dann später im Programm per Auslesebefehl die Daten an den bestimmten 
Adressen am Oszi anschaue, dann weiß ich dass das Schreiben geklappt 
hat, sonst wären die vorhin geschriebenen Daten  nicht an der 
ausgewählten Adresse!

von zyxw (Gast)


Lesenswert?

Naja, ist ja auch wahr, kein Link zum Datenblatt etc.
Da vergeht einem die Freude am helfen.
Der hier hats geschafft mit deiner o.g. Kombination 2:
Verwende den Code und es wird funktionieren.
Auch er hat übersehen, dass beim falschen Schreiben nicht das geschieht, 
was man erwartet. Es passierte bei ihm nämlich gar nichts.
https://www.microchip.com/forums/m/tm.aspx?m=700061&p=1

von c-hater (Gast)


Lesenswert?

zyxw schrieb:

> Auch er hat übersehen, dass beim falschen Schreiben nicht das geschieht,
> was man erwartet. Es passierte bei ihm nämlich gar nichts.

Tss...

Jeder richtige Programmierer weiss: Es gibt leider beliebig viele 
Abstufungen von "falsch". Alle diese Fälle eint nur: sie machen nicht 
vollständig und immer dass, was der Programmierer wollte. Aber eben 
leider oft doch teilweise und/oder meistens. Genau das ist, was 
Fehlersuche so ungeheuer schwer macht...

von Peter D. (peda)


Lesenswert?

Bei EEPROMs (93CS66 usw.) wird vor dem Lesen ein Dummybit eingefügt, um 
von Schreiben auf Lesen umzuschalten.
Was steht denn im Datenblatt Deines ICs?

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.