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 Ja, beide sind kaskadierbar, besitzen also einen seriellen Dateneingang. Jörg (der andere, ich schreib mir doch nicht selbst)
Der is eigentlich einfach zum Ansteuern. Hier http://romux.com/tutorials/pic-tutorial/shift-registers wird erklärt wie es geht.
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
Auf einen 2166 Tage alten Thread zu antworten dürfte wohl der neue Rekord im Spätposten sein. :)
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
Programist schrieb: > Leider ist der > HC597 nicht gerade leicht zu finden.Den gibt's nicht bei Reichelt .. Einfach nach 74HCT597 suchen!
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.
1 | uint8_t shift_io( uint8_t b ) // send / receive byte |
2 | {
|
3 | uint8_t i; |
4 | |
5 | SPI_CLK_DDR = 1; // set as output |
6 | SPI_MOSI_DDR = 1; |
7 | |
8 | for( i = 8; i; i-- ){ // 8 bits |
9 | SPI_MOSI = 0; |
10 | if( b & 0x80 ) // high bit first |
11 | SPI_MOSI = 1; |
12 | b <<= 1; |
13 | SPI_CLK = 1; |
14 | if( SPI_MISO_PIN ) |
15 | b++; |
16 | SPI_CLK = 0; |
17 | }
|
18 | return b; |
19 | }
|
Peter
Du sagst, du kannst nicht den assembler.Wie hast du dann deine routine geschrieben?Hast sie eben erfunden oder was?
Peter Dannegger schrieb: > Ich verstehe beides nicht und mein AVR auch nicht. PIC PIC PIC PIC! Kennt doch jeder :-)
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.