74HCT597 + 74HC595 am ATmega32

crischan

Neues Mitglied
23. März 2009
58
0
0
Sprachen
Hallo,
bin neu hier und ich hoffe ihr könnt mir helfen da ich noch am anfang der AVR kenntnisse stehe

Ich wollte mal fragen ob mir jemand erklären könnte wie ich am ATmega32 mit den 74HCT597
und dem 74HC595 eine Porterweiterung hinbekomme?

Oder hat einer ein Schaltplan

Damit ihr auch wisst was ich damit vor hab:
An den Eingängen sollen Induktive Schalter mit Relais anliegen
und an den Ausgängen LED´s

Sind da die beiden überhaubt für geeignet?
Gibt es bessere lösungen?

Mfg Chrischan
 
Hi crischan,

Ich wollte mal fragen ob mir jemand erklären könnte wie ich am ATmega32 mit den 74HCT597 und dem 74HC595 eine Porterweiterung hinbekomme?
das sollte wohl klargehen :D

Oder hat einer ein Schaltplan
Haben wir auch :D :D (Ansteuerung von 7-Segment-Anzeigen (Hardware)
Sieh dir mal die Sparschweinchen-Schaltung an...

Damit ihr auch wisst was ich damit vor hab:
An den Eingängen sollen Induktive Schalter mit Relais anliegen
und an den Ausgängen LED´s

Sind da die beiden überhaubt für geeignet?
Gibt es bessere lösungen?
Wenn man EXXXXTTTRRRREEEEEMMMMM viele Ports sparen möchte, dann
kann man das damit machen ;) Für die Relais würde ich wie bei der Schaltung
mit den großen 7-Segment-Anzeigen die ULN2803 dransetzen. Die haben
auch gleich Freilaufdioden für die Relais drin (Induktionsspannungen).

Die 74HCT597 hab ich mir noch nicht angesehen. Aber die scheinen genau
das Gegenstück zu den 595 zu sein (Eingang statt Ausgang) also solltest
Du mit der Erklärung zu den 595 und dem Datenblatt des 597 und ein wenig
Gehirnschmalz eine Lösung finden können. Wenn nicht -> Eine Frage und wir
helfen gern :D

Sehen interessant aus die 597 => ob ich mir da mal ein paar besorge ? :D

Aber selbst gefundene Lösungen machen immer am meißten stolz auf das
Ergebnis :rolleyes:

Bevor ichs vergesse : Herzlich Willkommen im Forum :flowers: :party:

Gruß
Dino
 
Hi Dino03

Danke für deine schnelle antwort

Ich werden das mal ausprobieren und Gehirnschmalz einsetzen :)

Allerdings muss ich erstmal die Teile besorgen aber das wird glaube ich das kleinere problem :)

Mfg Crischan
 
Hallo

Ich hab die teile da und auch schon verdrahtet aber ich bekomm es leider nicht angesteuert

Zuerst dachte ich mir ich versuch es erst mal nur mit den 74hc595
und hab es so gemacht wie hier aber ich komm auf den quellcode der hier steht nicht klar.

Könntest du mir da helfen?
Am bessten wäre ein unterprogramm wenn das geht?

mfg Crischan

__EDIT__
Ich hab die schaltung allerdings ohne R1
 
Hi Crischan,

Zuerst dachte ich mir ich versuch es erst mal nur mit den 74hc595
und hab es so gemacht wie hier aber ich komm auf den quellcode der hier steht nicht klar.
Das mit dem R1 ? Hast Du den einfach weggelassen ? Sollte nicht weiter
schlimm sein, da der Ausgang vom Mega push/pull arbeitet.

Sieh dir mal die signalfolge auf der Seite an. Die saagt eigentlich genau, was
du mit den Pins machen mußt.
SS - PB4 (Pin5) ---> RCK (Pin12) Latchtakt --_-- (negativer Puls)
MOSI - PB5 (Pin6) ---> SER (Pin14) Datenstrom 0/1
MISO - PB6 (Pin7)
SCK - PB7 (Pin8) ---> SCK (Pin11) Datentakt --__ (negative Flanke)

1. - ein Datenbit auf PB5 legen
2. - einmal mit PB7 --__-- einen negativen Impuls erzeugen (1-0-1)

1+2 8 Mal wiederholen und 8Bit sind im Schieberegister.

3. - einmal mit PB4 --__-- einen negativen Impuls erzeugen (1-0-1)
dann sind die Daten vom Schieberegister ins Latch übernommen und du
hast sie auf den Ausgängen vom 74595 liegen (erst jetzt siehst du sie )

Das kannst Du auch gaaaannnzzzz langsam machen. zB mit sekunden-
Pausen als Pulszeiten. Dann kannst Du das mit angeschlossenen LEDs
gut beobachten was da passiert.

Nen C-Sub bauen wird bei mir aber kompliziert ;) geht auch Assembler ? :D
Um das zu verstehen müßte ich mich erst mal ne Zeit mit den Routinen
auseinandersetzen. ...

So wie es aussieht haben die dafür die SPI-Hardwareunterstützung des
Prozessors mißbraucht. Bah wat kompliziert.

Gruß
Dino
 
Ich danke dir habs hinbekommen
PHP:
$regfile = "m32def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64

$crystal = 16000000                                         'Quarzfrequenz
$baud = 38400

Dim I As Byte

Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.7 = Output

For I = 1 To 8
Portb.5 = 0
Portb.7 = 1 : Portb.7 = 0
Next I

Portb.4 = 1 : Portb.4 = 0

Stop

Und wenn ich jetzt 2 595er habe muss es
PHP:
For I = 1 To 16
sein oder?
 
Hi Crischan,

Und wenn ich jetzt 2 595er habe muss es


CodeBox C
For I = 1 To 16

sein oder?
Genau !
einer hat 8Bit also haben 2 logischerweise 16Bit :)

Jetzt mußt Du nur noch statt der ganzen Nullen
( Portb.5 = 0 ) deine Nutzdaten in das Schieberegister
reinfüllen.

Gruß
Dino
 
was meinst du damit?



CodeBox BASCOM

$regfile = "m32def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64

$crystal = 16000000 'Quarzfrequenz
$baud = 38400

Dim I As Byte

Config Portb.4 = Output 'Latch-Takt
Config Portb.5 = Output 'Serielller Datenstrom
Config Portb.7 = Output 'Datentakt

For I = 1 To 16 'Dein Bit-Zaehler
Portb.5 = 0 'Das sind die Datenbits zum reinschieben
'Wenn du also 01101011 im 74595 stehen haben willst,
'dann mußt du das hier in entsprechender Reihenfolge
'so setzten (0 oder 1)
'01101011 <- Bits am Ausgang des 74595
'ABCDEFGH <- Ausgang vom 74595
'12345678 <- Schleifendurchlauf Nr. x

Portb.7 = 1 : Portb.7 = 0 'Damit erzeugst du ne negative Flanke
Next I 'naechstes Bit

Portb.4 = 1 : Portb.4 = 0 'Das erzeugt den Impuls zur uebernahme ins Latch

Stop
 
aso ja das wollte ich mit einem array machen aber soweit bin ich erstmal nicht, da ich das jetzt verstanden hab wie ich die 595er anspreche

Mich quelt die frage wie ich die 597er abfrage.

Die verdrahtung wird warscheinlich die selbe sein nur das ich "Ser" (Schaltplan) an MSIO und nicht an MOSI anschliessen muss, oder andere beliebige ports verwende.

Oder lieg ich da falsch?
 
Hi crischan,

aso ja das wollte ich mit einem array machen aber soweit bin ich erstmal nicht, da ich das jetzt verstanden hab wie ich die 595er anspreche
Na dann ist da ja alles in trockenen Tüchern :D

Mich quält die frage wie ich die 597er abfrage.

Die verdrahtung wird warscheinlich die selbe sein nur das ich "Ser" (Schaltplan) an MSIO und nicht an MOSI anschliessen muss, oder andere beliebige ports verwende.
Oder lieg ich da falsch?
Wenn du das Bitgezappel wie bei den 595 selber machst, dann kannst Du
einen x-beliebigen Port verwenden.

Da die 74597 Eingänge haben ... Denk mal nach ... Sieh dir mal das Datenblatt
Fig6 Timing-Diagram und Fig5 Logic Diagram an ...
Anhang anzeigen 74_HCT_597_8Bit-ParInLatch-SerOut.pdf

- Eingänge in Latch STCP
- Latch in Schieberegister /PL
- Daten rausschieben SHCP (Achtung ! D7 kommt zuerst raus !)
...
probier mal ein wenig. Mit dem Datenblatt und meinem Tip sollte das zu
schaffen sein ;)

Gruß
Dino
 
Hi Crischan,

damit kann ich leider nix anfangen
ich hab schon etwas rumprobiert aber ich bekomm es nicht hin
auweia. Die Timingdiagramme und Innenschaltungen sehe ich mir als erstes an, wenn ich
irgendwo Probleme habe ... Naja egal. Dann will ich mal versuchen es dir zu erklären.

Fangen wir mal ganz außen an. Die Pinbelegung ...
(15)--D0 =<= Dateneingang 0 / A
(1)---D1 =<= Dateneingang 1 / B
(2)---D2 =<= Dateneingang 2 / C
(3)---D3 =<= Dateneingang 3 / D
(4)---D4 =<= Dateneingang 4 / E
(5)---D5 =<= Dateneingang 5 / F
(6)---D6 =<= Dateneingang 6 / G
(7)---D7 =<= Dateneingang 7 / H
(8)---GND === Masse/0V/GND
(16)--Vcc === +5V/Versorgung
(9)---Q =>= Ausgang des Schieberegisters
(10)--/MR =<= Masterreset (Low aktiv __ )
(11)--SHCP =<= Datentakt des Schieberegisters (steigende Flanke _-- )
(12)--STCP =<= Übernahmetakt des Latches (steigende Flanke _-- )
(13)--/PL =<= Parallel Load - Transfer vom Latch ins Schieberegister (Low aktiv __ )
(14)--DS =<= Eingang des Schieberegisters

=>= Ausgangs-Pin , =<= Eingangs-Pin , __ Low (0) , ---- High (1)

Soweit klar ?

Wenn man sich den Logik-Plan ansieht, dann fällt einem auf, das unten am Ausgang
des Schieberegisters (Q) das Flip-Flop für D7 angeordnet ist. Das sagt einem, das
das Bit 7 zuerst an diesem Ausgang auftaucht. Dann Bit 6, ... zum Schluß dann Bit 0.

Links sieht man die Dateneingänge mit den dazugehörigen Flip-Flops des Latches
(Zwischenspeicher). Alle C1 der Flip-Flops sind miteinander verbunden und an STCP
herausgeführt. Wenn man an diesem Eingang eine positive Flanke (von Low nach High)
erzeugt, dann werden die Eingangsdaten von D0..7 in die Flip-Flops übernommen und
gespeichert. Damit sind die Daten schon einmal im Chip.

Hinter dem Latch sind ein paar NAND-Gatter zu sehen (8Stk übereinander). Wenn man
an /PL ein Low anlegt dann werden die Ausgänge der Latch-FlipFlops zu den FlipFlops
des Schieberegisters durchgeschaltet. Damit werde die Daten, die wir im Latch zwischen-
gespeichert haben in die FlipFlops des Schieberegisters übernommen. Jetzt sind unsere
Daten also schon vom Latch ins Schieberegister weitergekommen.

Bei den FlipFlops des Schieberegisters sind wieder alle C2-Eingänge (Takteingänge)
miteinander verbunden und an SHCP herausgeführt. Bei einer positiven Flanke
(von Low nach High) werden die Daten um eine Position weitergeschoben. Also wird in
das oberste FlipFlop der logische Pegel von DS übernommen, das FlipFlop darunter
übernimmt das Bit was in obersten gespeichert war usw. Die Bits wandern also mit
jeder positiven Flanke an SHCP in das jeweils eine Position weiter unten befindliche
FlipFlop weiter. Und unten an Q purzeln dir die Bits dann entgegen.

Ach ja, Der Pin /MR ist über NOR-Gatter an alle R (Reset)-Pins des Schieberegisters
geführt. Ein Low an diesem Anschluß löscht dir alle Daten im Schieberegister.

Soviel zum inneren Aufbau des kleinen ICs :D

Also ...
1. - Daten an D0..7 anlegen
2. - positive Flanke an STCP ___----- (0-1)
3. - negativer Impuls an /PL ----__---- (1-0-1)

4. - Datenbit an Q abfragen => über Prozessorpin wo der dranhängt
5. - positive Flanke an SHCP ___----- (0-1)

Punkt 4+5 8x wiederholen.

und fertig.

Ich hoffe, es ist etwas klarer geworden ;)

Gruß
Dino
 
Juhu ich hab hinbekommen
Aller bessten dank Dino:wub: :p

Code:
Config Portb.0 = Output                                     'STCP
Config Portb.1 = Output                                     'PL
Config Pinb.2 = Input                                       'Q
Config Portb.3 = Output                                     'SHCP

Do
  Portb.0 = 1 : Portb.0 = 0
  Portb.1 = 1 : Portb.1 = 0 : Portb.1 = 1
  For I = 1 To 8
  Print Pinb.2
  Portb.3 = 0 : Portb.3 = 1
  Next I
   Print "Neu"
  Waitms 200
Loop
End

Und wenn ich 2 597er hab muss ich Q -> Ds -> Q -> Avr pin oder?
 
Hi Crischan,

Juhu ich hab hinbekommen
Aller bessten dank Dino:wub: :p
wer sagts denn. War doch garnicht so schwer :D

Code:
Config Portb.0 = Output                                     'STCP
Config Portb.1 = Output                                     'PL
Config Pinb.2 = Input                                       'Q
Config Portb.3 = Output                                     'SHCP

Do
  Portb.0 = 1 : Portb.0 = 0
  Portb.1 = 1 : Portb.1 = 0 : Portb.1 = 1
  For I = 1 To 8  '<=========== 1 To 16 für 2x 74597
  Print Pinb.2
  Portb.3 = 0 : Portb.3 = 1
  Next I
   Print "Neu"
  Waitms 200
Loop
End

Und wenn ich 2 597er hab muss ich Q -> Ds -> Q -> Avr pin oder?
Genau ;) Einfach in Reihe so wie die 74595 auch. Jetzt kann man noch mal
sehen wie das mit den Takt- und Latch-Signalen ist, ob man die von den
74595 und den 74597 irgendwie zusammenschalten kann um noch mehr
Pins zu sparen :cool:

Gruß
Dino
 
Hi

das mit den pins sparen spar ich mir erstma;) bin erstmal froh das ich das so hinbekommen hab.

nur besteht noch ein kleines problem
und zwar wenn ich neben dem 597er andere Spannungsleitung habe gibt er nur noch chaos raus.

Was kann man da machen?
 
Hi Crischan,

nur besteht noch ein kleines problem
und zwar wenn ich neben dem 597er andere Spannungsleitung habe gibt er nur noch chaos raus.
:confused: Hä? :confused:
Netzleitung über das IC gelegt ? Mach doch bitte mal ein Bild und lad es hoch.
Ich kann mir das im Moment nicht vorstellen.

Sonst: Blockkondensatoren über die Betriebsspannung. Also an jedes IC nen
100nF und dann vereinzelte 10uF Elkos verteilen. Evtl bringt das ja schon was.

Gruß
Dino
 
Welches Tool benutzt ihr zum zeichnen von Schaltplänen?
Dann zeichne ich euch das mal auf
 
Hab mal was versucht, bin nicht der profi und ist auch meine erste zeichnung also bitte nicht meckern

 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)