- 12V Akku mit 280 Ah bauen         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 36

Thema: 4x7 Seg. mit 3 Ader SW SPI, Einstieg mit BASCOM u. ATtiny45

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133

    4x7 Seg. mit 3 Ader SW SPI, Einstieg mit BASCOM u. ATtiny45

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    weil es mit µC viel einfacher ist um alle technischen Probleme zu lösen, konnte ich der Versuchung nicht standhalten und hab mit µC Anwendung begonnen. Zum Einstieg in die Programmierung und als Übungsprojekt sollte zunächst mal eine 4 X 7 Segment low current LED Anzeige angesteuert werden.

    Die Anzeige hat 11 Anschlüsse. Sieben zur Segmentansteuerung plus vier zur Ziffernaktivierung. Gemeinsame Anode pro Ziffer. Wenn man vier Ziffern gleichzeitig darstellen möchte, muß also gemultiplext werden.

    Außerdem hat der vorhandene ATtiny45 nur fünf verwendbare Portpins, vom RESET Pin mal abgesehen, - ein Portexpander muß also auch noch her.

    Über den RN-Wissen Artikel ist angehängte Schaltung und folgendes Bascom Testprogramm entstanden (In der Schaltung sind Abblock- und Pufferkondensatoren nicht eingezeichnet, VCC=5V)

    Code:
    '###################################################
    'File: schiebe.bas
    'Tests on three wire software spi - output only
    'on Displayunit: 4 X 7 segment low current LED
    'HW circuit: ATtiny45_4_X_7_Segment_SPI
    '#######################################################
    
    $regfile = "attiny45.dat"
    $eepleave
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    Dim X As Byte
    Dim Y As Byte
    
    Dim Init7segment As Byte
    Dim Dunkelziffer As Byte
    
    Dim Displaydigit(16) As Byte            'darzustellende Zeichen (hex 0..F)
                       '0gfedcba (segmente, msb immer 0)
    Displaydigit(1) = &B01000000            'Ziffer "0", 0 = segment ein, 1 = aus
    Displaydigit(2) = &B01111001            'Ziffer "1"
    Displaydigit(3) = &B00100100
    Displaydigit(4) = &B00110000
    Displaydigit(5) = &B00011001
    Displaydigit(6) = &B00010010
    Displaydigit(7) = &B00000010
    Displaydigit(8) = &B01111000
    Displaydigit(9) = &B00000000
    Displaydigit(10) = &B00010000
    Displaydigit(11) = &B00001000
    Displaydigit(12) = &B00000011
    Displaydigit(13) = &B01000110
    Displaydigit(14) = &B00100001
    Displaydigit(15) = &B00000110
    Displaydigit(16) = &B00001110
    
    Dunkelziffer = &B01111111               'senden um eine Ziffer dunkel zu schalten
    
    
    'Nutzung von Software SPI
    Config Spi = Soft , Dout = Portb.0 , Ss = Portb.1 , Clock = Portb.2
    Spiinit
    
    
    'mit Senden von acht high bits sicherstellen, daß über Q7 des Schieberegisters
    'der HEF4017 die erste Ziffer der 4 X 7 Segmentanzeige adressiert -> reset des 4017
    Init7segment = &B11111111
    Spiout Init7segment , 1
    
    
    Do
    
       'alle Segmente mit Ziffer 8 für ca. 10s flimmerfrei einschalten
       For Y = 1 To 7
          For X = 0 To 255
             Spiout Displaydigit(9) , 1
             Waitms 5                       'bei "waitms 10" -> flimmern erkennbar
          Next X
       Next Y
    
    
       'alle Hexziffern langsam der Reihe nach durchgehend anzeigen
       'Ziffern müssen per Spiout byte für byte gesendet werden um die
       'HW Ziffernweiterschaltung per SS sicherzustellen!
       For X = 1 To 16
          Spiout Displaydigit(x) , 1
          Waitms 500
       Next X
    
    
       'alle Hexziffern der Reihe nach an der letzten (rechten) Seite des Diplays anzeigen
       For Y = 1 To 16
          For X = 1 To 3                    'die ersten 3 Stellen ausschalten
             Spiout Dunkelziffer , 1
          Next X
          Spiout Displaydigit(y) , 1
          Waitms 500
       Next Y
    
    Loop
    
    End
    Anmerkung zur Funktionsweise: Wenn ein Byte per SPIOUT gesendet wird, wechselt die SlaveSelect-leitung kurz vor Anlegen des ersten Datenbit von HIGH auf LOW. Sind alle Bits von SPIOUT gesendet, wechselt die SS Leitung wieder nach HIGH. Das ist anders als es im Portexpanderartikel im Diagramm "Signalfolge" dargestellt ist.

    Vielleicht liegt es am ATtiny und ATMegas verhalten sich anders?

    Die Fuse Bits befinden sich im Auslieferungszustand und damit ist der Systemtakt 1MHz. Die Taktrate auf der Clock-leitung für SPI beträgt hier gemessene 25KHz.

    Weil noch 2 Ports frei sind, könnte man noch ein Poti am ADC anschließen und am anderen ein Servo. Vielleicht ergibt das ein Servotester mit digitaler Anzeige der Pulsweite. Mal sehen, wo mich der Weg hinführt - hoffentlich nicht direkt in den GAU Wie auch immer - es macht Spaß!

    Fragen, Kritiken, Kommentare, etc wie immer willkommen!

    PS: Bis die Funktion endlich erfüllt war, ist die HW unbemerkt gewachsen ; auf dem Steckbrett kein Problem.

    EDIT: alten Titel "4x7 Segment Anzeige mit 3 Ader SW SPI, Servotester?" geändert.

    Gruß
    Searcher
    Angehängte Dateien Angehängte Dateien
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Kehnert
    Beiträge
    1.159
    Das ist natürlich eine ganz tolle Sache, wie Du versuchst, eine relativ
    aufwendige Anzeigeschaltung mit wenig Pinports des Tinys anzusteuern.
    Eine Alternative wäre natürlich auch ein "grösserer" AVR z.B. Atmega16
    und dann brauchst Du NUR noch den AVR. Vorrausgesetzt die 7-Segment-
    Anzeigen verlangen nicht nach Treibern. VG Micha

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    @ Searcher

    Gratulation, du hast den ersten Schritt zu µC's schon hinter dich !

    Ich möchte das gleiche schaffen, bin aber immer noch in der Denkphase. Momentan überlege ich den Brenner aus der Schaltung von hardware.bas.

    Nach erster Analise und Messungen möchte ich eine D-Sub Verlängerung (1,8 m lang, 9-adrig, mit 4 Adern für GND) mit abgeschnittenen Steckern und wegen ziemlich grossen Kapazitäten zwischen Adern um 200 pF, einen gesockelten Treiber 74F125 verwenden, um ihn auswechseln zu können, falls ein schwächerer (z.B. 74LS125 bzw. 74HC125) ausreicht. Ausserdem weiss ich noch nicht, welcher Programmer aus schon installierten "bascavr", ich zum Brennen wählen sollte, wenn meine Hardware irgendwann fertig ist.

    Was für ein Kabel und Treiber (125) hast du fürs Verbinden des Brenners mit dem ATTiny verwendet ?

    Ich würde mich sehr freuen, wenn du mir die hifreiche Erfahrunginformationen verraten könntest.

    MfG

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hallo,

    da haben sich ja gleich die beiden Auslöser für meinen µC Einstieg gemeldet

    @hardware.bas: Danke für die Anerkennung. Bestimmt wird man für die Anzeige einen größeren µC nehmen. Das Ding hab ich irgendwo ausgeschlachtet und leider kein Datenblatt gefunden. Ein Segment leuchtet mit 2mA schon recht hell. Müßte ohne Treiber also noch gehen. Der 74HC245 ist nur drin, weil der HEF4017 nicht viel Strom liefert. Mit 74HC4017 braucht man den 74HC245 in dieser Schaltung dann auch nicht. Ist aber noch kein festes Projekt sondern einfach Freude am Experimentieren und Räder neu erfinden

    @PICture: Auch Dir danke. Ich verwende die Schaltung von hardware.bas für den Programmierdongle. Bei meinen ersten Versuchen mit low current LED blinken lassen hatte ich festgestellt, daß ohne Stromversorgung und mit eingstecktem Dongle die LED schwach leuchtete. Konnte nur vom PC kommen. Als erste Abhilfe eine 1N4148 Diode in die + Leitung des Dongles geschaltet, so daß nur von µC Schaltung der Strom zum Dongle fließen kann.

    Als nächstes fand ich auf der RESET Leitung ein GND nach Einschalten des PC, das auch nach vollständigem Booten des PC nicht verschwand (bei an beiden Enden gestecktem Programmierkabel und Spannung auf der µC Schaltung). Erst nach Starten von Bascom und erstmaligem Ansprechen der Programmierschnittstelle verschwand der GND. Grund lag darin, daß bei meinem PC die entsprechenden LPT Pins auf LOW initialisiert waren - das hat den 74HC125 durchgeschaltet. Erst durch Bascom wurden die dann "günstig" gesetzt. Dazu ist zu sagen, daß auf dem PC mit WINXP SP3 noch kein Drucker eingerichtet war und ich streng nach Bascom Hinweis einen HP Laserjet 4 für Bascom installiert habe. Der Effekt verschwand erst, nachdem ich dann einen "Generic / Text only" Drucker zusätzlich installiert hatte. Es spielt keine Rolle, welcher Drucker als Defaultprinter bestimmt ist - Jetzt sind nach Booten des PC alle LTP Pins auf HIGH.

    Hab mal ein Foto von meiner "Testumgebung" angehangen. Für den Dongle benutze ich einen gesockelten M74HC125B1 von ST. Als Kabel hab ich das Erstbeste ausprobiert, das mir in die Hände gefallen ist - Es ist 6 adriges flaches Telefonkabel; 1,70m lang und mir war nicht ganz wohl dabei. Bin aber bis jetzt sehr zufrieden damit. Wenn ich mich recht erinnere hab ich da einen Programmiertakt von 48KHz ausgemacht, der sich sogar erhöhte, nachdem ich die $CRYSTAL Einstellung veränderte. Werd das bei Gelegenheit nochmal verifizieren. Hab alles so auf Lochraster bekommen das es in das SUB-D Gehäuse passt.

    Scheint mir recht unempfindlich zu sein und bin gespannt, wie lange das noch gut geht

    Gruß
    Searcher

    EDIT: hier noch der Schaltplan zum Dongle (credits to hardware.bas). Bei mir ist in der + Leitung noch eine 1N4148 Diode mit Kathode in Richtung Dongle drin.

    Bild hier  
    Bild hier  
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken testumgebung.jpg  
    Geändert von Searcher (13.03.2011 um 11:42 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Vielen Dank für das Foto und deine ausführliche Erklärung.

    Bei mir wird nur sicher kein Steckbrett geben, weil ich gleich meine mit zwei NiMh Akuss (2,4 V) betriebene Spielzeuge programmieren will. Geht der Programmer auch mit nur 2,4 V auf dem AVR gut ?

    Dass die LPT Schnittstelle unter Windows XP erst beim Starten entsprechendes Brennprogramms funktioniert, ist mir schon lange klar. Der zustand der LPT Pins direkt nach dem Booten, ist mir egal. Ich werde, wenn es geht, keinen "virtuellen" Drucker installieren, weil ich keinen brauche. Ausserdem möchte ich die +5 V durch entsprechenden RC Tiefpass aus USB meines Lapis nehmen.

    Was für Programmertyp vom Bascom muss man auswählen ?

    MfG

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Kehnert
    Beiträge
    1.159
    Bei der Gelegenheit sorry an PICture, da ich schon mal versprochen habe,
    diese Info zu geben, bin jedoch erst jetzt an mein Notebook wieder
    rangekommen, da es für Loggingaufgaben blockiert war .
    Bei Bascom in Verbindung mit dem LPT-gestützen Programmer mit
    74HC125-Tristate-Treiber folgende Einstellung in BASCOM-AVR Option
    notwendig: In dem oberen Fenster bei Programmer muss stehen:
    Universal MCS Interface
    Und innerhalb des Fensters von Universal muss als Programmer stehen:
    WinAVR and SP12
    VG Micha

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Kehnert
    Beiträge
    1.159
    Nachtrag: Zum Programmieren würde ich schon 5V nehmen, ich habe
    keine Ahnung, ob bei niedrigerer Vcc die Speicherzellen richtig gesetzt
    werden. Das Risiko würde ich nicht eingehen. Jedoch ist, wenn man USB
    als Vcc direkt benutzt, ja 5V gewährleistet. VG Micha

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    @PICture: Programmer Typ in Bascom auswählen:
    Zitat Zitat von hardware.bas
    Bei Bascom in Verbindung mit dem LPT-gestützen Programmer mit
    74HC125-Tristate-Treiber folgende Einstellung in BASCOM-AVR Option
    notwendig: In dem oberen Fenster bei Programmer muss stehen:
    Universal MCS Interface
    Und innerhalb des Fensters von Universal muss als Programmer stehen:
    WinAVR and SP12
    Kann ich bestätigen. So geht es. Hab oben in meiner ersten Antwort den Schaltplan des Dongles nochmal verlinkt.

    2,4V Programmierspannung: Auf dem Foto kann man nur 2 Batterien erkennen. Tatsächlich sind es 4 schwächelnde Zellen in einem quadratischen Batteriehalter, die zusammen 5,25Volt bringen. Werd es später mal mit geringeren Spannungen als 5V versuchen und noch ein paar Messungen machen. Mein ATtiny ist kein V Typ und nur bis 2,7V zugelassen

    EDIT: Ich habe nun ein Programm compilieren lassen, der mir den ROM fast voll schreibt - über 4000 Byte und programmiert. Hat mit Writing ROM und Reading ROM (wahrscheinlich verify) unter 15 Sekunden gedauert.
    Gleichzeitig mit Oszi auf der SCL Leitung mit Meßfunktion des Oszi den Takt gemessen: $CRYSTAL Einstellung = 1000000 -> 30kHz, $CRYSTAL = 8000000 -> 45kHz. -> Oszillatortakt unverändert auf 1MHz.
    Der Takt ist weit entfernt von einem festen Taktverhältnis -> deshalb Meßfunktion von Oszi.

    Programmieren bei 2,65V Boardversorgung auch gut mit 30kHz!
    Belegung des flachen Kabels von links nach rechts: SCL GND MOSI MISO VCC RESET.


    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Herzlichen Dank, jetzt weiss ich schon alles.

    Ich werde lieber gleich VCC = 5 V vom Brenner nehmen, anstatt zu experimentieren, weil später werde ich wachrscheinlich mit normalen AVR's (keine V Typen) etwas machen.

    Da ich den internen Oszillator mit ca, 120 kHz nutzen möchte, kann ich auch anfangs mit 74HC125 probieren und falls nötig, auf stärkeren Treiber immer noch wechseln.

    MfG

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Kehnert
    Beiträge
    1.159
    Ich denke mal, die 74HC125-Treiber, welche dazu da sind, den eigentlichen
    LPT-Passivbrenner qualitativ zu verbessern und auf Grund des Tri-State-
    Verhaltens die restliche Schaltung nicht zu stören, haben mit der
    Taktfrequenz eigentlich nichts zu tun. VG Micha

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad