-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: 74HC595 Porterweiterung mit Bascom. Bitte um Hilfe.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360

    74HC595 Porterweiterung mit Bascom. Bitte um Hilfe.

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Für ein Projekt beötige ich um die 70 Ausgänge und komm deshalb nicht um einige 74HC595 Schieberegister herum. Hab nach Bascom Bespielen gegoogelt aber leider nur schwer verständliche Dinge gefunden. Habe keinerlei Erfahrung mit Schieberegistern bisher. Hat vielleicht jemand von euch einen Minimalcode für mich als Beispiel um mir das ganze zu verdeutlichen. So einfach gehalten wie es geht bitte
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Im RN-Wissen ist unter "Portexpander am AVR" folgender Code dargestellt:
    Code:
    ' SERiell nach PArallel (serpa) mit Hardware-Unterstuetzung
    ' Beispiel mit 2 Datenbytes
    
    ' SPI Bus (Hardware) als Master konfiguiren
    Config SPI = Hard , Master = Yes
    
    ' SPI Bus initialisieren
    ' setzt das DDR Register entsprechend
    Spiinit
    
    ' Bytes für die Daten
    Dim Serpa(2) As Byte
    Serpa(1) = &B10101010
    Serpa(2) = &B00000000
    
    ' Die Bytes auf den SPI Bus schieben
    Spiout Serpa(1) , 2
    Dieser Code verwendet die Hardware-SPI, ein Arbeiten mit dem 595 als Portexpander ist aber auch mittels Software-SPI möglich. Dazu siehst du am Besten in der BASCOM-Hilfe unter "Serout" nach.

    Steht die Hardware schon?
    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Danke für die Hilfe. Die Hardware steht noch nicht, da bin ich flexibel. Ich kann mit dem Code leider nur wenig anfangen. Ich hatte gehofft jemand kann mir anhand einiger Zeilen demonstrieren was ich tun muß, um z.B. den Ausgang Q0 von 0 auf 1 zu schalten. Am besten so einfach wie möglich und "komplett zu Fuß" damit ich es verstehe. Zum Test würde ich da mal LED's ansteuern. da ich nichts zeitkritisches mache reicht für mich auch eine Lösung per Software SPI.
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Im Prinzip schiebst du nur einen Bitstrom seriell in das Schieberegister hinein. Wenn du einen 595 hast, dann hast du auch 8 Bits die du reinschieben musst. Erst wenn alle 8 Bits drinnen sind, wird mit einem Strobe an RCK dem 595 gesagt: "Du hast alles bekommen, jetzt schalte!" Dann werden die Ausgänge so geschaltet, wie das Bitmuster aussah.

    Willst du also Q0 auf High und den Rest auf Low schalten, dann schiebst du 00000001 rein.
    Willst du Q0 und Q5 auf High schalten und den Rest auf Low, dann schiebst du 00010001 rein. Das wäre übrigens auch die Dezimalzahl 17.

    Als Grundlage für eigene Versuche solltest du die Zahlensysteme Binär, Dezimal und Hexadezimal verstehen und anwenden (also einen beliebigen Wert in ein anderes Zahlensystem konvertieren) können. Wenn diese Erfahrungen fehlen, würde ich erstmal dort ansetzen.
    Grüße
    Thomas

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Danke das hilft mir schonmal weiter das ganze zu verstehen. Bei einer seriellen Übertragung brauch ich auch ne Baudrate, oder? Bei "SER" schiebe ich das Bitmuster rein, mit "RCK" entscheide ich wann das ganze an den Ausgängen ausgegeben wird. Was hat es mit dem "SCK" aufsich? Da brauch ich ne Clock? Wie erzeuge ich die? Welche Frequenz muß diese haben? Wenn ich mehrere 595er kaskadiere wird dann einfach die Bitfolge länger, richtig?
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Lt. Wikipedia.org:
    Baud [bɔːd], Bd ist die Einheit für die Symbolrate (Schrittgeschwindigkeit) in der Nachrichtentechnik und Fernmeldetechnik. 1 Baud ist die Geschwindigkeit, wenn 1 Symbol pro Sekunde übertragen wird. Jedes Symbol entspricht einer definierten, messbaren Signaländerung im physischen Übertragungsmedium. Die Baudrate einer Datenübertragung muss auf Sende- und Empfangsseite gleich sein.
    Du bestimmst einfach eine Frequenz (nach oben allerdings begrenzt). Diese ist automatisch und ohne jegliches Abgleichen bei allen Schieberegistern die gleiche, da du sie ja alle über diesselbe Clockleitung taktest. Die Frequenz kannst du bei der Hard-SPI durch veschiedene Prescaler aus dem Systemtakt herunterteilen:
    Code:
    The SPI is clocked by the system clock which is divided by a the SPI divider. If you select a division factor of 4, and the system clock is 4 MHz, then the SPI clock will be 1 MHz.
    The possible values are :
    CLK2, CLK4, CLK8, CLK16, CLK32, CLK64 and CLK128
    Bei der Soft-SPI kannst du ebenfalls frei über die Frequenz verfügen, in dem du als Befehlsattribut eine Baudrate nennst.
    Du könntest übrigens auch auf einem Steckbrett ein Schieberegister rein nur mit Taster bedienen, sozusagen in Zeitlupe. Es gibt keine Mindestfrequenz, du kannst also in Ruhe überlegen, den Eingang auf einen Pegel legen und das Bit mit einem Tastendruck reinschieben.

    Bei "SER" schiebe ich das Bitmuster rein, mit "RCK" entscheide ich wann das ganze an den Ausgängen ausgegeben wird.
    Richtig. Den Strobe auf RCK macht man üblicherweise direkt nach dem Schieben. Es gibt auch Register ohne diese "Latch"-Funktion: Bei diesen flattern die Ausgänge während einem Schiebevorgang, da ja die Bits seriell durchgeschoben werden (total unpraktisch). Du schiebst quasi im Hintergrund und erst auf dein Kommando schalten alle Ausgänge um. Übrigens: Der Eingang G am 595 kann alle Ausgänge hochohmig schalten. Falls du LEDs mit den Schieberegistern bedienen willst, kannst du mit einem PWM-Takt an G diese dimmen - unabhängig von der Schieberei.

    Wenn ich mehrere 595er kaskadiere wird dann einfach die Bitfolge länger, richtig?
    Genau. Zu bedenken ist aber, dass das als erstes hinausgeschobene Bit am Ende der Schiebeoperation am letzten Schieberegister die letzte Stelle ist.
    Grüße
    Thomas

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Super, ich denk ich bekomm das hin. Werde das gleich mal am Steckbrett testen. Was hat es mit diesem "Strobe" aufsich? Beim reinschieben der Bitfolge muß an "RCK" was genau liegen? High? Low? Um die Bitfolge dann an die Ausgänge zu schicken muß ein Übergang von "High" auf "Low" erfolgen oder umgekehrt? Nach dieser Info kann ich loslegen
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Accenter Beitrag anzeigen
    Super, ich denk ich bekomm das hin. Werde das gleich mal am Steckbrett testen.
    Eine tolle Idee - du kannst quasi live zusehen was passiert. So sollte sich die Funktion schnell erschließen.

    Zitat Zitat von Accenter Beitrag anzeigen
    Was hat es mit diesem "Strobe" aufsich?
    Ein High-Impuls.

    Zitat Zitat von Accenter Beitrag anzeigen
    Um die Bitfolge dann an die Ausgänge zu schicken muß ein Übergang von "High" auf "Low" erfolgen oder umgekehrt? Nach dieser Info kann ich loslegen
    Da müsste man im Datenblatt nachschauen. Oder du versuchst die Erkenntnis aus deinem Steckbrett-Aufbau zu gewinnen.

    Probier die Sache mal am Steckbrett aus und wenn etwas nicht funktioniert dann frag einfach. So versteht man es am schnellsten. Vergiss nicht für definierte Pegel an den Eingängen zu sorgen! Viel Spass beim Testen und ich hoffe du wirst uns berichten ob alles wie gewünscht funktioniert hat.
    Grüße
    Thomas

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2009
    Beiträge
    405
    Hab mal probiert das Beispiel der Elektronikerseite für mich aufzubereiten.
    Jetzt habe ich endlich die AND Funktion verstanden - -
    Was ich immer noch nicht weiß: Warum Boolean statt Bit (definition Variable)
    Hier das Bascomprogramm
    Code:
    '8Bit Binärzähler mit Schieberegister 74HC164
    'PortD.0 an MR
    'PortD.1 an CL
    'PortD.2 an Da
    'LED an allen Ausgängen des 74HC164
    
    
    
    $regfile "m8def.dat"
    $crystal = 1000000
    
    Dim Zahl As Byte
    Dim Sichern As Byte
    Dim Outbit As Boolean                                       'Boolean?? warum nicht als Bit???
    Dim Durchlauf As Byte
    
    Config Portd.0 = Output
    Master_reset Alias Portd.0
    Config Portd.1 = Output
    Tackt_eingang Alias Portd.1
    Config Portd.2 = Output
    Ausgang Alias Portd.2
    
    Tackt_eingang = 0
    
    Do
      Sichern = Zahl : Master_reset = 0 : Master_reset = 1      'Alle LED kurz aus
      For Durchlauf = 1 To 8                                    '8 Durchläufe für 8 Bit
        Outbit = Sichern And 1 : Ausgang = Outbit           'Hier wird geprüft ob das letzte Bit 1 ist und dann endsprechend ausgegeben
        Tackt_eingang = 1 : Tackt_eingang = 0                   'das Bit ins Schiebregister
        Shift Sichern , Right                                   'die Binärzahl um eine Stelle nach rechts schieben (rechtes Bit entfällt)
      Next Durchlauf
      Incr Zahl : Waitms 300                                    'Zahl plus 1 --- kurz warten
      If Zahl >= 255 Then                                       'wenn Zahl größer gleich 255 dann
        Zahl = 0                                                ' Zahl gleich 0
      End If
    Loop
    
    'Beispiel:
    'Zahl = 3 -> Sichern = 3 (00000011)
    'Outbit = 00000011 AND 1 = 1
    'Ausgang = 1
    'Sichern (0011) schiebe nach rechts = 00000001
    'nächster Durchgang 00000001 AND 1 = 1
    'Ausgang = 1
    'Sichern (00000001) schiebe nach rechts = 00000000
    'nächster Durchgang 00000000 AND 1 = 0
    'Ausgang = 0
    'usw
    Geändert von dussel07 (27.10.2012 um 03:30 Uhr)

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Habe hier noch eine tolle Seite gefunden die die Funktion erklärt. Man kann wie oben beschrieben alles auch ganz langsam ansteuern und somit genau lernen wie es funktioniert. Total einfach eigentlich wenn man es mal begriffen hat! Danke für die tolle Hilfe und Erklärung! http://conductiveresistance.com/inte...ter-simulator/
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Porterweiterung am Mega32 - Bascom Programm
    Von Duesentrieb im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 31.10.2010, 19:41
  2. Bitte um Hilfe STK500 Bascom
    Von tueftlerq7 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 20.07.2010, 17:15
  3. Bascom Schieberegister 74HC595
    Von kollimann im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 26.05.2009, 17:32
  4. Hardware Interrupts - Bascom ich bitte um Hilfe!
    Von tms2002 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 19
    Letzter Beitrag: 13.05.2005, 23:46
  5. Hilfe: Porterweiterung mit 5 74HC573 macht was es will :-(
    Von Hei.Mor im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 24.08.2004, 00:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •