- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 36

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

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133

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

    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

Berechtigungen

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

12V Akku bauen