SPI Konfiguration für CD4021 Kommunikation

Gast #833422
Lesenswert?

Hi,

Hab jetzt ein gescheites Datenblatt von Fairchild aufgetan, da stand's 
dann drin. Trotzdem lese ich nicht das aus, was am Paralleleingang 
anliegt.
Habe acht Statuseingänge und möchte die auf einen Ritt einlesen.

Quellcode sieht so aus:

PORTB |= (1<<OPT_CE);
wait_10us(1);
PORTB &= ~(1<<OPT_CE);
wait_10us(10);
SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
i = SPDR;
itoa(i, tmp_str, 10);
lcd_clr();
lcd_puts(tmp_str);

Aber für i beomme ich immer 255.
Bin echt am Grübeln.

Gruß, Alex
#833476
Lesenswert?

#1.. da weiter oben jemand sagte, dass /SCK_minimal 2,5MHz ist.. läuft 
dein AVR mit 5MHz..7MHz und ist die SPI auf F_sck = F_osc/2 eingestellt?

#2.. Alle Leitungen richtig geschaltet? /MISO (Eingang, PullUP an), 
/MOSI (Ausgang), /SEL (Ausgang), /SCK (Ausgang)

#3.. wie lautet der Auslese-Befehl von dem Chip? '0x00' wird's 100% 
nicht sein ;)

#4.. wozu dient das?
1
PORTB |= (1<<OPT_CE);
2
wait_10us(1);

#5.. ist das zweite 'wait 10µs' wegen dem Chip?
Gast #833535
Lesenswert?

@ Joan

zu #1: fck = f_cpu/8 bei 14,7456 MHz

zu #2: ja alle Leitungen sicher richtig angeschlossen, weil das Gerät 
mit anderer Software lief, nun soll eine andere Anwendung implementiert 
werden (vorher Assembler, habe versucht, die asm - Routine in C 
umzuschreiben, Ergebnis s.o.)

zu #3: wenn ich das Datenblatt richtig verstanden habe, hat der Chip 
keinen seriellen Eingang, sondern nur Seriellen Datenausgang. Bei CS 0 
=> 1 werden die Paralleleingänge gelesen, bei CS = 0 und Clock am 
Clockeingang wird seriell rausgeschoben.

Bitte korrigiere mich, falls ich daneben liege.

zu #5: PORTB |= (1<<OPT_CE); setzt den CS Eingang auf high 
(Datenübernahme)
OPT_CE, weil am Paralleleingang Optokoppler angeschlossen sind. Stimmt, 
hätte ich erwähnen müssen.
10us nur zur Sicherheit, zwischen CS = 0 und dem ersten Clock des SPI


Gruß, Alex
#833559
Lesenswert?

Hm..

Wahrscheinlich erzähl ich jetzt Mist, aber ich interpretier die Tabelle 
auf Seite 1 
(http://pdf1.alldatasheet.com/datasheet-pdf/view/173169/FAIRCHILD/CD4021BCM.html)
so:

Parallel/Serial Control HIGH (Zeile 1 bis 4).. alles beweglich, die 
Zustände im Inneren des Chips (Qn) entsprechen den Eingängen.. was 
Serial Input oder CLK erzählt interessiert keinen.

Wenn man nun Parallel/Serial Control auf LOW legt und nen CLK dazugibt 
(unterste Zeile), kommt am Q8 Ausgang bei jeder fallenden Flanke eins 
von den im inneren gespeicherten Zuständen Qn (8 Bits) rausgepurzelt.. 
an Q7 oder Q6 halt nur 7 oder 6 'Bits'.

Desweiteren sieht es für mich so aus, als ob das Teil bei steigender 
Flanke von CLK in dem 'Parallel/Serial Control auf LOW'-Modus zusätzlich 
noch die Bits reinnimmt, die auf Serial-Input liegen..

Dh. P/SC auf LOW und dann mit SPI-Mode 3 und LSB first einlesen, oder?

Grüsse
Joan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren