Hallo,
hat schon mal jemand mit dem obigen Baustein gearbeitet. Soweit ich das
aus dem Datenblatt verstanden habe, braucht man hier zum Ansteuern (z.B.
mittels eines Mikrocontrollers) 4 Leitungen (3 Steuerleitungen +
Datenleitung). Ist das richtig? Mir ist nicht ganz klar, warum zum
Übertragen des äußeren Zustands auf das Schieberegister Informationen
von zwei Steuerleitungen gebraucht werden. Beim 74HC595, der ja
genauso arbeitet (allerdings in die andere 'Richtung'), sind nur 3
Leitungen (2 Steuerleitungen + Datenleitung) nötig, oder?
Gruß Jörg
Hallo Namensvetter,
sieht auf den ersten Blick schon etwas "doppelt gemoppelt" aus mit
dem STCL und dem /PL Signalen. Wenn es nicht unbedingt dieser HC597
sein muss, könnte ich Dir noch den 4021 oder den HC165 empfehlen für
das serielle Einlesen von digitalen Signalen.
Jörg
Ich nehme deshalb den 74HC165, da brauchts nur 3 Leitungen:
- parallel Laden
- Schiebetakt
- Datenausgang
Warum das beim 597 so ist, kann ich Dir auch nicht sagen.
Das Gespann 74HC165/74HC595 sieht man jedenfalls sehr häufig für
IO-Erweiterungen.
Peter
@Peter
Den HC165 habe ich auch schon recht häufig verwendet, ungünstig ist
dabei lediglich die "falsche Polarität" des Ladesignals im
Zusammenspiel mit dem HC595. Damit braucht man beim geichzeitiegn
Einlesen und Ausgeben normalerweise je 1 Ladesignal für Ein- und
Ausgang. Mit einem H schaltet der HC165 in den Shift-Mode, der HC595
übernimmt die SR-Wert aber mit der L-H-Flanke an seine Ausgänge.
Deshalb bin ich auf den 4021 gestoßen (den gibt es auch als HC4021). Da
reicht mir dann ein "CS"-Signal.
Jörg
Jörg Günzel schrieb:> Hallo,> hat schon mal jemand mit dem obigen Baustein gearbeitet. Soweit ich das> aus dem Datenblatt verstanden habe, braucht man hier zum Ansteuern (z.B.> mittels eines Mikrocontrollers) 4 Leitungen (3 Steuerleitungen +> Datenleitung). Ist das richtig? Mir ist nicht ganz klar, warum zum> Übertragen des äußeren Zustands auf das Schieberegister Informationen> von zwei Steuerleitungen gebraucht werden.
Das ist ein zweistufiger Prozess. RCK lädt das Inputregister mit den
Werten des parallelen Eingangs. S/L überträgt dann den Inhalt des
Inputregisters ins Schieberegister. Der 165 hat kein Inputregister und
damit einen Steuerpin weniger, genauso wieder 164 kein Outputregister
hat.
fchk
Ich habe sogar die routine ins JAL übersetzt und die geht.Leider ist der
HC597 nicht gerade leicht zu finden.Den gibt's nicht bei Reichelt und
auch nicht bei Conrad.Deswegen würde Ich mich über eine routine zum
HC165 freuen, aber wie man sie schreibt weiß ich noch nicht.
Das ist meine HC597 routine.
-- 74hc597 input expander
-- how to use:
-- The DATA pin should be set as input, all other as outputs
var volatile bit DATA is pin_c3 -- Any other I/O pin could
be used
var volatile bit CLOCK is pin_c2
var volatile bit LATCH is pin_c1
var volatile bit LOAD is pin_c0
pin_c0_direction = output
pin_c1_direction = output
pin_c2_direction = output
pin_c3_direction = input
var byte vport_c = 0
procedure hc597_receive is
var byte Var1, Var2 -- port status and counter
Var2 = 8 -- initializing counter
Latch = high -- receive pin states into input latch
asm nop
Latch = low
Load = low -- transfer the contents of input latch to SHIFT
reg
asm nop
Load = high
asm local Loop1 -- lokal label
asm Loop1:
assembler
rlf Var1,f ;rotate "Var1" one place to the left
btfss Data ;is data line = "1" ?
bcf Var1,0 ;if not, clear bit 0 in Var1
btfsc Data ;is data line = "0" ?
bsf Var1,0 ;if not, set bit 0
bsf Clock ;generate one clock
nop
bcf Clock
decfsz Var2,f ;has 8 bits been received?
end assembler
asm goto Loop1 ;if not, repeat
vport_c = Var1
end procedure
Danke für den tip.
Wollte noch sagen , dass die routine für den hc595 auf der Seite
http://romux.com/tutorials/pic-tutorial/shift-registers nicht stimmt.
Die sollte so aussehen:
HC595 MACRO VAR,VARL
LOCAL LOOP ;Local label
MOVLW .8 ;Transfer eight bits
MOVWF VARL ;Initialising counter
LOOP RLF VAR,F ;Rotate "Var" on place to the left
BTFSS STATUS,C ;Is carry = "1" ?
BCF DATAA ;If not, set Dataa line to "0"
BTFSC STATUS,C ;Is carry = "0" ?
BSF DATAA ;If not, set Dataa line to "1"
BSF CLOCK ;Generate one clock
NOP
BCF CLOCK
DECFSZ VARL,F ;Has eight bits been sent ?
GOTO LOOP ;If not, repeat
BSF LATCH ;If all 8 bits have been sent,
NOP ;contents of SHIFT register
;to send the output latch
BCF LATCH
ENDM
Programist schrieb:> Wollte noch sagen , dass die routine für den hc595 auf der Seite> http://romux.com/tutorials/pic-tutorial/shift-registers nicht stimmt.
Wayne interessierts.
Ich verstehe beides nicht und mein AVR auch nicht.
Daher schreibe ich sowas in C.
Das kann ich lesen, der AVR C-Compiler und sogar ein PIC C-Compiler
sollte es auch können.