Forum: Mikrocontroller und Digitale Elektronik Problem mit Schieberegister 74595 - Bascom


von BascomBeginner (Gast)


Lesenswert?

Hallo

ich versuch nun seit zwei Stunden zwei 74595 Schieberegister 
anzusteuern. Sie sollen an einer Alphanummerischen Azeige die einzelnen 
Segmente ansteuern. Dazu wurde der Takt, Latch und Reset der beiden 
verbunden. Ein zeichen besteht aus 2 Bytes, aus denen immer je ein Bit 
in die Register eingelesen wird. Der Zeichensatzt ist jetzt natürlch 
nicht angehängt.

Das Problem ist jetzt dass bei dem einem Register (Daten durch PA1) fast 
immer nur einsen ausgegeben werden (auch wenn ich bis auf eine eins nur 
nullen einlese) und das andere fast immer nur nullen ausgibt(Daten durch 
PA3). Output enable habe ich fest auf die Masse gelegt.

Hat jemeand eine Idee was ich falsch mache?

Reset = PA5
Takt  =PA6
Latch=PA4

1
   For Q = 1 To 10                                          'das ganze für 10 Stellen
2
   Porta.5 = 0                                              'Schieberegister reset
3
                                                            'Reset aufheben
4
   Porta.5 = 1                                              'Die Bits aus den Bytes holen
5
   For Ab = 0 To 7                                          '2 Bits einlesen
6
   Porta.1 = D(q).ab
7
   Porta.3 = C(q).ab
8
9
   Porta.6 = 1                                              'ein Taktimpuls
10
   Porta.6 = 0
11
12
   Next Ab                                                  'ein Latchimpuls nachdem ein Byte eingelesen wurde
13
   Porta.4 = 1
14
   Porta.4 = 0
15
   Porta.7 = 1                                              'Stellenzähler +1
16
   Waitms 1                                                 'warten
17
   Porta.7 = 0                                              'Stellentakt wieder auf 0
18
19
20
21
   Next Q

von Carsten P. (papa_of_t)


Lesenswert?

Hallo,

mangels genauerer Angaben ein allgemeiner Tip: Vereinfache Deinen Code. 
Schreibe erstmal eine Programmschleife, die nur EIN Schieberegister 
bedient, und schiebe ein einzelnes Bit z.B. auf Tasterdruck je eine 
Stelle weiter und miß, ob es nacheinander an allen Ausgängen ankommt. 
Evtl. geht es erstmal nicht und Du kommst darauf (durch Messen von 
Latch, Reset usw.), wo der Fehler liegt. Nebenbei: Du kannst auch das 
letzte Ausgangspin auf den Eingang des zweiten Schieberegisters 
schalten, dann sparst Du ein Ausgabepin.

von Thomas (Gast)


Lesenswert?

Du musst die SREGs auch nicht jedesmal resetten...

Ich hab das so gemacht(Assembler):

-Datenbit auf Pin schreiben
- SCLK-Impuls
- nächstes Datenbit
.
.
.
RCLK-Impuls

Ausserdem verwende ich den OE zum Abschalten der SREGs und der Reset ist 
auf festen Potential und wird nicht vom Controller geändert.
Wie ist denn dein Schaltplan?

von Dominik (Gast)


Lesenswert?

uf ne weile her...
soweit ich  mich erinnnere muss der Taktpuls, wie du ihn nennst, dauernd 
anliegen, der Latchpuls orientiert sich an diesem...

von Dietmar (Gast)


Lesenswert?

Hallo,


unter bascom solltest du mit dem shiftout befehl arbeiten.
der ist einfach und funktioniert sehr zuverlässig.
als tipp zum debuggen (so habe ich das auch gemacht):

nimm erst einmal 3 kleine taster und versuche so daten in die register 
zu shiften.
meist hat man sich irgendwo mit der korrekten impulslage vertan.
die anfangsbedingungen müssen natürlich bezüglich der pulslagen genau 
stimmen.
benutze kurze leitungen zu deinen schieberegistern < 50 cm.
das timing ist unkritisch, die dinger sind rasend schnell.
ein paar waistates können aber nicht schaden.


dietmar

von Thomas (Gast)


Lesenswert?

Die üblichen 100nF an allen Logikbausteinen schaden auch nichts. 
Ausserdem die Taster entprellen, wenn du mit ihnen testen willst.

von Dominik (Gast)


Lesenswert?

wie siehts eigentlich aus, wenn ich z.b. 5 74HC595 in serie schalte und 
sich diese auf 3 verschiedenen Prints befinden, hab ich das probleme 
wenn ich handelsübliche steckverbinder verwende?
wenn ich sagen wir mal maximumm mit 100kHz takten will, wie siehts aus 
mit der maximalen leitungslänge? was kann grundsätzlich gemacht werden, 
damit die max. leitungslänge erhöht werden kann (kann allenfalls eine 
treiberstuffe dazwischengeschaltet werden?

von Karl heinz B. (kbucheg)


Lesenswert?

Sowas hab ich grade gemacht. Unter der Decke hängt eine
Zwischendecke und darauf sind 8 Module mit je einem 74595
drauf. Die einzelnen Module sind mit Flachbandkabel
über Pfostenstecker verbunden. Kabellänge von einem
Modul zum nächsten, ca. 60 cm.
Keine Probleme.

Ach ja. Taktfrequenz:
Was der ATMega8 bei 12 Mhz hergibt.

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.