2 Schieberegister SN74HC595N in Reihe, Problem mit Ansteuerung.

  • 2 Schieberegister SN74HC595N in Reihe, Problem mit Ansteuerung.? Schau mal ob du hier fündig wirst!

  • Das was in dem Programm bei LED0 steht war nur einer von vielen verzweifelten versuchen. Die Liste die du vorher gepostet hast, habe ich ja in dem Video durchlaufen lassen, da sieht man ja ganz deutlich das es so nicht funktioniert, aber wir sind uns mit den Hex werten ja alle einig. Ich kann mir den Fehler nicht mehr anders erklären.

  • Moin Woulf,

    das kann ich leider nicht sehen.

    Kann nur mit den Informationen arbeiten die HIER geschrieben werden.

    Dann Viel Erfolg beim Redesign.

    Melde dich wenn es funktioniert. Interessiert mich.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin,

    hier ein paar Bilder der ersten Platine. Ich kann so keinen Fehler finden.

    Edit: Wenn einem direkt nach dem Posten der Bilder der Fehler dann doch auffällt...

    Beim zweiten Schieberegister waren die LED's um einen Pin verschoben, sie fingen nicht bei Q0 an sondern bei Q1. Allerdings ist mein Problem immer noch nicht gelöst, da ich immer noch das Problem des blinkens auf der linken Seite habe, aber es werden immerhin schon einmal die richtigen LED's angesteuert. Hat jemand wegen dem Blinken noch eine Idee woran es liegen könnte?

    Gruß,

    Woulf

  • for bit in range(0, 16):

    ich habe keine Ahnung von Python

    aber du hast 16 Bit 2x 8

    warum dann in Range 0-16?

    entweder 1-16 oder 0-15 wären 16 Ziffern

    bei uns wechselt ja die Dezimal Ziffer auch bei 10 zu 2-stellig, 0-9 sind 10 und 0-10 wären 11 das wäre ein undezimal System oder wie sagt der Lateiner oder Italiener? 11 = undeci oder so

    weil ich nicht verstehe warum und wie genau ist einen Kondensator oder Widerstand einzulöten zum entstören (ist das überhaupt nötig?)

    Abblock Kondensatoren gehören sich immer kurz an VCC nach GND so um 100nF Keramik

    https://www.mikrocontroller.net/topic/im-detai…ckkondensatoren

    https://de.wikipedia.org/wiki/Blockkondensator

    http://www.lothar-miller.de/s9y/categories/14-Entkopplung

    http://www.elektronik-kompendium.de/forum/forum_en…=all&order=time

    siehe die hellbraunen Scheiben an nahezu jedem IC

    http://www.cbmhardware.de/cbmpet/cbm2001/pet77board.jpg

    oder beim PI

    besonders mehrere unter der CPU rückseitig, klein SMD

    https://de.banggood.com/Raspberry-Pi-3…-p-1278398.html

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moin,

    das Programm ist ja ursprünglich für ein einzelnes Schieberegister mit den Werten - for bit in range(0, 8): soweit ich das als Anfänger verstanden habe, hängt das bei einem Schieberegister damit zusammen das man am Ende noch den Q7' Ausgang hat für das nächste in reihe geschaltete Schieberegister und für das erste somit 9 Stellen braucht. Ich kann mich aber auch ganz fürchterlich irren, die Werte sind aber richtig, da die Richtigen LED's nun angesteuert werden.

    Ich bin mir inzwischen aber ziemlich sicher das es am Programm liegt, weil ich es nicht schaffe es zu 100% auf zwei Schieberegister umzuschreiben.

    Wenn ich dieses Pattern - LED1 = [0x01,0x03,0x07,0x0f,0x1f] -

    Mit

    Code
    def hc595_in(dat):
        for bit in range(0, 16):
        GPIO.output(SDI, 0x8000 & (dat << bit))
        GPIO.output(SRCLK, GPIO.HIGH)
        time.sleep(0.001)
        GPIO.output(SRCLK, GPIO.LOW)

    0x8000 durchlaufen lasse, habe ich rechts den Blinker wie ich ihn haben möchte. Ändere ich auf 0x8080 habe ich einen Warnblinker, beide seiten machen das gleiche, so wie sie sollen. Theoretisch müsste ich mit 0x0080 den Blinker für links haben. Die LED's werden auch richtig angesteuert, allerdings ist es kein sich aufbauendes Pattern, die LED's flackern die ganze Zeit.

    Meine Einschätzung dazu ist: das Programm nimmt das "0x8000" um den Start bit zu definieren und kommt mit 0x0080 irgendwie nicht klar, weil es von Anfang an nicht für zwei Schieberegister geschrieben wurde.

    Ich werde in den nächsten Tagen wohl die mühsame variante Probieren und das ganze per GPIO impuls Programmieren.

    Gruß,

    Woulf

  • 0x8000 durchlaufen lasse, habe ich rechts den Blinker wie ich ihn haben möchte. Ändere ich auf 0x8080 habe ich einen Warnblinker,

    Das ist richtig. Ein kleiner Hinweis, achte auf die Einrückung. Oben in deinem Coder wird die for-Schleife durchlaufen ohne dass sie was macht.

    Code
    LED1 = [0x01,0x03,0x07,0x0f,0x1f]
    [...]
    for bit in range(0, 16):
        GPIO.output(SDI, 0x8000 & (dat << bit))

    Der Ablauf ist folgender:

    Code
    0x001F ist binär 0000 0000 0001 1111 -> dat
    0x8000 ist binär 1000 0000 0000 0000

    Du hast insgesamt 16 bit (0 bis 15), die auch in der Schleife abgefragt werden:

    1. Durchlauf (bit = 0)

    - (dat << bit) ergibt (0x001f << 0) -> (deine Daten werden um 0 Stellen nach links verschoben) -> 0x001F

    - 0x8000 & 0x001F -> bitweise UND-Operation -> 0x0000

    2. Durchlauf (bit =1)

    - (dat << bit) ergibt (0x001f << 1) -> (deine Daten werden um 1 Stelle nach links verschoben) -> 0x003E

    - 0x8000 & 0x003E -> bitweise UND-Operation -> 0x0000

    [...]

    11. Durchlauf (bit =10)

    - (dat << bit) ergibt (0x001f << 10) -> (deine Daten werden um 10 Stellen nach links verschoben) -> 0x7C00

    - 0x8000 & 0x7C00 -> bitweise UND-Operation -> 0x0000

    12. Durchlauf (bit =11)

    - (dat << bit) ergibt (0x001f << 11) -> (deine Daten werden um 11 Stellen nach links verschoben) -> 0xF800

    - 0x8000 & 0xF800 -> bitweise UND-Operation -> 0x1000

    13. Durchlauf (bit =12) Hier weiss ich nicht ob Python 16 bit behält oder um weitere 8 bit erweitert

    - (dat << bit) ergibt (0x001f << 12) -> (deine Daten werden um 12 Stellen nach links verschoben) -> 0xF000

    - 0x8000 & 0xF000 -> bitweise UND-Operation -> 0x1000

    [...] bis zum 15. Durchlauf

    Das bedeutet es wird das höchste bit zuerst (MSB) in das Schieberegister geschrieben und alle anderen Werte im Schieberegister werden mit SRCLK um eine Stelle nach oben verschoben. Bei der Kaskadierung wird nun das bit, das "rausfällt" an das nächste Register übergeben. Am Ende wird alles mit dem LCLK nach vorne in das Anzeige-Register geschoben. Das ist auch der Grund warum du nicht O7 sondern O7' zur Übergabe nimmst.

    Wenn du nun anstelle von 0x8000 den Wert 0x8080 als Maske verwendest kommst du natürlich zu einem andren Ergebnis

    0x8000 -> 1000 0000 0000 0000

    0x8080 -> 1000 0000 1000 0000

    4. Durchlauf (bit = 3) mit 0x8080

    - (dat << bit) ergibt (0x001f << 3) -> (deine Daten werden um 3 Stellen nach links verschoben) -> 0x00F8

    - 0x8080 & 0x00F8 -> bitweise UND-Operation -> 0x0010

    Nur bei Null als Wert wird der Pin auf LOW geswetzt, bei allen andren Werten auf HIGH.

    Von der Hard- und Software stimmt eigentlich alles. Ich habe mir auch deine Bilder mehrmals angeschaut, ist schwierig dazu einen Kommentar abzugeben, da ich nicht sehe. Das Meiste ist gut, nur die kritischen Stellen sind schwierig zu sehen.

    Untypisch ist das Flimmern/Flackern auf der einen Seite.

    Hast du schon die beiden IC miteinander getauscht?

    Glaube ersetzt kein Wissen

  • Von der Hard- und Software stimmt eigentlich alles.

    woher weisst du das bei der Hardware?

    wenn der TO fragt

    Was ich noch NICHT gemacht habe, weil ich nicht verstehe warum und wie genau ist einen Kondensator oder Widerstand einzulöten zum entstören (ist das überhaupt nötig?).

    von welchen Widerständen (serielle in der Datenleitung?) Kondensatoren (an VCC?) schreibt er?

    Ohne Plan keine Aussage, Störungen nicht ausgeschlossen!

    von richtig kann also keine Aussage getroffen werden!

    Er kann lange in der Software suchen wenn es an der Hardware(anschaltung) liegt!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • müsste es, soweit ich das erkennen kann richtig sein

    so gehts mir ähnlich und deswegen gehe ich nicht auf das dünne Brett

    Die Lötstellen sehen grottig aus, aber ich sehe keinen seriellen Terminierungswiderstand (oft 120 Ohm, kann MANCHMAL entfallen) noch schlimmer, ich sehe keinen Abblockkondensator an VCC.

    Ohne echten Schaltplan vom TO von dem was der TO bauen wollte, ist es doch müssig über mögliche Fehler zu diskutieren und erst recht müssig in der software zu suchen wenn die Hardware schon ungenügend scheint!

    Eine bestückte Platine mit Bildern ist KEIN Schaltplan!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moin Woulf,

    hast du dein Problem lösen können??

    Egal wie die Antwort ausfällt, bitte, kurz melden und dann das Thema als erledigt markieren. Geht oben bei "Thema bearbeiten".

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!