[Gelöst] Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

[Gelöst] Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Beitrag von Falko »

Auf meiner Homepage http://www.falko-pure.de habe ich zwar ein komplettes LPT-Seriell-Interface, was so auch funktioniert, wenn ich
direkt ein ladbares-Schieberegister 74HCT165 und einem 74595 auf einer Platine verbunden habe.

Nun wollte ich aber 4 x 74595er kaskadieren und diese über LPT mithilfe eines einzelnen 74165er-Schieberegister laden.
Nur da funktioniert mein Programm wohl nicht korrekt. Der Aufbau ist simpel. Ich habe eine Platine mit einem 74165er und LPT-Anschluss.
dann sind dort drei Ausgänge herausgeführt, die die Seriellen Daten über Data, Takt und Load zu einer weiteren Platine mit 4 Bausteinen von
74595er verbinden. An nun zwei Bausteinen, zusammen 16Bit habe ich eine BCD-Platine von Sprut, die er für mich freundlicherweise programmiert hat,
angeschlossen, welche einen PIC mit einer 4Segmentanzeigen bestückt ist. Manuell über ein Mäuseklavier funktioniert diese BCD-Anzeige korrekt. Aber wenn ich mein Programm mit den drei Platinen benutze, werden die Werte nicht korrekt angezeigt. anstelle von 1111 wird mir dann 2222, von 2222 dann 4444 usw. angezeigt. Es sieht so aus, also ob die Bits um ein Bit zu weit hinausgeschoben werden. Leider kann ich mir den Fehler nicht erklären und hoffe, wenn es am
Programm liegen sollte, das ihr mir hier weiter helfen könnt.

Hier einige Referenzen dazu:
http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf
http://www.falko-pure.de/html/projekt_74165_595.html
http://www.sprut.de/electronic/pic/proj ... bcdled.htm

Und hier mein Source, mit dem ich dann die Bits manuell setzen kann. Für BCD von 2 Segmente benötigt man ein Byte, welches in vier Nibbles (Halbbytes)
in Form von BCD die Werte pro Ziffer schreibt. Beispiel 00010001 würde in der Anzeige 11 anzeigen, wenn das Programm richtig laufen würde.

Soweit ich konnte habe ich weit möglichst den Code kommentiert und hoffe es kommt verständlich rüber.
Zur Ansteuerung der LPT benutze ich die Library InpOut32.dll und InpOut64.dll

Code: Alles auswählen

; Author: Falko Luensmann
; Homepage: www.falko-pure.de
;
; Parallel to Serial Interface with IC 74HC165, 74HCT165, 74LP165
; Zur Ansteuerung der LPT wird die Inpout32.DLL bzw. Inpout64.DLL gebraucht.
;
; Verwendete Signale der LPT:
; Datenregister D0-D7 = Pin 2 bis Pin 9 --> Bytewerte ausgeben 

; Steuerregister inv C0 = Strobe   = Pin 1    (PullUp 4,7k) 
; Steuerregister inv C1 = AutoFeed = Pin 14   (PullUp 4,7k) 
; Steuerregister     C2 = Init     = Pin 16   (PullUp 4,7k) Für Folge-ICs 74595er! 
; Data Register      D0..D7        = Pin 2..9 8Bit Daten parallel am 74165

;Belegung LPT und 74HC165
;--------------------------------------------------------------------------------------
;    74HCT165       |    LPT        | VCC,GND und Beschreibung                        |     
;-------------------|---------------|-------------------------------------------------|
;   PIN  1   inv. PL|   Pin 1 Strobe| Strobe 1 x 1-0-1 (lade Serial-Register)         |
;   PIN  2   CP     |   Pin 16 Init | Taktsignal 8 x 0-1-0 (schiebe Bits aus Register)|
;   PIN  3   D4     |   Pin 6 D5    | PullUp 4,7kOhm                                  |
;   PIN  4   D5     |   Pin 7 D6    | PullUp 4,7kOhm                                  |
;   PIN  5   D6     |   Pin 8 D7    | PullUp 4,7kOhm                                  |
;   PIN  6   D7     |   Pin 9 D8    | PullUp 4,7kOhm                                  |
;   PIN  7   inv Q7 |   --------    | nc (not connect)                                |
;   PIN  8   GND    |   Pin 18..25  | GND                                             |
;   PIN  9   Q7     |   --------    | SerialData Out                                  |
;   PIN 10   DS     |   --------    | GND                                             |
;   PIN 11   D0     |   Pin 2 D1    | PullUp 4,7kOhm                                  |
;   PIN 12   D1     |   Pin 3 D2    | PullUp 4,7kOhm                                  |
;   PIN 13   D2     |   Pin 4 D3    | PullUp 4,7kOhm                                  |
;   PIN 14   D3     |   Pin 5 D4    | PullUp 4,7kOhm                                  |
;   PIN 15   inv CE |   --------    | GND                                             |
;   PIN 16   VCC    |   --------    | VCC +5V                                         |
;-------------------------------------------------------------------------------------


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #CheckBox_0
  #CheckBox_1
  #CheckBox_2
  #CheckBox_3
  #CheckBox_4
  #CheckBox_5
  #CheckBox_6
  #CheckBox_7
  #Button_0
  #Button_1
  #Text_0
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
  #Text_6
  #Text_7
EndEnumeration


Global BA.w
BA=$E080; Meine zwei LPT auf PCI-Karte LPT1=E080, LPT2=E480. Standard sind LPT1=384, LPT2=E280; LPT3=3BC

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 480, 355, 183, 235, "Test  74165 und 74595",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      StringGadget(#String_0, 40, 25, 90, 20, "")
      CheckBoxGadget(#CheckBox_0, 10, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_1, 30, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_2, 50, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_3, 70, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_4, 90, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_5, 110, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_6, 130, 90, 20, 20, "")
      CheckBoxGadget(#CheckBox_7, 150, 90, 20, 20, "")
      ButtonGadget(#Button_0, 30, 120, 110, 40, "Senden")
      ButtonGadget(#Button_1, 30, 180, 110, 40, "Programmende")
      TextGadget(#Text_0, 10, 70, 20, 20, "D7")
      TextGadget(#Text_1, 30, 70, 20, 20, "D6")
      TextGadget(#Text_2, 50, 70, 20, 20, "D5")
      TextGadget(#Text_3, 70, 70, 20, 20, "D4")
      TextGadget(#Text_4, 90, 70, 20, 20, "D3")
      TextGadget(#Text_5, 110, 70, 20, 20, "D2")
      TextGadget(#Text_6, 130, 70, 20, 20, "D1")
      TextGadget(#Text_7, 150, 70, 20, 20, "D0")
      
    EndIf
EndProcedure


Procedure.a GetBin(); Welche der 8 Bits wurden gesetzt?
 DOUT.a=0
 If GetGadgetState(#CheckBox_7)=1:DOUT+1:EndIf
 If GetGadgetState(#CheckBox_6)=1:DOUT+2:EndIf
 If GetGadgetState(#CheckBox_5)=1:DOUT+4:EndIf
 If GetGadgetState(#CheckBox_4)=1:DOUT+8:EndIf
 If GetGadgetState(#CheckBox_3)=1:DOUT+16:EndIf
 If GetGadgetState(#CheckBox_2)=1:DOUT+32:EndIf
 If GetGadgetState(#CheckBox_1)=1:DOUT+64:EndIf
 If GetGadgetState(#CheckBox_0)=1:DOUT+128:EndIf 
 SetGadgetText(#String_0,RSet(Bin(DOUT),8,"0")+" = "+RSet(Hex(DOUT),2,"0")+"H")  
 ProcedureReturn DOUT
EndProcedure

If OpenLibrary(0, "inpout32.dll")
  Prototype.i ProtoIOx32_0()                ;kein Parameter
  IOx32IsOpen.ProtoIOx32_0 = GetFunction(0, "IsInpOutDriverOpen")
  Prototype.i ProtoIOx32_1(PortAdr)         ;1 Parameter
  IOx32Inp32.ProtoIOx32_1 = GetFunction(0, "Inp32")
  Prototype.i ProtoIOx32_2(PortAdr, WertB)  ;2 Parameter
  IOx32Out32.ProtoIOx32_2 = GetFunction(0, "Out32") 
;- Load Library INPOUT32
If IOx32IsOpen()
 IOx32Out32(BA+2,1!11) ; Pin1 von LPT anfangs auf High 
Open_Window_0()
GetBin()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures

  If Event = #PB_Event_Gadget
    
    If GadgetID = #String_0
      
    ElseIf GadgetID = #CheckBox_0
      GetBin()
    ElseIf GadgetID = #CheckBox_1
      GetBin()
    ElseIf GadgetID = #CheckBox_2
       GetBin()
    ElseIf GadgetID = #CheckBox_3
       GetBin()
    ElseIf GadgetID = #CheckBox_4
       GetBin()
    ElseIf GadgetID = #CheckBox_5
       GetBin()
    ElseIf GadgetID = #CheckBox_6
       GetBin()
    ElseIf GadgetID = #CheckBox_7
       GetBin()
     ElseIf GadgetID = #Button_0
       
     ;D0..D7 - Daten am 74HCT165 über das LPT-Daten-Register anlegen.
     IOx32Out32(BA,GetBin())
     ;Hier folgt nun die Ansteuerung über das LPT-Control-Register
     ;C0(invertiert) Pin  1  = Strobe (Lade parallele Bits ins serielle Register 1-0-1)
     ;C1(invertiert) Pin 14  = Takt   (8x 0-1)
     ;C2             Pin 16  = Load (Master-Strobe) für weitere IC-Gruppen, die seriel gefüllt werden.(1 x 0-1)
     ;Das XOR 11 dient zum korrekten setzen der invertierten Bits 00001011 des Controlregisters
     
     ;Strobe 1-0-1  Lade 8Bits von LPT in das serielle Register des 74HCT165
     IOx32Out32(BA+2,2!11) ; Strobe Lo LPT-PIN 1    
     IOx32Out32(BA+2,3!11) ; Strobe Hi  
     ;8 Takte senden 0-1-0 
     For i= 1 To 8
       IOx32Out32(BA+2,3!11) ; Takt Lo
       IOx32Out32(BA+2,1!11) ; Takt Hi LPT-PIN 14 (C1 invertiert)
     Next i
    ;Master Strobe (Load) 0-1-0  für nachfolgende serielle IC's oder Baugruppen
     IOx32Out32(BA+2,5!11)  ; Load Hi LPT-PIN 16  (C2)
     IOx32Out32(BA+2,1!11)  ; Load Lo  
   ElseIf GadgetID = #Button_1
       Event = #PB_Event_CloseWindow
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
EndIf
IOx32Out32(BA,0)      ; LPT-Datenregister D1..D7 auf Low.
IOx32Out32(BA+2,0!11) ; LPT-Controlregiister auf Standardausgaben zurück setzen.
CloseLibrary(0)
End
;
Mit freundlichen Grüßen,
Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8677
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Beitrag von NicTheQuick »

Erstmal sorry, dass ich jetzt blind drauflos rate, weil ich keine Zeit hab.

Aber ich hatte so ein Problem auch schonmal, allerdings trat es sporadisch auf, außerdem hab ich den COM-Port benutzt und nicht LPT. Die Lösung war statt einem einfach zwei Stoppbits nach jedem Byte zu verwenden.
Falls es das nicht war, schaue ich mir den Code mal morgen genauer an. :wink:
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Beitrag von Falko »

@NickTheQuick,

Seriell kann ich im Moment nicht einsetzen.
Mit dem 74165er parallel nach seriell wandeln schiebe ich keine
Start-, und Stopbits hinein, wenn mein Source soweit korrekt ist.
Leider ist es so, das ich bei LPT PIN1 auf logisch 1 für den 74165er haben muss,
und der beim kurzen Wechsel auf logisch 0 die 8 Bits zum schieben in den
Seriellspeicher lädt. Danach muß ich das ganze eben mit dem Clock-Signal 8x takten,
um diese 8 Bits zum 74595er hinzu bekommen. Aber irgendwie sende ich dort, aus irgendeinen
Grund wohl ein Bit zuviel, was ich jetzt nicht verstehe. Wenn ich 7 Bits sende wird die vierte Ziffer
bei 00000001 dann auch als Eins angezeigt. Nur gibt es dann beim weiteren Schieben bei 7 Bits Probleme, da diese 1 dann nicht in der Dritten dann in der Zweiten und zuletzt in der ersten Ziffer
auftaucht.
Um die Werte anzeigen zu können, muss ich noch ein Master-Strobe 0-1-0 senden zu den nachfolgenden Seriell-To-Parallel Bausteinen 74595 senden, damit ich auf der BCD-Anzeige die gewünschten Werte angezeigt bekomme. Wäre schön, wenn du meinen Code
überfliegen könntest.

Hintergrund LPT mit 74165er und seriell folgende Counter UP/Down-Zähler und BCD-Anzeigen, ist
eine CNC-Ansteuerung, die Schrittmotorkarten über Takt und Richtungssignal per Hardware
ansteuern sollen. Man könnte also drei UP/Down-Zähler und drei Taktgeneratoren anwenden und
somit die drei Achsen über BCD-Werte aus einer Textdatei laden und ausführen.

So einen Counter hat für mich Norbert Hagemann ein PIC-Programm angefertigt, mit allen Signalen,
die ich dafür haben kann. Leider ist dieser nicht BCD, sondern nur binär, was sich später, wenn das
mit dem LPT korrekt läuft, einfach umrechnen lässt. Vielleicht kriege ich es ja auch hin, nach
Spruts vorgaben diesen Counter von Norbert Hagemann auch BCD-kompatibel zu machen :)

Für alle die es in Sachen CNC interssiert, welche seriellen Bausteine benötigt werden, die sich
simpel mit dem PIC lösen lassen, hier folgende Links:


UP/Down-Counter von Norbert Hagemann
http://www.hagi-online.org/picmicro/counter.html

Taktgenerator bzw. Impulsgeber von Sprut
http://www.sprut.de/electronic/pic/prog ... hteck.html

Um die Anzeigen zu kontrollieren hier ebenfalls von Sprut auf meinen Wunsch
programmiert und auf seine HP zur Verfügung gestellt. Hierzu danke ich öffentlich hier im Forum
den beiden, die ihre Projekte hierzu veröffentlicht haben. :allright:

Vierstelliger Frequenzzähler:
http://www.sprut.de/electronic/pic/prog ... ed4low.htm

Vierfach BCD - Anzeige HEX und Dezimal
http://www.sprut.de/electronic/pic/prog ... ed4low.htm

@All
Ich danke allen im Voraus, die mir zur Ansteuerung von LPT zum 74165 weiterhelfen könnten.
Ich hoffe ich habe euch hierzu schon mal interessante Ansätze zu CNC beschrieben.

[Edit] Hier habe ich ein Ablaufschema vorbereitet, wie es eigentlich aussehen müsste.
Hierzu braucht ihr nur den Debugger einschalten und das Testprogramm zeigt die theoretischen
Ausgaben für die Steuerregister und Ausgänge am LPT visual an. Hiermit wird keine Hardware
angesprochen!

Code: Alles auswählen

Debug "Erste Binärwert, wie er ins controllregister geschrieben würde "
Debug "und rechts daneben, die wirkliche Ausgabe von LPT"
Debug ""
Debug "============================================================"  
Debug "Strobe senden 1-0-1 ControllRegister Bit 0 (C0) --> -------X"
Debug "============================================================"  
; Debug RSet(Bin(0!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(0),8,"0") +" Init Lo, AutoFeed Lo, Strobe Lo"
; Debug RSet(Bin(1!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(1),8,"0") +" Init Lo, AutoFeed Lo, Strobe Hi"
Debug RSet(Bin(2!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(2),8,"0") +" Init Lo, AutoFeed Lo, Strobe Lo"
Debug RSet(Bin(3!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(3),8,"0") +" Init Lo, AutoFeed Lo, Strobe Hi"

Debug "============================================================"  
Debug""
Debug "8 Takte senden 0-1-0 ControllRegister Bit 1 (C1) --> ------X- "
Debug "============================================================"  
For i= 1 To 8
  Debug RSet(Bin(3!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(3),8,"0")+" Init Lo, AutoFeed Hi, Strobe Hi"
  Debug RSet(Bin(1!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(1),8,"0")+" Init Lo, AutoFeed Lo, Strobe Hi"  
   Debug "------------------------------------------------------------------------------------------------------------------------"  
Next i
Debug""
Debug "============================================================"  
Debug "Master Strobe 0-1-0 --> ControllRegister Bit 2 (C2) -----X--   "
Debug "============================================================"  
Debug RSet(Bin(5!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(5),8,"0")+" Init Hi, AutoFeed Lo, Strobe Hi"
Debug RSet(Bin(1!11),8,"0")+"--->LPT Ausgänge ---> "+RSet(Bin(1),8,"0")+" Init Lo, AutoFeed Lo, Strobe Hi" 
Debug"
[/Edit]

Grüße, Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Beitrag von Falko »

Ich habe nun folgendes Versucht, da auf einigen Internetseiten am 74HCT165er der PIN10 für Seriell-In
offen gelassen wurde. Ich habe nun testweise das Beinchen 10 weg gebogen und wieder in den Sockel gesteckt.

Interessanterweise wird nun bei 00000000 dem 4-Fach-Display 0101 angezeigt, nachdem ich
zweimal senden anklicke. Eine Weitere Seite zeigt z.B. den Pin10 (SerIn) verbunden mit dem Data1 für das erste Bit.
Das werde ich Morgen mal ausprobieren. Vielleicht ist das dann die Lösung.

http://img697.imageshack.us/img697/1885/74hc165.jpg

Leider ist die Referenz hierzu nicht leicht zu verstehen. Standardmäßig habe ich den PIN10 wegen Eingang und C-MOS auf Masse verbunden. Vielleicht hat ja jemand ähnliche Erfahrungen mit diesem IC gemacht und kann es evtl. bestätigen.

[Edit] Leider hat auch dieses Schaltbild bezüglich Pin10 und Pin11 bei mir keine Änderung gebracht. :cry: [/Edit]
[Edit2] Einen Fehler habe ich vermutlich noch ändern können. Da LPT Pin1 als auch das IC am Pin1 invertierend
ist, kann man eine Invertierung per !11 beim Strobe weglassen. Soweit kann ich die Ziffern 11 nun anzeigen.
Ein Problem ist noch bei der 4stelligen Anzeige. Sobald ich zweimal 11110001 sende, wird mir ein E1F1 angezeigt.
Wenn ich diesen Fehler auch raus kriege, hänge ich den korrekten Source hinten nochmal dran, oder tausche ihn oben aus.

Die obigen beiden Programme habe ich nochmal angepasst. Ein Fehler bleibt nun noch offen. Die Werte werden zwar korrekt angezeigt, aber nach mehrmaligen Senden wechselt die erste von vier Ziffern ihren Wert. Z.B. ich gebe 11110001 ein, erhalte bei zweimaligen Senden dann die Ziffern F1F1 und ab und zu wechselt dieser bei erneuten Senden nach E1F1. Dabei findet der Fehler immer an der ersten Ziffer statt. Vermutlich ein PullUp-Problem.
[/Edit2]

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Brauche Hilfe zum ladbaren Schieberegister 74HCT165

Beitrag von Falko »

Nun hab ich's endlich hin bekommen.
Nach einigen Recherchen mit Google habe ich einige Tips hier und da ausprobiert.
Als vorletzten Versuch, der leider auch nichts brachte, hatte ich noch für 4x74HC595er und 1x74HCT165
jeweils einen 100nF Abblockkondensator spendiert. Nun kam die Idee, weil soweit der 165er mit dem nun oben
aktuellen Programm korrekt arbeitet, aber irgendwas in der seriellen Kette wohl verloren gegangen sein musste, die
74595er miteinander zu tauschen. Dabei hat sich nun herausgestellt, das die letzten beiden 74HC595er nicht korrekt
arbeiten, die ich testweise mit dem zweiten ausgetauscht hatte. Nun habe ich zwei gute ICs und kann zigmal die Bits
wiederholen, ohne das sie sich verschieben oder verändern. Ebenso wiederholte andere Werte werden nun anstandslos
angezeigt. Da sieht man, wo sich Fehler verstecken können :).

Das obige Programm läuft nun soweit korrekt und kann hier und da vielleicht jemand gebrauchen. Ich wünsche
denjenigen, der es anwenden kann, viel Spass damit.

Wenn ihr das zweite Programm ausprobiert, wozu man keine Inpout32.DLL benötigt, könnt ihr den Ablauf sehen, wie die IC's in ihren Logikwünschen geschaltet werden müssen. Das Strobe ist nur für den 74165 wichtig. Danach die 8-Fachschleife, für alle Bausteine, die was mit dem seriellen verschieben zu tun haben und zuletzt, ein Masterstrobe, was man häufig auch Load bezeichnet, wird dazu benötigt um die seriellen Register wieder an ihren Ausgängen raus zuschieben.

Mit freundlichen Grüßen,
Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Antworten