Forum: Mikrocontroller und Digitale Elektronik 74HC597


von Jörg Günzel (Gast)


Lesenswert?

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

von Jörg (Gast)


Lesenswert?

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

von peter dannegger (Gast)


Lesenswert?

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

von Jörg Günzel (Gast)


Lesenswert?

Danke euch!
Ist denn der HC165 oder 4021 auch kaskadierbar?
Jörg

von Jörg (Gast)


Lesenswert?

@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

von Jörg (Gast)


Lesenswert?

@Jörg
 Ja, beide sind kaskadierbar, besitzen also einen seriellen
Dateneingang.

Jörg (der andere, ich schreib mir doch nicht selbst)

von Programist (Gast)


Lesenswert?

Der is eigentlich einfach zum Ansteuern.
Hier http://romux.com/tutorials/pic-tutorial/shift-registers wird 
erklärt wie es geht.

von Frank K. (fchk)


Lesenswert?

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

von karadur (Gast)


Lesenswert?

Schaut hier eigentlich keiner auf das Datum eines Beitrages?

von Juppi (Gast)


Lesenswert?

Jetzt ist der Thread beantwortet.

von Klaus (Gast)


Lesenswert?

Auf einen 2166 Tage alten Thread zu antworten dürfte wohl der neue 
Rekord im Spätposten sein. :)

von Programist (Gast)


Lesenswert?

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

von P.S. (Gast)


Lesenswert?

Programist schrieb:
> Leider ist der
> HC597 nicht gerade leicht zu finden.Den gibt's nicht bei Reichelt ..

Einfach nach 74HCT597 suchen!

von Programist (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Programist (Gast)


Lesenswert?

Du sagst, du kannst nicht den assembler.Wie hast du dann deine routine 
geschrieben?Hast sie eben erfunden oder was?

von P.S. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.