- LiFePO4 Speicher Test         
Ergebnis 1 bis 9 von 9

Thema: 10x10 Charlieplexed LED anzeige ansteuern

  1. #1

    10x10 Charlieplexed LED anzeige ansteuern

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Guten tag, ich habe eine 10x10 Charlieplexed LED anzeige gebaut mit dieser Zeichnung:
    Anhang 25116

    Meine microcontroller ist eine ATmega88 und es gibt 11 Tri-State-Pin verwendet:
    Pin1 Alias Portd.2
    Pin2 Alias Portd.3
    Pin3 Alias Portd.4
    Pin4 Alias Portd.5
    Pin5 Alias Portd.6
    Pin6 Alias Portc.0
    Pin7 Alias Portc.1
    Pin8 Alias Portc.2
    Pin9 Alias Portc.3
    Pin10 Alias Portc.4
    Pin11 Alias Portc.5

    Tri-state ist X, 0, 1
    X = nichts
    0 = 0 volt
    1 = 5 volt

    Problem:
    Mein Programm ist zu groß und nicht optimal. Mijn Ziel ist um text auf anzeige von rechts nach links.

    Kennt ihr vielleicht eine Möglichkeit das Programm effektiver zu schreiben?

    Vielen Dank für eure Hilfe

    (Dieser Code-Anzeige, den Buchstaben 'B' von rechts nach links)

    Code:
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    Dim A As Byte , B As Word , C As Word
    Config Portd = Input
    Config Portc = Input
    
    Pin1 Alias Portd.2
    Pin2 Alias Portd.3
    Pin3 Alias Portd.4
    Pin4 Alias Portd.5
    Pin5 Alias Portd.6
    Pin6 Alias Portc.0
    Pin7 Alias Portc.1
    Pin8 Alias Portc.2
    Pin9 Alias Portc.3
    Pin10 Alias Portc.4
    Pin11 Alias Portc.5
    
    Statepin1 Alias Ddrd.2
    Statepin2 Alias Ddrd.3
    Statepin3 Alias Ddrd.4
    Statepin4 Alias Ddrd.5
    Statepin5 Alias Ddrd.6
    Statepin6 Alias Ddrc.0
    Statepin7 Alias Ddrc.1
    Statepin8 Alias Ddrc.2
    Statepin9 Alias Ddrc.3
    Statepin10 Alias Ddrc.4
    Statepin11 Alias Ddrc.5
    
    A = 0.5
    B = 0
    C = 750
    
    '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    Do
    For B = 0 To C Step 1
    Gosub Led92
    Gosub Led93
    Gosub Led94
    Gosub Led95
    Gosub Led96
    Gosub Led97
    Gosub Led98
    Next
    
    For B = 0 To C Step 1
    Gosub Led82
    Gosub Led83
    Gosub Led84
    Gosub Led85
    Gosub Led86
    Gosub Led87
    Gosub Led88
    Gosub Led92
    Gosub Led95
    Gosub Led98
    Next
    
    For B = 0 To C Step 1
    Gosub Led72
    Gosub Led73
    Gosub Led74
    Gosub Led75
    Gosub Led76
    Gosub Led77
    Gosub Led78
    Gosub Led82
    Gosub Led85
    Gosub Led88
    Gosub Led92
    Gosub Led95
    Gosub Led98
    Next
    
    For B = 0 To C Step 1
    Gosub Led62
    Gosub Led63
    Gosub Led64
    Gosub Led65
    Gosub Led66
    Gosub Led67
    Gosub Led68
    Gosub Led72
    Gosub Led75
    Gosub Led78
    Gosub Led82
    Gosub Led85
    Gosub Led88
    Gosub Led93
    Gosub Led94
    Gosub Led96
    Gosub Led97
    Next
    
    For B = 0 To C Step 1
    Gosub Led52
    Gosub Led53
    Gosub Led54
    Gosub Led55
    Gosub Led56
    Gosub Led57
    Gosub Led58
    Gosub Led62
    Gosub Led65
    Gosub Led68
    Gosub Led72
    Gosub Led75
    Gosub Led78
    Gosub Led83
    Gosub Led84
    Gosub Led86
    Gosub Led87
    Next
    
    For B = 0 To C Step 1
    Gosub Led42
    Gosub Led43
    Gosub Led44
    Gosub Led45
    Gosub Led46
    Gosub Led47
    Gosub Led48
    Gosub Led52
    Gosub Led55
    Gosub Led58
    Gosub Led62
    Gosub Led65
    Gosub Led68
    Gosub Led73
    Gosub Led74
    Gosub Led76
    Gosub Led77
    Next
    
    For B = 0 To C Step 1
    Gosub Led32
    Gosub Led33
    Gosub Led34
    Gosub Led35
    Gosub Led36
    Gosub Led37
    Gosub Led38
    Gosub Led42
    Gosub Led45
    Gosub Led48
    Gosub Led52
    Gosub Led55
    Gosub Led58
    Gosub Led63
    Gosub Led64
    Gosub Led66
    Gosub Led67
    Next
    
    For B = 0 To C Step 1
    Gosub Led22
    Gosub Led23
    Gosub Led24
    Gosub Led25
    Gosub Led26
    Gosub Led27
    Gosub Led28
    Gosub Led32
    Gosub Led35
    Gosub Led38
    Gosub Led42
    Gosub Led45
    Gosub Led48
    Gosub Led53
    Gosub Led54
    Gosub Led56
    Gosub Led57
    Next
    
    For B = 0 To C Step 1
    Gosub Led12
    Gosub Led13
    Gosub Led14
    Gosub Led15
    Gosub Led16
    Gosub Led17
    Gosub Led18
    Gosub Led22
    Gosub Led25
    Gosub Led28
    Gosub Led32
    Gosub Led35
    Gosub Led38
    Gosub Led43
    Gosub Led44
    Gosub Led46
    Gosub Led47
    Next
    
    For B = 0 To C Step 1
    Gosub Led2
    Gosub Led3
    Gosub Led4
    Gosub Led5
    Gosub Led6
    Gosub Led7
    Gosub Led8
    Gosub Led12
    Gosub Led15
    Gosub Led18
    Gosub Led22
    Gosub Led25
    Gosub Led28
    Gosub Led33
    Gosub Led34
    Gosub Led36
    Gosub Led37
    Next
    
    For B = 0 To C Step 1
    Gosub Led2
    Gosub Led5
    Gosub Led8
    Gosub Led12
    Gosub Led15
    Gosub Led18
    Gosub Led23
    Gosub Led24
    Gosub Led26
    Gosub Led27
    Next
    
    For B = 0 To C Step 1
    Gosub Led2
    Gosub Led5
    Gosub Led8
    Gosub Led13
    Gosub Led14
    Gosub Led16
    Gosub Led17
    Next
    
    For B = 0 To C Step 1
    Gosub Led3
    Gosub Led4
    Gosub Led6
    Gosub Led7
    Next
    Loop
    End
    
    '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    
    Restart:
    Waitms A
    Portd.2 = 0
    Portd.3 = 0
    Portd.4 = 0
    Portd.5 = 0
    Portd.6 = 0
    Portc.0 = 0
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Ddrd.2 = 0
    Ddrd.3 = 0
    Ddrd.4 = 0
    Ddrd.5 = 0
    Ddrd.6 = 0
    Ddrc.0 = 0
    Ddrc.1 = 0
    Ddrc.2 = 0
    Ddrc.3 = 0
    Ddrc.4 = 0
    Ddrc.5 = 0
    Return
    
    Led0:
    gosub restart
    Return
    
    Led1:
    Statepin1 = 1
    Statepin2 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led2:
    Statepin1 = 1
    Statepin3 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led3:
    Statepin1 = 1
    Statepin4 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led4:
    Statepin1 = 1
    Statepin5 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led5:
    Statepin1 = 1
    Statepin6 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led6:
    Statepin1 = 1
    Statepin7 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led7:
    Statepin1 = 1
    Statepin8 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led8:
    Statepin1 = 1
    Statepin9 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led9:
    Statepin1 = 1
    Statepin10 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led10:
    Statepin1 = 1
    Statepin11 = 1
         Pin1 = 1
    gosub restart
    Return
    
    Led11:
    Statepin1 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led12:
    Statepin3 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led13:
    Statepin4 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led14:
    Statepin5 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led15:
    Statepin6 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led16:
    Statepin7 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led17:
    Statepin8 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led18:
    Statepin9 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led19:
    Statepin10 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led20:
    Statepin11 = 1
    Statepin2 = 1
         Pin2 = 1
    gosub restart
    Return
    
    Led21:
    Statepin1 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led22:
    Statepin2 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led23:
    Statepin4 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led24:
    Statepin5 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led25:
    Statepin6 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led26:
    Statepin7 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led27:
    Statepin8 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led28:
    Statepin9 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led29:
    Statepin10 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led30:
    Statepin11 = 1
    Statepin3 = 1
         Pin3 = 1
    gosub restart
    Return
    
    Led31:
    Statepin1 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led32:
    Statepin2 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led33:
    Statepin3 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led34:
    Statepin5 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led35:
    Statepin6 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led36:
    Statepin7 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led37:
    Statepin8 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led38:
    Statepin9 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led39:
    Statepin10 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led40:
    Statepin11 = 1
    Statepin4 = 1
         Pin4 = 1
    gosub restart
    Return
    
    Led41:
    Statepin1 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led42:
    Statepin2 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led43:
    Statepin3 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led44:
    Statepin4 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led45:
    Statepin6 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led46:
    Statepin7 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led47:
    Statepin8 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led48:
    Statepin9 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led49:
    Statepin10 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led50:
    Statepin11 = 1
    Statepin5 = 1
         Pin5 = 1
    gosub restart
    Return
    
    Led51:
    Statepin1 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led52:
    Statepin2 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led53:
    Statepin3 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led54:
    Statepin4 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led55:
    Statepin5 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led56:
    Statepin7 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led57:
    Statepin8 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led58:
    Statepin9 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led59:
    Statepin10 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led60:
    Statepin11 = 1
    Statepin6 = 1
         Pin6 = 1
    gosub restart
    Return
    
    Led61:
    Statepin1 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led62:
    Statepin2 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led63:
    Statepin3 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led64:
    Statepin4 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led65:
    Statepin5 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led66:
    Statepin6 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led67:
    Statepin8 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led68:
    Statepin9 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led69:
    Statepin10 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led70:
    Statepin11 = 1
    Statepin7 = 1
         Pin7 = 1
    gosub restart
    Return
    
    Led71:
    Statepin1 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led72:
    Statepin2 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led73:
    Statepin3 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led74:
    Statepin4 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led75:
    Statepin5 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led76:
    Statepin6 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led77:
    Statepin7 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led78:
    Statepin9 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led79:
    Statepin10 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led80:
    Statepin11 = 1
    Statepin8 = 1
         Pin8 = 1
    gosub restart
    Return
    
    Led81:
    Statepin1 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led82:
    Statepin2 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led83:
    Statepin3 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led84:
    Statepin4 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led85:
    Statepin5 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led86:
    Statepin6 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led87:
    Statepin7 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led88:
    Statepin8 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led89:
    Statepin10 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led90:
    Statepin11 = 1
    Statepin9 = 1
         Pin9 = 1
    gosub restart
    Return
    
    Led91:
    Statepin1 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led92:
    Statepin2 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led93:
    Statepin3 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led94:
    Statepin4 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led95:
    Statepin5 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led96:
    Statepin6 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led97:
    Statepin7 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led98:
    Statepin8 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led99:
    Statepin9 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return
    
    Led100:
    Statepin11 = 1
    Statepin10 = 1
         Pin10 = 1
    gosub restart
    Return

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das wichtigste zuerst: Das ist kein Charliplexing! Das ist eine ganz normale Matrix.

    Leider kann ich dir kein Beispiel in Bascom anbieten.

    Der Trick ist die Verwendung eines Bildspeichers. Darin werden die einzelnen LED durch Bits repräsentiert. Um etwas anzuzeigen setzt du die entsprechenden Bits und kopierst dann den Inhalt des Bildspeichers in einem Rutsch auf die LED-Matrix. Hier kannst du dich mal ins Thema einlesen:

    https://www.roboternetz.de/community...l=1#post528611

    Gruß

    mic

    P.S.: Hoppla, mein Beispiel ist ja doch in Bascom geschrieben (weitere Beiträge beachten!), allerdings für eine Matrix mit 11 Zeilen in 9 Spalten...
    Geändert von radbruch (13.04.2013 um 12:31 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Zitat Zitat von radbruch Beitrag anzeigen
    Das wichtigste zuerst: Das ist kein Charliplexing! Das ist eine ganz normale Matrix.
    Eine normale 10x10 LED Matrix hat 20 pins notig:
    (Dies ist ein 8x8, weil ich nicht finden konnte 10x10)
    Bild hier  


    Mein Charlieplexed 10x10 LED Matrix hat aber 11 pins notig:
    Bild hier  
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken r7ZOP[1].jpg  

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Hier wird Charlieplexing erklärt:

    http://www.josepino.com/?how_control_leds

    Meine Umsetzungen mit 12 LED an 4 Pins:

    http://www.youtube.com/watch?v=ZPYhrQl-d4M
    http://www.youtube.com/watch?v=r54xOzr0VDA
    http://www.youtube.com/watch?v=uwCx0GrFykU

    (Alle Links aus https://www.roboternetz.de/community...l=1#post443747)

    Gruß

    mic

    P.S.: Oh, sorry. Du hast recht! Es ist charlieplexing!

    Das ändert aber nur die Art, wie man die Daten aus dem Bildspeicher in die LEDs kopiert. Anstelle der Spaltenausgabe muss man dann alle LEDs einzeln ansteuern. Bei 100 LED dauert das etwas und wird vermutlich nicht sehr hell werden.

    - - - Aktualisiert - - -

    Hallo

    Da ich mich hier mal wieder als schlechten Durchleser geoutet habe, möchte ich versuchen, das wieder auszugleichen. Mein Ansatz für eine optimierte Ausgabe (allerdings nur mit 4 Pins/12 Leds):

    Code:
    ' Charlieplexing
    Declare Sub Charlie(byval Bitnr As Byte)
    Dim Charliedata(12) As Byte                                 ' Bitmuster fürs Charlieplexing an PC0 bis PC3
    Charliedata(01) = &B11001000                                ' Highnipple ist DDR, Lownipple ist Port
    Charliedata(02) = &B10101000
    Charliedata(03) = &B10011000
    Charliedata(04) = &B11000100
    Charliedata(05) = &B01100100
    Charliedata(06) = &B01010100
    Charliedata(07) = &B10100010
    Charliedata(08) = &B01100010
    Charliedata(09) = &B00110010
    Charliedata(10) = &B10010001
    Charliedata(11) = &B01010001
    Charliedata(12) = &B00110001
    
    Sub Charlie(byval Bitnr As Byte)                            ' Bitnummer 0-11
       Incr Bitnr                                               ' Startindex bei Arrays ist 1!
       Ddrc = 0
       Portc = 0
       If Bitnr > 0 Then
          If Bitnr < 13 Then
             Ddrc = Charliedata(bitnr) / 16
             Portc = Charliedata(bitnr) And 15
          End If
       End If
    End Sub
    (Code aus https://www.roboternetz.de/community...l=1#post519240)

    Der "Trick": Für jede LED wird der Status des DDR- und des PORT-Registers gespeichert. Bei der Ausgabe ist der übergebene Parameter gleich der Nummer der angesprochenen LED. Da ich vier Pins verwende kann ich die Daten in einem Byte speichern und verwende deshalb nur ein Bytearray.

    Für 11 Pins könnte man das Array in ein PORT- und ein DDR-Array mit jeweils 16 Bit (von denen man nur 11 verwendet) aufteilen. Das Belegen der Arrays könnte man dann automatisch per Programm machen. Wenn man das geschafft hat, könnte man auch die Kombinationen in Echtzeit berechnen und ausgeben ohne sie zuvor in den Arrays abzulegen.

    Noch eine kleine Zugabe: Da pro Port einmal 5 und einmal 6 aufeinanderfolgende Pins verwendet werden, würde sich die Verwendung von zwei 16-Bit Arrays anbieten: Je ein Array pro Port, im Highbyte der Wert fürs DDR, im Lowbyte der Wert für den PORT. Bei 100 LED wären das 400 Byte plus die 20 Byte für einen 10*16Bit Bildspeicher.

    Gruß

    mic
    Geändert von radbruch (13.04.2013 um 13:59 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Dies ist meine LED Data aber das ist nicht alles auf PORTC es gibt auch LEDs PORTC und PORTD die benötigt. Wie kann ich dieses Problem beheben? vielleicht mit einem Alias​​?

    Code:
    Dim Led(100) As long
    Led(001) = &B1100000000010000000000
    Led(002) = &B1010000000010000000000
    Led(003) = &B1001000000010000000000
    Led(004) = &B1000100000010000000000
    Led(005) = &B1000010000010000000000
    Led(006) = &B1000001000010000000000
    Led(007) = &B1000000100010000000000
    Led(008) = &B1000000010010000000000
    Led(009) = &B1000000001010000000000
    Led(010) = &B1000000000110000000000
    Led(011) = &B1100000000001000000000
    Led(012) = &B0110000000001000000000
    Led(013) = &B0101000000001000000000
    Led(014) = &B0100100000001000000000
    Led(015) = &B0100010000001000000000
    Led(016) = &B0100001000001000000000
    Led(017) = &B0100000100001000000000
    Led(018) = &B0100000010001000000000
    Led(019) = &B0100000001001000000000
    Led(020) = &B0100000000101000000000
    Led(021) = &B1010000000000100000000
    Led(022) = &B0110000000000100000000
    Led(023) = &B0011000000000100000000
    Led(024) = &B0010100000000100000000
    Led(025) = &B0010010000000100000000
    Led(026) = &B0010001000000100000000
    Led(027) = &B0010000100000100000000
    Led(028) = &B0010000010000100000000
    Led(029) = &B0010000001000100000000
    Led(030) = &B0010000000100100000000
    Led(031) = &B1001000000000010000000
    Led(032) = &B0101000000000010000000
    Led(033) = &B0011000000000010000000
    Led(034) = &B0001100000000010000000
    Led(035) = &B0001010000000010000000
    Led(036) = &B0001001000000010000000
    Led(037) = &B0001000100000010000000
    Led(038) = &B0001000010000010000000
    Led(039) = &B0001000001000010000000
    Led(040) = &B0001000000100010000000
    Led(041) = &B1000100000000001000000
    Led(042) = &B0100100000000001000000
    Led(043) = &B0010100000000001000000
    Led(044) = &B0001100000000001000000
    Led(045) = &B0000110000000001000000
    Led(046) = &B0000101000000001000000
    Led(047) = &B0000100100000001000000
    Led(048) = &B0000100010000001000000
    Led(049) = &B0000100001000001000000
    Led(050) = &B0000100000100001000000
    Led(051) = &B1000010000000000100000
    Led(052) = &B0100010000000000100000
    Led(053) = &B0010010000000000100000
    Led(054) = &B0001010000000000100000
    Led(055) = &B0000110000000000100000
    Led(056) = &B0000011000000000100000
    Led(057) = &B0000010100000000100000
    Led(058) = &B0000010010000000100000
    Led(059) = &B0000010001000000100000
    Led(060) = &B0000010000100000100000
    Led(061) = &B1000001000000000010000
    Led(062) = &B0100001000000000010000
    Led(063) = &B0010001000000000010000
    Led(064) = &B0001001000000000010000
    Led(065) = &B0000101000000000010000
    Led(066) = &B0000011000000000010000
    Led(067) = &B0000001100000000010000
    Led(068) = &B0000001010000000010000
    Led(069) = &B0000001001000000010000
    Led(070) = &B0000001000100000010000
    Led(071) = &B1000000100000000001000
    Led(072) = &B0100000100000000001000
    Led(073) = &B0010000100000000001000
    Led(074) = &B0001000100000000001000
    Led(075) = &B0000100100000000001000
    Led(076) = &B0000010100000000001000
    Led(077) = &B0000001100000000001000
    Led(078) = &B0000000110000000001000
    Led(079) = &B0000000101000000001000
    Led(080) = &B0000000100100000001000
    Led(081) = &B1000000010000000000100
    Led(082) = &B0100000010000000000100
    Led(083) = &B0010000010000000000100
    Led(084) = &B0001000010000000000100
    Led(085) = &B0000100010000000000100
    Led(086) = &B0000010010000000000100
    Led(087) = &B0000001010000000000100
    Led(088) = &B0000000110000000000100
    Led(089) = &B0000000011000000000100
    Led(090) = &B0000000010100000000100
    Led(091) = &B1000000001000000000010
    Led(092) = &B0100000001000000000010
    Led(093) = &B0010000001000000000010
    Led(094) = &B0001000001000000000010
    Led(095) = &B0000100001000000000010
    Led(096) = &B0000010001000000000010
    Led(097) = &B0000001001000000000010
    Led(098) = &B0000000101000000000010
    Led(099) = &B0000000011000000000010
    Led(100) = &B0000000001100000000010

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Klasse! Ich hoffe, deine Bitmuster stimmen. Nun könnte man mit den Bits jonglieren und sie passgerecht für die Ausgabe an die DDR- und Portregister zurechtstutzen. Aber ich würde das anders angehen.

    Zuerst mal ein paar Gedanken: Bei 100 LED leuchtet jede LED nur 1/100stel der gesamten Bildaufbauzeit. Das wird nicht sehr hell werden. Um das maximale Nachleuchten der LED auszunutzen sollte der Stromimpuls möglichst hoch sein. Die beim Mega88 möglichen 40mA pro Pin sollte man ausnutzen. Möglicherweise wirken sich Bauteilestreuungen bei den LED oder den Widerständen als unterschiedliche Helligkeit aus. Dieser Effekt wäre vermutlich bei Low-Current-Typen noch stärker.

    Um ein flackerfreies Bild zu erhalten sollte es mindestens ca. 15 mal pro Sekunde aufgebaut werden. Mal 100 LED macht das eine LED-Setzrate von ca. 1500Hz. Wichtig ist, dass die Berechnung und das Setzen der DDR- und Portwerte möglichst schnell geht (=wenig Takte dauert) um den Leuchtanteil zu erhöhen.

    Code:
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Portd = Input                    ' alle Pins auf Z-State setzen
    Config Portc = Input
    Portc = 0
    Portd = 0
    
    '( Pinbelegung
    
    Pin1 Alias Portd.2
    Pin2 Alias Portd.3
    Pin3 Alias Portd.4
    Pin4 Alias Portd.5
    Pin5 Alias Portd.6
    Pin6 Alias Portc.0
    Pin7 Alias Portc.1
    Pin8 Alias Portc.2
    Pin9 Alias Portc.3
    Pin10 Alias Portc.4
    Pin11 Alias Portc.5
    ')
    
    '( Aufteilung der Datenbits
    
                DDRC    DDRD  PORTC  PORTD
    Led(001) = &B110000 00000 100000 00000
    Led(002) = &B101000 00000 100000 00000
    Led(003) = &B100100 00000 100000 00000
    Led(004) = &B100010 00000 100000 00000
    Led(005) = &B100001 00000 100000 00000
    Led(006) = &B100000 10000 100000 00000
    Led(007) = &B100000 01000 100000 00000
    Led(008) = &B100000 00100 100000 00000
    Led(009) = &B100000 00010 100000 00000
    Led(010) = &B100000 00001 100000 00000
    ...
    
    Led(091) = &B100000 00010 000000 00010
    Led(092) = &B010000 00010 000000 00010
    Led(093) = &B001000 00010 000000 00010
    Led(094) = &B000100 00010 000000 00010
    Led(095) = &B000010 00010 000000 00010
    Led(096) = &B000001 00010 000000 00010
    Led(097) = &B000000 10010 000000 00010
    Led(098) = &B000000 01010 000000 00010
    Led(099) = &B000000 00110 000000 00010
    Led(100) = &B000000 00011 000000 00010
    ')
    
    '( Inhalt der Databytes
    
    Data_ddrc(LED-Nr)  &Bxx543210 ' x wird durch 0 ersetzt!
    Data_ddrd(LED_Nr)  &Bx65432xx
    Data_portc(LED_Nr) &Bxx543210
    Data_portd(LED_Nr) &Bx65432xx
    ')
    
    Dim Data_ddrc(100) As Byte
    Dim Data_ddrd(100) As Byte
    Dim Data_portc(100) As Byte
    Dim Data_portd(100) As Byte
    
    Dim Temp_ddrc As Byte
    Dim Temp_ddrd As Byte
    Dim Temp_portc As Byte
    Dim Temp_portd As Byte
    
    Dim N As Byte
    
    Gosub Set_data
    
    Do
       For N = 1 To 10
          Temp_ddrc = Ddrc And &B11000000   ' die nicht verwendeten Bits merken
          Temp_ddrd = Ddrd And &B10000011
          Temp_portc = Portc And &B11000000
          Temp_portd = Portd And &B10000011
    
          Ddrc = Temp_ddrc                  ' vorsichtshalber alle Charliepins auf Z-State setzen
          Ddrd = Temp_ddrd                  ' die nicht verwendeten Pins bleiben unberührt
          Portc = Temp_portc                ' (könnte man aus Zeitgründen eventuell weglassen)
          Portd = Temp_portd
    
          Ddrc = Temp_ddrc Or Data_ddrc(n)  ' Charliepins der LED setzen
          Ddrd = Temp_ddrd Or Data_ddrd(n)  ' die nicht verwendeten Pins bleiben unberührt
          Portc = Temp_portc Or Data_portc(n)
          Portd = Temp_portd Or Data_portd(n)
    
          Waitms 500
       Next N
    
       For N = 91 To 100
          Temp_ddrc = Ddrc And &B11000000   ' die nicht verwendeten Bits merken
          Temp_ddrd = Ddrd And &B10000011
          Temp_portc = Portc And &B11000000
          Temp_portd = Portd And &B10000011
    
          Ddrc = Temp_ddrc                  ' vorsichtshalber alle Charliepins auf Z-State setzen
          Ddrd = Temp_ddrd                  ' die nicht verwendeten Pins bleiben unberührt
          Portc = Temp_portc                ' (könnte man aus Zeitgründen eventuell weglassen)
          Portd = Temp_portd
    
          Ddrc = Temp_ddrc Or Data_ddrc(n)  ' Charliepins der LED setzen
          Ddrd = Temp_ddrd Or Data_ddrd(n)  ' die nicht verwendeten Pins bleiben unberührt
          Portc = Temp_portc Or Data_portc(n)
          Portd = Temp_portd Or Data_portd(n)
    
          Waitms 500
       Next N
    
       Wait 1
    Loop
    End
    
    Set_data:
    
    Data_ddrc(001) = &B00110000
    Data_ddrd(001) = &B00000000
    Data_portc(001) = &B00100000
    Data_portd(001) = &B00000000
    
    Data_ddrc(002) = &B00101000
    Data_ddrd(002) = &B00000000
    Data_portc(002) = &B00100000
    Data_portd(002) = &B00000000
    
    Data_ddrc(003) = &B00100100
    Data_ddrd(003) = &B00000000
    Data_portc(003) = &B00100000
    Data_portd(003) = &B00000000
    
    Data_ddrc(004) = &B00100010
    Data_ddrd(004) = &B00000000
    Data_portc(004) = &B00100000
    Data_portd(004) = &B00000000
    
    Data_ddrc(005) = &B00100001
    Data_ddrd(005) = &B00000000
    Data_portc(005) = &B00100000
    Data_portd(005) = &B00000000
    
    Data_ddrc(006) = &B00100000
    Data_ddrd(006) = &B01000000
    Data_portc(006) = &B00100000
    Data_portd(006) = &B00000000
    
    Data_ddrc(007) = &B00100000
    Data_ddrd(007) = &B00100000
    Data_portc(007) = &B00100000
    Data_portd(007) = &B00000000
    
    Data_ddrc(008) = &B00100000
    Data_ddrd(008) = &B00010000
    Data_portc(008) = &B00100000
    Data_portd(008) = &B00000000
    
    Data_ddrc(009) = &B00100000
    Data_ddrd(009) = &B00001000
    Data_portc(009) = &B00100000
    Data_portd(009) = &B00000000
    
    Data_ddrc(010) = &B00100000
    Data_ddrd(010) = &B00000100
    Data_portc(010) = &B00100000
    Data_portd(010) = &B00000000
    
    '...
    
    Data_ddrc(091) = &B00100000
    Data_ddrd(091) = &B00001000
    Data_portc(091) = &B00000000
    Data_portd(091) = &B00001000
    
    Data_ddrc(092) = &B00010000
    Data_ddrd(092) = &B00001000
    Data_portc(092) = &B00000000
    Data_portd(092) = &B00001000
    
    Data_ddrc(093) = &B00001000
    Data_ddrd(093) = &B00001000
    Data_portc(093) = &B00000000
    Data_portd(093) = &B00001000
    
    Data_ddrc(094) = &B00000100
    Data_ddrd(094) = &B00001000
    Data_portc(094) = &B00000000
    Data_portd(094) = &B00001000
    
    Data_ddrc(095) = &B00000010
    Data_ddrd(095) = &B00001000
    Data_portc(095) = &B00000000
    Data_portd(095) = &B00001000
    
    Data_ddrc(096) = &B00000001
    Data_ddrd(096) = &B00001000
    Data_portc(096) = &B00000000
    Data_portd(096) = &B00001000
    
    Data_ddrc(097) = &B00000000
    Data_ddrd(097) = &B01001000
    Data_portc(097) = &B00000000
    Data_portd(097) = &B00001000
    
    Data_ddrc(098) = &B00000000
    Data_ddrd(098) = &B00101000
    Data_portc(098) = &B00000000
    Data_portd(098) = &B00001000
    
    Data_ddrc(099) = &B00000000
    Data_ddrd(099) = &B00011000
    Data_portc(099) = &B00000000
    Data_portd(099) = &B00001000
    
    Data_ddrc(100) = &B00000000
    Data_ddrd(100) = &B00001100
    Data_portc(100) = &B00000000
    Data_portd(100) = &B00001000
    
    Return
    (ungetestet und ohne Gewähr)

    Wie sieht denn dein Aufbau aus?

    Gruß

    mic
    Geändert von radbruch (13.04.2013 um 23:48 Uhr) Grund: 098
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Mit Bildspeicher und Scrollen:
    Code:
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Portd = Input                    ' alle Pins auf Z-State setzen
    Config Portc = Input                    ' (Eingang ohne PullUp)
    Portc = 0
    Portd = 0
    
    '( Pinbelegung
    
    Pin1 Alias Portd.2
    Pin2 Alias Portd.3
    Pin3 Alias Portd.4
    Pin4 Alias Portd.5
    Pin5 Alias Portd.6
    Pin6 Alias Portc.0
    Pin7 Alias Portc.1
    Pin8 Alias Portc.2
    Pin9 Alias Portc.3
    Pin10 Alias Portc.4
    Pin11 Alias Portc.5
    ')
    
    '( Aufteilung der Datenbits
    
                DDRC    DDRD  PORTC  PORTD
    Led(001) = &B110000 00000 100000 00000
    Led(002) = &B101000 00000 100000 00000
    Led(003) = &B100100 00000 100000 00000
    Led(004) = &B100010 00000 100000 00000
    Led(005) = &B100001 00000 100000 00000
    Led(006) = &B100000 10000 100000 00000
    Led(007) = &B100000 01000 100000 00000
    Led(008) = &B100000 00100 100000 00000
    Led(009) = &B100000 00010 100000 00000
    Led(010) = &B100000 00001 100000 00000
    ...
    
    Led(091) = &B100000 00010 000000 00010
    Led(092) = &B010000 00010 000000 00010
    Led(093) = &B001000 00010 000000 00010
    Led(094) = &B000100 00010 000000 00010
    Led(095) = &B000010 00010 000000 00010
    Led(096) = &B000001 00010 000000 00010
    Led(097) = &B000000 10010 000000 00010
    Led(098) = &B000000 01010 000000 00010
    Led(099) = &B000000 00110 000000 00010
    Led(100) = &B000000 00011 000000 00010
    ')
    
    '( Inhalt der Databytes
    
    Data_ddrc(LED-Nr)  &Bxx543210 ' x wird durch 0 ersetzt!
    Data_ddrd(LED_Nr)  &Bx65432xx
    Data_portc(LED_Nr) &Bxx543210
    Data_portd(LED_Nr) &Bx65432xx
    ')
    
    Dim Data_ddrc(100) As Byte
    Dim Data_ddrd(100) As Byte
    Dim Data_portc(100) As Byte
    Dim Data_portd(100) As Byte
    
    Dim Temp_ddrc As Byte
    Dim Temp_ddrd As Byte
    Dim Temp_portc As Byte
    Dim Temp_portd As Byte
    
    Dim Bildspeicher(12) As Word
    
    Dim Bytenr As Byte , Bitnr As Byte , Lednr As Byte
    Dim Zaehler_anzeigen As Word , Zaehler_scrollen As Byte
    Dim Temp As Byte , N As Byte
    
    Declare Sub Set_charliedata
    Declare Sub Set_bildspeicher
    Declare Sub Anzeigen
    Declare Sub Scrollen_links(byval Wiederholen As Byte)
    Declare Sub Scrollen_runter(byval Wiederholen As Byte)
    
    Sub Set_bildspeicher                    ' Bildbereich: x=Word 2-11 y=Bit 10-1 (+ Rand zum Scrollen)
    
    'Bildspeicher(0) = &B109876543210
    Bildspeicher(01) = &B000000000000
    Bildspeicher(02) = &B011111111110
    Bildspeicher(03) = &B010000000010
    Bildspeicher(04) = &B010111000010
    Bildspeicher(05) = &B010100100010
    Bildspeicher(06) = &B010111000010
    Bildspeicher(07) = &B010100100010
    Bildspeicher(08) = &B010100100010
    Bildspeicher(09) = &B010111000010
    Bildspeicher(10) = &B010000000010
    Bildspeicher(11) = &B011111111110
    Bildspeicher(12) = &B000000000000
    End Sub
    
    Do
       Set_bildspeicher                     ' B anzeigen
       For Zaehler_anzeigen = 0 To 10000
          Anzeigen
       Next Zaehler_anzeigen
    
       Set_bildspeicher                     'nach links scrollen mit Umlauf
       For Zaehler_scrollen = 0 To 55
          For Zaehler_anzeigen = 0 To 1000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_links 1
       Next Zaehler_scrollen
    
       Set_bildspeicher                     ' nach links rausschieben
       For Zaehler_scrollen = 0 To 10
          For Zaehler_anzeigen = 0 To 2000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_links 0
       Next Zaehler_scrollen
    
       Set_bildspeicher                     'runterscrollen mit Umlauf
       For Zaehler_scrollen = 0 To 55
          For Zaehler_anzeigen = 0 To 1000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_runter 1
       Next Zaehler_scrollen
    
       Set_bildspeicher                     ' nach unten rausschieben
       For Zaehler_scrollen = 0 To 10
          For Zaehler_anzeigen = 0 To 2000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_runter 0
       Next Zaehler_scrollen
    
    Loop
    End
    
    Sub Anzeigen
       For Bytenr = 2 To 11                 ' sichtbare Bytes im Bildspeicher von oben nach unten
          For Bitnr = 10 To 1 Step -1       ' sichtbare Bits im Bildspeicher von links nach rechts
    
             If Bildspeicher(bytenr).bitnr = 1 Then       ' wenn Bit im Bildspeicher gesetzt dann ausgeben
    
                'LED berechnen:  LED1 oben links, LED10 unten links, LED91 oben rechts, LED100 unten rechts
                Temp = 10 - Bitnr           ' Spalte ist Bit10 - bitnr
                Temp = Temp * 10            ' 10 Leds pro Spalte,
                Lednr = Bytenr - 1          ' LED1 befindet sich in Bildspeicher(2), LED2 in Bildspeicher(3) usw.
                Lednr = Lednr + Temp        ' Spalten + Zeilen
    
                'LED einschalten
                Temp_ddrc = Ddrc And &B11000000       ' die nicht verwendeten Bits merken
                Temp_ddrd = Ddrd And &B10000011
                Temp_portc = Portc And &B11000000
                Temp_portd = Portd And &B10000011
    
                Ddrc = Temp_ddrc            ' vorsichtshalber alle Charliepins auf Z-State setzen
                Ddrd = Temp_ddrd            ' die nicht verwendeten Pins bleiben unberührt
                Portc = Temp_portc          ' (könnte man aus Zeitgründen eventuell weglassen)
                Portd = Temp_portd
    
                Ddrc = Temp_ddrc Or Data_ddrc(lednr)       ' Charliepins der LED setzen
                Ddrd = Temp_ddrd Or Data_ddrd(lednr)       ' die nicht verwendeten Pins bleiben unberührt
                Portc = Temp_portc Or Data_portc(lednr)
                Portd = Temp_portd Or Data_portd(lednr)
             End If
          Next Bitnr
       Next Bytenr
    End Sub
    
    Sub Scrollen_links(byval Wiederholen As Byte)
       For N = 2 To 11
          If Wiederholen = 1 Then
             Bildspeicher(n).0 = Bildspeicher(n).11
          Else
             Bildspeicher(n).0 = 0
          End If
          Bildspeicher(n) = Bildspeicher(n) * 2
       Next N
    End Sub
    
    Sub Scrollen_runter(byval Wiederholen As Byte)
       If Wiederholen = 1 Then
          Bildspeicher(1) = Bildspeicher(12)
       Else
          Bildspeicher(1) = 0
       End If
       For N = 12 To 2 Step -1
          Bildspeicher(n) = Bildspeicher(n - 1)
       Next N
    
    End Sub
    
    Sub Set_charliedata
    
    For N = 1 To 100
       Data_ddrc(n) = 0                     ' Dummywerte setzen
       Data_ddrd(n) = 0
       Data_portc(n) = 0
       Data_portd(n) = 0
    Next N
    
    Data_ddrc(001) = &B00110000             ' echte Werte
    Data_ddrd(001) = &B00000000
    Data_portc(001) = &B00100000
    Data_portd(001) = &B00000000
    
    Data_ddrc(002) = &B00101000
    Data_ddrd(002) = &B00000000
    Data_portc(002) = &B00100000
    Data_portd(002) = &B00000000
    
    Data_ddrc(003) = &B00100100
    Data_ddrd(003) = &B00000000
    Data_portc(003) = &B00100000
    Data_portd(003) = &B00000000
    
    Data_ddrc(004) = &B00100010
    Data_ddrd(004) = &B00000000
    Data_portc(004) = &B00100000
    Data_portd(004) = &B00000000
    
    Data_ddrc(005) = &B00100001
    Data_ddrd(005) = &B00000000
    Data_portc(005) = &B00100000
    Data_portd(005) = &B00000000
    
    Data_ddrc(006) = &B00100000
    Data_ddrd(006) = &B01000000
    Data_portc(006) = &B00100000
    Data_portd(006) = &B00000000
    
    Data_ddrc(007) = &B00100000
    Data_ddrd(007) = &B00100000
    Data_portc(007) = &B00100000
    Data_portd(007) = &B00000000
    
    Data_ddrc(008) = &B00100000
    Data_ddrd(008) = &B00010000
    Data_portc(008) = &B00100000
    Data_portd(008) = &B00000000
    
    Data_ddrc(009) = &B00100000
    Data_ddrd(009) = &B00001000
    Data_portc(009) = &B00100000
    Data_portd(009) = &B00000000
    
    Data_ddrc(010) = &B00100000
    Data_ddrd(010) = &B00000100
    Data_portc(010) = &B00100000
    Data_portd(010) = &B00000000
    
    '...
    
    Data_ddrc(091) = &B00100000
    Data_ddrd(091) = &B00001000
    Data_portc(091) = &B00000000
    Data_portd(091) = &B00001000
    
    Data_ddrc(092) = &B00010000
    Data_ddrd(092) = &B00001000
    Data_portc(092) = &B00000000
    Data_portd(092) = &B00001000
    
    Data_ddrc(093) = &B00001000
    Data_ddrd(093) = &B00001000
    Data_portc(093) = &B00000000
    Data_portd(093) = &B00001000
    
    Data_ddrc(094) = &B00000100
    Data_ddrd(094) = &B00001000
    Data_portc(094) = &B00000000
    Data_portd(094) = &B00001000
    
    Data_ddrc(095) = &B00000010
    Data_ddrd(095) = &B00001000
    Data_portc(095) = &B00000000
    Data_portd(095) = &B00001000
    
    Data_ddrc(096) = &B00000001
    Data_ddrd(096) = &B00001000
    Data_portc(096) = &B00000000
    Data_portd(096) = &B00001000
    
    Data_ddrc(097) = &B00000000
    Data_ddrd(097) = &B01001000
    Data_portc(097) = &B00000000
    Data_portd(097) = &B00001000
    
    Data_ddrc(098) = &B00000000
    Data_ddrd(098) = &B00101000
    Data_portc(098) = &B00000000
    Data_portd(098) = &B00001000
    
    Data_ddrc(099) = &B00000000
    Data_ddrd(099) = &B00011000
    Data_portc(099) = &B00000000
    Data_portd(099) = &B00001000
    
    Data_ddrc(100) = &B00000000
    Data_ddrd(100) = &B00001100
    Data_portc(100) = &B00000000
    Data_portd(100) = &B00001000
    
    End Sub
    Keine Ahnung, ob das funktioniert. Es sind nur die Charliemuster für Led1 bis 10 und Led91 bis 100 eingetragen. Die LEDS habe ich mal so angenommen:

    LED1 oben links
    LED10 unten links
    LED91 oben rechts
    LED100 unten rechts

    Das Timing ist Bauchgefühl. Es werden nur LED ausgegeben die gesetzt sind!

    Gruß

    mic
    Geändert von radbruch (14.04.2013 um 10:12 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Zitat Zitat von radbruch Beitrag anzeigen
    Wie sieht denn dein Aufbau aus?
    Bild hier  

    Zitat Zitat von radbruch Beitrag anzeigen
    Die LEDS habe ich mal so angenommen:
    LED1 oben links
    LED10 unten links
    LED91 oben rechts
    LED100 unten rechts
    LED1 oben rechts
    LED10 unten rechts
    LED91 oben links
    LED100 unten links

    Vielen dank fur die code aber er ist zu groß:
    Bild hier  

    Code:
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Portd = Input                    ' alle Pins auf Z-State setzen
    Config Portc = Input                    ' (Eingang ohne PullUp)
    Portc = 0
    Portd = 0
    
    '( Pinbelegung
    
    Pin1 Alias Portd.2
    Pin2 Alias Portd.3
    Pin3 Alias Portd.4
    Pin4 Alias Portd.5
    Pin5 Alias Portd.6
    Pin6 Alias Portc.0
    Pin7 Alias Portc.1
    Pin8 Alias Portc.2
    Pin9 Alias Portc.3
    Pin10 Alias Portc.4
    Pin11 Alias Portc.5
    ')
    
    '( Aufteilung der Datenbits
    
                DDRD   DDRC   PORTD PORTC
    Led(001) = &B11000 000000 10000 000000
    Led(002) = &B10100 000000 10000 000000
    Led(003) = &B10010 000000 10000 000000
    Led(004) = &B10001 000000 10000 000000
    Led(005) = &B10000 100000 10000 000000
    Led(006) = &B10000 010000 10000 000000
    Led(007) = &B10000 001000 10000 000000
    Led(008) = &B10000 000100 10000 000000
    Led(009) = &B10000 000010 10000 000000
    Led(010) = &B10000 000001 10000 000000
    Led(011) = &B11000 000000 01000 000000
    Led(012) = &B01100 000000 01000 000000
    Led(013) = &B01010 000000 01000 000000
    Led(014) = &B01001 000000 01000 000000
    Led(015) = &B01000 100000 01000 000000
    Led(016) = &B01000 010000 01000 000000
    Led(017) = &B01000 001000 01000 000000
    Led(018) = &B01000 000100 01000 000000
    Led(019) = &B01000 000010 01000 000000
    Led(020) = &B01000 000001 01000 000000
    Led(021) = &B10100 000000 00100 000000
    Led(022) = &B01100 000000 00100 000000
    Led(023) = &B00110 000000 00100 000000
    Led(024) = &B00101 000000 00100 000000
    Led(025) = &B00100 100000 00100 000000
    Led(026) = &B00100 010000 00100 000000
    Led(027) = &B00100 001000 00100 000000
    Led(028) = &B00100 000100 00100 000000
    Led(029) = &B00100 000010 00100 000000
    Led(030) = &B00100 000001 00100 000000
    Led(031) = &B10010 000000 00010 000000
    Led(032) = &B01010 000000 00010 000000
    Led(033) = &B00110 000000 00010 000000
    Led(034) = &B00011 000000 00010 000000
    Led(035) = &B00010 100000 00010 000000
    Led(036) = &B00010 010000 00010 000000
    Led(037) = &B00010 001000 00010 000000
    Led(038) = &B00010 000100 00010 000000
    Led(039) = &B00010 000010 00010 000000
    Led(040) = &B00010 000001 00010 000000
    Led(041) = &B10001 000000 00001 000000
    Led(042) = &B01001 000000 00001 000000
    Led(043) = &B00101 000000 00001 000000
    Led(044) = &B00011 000000 00001 000000
    Led(045) = &B00001 100000 00001 000000
    Led(046) = &B00001 010000 00001 000000
    Led(047) = &B00001 001000 00001 000000
    Led(048) = &B00001 000100 00001 000000
    Led(049) = &B00001 000010 00001 000000
    Led(050) = &B00001 000001 00001 000000
    Led(051) = &B10000 100000 00000 100000
    Led(052) = &B01000 100000 00000 100000
    Led(053) = &B00100 100000 00000 100000
    Led(054) = &B00010 100000 00000 100000
    Led(055) = &B00001 100000 00000 100000
    Led(056) = &B00000 110000 00000 100000
    Led(057) = &B00000 101000 00000 100000
    Led(058) = &B00000 100100 00000 100000
    Led(059) = &B00000 100010 00000 100000
    Led(060) = &B00000 100001 00000 100000
    Led(061) = &B10000 010000 00000 010000
    Led(062) = &B01000 010000 00000 010000
    Led(063) = &B00100 010000 00000 010000
    Led(064) = &B00010 010000 00000 010000
    Led(065) = &B00001 010000 00000 010000
    Led(066) = &B00000 110000 00000 010000
    Led(067) = &B00000 011000 00000 010000
    Led(068) = &B00000 010100 00000 010000
    Led(069) = &B00000 010010 00000 010000
    Led(070) = &B00000 010001 00000 010000
    Led(071) = &B10000 001000 00000 001000
    Led(072) = &B01000 001000 00000 001000
    Led(073) = &B00100 001000 00000 001000
    Led(074) = &B00010 001000 00000 001000
    Led(075) = &B00001 001000 00000 001000
    Led(076) = &B00000 101000 00000 001000
    Led(077) = &B00000 011000 00000 001000
    Led(078) = &B00000 001100 00000 001000
    Led(079) = &B00000 001010 00000 001000
    Led(080) = &B00000 001001 00000 001000
    Led(081) = &B10000 000100 00000 000100
    Led(082) = &B01000 000100 00000 000100
    Led(083) = &B00100 000100 00000 000100
    Led(084) = &B00010 000100 00000 000100
    Led(085) = &B00001 000100 00000 000100
    Led(086) = &B00000 100100 00000 000100
    Led(087) = &B00000 010100 00000 000100
    Led(088) = &B00000 001100 00000 000100
    Led(089) = &B00000 000110 00000 000100
    Led(090) = &B00000 000101 00000 000100
    Led(091) = &B10000 000010 00000 000010
    Led(092) = &B01000 000010 00000 000010
    Led(093) = &B00100 000010 00000 000010
    Led(094) = &B00010 000010 00000 000010
    Led(095) = &B00001 000010 00000 000010
    Led(096) = &B00000 100010 00000 000010
    Led(097) = &B00000 010010 00000 000010
    Led(098) = &B00000 001010 00000 000010
    Led(099) = &B00000 000110 00000 000010
    Led(100) = &B00000 000011 00000 000010
    ')
    
    '( Inhalt der Databytes
    
    Data_ddrd(LED_Nr)  &Bx65432xx ' x wird durch 0 ersetzt!
    Data_ddrc(LED-Nr)  &Bxx543210
    Data_portd(LED_Nr) &Bx65432xx
    Data_portc(LED_Nr) &Bxx543210
    
    ')
    
    Dim Data_ddrd(100) As Byte
    Dim Data_ddrc(100) As Byte
    Dim Data_portd(100) As Byte
    Dim Data_portc(100) As Byte
    
    Dim Temp_ddrd As Byte
    Dim Temp_ddrc As Byte
    Dim Temp_portd As Byte
    Dim Temp_portc As Byte
    
    Dim Bildspeicher(12) As Word
    
    Dim Bytenr As Byte , Bitnr As Byte , Lednr As Byte
    Dim Zaehler_anzeigen As Word , Zaehler_scrollen As Byte
    Dim Temp As Byte , N As Byte
    
    Declare Sub Set_charliedata
    Declare Sub Set_bildspeicher
    Declare Sub Anzeigen
    Declare Sub Scrollen_links(byval Wiederholen As Byte)
    Declare Sub Scrollen_runter(byval Wiederholen As Byte)
    
    Sub Set_bildspeicher                    ' Bildbereich: x=Word 2-11 y=Bit 10-1 (+ Rand zum Scrollen)
    
    'Bildspeicher(0) = &B109876543210
    Bildspeicher(01) = &B000000000000
    Bildspeicher(02) = &B011111111110
    Bildspeicher(03) = &B010000000010
    Bildspeicher(04) = &B010111000010
    Bildspeicher(05) = &B010100100010
    Bildspeicher(06) = &B010111000010
    Bildspeicher(07) = &B010100100010
    Bildspeicher(08) = &B010100100010
    Bildspeicher(09) = &B010111000010
    Bildspeicher(10) = &B010000000010
    Bildspeicher(11) = &B011111111110
    Bildspeicher(12) = &B000000000000
    End Sub
    
    Do
       Set_bildspeicher                     ' B anzeigen
       For Zaehler_anzeigen = 0 To 10000
          Anzeigen
       Next Zaehler_anzeigen
    
       Set_bildspeicher                     'nach links scrollen mit Umlauf
       For Zaehler_scrollen = 0 To 55
          For Zaehler_anzeigen = 0 To 1000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_links 1
       Next Zaehler_scrollen
    
       Set_bildspeicher                     ' nach links rausschieben
       For Zaehler_scrollen = 0 To 10
          For Zaehler_anzeigen = 0 To 2000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_links 0
       Next Zaehler_scrollen
    
       Set_bildspeicher                     'runterscrollen mit Umlauf
       For Zaehler_scrollen = 0 To 55
          For Zaehler_anzeigen = 0 To 1000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_runter 1
       Next Zaehler_scrollen
    
       Set_bildspeicher                     ' nach unten rausschieben
       For Zaehler_scrollen = 0 To 10
          For Zaehler_anzeigen = 0 To 2000
             Anzeigen
          Next Zaehler_anzeigen
          Scrollen_runter 0
       Next Zaehler_scrollen
    
    Loop
    End
    
    Sub Anzeigen
       For Bytenr = 2 To 11                 ' sichtbare Bytes im Bildspeicher von oben nach unten
          For Bitnr = 10 To 1 Step -1       ' sichtbare Bits im Bildspeicher von links nach rechts
    
             If Bildspeicher(bytenr).bitnr = 1 Then       ' wenn Bit im Bildspeicher gesetzt dann ausgeben
    
                'LED berechnen:  LED1 oben links, LED10 unten links, LED91 oben rechts, LED100 unten rechts
                Temp = 10 - Bitnr           ' Spalte ist Bit10 - bitnr
                Temp = Temp * 10            ' 10 Leds pro Spalte,
                Lednr = Bytenr - 1          ' LED1 befindet sich in Bildspeicher(2), LED2 in Bildspeicher(3) usw.
                Lednr = Lednr + Temp        ' Spalten + Zeilen
    
                'LED einschalten
                  Temp_ddrc = Ddrd And &B11000000               ' die nicht verwendeten Bits merken
                  Temp_ddrd = Ddrc And &B10000011
                Temp_portc = Portd And &B11000000
                Temp_portd = Portc And &B10000011
    
                  Ddrd = Temp_ddrd                              ' vorsichtshalber alle Charliepins auf Z-State setzen
                  Ddrc = Temp_ddrc                              ' die nicht verwendeten Pins bleiben unberührt
                Portd = Temp_portd                              ' (könnte man aus Zeitgründen eventuell weglassen)
                Portc = Temp_portc
    
                  Ddrd = Temp_ddrd Or Data_ddrd(lednr)          ' Charliepins der LED setzen
                  Ddrc = Temp_ddrc Or Data_ddrc(lednr)          ' die nicht verwendeten Pins bleiben unberührt
                Portd = Temp_portd Or Data_portd(lednr)
                Portc = Temp_portc Or Data_portc(lednr)
             End If
          Next Bitnr
       Next Bytenr
    End Sub
    
    Sub Scrollen_links(byval Wiederholen As Byte)
       For N = 2 To 11
          If Wiederholen = 1 Then
             Bildspeicher(n).0 = Bildspeicher(n).11
          Else
             Bildspeicher(n).0 = 0
          End If
          Bildspeicher(n) = Bildspeicher(n) * 2
       Next N
    End Sub
    
    Sub Scrollen_runter(byval Wiederholen As Byte)
       If Wiederholen = 1 Then
          Bildspeicher(1) = Bildspeicher(12)
       Else
          Bildspeicher(1) = 0
       End If
       For N = 12 To 2 Step -1
          Bildspeicher(n) = Bildspeicher(n - 1)
       Next N
    
    End Sub
    
    Sub Set_charliedata
    
    For N = 1 To 100
       Data_ddrd(n) = 0                                         ' Dummywerte setzen
       Data_ddrc(n) = 0
       Data_portd(n) = 0
       Data_portc(n) = 0
    Next N
    
     Data_ddrd(001) = &B00110000
     Data_ddrc(001) = &B00000000
    Data_portd(001) = &B00100000
    Data_portc(001) = &B00000000
    
     Data_ddrd(002) = &B00101000
     Data_ddrc(002) = &B00000000
    Data_portd(002) = &B00100000
    Data_portc(002) = &B00000000
    
     Data_ddrd(003) = &B00100100
     Data_ddrc(003) = &B00000000
    Data_portd(003) = &B00100000
    Data_portc(003) = &B00000000
    
     Data_ddrd(004) = &B00100010
     Data_ddrc(004) = &B00000000
    Data_portd(004) = &B00100000
    Data_portc(004) = &B00000000
    
     Data_ddrd(005) = &B00100001
     Data_ddrc(005) = &B10000000
    Data_portd(005) = &B00100000
    Data_portc(005) = &B00000000
    
     Data_ddrd(006) = &B00100000
     Data_ddrc(006) = &B01000000
    Data_portd(006) = &B00100000
    Data_portc(006) = &B00000000
    
     Data_ddrd(007) = &B00100000
     Data_ddrc(007) = &B00100000
    Data_portd(007) = &B00100000
    Data_portc(007) = &B00000000
    
     Data_ddrd(008) = &B00100000
     Data_ddrc(008) = &B00010000
    Data_portd(008) = &B00100000
    Data_portc(008) = &B00000000
    
     Data_ddrd(009) = &B00100000
     Data_ddrc(009) = &B00001000
    Data_portd(009) = &B00100000
    Data_portc(009) = &B00000000
    
     Data_ddrd(010) = &B00100000
     Data_ddrc(010) = &B00000100
    Data_portd(010) = &B00100000
    Data_portc(010) = &B00000000
    
     Data_ddrd(011) = &B00110000
     Data_ddrc(011) = &B00000000
    Data_portd(011) = &B00010000
    Data_portc(011) = &B00000000
    
     Data_ddrd(012) = &B00011000
     Data_ddrc(012) = &B00000000
    Data_portd(012) = &B00010000
    Data_portc(012) = &B00000000
    
     Data_ddrd(013) = &B00010100
     Data_ddrc(013) = &B00000000
    Data_portd(013) = &B00010000
    Data_portc(013) = &B00000000
    
     Data_ddrd(014) = &B00010010
     Data_ddrc(014) = &B00000000
    Data_portd(014) = &B00010000
    Data_portc(014) = &B00000000
    
     Data_ddrd(015) = &B00010000
     Data_ddrc(015) = &B10000000
    Data_portd(015) = &B00010000
    Data_portc(015) = &B00000000
    
     Data_ddrd(016) = &B00010000
     Data_ddrc(016) = &B01000000
    Data_portd(016) = &B00010000
    Data_portc(016) = &B00000000
    
     Data_ddrd(017) = &B00010000
     Data_ddrc(017) = &B00100000
    Data_portd(017) = &B00010000
    Data_portc(017) = &B00000000
    
     Data_ddrd(018) = &B00010000
     Data_ddrc(018) = &B00010000
    Data_portd(018) = &B00010000
    Data_portc(018) = &B00000000
    
     Data_ddrd(019) = &B00010000
     Data_ddrc(019) = &B00001000
    Data_portd(019) = &B00010000
    Data_portc(019) = &B00000000
    
     Data_ddrd(020) = &B00010000
     Data_ddrc(020) = &B00000100
    Data_portd(020) = &B00010000
    Data_portc(020) = &B00000000
    
     Data_ddrd(021) = &B00101000
     Data_ddrc(021) = &B00000000
    Data_portd(021) = &B00001000
    Data_portc(021) = &B00000000
    
     Data_ddrd(022) = &B00011000
     Data_ddrc(022) = &B00000000
    Data_portd(022) = &B00001000
    Data_portc(022) = &B00000000
    
     Data_ddrd(023) = &B00001100
     Data_ddrc(023) = &B00000000
    Data_portd(023) = &B00001000
    Data_portc(023) = &B00000000
    
     Data_ddrd(024) = &B00001010
     Data_ddrc(024) = &B00000000
    Data_portd(024) = &B00001000
    Data_portc(024) = &B00000000
    
     Data_ddrd(025) = &B00001000
     Data_ddrc(025) = &B10000000
    Data_portd(025) = &B00001000
    Data_portc(025) = &B00000000
    
     Data_ddrd(026) = &B00001000
     Data_ddrc(026) = &B01000000
    Data_portd(026) = &B00001000
    Data_portc(026) = &B00000000
    
     Data_ddrd(027) = &B00001000
     Data_ddrc(027) = &B00100000
    Data_portd(027) = &B00001000
    Data_portc(027) = &B00000000
    
     Data_ddrd(028) = &B00001000
     Data_ddrc(028) = &B00010000
    Data_portd(028) = &B00001000
    Data_portc(028) = &B00000000
    
     Data_ddrd(029) = &B00001000
     Data_ddrc(029) = &B00001000
    Data_portd(029) = &B00001000
    Data_portc(029) = &B00000000
    
     Data_ddrd(030) = &B00001000
     Data_ddrc(030) = &B00000100
    Data_portd(030) = &B00001000
    Data_portc(030) = &B00000000
    
     Data_ddrd(031) = &B00100100
     Data_ddrc(031) = &B00000000
    Data_portd(031) = &B00000100
    Data_portc(031) = &B00000000
    
     Data_ddrd(032) = &B00010100
     Data_ddrc(032) = &B00000000
    Data_portd(032) = &B00000100
    Data_portc(032) = &B00000000
    
     Data_ddrd(033) = &B00001100
     Data_ddrc(033) = &B00000000
    Data_portd(033) = &B00000100
    Data_portc(033) = &B00000000
    
     Data_ddrd(034) = &B00000110
     Data_ddrc(034) = &B00000000
    Data_portd(034) = &B00000100
    Data_portc(034) = &B00000000
    
     Data_ddrd(035) = &B00000100
     Data_ddrc(035) = &B10000000
    Data_portd(035) = &B00000100
    Data_portc(035) = &B00000000
    
     Data_ddrd(036) = &B00000100
     Data_ddrc(036) = &B01000000
    Data_portd(036) = &B00000100
    Data_portc(036) = &B00000000
    
     Data_ddrd(037) = &B00000100
     Data_ddrc(037) = &B00100000
    Data_portd(037) = &B00000100
    Data_portc(037) = &B00000000
    
     Data_ddrd(038) = &B00000100
     Data_ddrc(038) = &B00010000
    Data_portd(038) = &B00000100
    Data_portc(038) = &B00000000
    
     Data_ddrd(039) = &B00000100
     Data_ddrc(039) = &B00001000
    Data_portd(039) = &B00000100
    Data_portc(039) = &B00000000
    
     Data_ddrd(040) = &B00000100
     Data_ddrc(040) = &B00000100
    Data_portd(040) = &B00000100
    Data_portc(040) = &B00000000
    
     Data_ddrd(041) = &B00100010
     Data_ddrc(041) = &B00000000
    Data_portd(041) = &B00000010
    Data_portc(041) = &B00000000
    
     Data_ddrd(042) = &B00010010
     Data_ddrc(042) = &B00000000
    Data_portd(042) = &B00000010
    Data_portc(042) = &B00000000
    
     Data_ddrd(043) = &B00001010
     Data_ddrc(043) = &B00000000
    Data_portd(043) = &B00000010
    Data_portc(043) = &B00000000
    
     Data_ddrd(044) = &B00000110
     Data_ddrc(044) = &B00000000
    Data_portd(044) = &B00000010
    Data_portc(044) = &B00000000
    
     Data_ddrd(045) = &B00000010
     Data_ddrc(045) = &B10000000
    Data_portd(045) = &B00000010
    Data_portc(045) = &B00000000
    
     Data_ddrd(046) = &B00000010
     Data_ddrc(046) = &B01000000
    Data_portd(046) = &B00000010
    Data_portc(046) = &B00000000
    
     Data_ddrd(047) = &B00000010
     Data_ddrc(047) = &B00100000
    Data_portd(047) = &B00000010
    Data_portc(047) = &B00000000
    
     Data_ddrd(048) = &B00000010
     Data_ddrc(048) = &B00010000
    Data_portd(048) = &B00000010
    Data_portc(048) = &B00000000
    
     Data_ddrd(049) = &B00000010
     Data_ddrc(049) = &B00001000
    Data_portd(049) = &B00000010
    Data_portc(049) = &B00000000
    
     Data_ddrd(050) = &B00000010
     Data_ddrc(050) = &B00000100
    Data_portd(050) = &B00000010
    Data_portc(050) = &B00000000
    
     Data_ddrd(051) = &B00100000
     Data_ddrc(051) = &B10000000
    Data_portd(051) = &B00000000
    Data_portc(051) = &B10000000
    
     Data_ddrd(052) = &B00010000
     Data_ddrc(052) = &B10000000
    Data_portd(052) = &B00000000
    Data_portc(052) = &B10000000
    
     Data_ddrd(053) = &B00001000
     Data_ddrc(053) = &B10000000
    Data_portd(053) = &B00000000
    Data_portc(053) = &B10000000
    
     Data_ddrd(054) = &B00000100
     Data_ddrc(054) = &B10000000
    Data_portd(054) = &B00000000
    Data_portc(054) = &B10000000
    
     Data_ddrd(055) = &B00000010
     Data_ddrc(055) = &B10000000
    Data_portd(055) = &B00000000
    Data_portc(055) = &B10000000
    
     Data_ddrd(056) = &B00000000
     Data_ddrc(056) = &B11000000
    Data_portd(056) = &B00000000
    Data_portc(056) = &B10000000
    
     Data_ddrd(057) = &B00000000
     Data_ddrc(057) = &B10100000
    Data_portd(057) = &B00000000
    Data_portc(057) = &B10000000
    
     Data_ddrd(058) = &B00000000
     Data_ddrc(058) = &B10010000
    Data_portd(058) = &B00000000
    Data_portc(058) = &B10000000
    
     Data_ddrd(059) = &B00000000
     Data_ddrc(059) = &B10001000
    Data_portd(059) = &B00000000
    Data_portc(059) = &B10000000
    
     Data_ddrd(060) = &B00000000
     Data_ddrc(060) = &B10000100
    Data_portd(060) = &B00000000
    Data_portc(060) = &B10000000
    
     Data_ddrd(061) = &B00100000
     Data_ddrc(061) = &B01000000
    Data_portd(061) = &B00000000
    Data_portc(061) = &B01000000
    
     Data_ddrd(062) = &B00010000
     Data_ddrc(062) = &B01000000
    Data_portd(062) = &B00000000
    Data_portc(062) = &B01000000
    
     Data_ddrd(063) = &B00001000
     Data_ddrc(063) = &B01000000
    Data_portd(063) = &B00000000
    Data_portc(063) = &B01000000
    
     Data_ddrd(064) = &B00000100
     Data_ddrc(064) = &B01000000
    Data_portd(064) = &B00000000
    Data_portc(064) = &B01000000
    
     Data_ddrd(065) = &B00000010
     Data_ddrc(065) = &B01000000
    Data_portd(065) = &B00000000
    Data_portc(065) = &B01000000
    
     Data_ddrd(066) = &B00000000
     Data_ddrc(066) = &B11000000
    Data_portd(066) = &B00000000
    Data_portc(066) = &B01000000
    
     Data_ddrd(067) = &B00000000
     Data_ddrc(067) = &B01100000
    Data_portd(067) = &B00000000
    Data_portc(067) = &B01000000
    
     Data_ddrd(068) = &B00000000
     Data_ddrc(068) = &B01010000
    Data_portd(068) = &B00000000
    Data_portc(068) = &B01000000
    
     Data_ddrd(069) = &B00000000
     Data_ddrc(069) = &B01001000
    Data_portd(069) = &B00000000
    Data_portc(069) = &B01000000
    
     Data_ddrd(070) = &B00000000
     Data_ddrc(070) = &B01000100
    Data_portd(070) = &B00000000
    Data_portc(070) = &B01000000
    
     Data_ddrd(071) = &B00100000
     Data_ddrc(071) = &B00100000
    Data_portd(071) = &B00000000
    Data_portc(071) = &B00100000
    
     Data_ddrd(072) = &B00010000
     Data_ddrc(072) = &B00100000
    Data_portd(072) = &B00000000
    Data_portc(072) = &B00100000
    
     Data_ddrd(073) = &B00001000
     Data_ddrc(073) = &B00100000
    Data_portd(073) = &B00000000
    Data_portc(073) = &B00100000
    
     Data_ddrd(074) = &B00000100
     Data_ddrc(074) = &B00100000
    Data_portd(074) = &B00000000
    Data_portc(074) = &B00100000
    
     Data_ddrd(075) = &B00000010
     Data_ddrc(075) = &B00100000
    Data_portd(075) = &B00000000
    Data_portc(075) = &B00100000
    
     Data_ddrd(076) = &B00000000
     Data_ddrc(076) = &B10100000
    Data_portd(076) = &B00000000
    Data_portc(076) = &B00100000
    
     Data_ddrd(077) = &B00000000
     Data_ddrc(077) = &B01100000
    Data_portd(077) = &B00000000
    Data_portc(077) = &B00100000
    
     Data_ddrd(078) = &B00000000
     Data_ddrc(078) = &B00110000
    Data_portd(078) = &B00000000
    Data_portc(078) = &B00100000
    
     Data_ddrd(079) = &B00000000
     Data_ddrc(079) = &B00101000
    Data_portd(079) = &B00000000
    Data_portc(079) = &B00100000
    
     Data_ddrd(080) = &B00000000
     Data_ddrc(080) = &B00100100
    Data_portd(080) = &B00000000
    Data_portc(080) = &B00100000
    
     Data_ddrd(081) = &B00100000
     Data_ddrc(081) = &B00010000
    Data_portd(081) = &B00000000
    Data_portc(081) = &B00010000
    
     Data_ddrd(082) = &B00010000
     Data_ddrc(082) = &B00010000
    Data_portd(082) = &B00000000
    Data_portc(082) = &B00010000
    
     Data_ddrd(083) = &B00001000
     Data_ddrc(083) = &B00010000
    Data_portd(083) = &B00000000
    Data_portc(083) = &B00010000
    
     Data_ddrd(084) = &B00000100
     Data_ddrc(084) = &B00010000
    Data_portd(084) = &B00000000
    Data_portc(084) = &B00010000
    
     Data_ddrd(085) = &B00000010
     Data_ddrc(085) = &B00010000
    Data_portd(085) = &B00000000
    Data_portc(085) = &B00010000
    
     Data_ddrd(086) = &B00000000
     Data_ddrc(086) = &B10010000
    Data_portd(086) = &B00000000
    Data_portc(086) = &B00010000
    
     Data_ddrd(087) = &B00000000
     Data_ddrc(087) = &B01010000
    Data_portd(087) = &B00000000
    Data_portc(087) = &B00010000
    
     Data_ddrd(088) = &B00000000
     Data_ddrc(088) = &B00110000
    Data_portd(088) = &B00000000
    Data_portc(088) = &B00010000
    
     Data_ddrd(089) = &B00000000
     Data_ddrc(089) = &B00011000
    Data_portd(089) = &B00000000
    Data_portc(089) = &B00010000
    
     Data_ddrd(090) = &B00000000
     Data_ddrc(090) = &B00010100
    Data_portd(090) = &B00000000
    Data_portc(090) = &B00010000
    
     Data_ddrd(091) = &B00100000
     Data_ddrc(091) = &B00001000
    Data_portd(091) = &B00000000
    Data_portc(091) = &B00001000
    
     Data_ddrd(092) = &B00010000
     Data_ddrc(092) = &B00001000
    Data_portd(092) = &B00000000
    Data_portc(092) = &B00001000
    
     Data_ddrd(093) = &B00001000
     Data_ddrc(093) = &B00001000
    Data_portd(093) = &B00000000
    Data_portc(093) = &B00001000
    
     Data_ddrd(094) = &B00000100
     Data_ddrc(094) = &B00001000
    Data_portd(094) = &B00000000
    Data_portc(094) = &B00001000
    
     Data_ddrd(095) = &B00000010
     Data_ddrc(095) = &B00001000
    Data_portd(095) = &B00000000
    Data_portc(095) = &B00001000
    
     Data_ddrd(096) = &B00000000
     Data_ddrc(096) = &B10001000
    Data_portd(096) = &B00000000
    Data_portc(096) = &B00001000
    
     Data_ddrd(097) = &B00000000
     Data_ddrc(097) = &B01001000
    Data_portd(097) = &B00000000
    Data_portc(097) = &B00001000
    
     Data_ddrd(098) = &B00000000
     Data_ddrc(098) = &B00101000
    Data_portd(098) = &B00000000
    Data_portc(098) = &B00001000
    
     Data_ddrd(099) = &B00000000
     Data_ddrc(099) = &B00011000
    Data_portd(099) = &B00000000
    Data_portc(099) = &B00001000
    
     Data_ddrd(100) = &B00000000
     Data_ddrc(100) = &B00001100
    Data_portd(100) = &B00000000
    Data_portc(100) = &B00001000
    
    End Sub
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2013-04-14 13.26.49.jpg   2013-04-14 13.27.09.jpg   overload.jpg   printplaat.png   waarheidstabel.jpg  


  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Wirklich hübsch.

    Da ich immer dachte, Charlieplexing mit 100 LED ist zu dunkel, habe ich das nie richtig überdacht. Weil du aber nur ein paar LED für einen Buchstaben anzeigen willst, sieht das ganz anders aus.

    Nachdem die Tabellen eine Sackgasse waren (meine Demoversion 1.11.9.8 konnte deine Version mit "Flash used: 50%" übersetzen) nun mein nächster Ansatz, die Charliepins werden in Echtzeit (hoffentlich richtig) berechnet:

    Code:
        $regfile = "m88def.dat"
        $crystal = 8000000
        $baud = 19200
    
        Config Portd = Input                    ' alle Pins auf Z-State setzen
        Config Portc = Input                    ' (Eingang ohne PullUp)
        Portc = 0
        Portd = 0
    
        '( Pinbelegung
    
        Pin1 Alias Portd.2
        Pin2 Alias Portd.3
        Pin3 Alias Portd.4
        Pin4 Alias Portd.5
        Pin5 Alias Portd.6
        Pin6 Alias Portc.0
        Pin7 Alias Portc.1
        Pin8 Alias Portc.2
        Pin9 Alias Portc.3
        Pin10 Alias Portc.4
        Pin11 Alias Portc.5
        ')
    
    '( Aufteilung der Datenbits
    
                    DDRD   DDRC   PORTD PORTC
        Led(001) = &B11000 000000 10000 000000
        Led(002) = &B10100 000000 10000 000000
        Led(003) = &B10010 000000 10000 000000
        Led(004) = &B10001 000000 10000 000000
        Led(005) = &B10000 100000 10000 000000
        Led(006) = &B10000 010000 10000 000000
        Led(007) = &B10000 001000 10000 000000
        Led(008) = &B10000 000100 10000 000000
        Led(009) = &B10000 000010 10000 000000
        Led(010) = &B10000 000001 10000 000000
        Led(011) = &B11000 000000 01000 000000
        Led(012) = &B01100 000000 01000 000000
        Led(013) = &B01010 000000 01000 000000
        Led(014) = &B01001 000000 01000 000000
        Led(015) = &B01000 100000 01000 000000
        Led(016) = &B01000 010000 01000 000000
        Led(017) = &B01000 001000 01000 000000
        Led(018) = &B01000 000100 01000 000000
        Led(019) = &B01000 000010 01000 000000
        Led(020) = &B01000 000001 01000 000000
        Led(021) = &B10100 000000 00100 000000
        Led(022) = &B01100 000000 00100 000000
        Led(023) = &B00110 000000 00100 000000
        Led(024) = &B00101 000000 00100 000000
        Led(025) = &B00100 100000 00100 000000
        Led(026) = &B00100 010000 00100 000000
        Led(027) = &B00100 001000 00100 000000
        Led(028) = &B00100 000100 00100 000000
        Led(029) = &B00100 000010 00100 000000
        Led(030) = &B00100 000001 00100 000000
        Led(031) = &B10010 000000 00010 000000
        Led(032) = &B01010 000000 00010 000000
        Led(033) = &B00110 000000 00010 000000
        Led(034) = &B00011 000000 00010 000000
        Led(035) = &B00010 100000 00010 000000
        Led(036) = &B00010 010000 00010 000000
        Led(037) = &B00010 001000 00010 000000
        Led(038) = &B00010 000100 00010 000000
        Led(039) = &B00010 000010 00010 000000
        Led(040) = &B00010 000001 00010 000000
        Led(041) = &B10001 000000 00001 000000
        Led(042) = &B01001 000000 00001 000000
        Led(043) = &B00101 000000 00001 000000
        Led(044) = &B00011 000000 00001 000000
        Led(045) = &B00001 100000 00001 000000
        Led(046) = &B00001 010000 00001 000000
        Led(047) = &B00001 001000 00001 000000
        Led(048) = &B00001 000100 00001 000000
        Led(049) = &B00001 000010 00001 000000
        Led(050) = &B00001 000001 00001 000000
        Led(051) = &B10000 100000 00000 100000
        Led(052) = &B01000 100000 00000 100000
        Led(053) = &B00100 100000 00000 100000
        Led(054) = &B00010 100000 00000 100000
        Led(055) = &B00001 100000 00000 100000
        Led(056) = &B00000 110000 00000 100000
        Led(057) = &B00000 101000 00000 100000
        Led(058) = &B00000 100100 00000 100000
        Led(059) = &B00000 100010 00000 100000
        Led(060) = &B00000 100001 00000 100000
        Led(061) = &B10000 010000 00000 010000
        Led(062) = &B01000 010000 00000 010000
        Led(063) = &B00100 010000 00000 010000
        Led(064) = &B00010 010000 00000 010000
        Led(065) = &B00001 010000 00000 010000
        Led(066) = &B00000 110000 00000 010000
        Led(067) = &B00000 011000 00000 010000
        Led(068) = &B00000 010100 00000 010000
        Led(069) = &B00000 010010 00000 010000
        Led(070) = &B00000 010001 00000 010000
        Led(071) = &B10000 001000 00000 001000
        Led(072) = &B01000 001000 00000 001000
        Led(073) = &B00100 001000 00000 001000
        Led(074) = &B00010 001000 00000 001000
        Led(075) = &B00001 001000 00000 001000
        Led(076) = &B00000 101000 00000 001000
        Led(077) = &B00000 011000 00000 001000
        Led(078) = &B00000 001100 00000 001000
        Led(079) = &B00000 001010 00000 001000
        Led(080) = &B00000 001001 00000 001000
        Led(081) = &B10000 000100 00000 000100
        Led(082) = &B01000 000100 00000 000100
        Led(083) = &B00100 000100 00000 000100
        Led(084) = &B00010 000100 00000 000100
        Led(085) = &B00001 000100 00000 000100
        Led(086) = &B00000 100100 00000 000100
        Led(087) = &B00000 010100 00000 000100
        Led(088) = &B00000 001100 00000 000100
        Led(089) = &B00000 000110 00000 000100
        Led(090) = &B00000 000101 00000 000100
        Led(091) = &B10000 000010 00000 000010
        Led(092) = &B01000 000010 00000 000010
        Led(093) = &B00100 000010 00000 000010
        Led(094) = &B00010 000010 00000 000010
        Led(095) = &B00001 000010 00000 000010
        Led(096) = &B00000 100010 00000 000010
        Led(097) = &B00000 010010 00000 000010
        Led(098) = &B00000 001010 00000 000010
        Led(099) = &B00000 000110 00000 000010
        Led(100) = &B00000 000011 00000 000010
        ')
    
        '( Inhalt der Databytes
    
        Data_ddrd(LED_Nr)  &Bx65432xx ' x wird durch 0 ersetzt!
        Data_ddrc(LED-Nr)  &Bxx543210
        Data_portd(LED_Nr) &Bx65432xx
        Data_portc(LED_Nr) &Bxx543210
    
        ')
    
        Dim Data_ddrd As Byte , Data_ddrc As Byte , Data_portd As Byte , Data_portc As Byte
        Dim Temp_ddrd As Byte , Temp_ddrc As Byte , Temp_portd As Byte , Temp_portc As Byte
    
        Dim Bildspeicher(12) As Word
    
        Dim Bytenr As Byte , Bitnr As Byte , Lednr As Byte
        Dim Zaehler_anzeigen As Word , Zaehler_scrollen As Byte
        Dim Temp As Byte , N As Byte
    
        Declare Sub Set_led(byval Lednr As Byte)
        Declare Sub Berechne_charliedata(byval Lednr As Byte)
        Declare Sub Set_bildspeicher
        Declare Sub Anzeigen
        Declare Sub Scrollen_links(byval Wiederholen As Byte)
        Declare Sub Scrollen_runter(byval Wiederholen As Byte)
    
        Sub Set_bildspeicher                ' Bildbereich: y=Word 2-11 x=Bit 10-1 (+ Rand zum Scrollen)
    
        'Bildspeicher(0) = &B109876543210
        Bildspeicher(01) = &B000000000000
        Bildspeicher(02) = &B011111111110
        Bildspeicher(03) = &B010000000010
        Bildspeicher(04) = &B010111000010
        Bildspeicher(05) = &B010100100010
        Bildspeicher(06) = &B010111000010
        Bildspeicher(07) = &B010100100010
        Bildspeicher(08) = &B010100100010
        Bildspeicher(09) = &B010111000010
        Bildspeicher(10) = &B010000000010
        Bildspeicher(11) = &B011111111110
        Bildspeicher(12) = &B000000000000
        End Sub
    
        Do
    
          For N = 1 To 100                  ' LED nacheinander setzen
             Set_led N                       ' (erstmal klein anfangen ;)
             Waitms 500
          Next N
    
    '(       Set_bildspeicher                     ' B anzeigen
           For Zaehler_anzeigen = 0 To 10000
              Anzeigen
           Next Zaehler_anzeigen
    
           Set_bildspeicher                     'nach links scrollen mit Umlauf
           For Zaehler_scrollen = 0 To 55
              For Zaehler_anzeigen = 0 To 1000
                 Anzeigen
              Next Zaehler_anzeigen
              Scrollen_links 1
           Next Zaehler_scrollen
    
           Set_bildspeicher                     ' nach links rausschieben
           For Zaehler_scrollen = 0 To 10
              For Zaehler_anzeigen = 0 To 2000
                 Anzeigen
              Next Zaehler_anzeigen
              Scrollen_links 0
           Next Zaehler_scrollen
    
           Set_bildspeicher                     'runterscrollen mit Umlauf
           For Zaehler_scrollen = 0 To 55
              For Zaehler_anzeigen = 0 To 1000
                 Anzeigen
              Next Zaehler_anzeigen
              Scrollen_runter 1
           Next Zaehler_scrollen
    
           Set_bildspeicher                     ' nach unten rausschieben
           For Zaehler_scrollen = 0 To 10
              For Zaehler_anzeigen = 0 To 2000
                 Anzeigen
              Next Zaehler_anzeigen
              Scrollen_runter 0
           Next Zaehler_scrollen
    ')
        Loop
        End
    
        Sub Anzeigen
           For Bytenr = 2 To 11                 ' sichtbare Bytes im Bildspeicher von oben nach unten
              For Bitnr = 1 To 10           ' sichtbare Bits im Bildspeicher von rechts nach links
    
                 If Bildspeicher(bytenr).bitnr = 1 Then       ' wenn Bit im Bildspeicher gesetzt dann ausgeben
    
                    'LED Nummer berechnen:  LED1 oben rechts, LED10 unten rechts, LED91 oben links, LED100 unten links
                    Temp = Bitnr - 1        ' LED1 ist in Spalte 0
                    Temp = Temp * 10            ' 10 Leds pro Spalte,
                    Lednr = Bytenr - 1          ' LED1 befindet sich in Bildspeicher(2), LED2 in Bildspeicher(3) usw.
                    Lednr = Lednr + Temp        ' Spalten + Zeilen
    
                    Set_led Lednr           ' Ausgelagert
    
                 End If
              Next Bitnr
           Next Bytenr
        End Sub
    
       Sub Set_led(byval Lednr As Byte)
          If Lednr > 0 Then
             If Lednr < 101 Then
    
                ' Charlieplexing Daten für gewünschte LED berechen
                Berechne_charliedata Lednr  ' ??? Ob das so klappt?
    
                Temp_ddrc = Ddrd And &B11000000       ' die nicht verwendeten Bits merken
                Temp_ddrd = Ddrc And &B10000011
                Temp_portc = Portd And &B11000000
                Temp_portd = Portc And &B10000011
    
                Ddrd = Temp_ddrd            ' vorsichtshalber alle Charliepins auf Z-State setzen
                Ddrc = Temp_ddrc            ' die nicht verwendeten Pins bleiben unberührt
                Portd = Temp_portd          ' (könnte man aus Zeitgründen eventuell weglassen)
                Portc = Temp_portc
    
                Ddrd = Temp_ddrd Or Data_ddrd       ' Charliepins der LED setzen
                Ddrc = Temp_ddrc Or Data_ddrc       ' die nicht verwendeten Pins bleiben unberührt
                Portd = Temp_portd Or Data_portd
                Portc = Temp_portc Or Data_portc
             End If
          End If
       End Sub
    
        Sub Berechne_charliedata(byval Lednr As Byte)
          Data_ddrc = 0
          Data_ddrd = 0
          Data_portc = 0
          Data_portd = 0
    
          Incr Lednr                        ' Achtung, die LED-Zählung beginnt nun bei null
          Temp = Lednr / 10                 ' Pin für Port Ausgang High berechnen
          If Temp < 5 Then                  ' Led 0-49 verwenden Portd
             Data_portd.6 = 1
             Shift Data_portd , Right , Temp
          Else
             Temp = Temp - 5                ' Led 50-99 verwenden Portc
             Data_portc.5 = 1
             Shift Data_portc , Right , Temp
          End If
    
          Temp = Lednr Mod 10               ' DDR-Pin für Low-Ausgang suchen
          If Temp < 5 Then                  ' Led 0-49 verwenden DDRD
             Data_ddrd.6 = 1
             Shift Data_ddrd , Right , Temp
             If Data_ddrd = Data_portd Then 'wenn High-Pin und Low-Pin derselbe sind
                If Temp = 4 Then            'wenn rechtes Bit in ddrd dann Übertrag nach ddrc
                   Data_ddrd = 0
                   Data_ddrc.5 = 1          ' der High-Pin wird trotzdem in DDRD eingetragen!
                Else
                   Shift Data_ddrd , Right , 1       ' sonst Low-Ausgang noch eins weiterschieben
                End If
                Data_ddrd = Data_ddrd Or Data_portd       ' Den High-Pin auch ins DDRD eintragen
             Else
                Temp = Temp - 5             ' Led 50-99 verwenden DDRC
                Data_portc.5 = 1
                Shift Data_ddrc , Right , Temp
                If Data_ddrc = Data_portc Then       'wenn High-Pin und Low-Pin derselbe sind
                   Shift Data_ddrc , Right , 1       ' Low-Ausgang weiterschieben
                End If
                Data_ddrc = Data_ddrc Or Data_portc       ' Den High-Pin auch ins DDRC eintragen
             End If
          End If
        End Sub
    
        Sub Scrollen_links(byval Wiederholen As Byte)
           For N = 2 To 11
              If Wiederholen = 1 Then
                 Bildspeicher(n).0 = Bildspeicher(n).11
              Else
                 Bildspeicher(n).0 = 0
              End If
              Bildspeicher(n) = Bildspeicher(n) * 2
           Next N
        End Sub
    
        Sub Scrollen_runter(byval Wiederholen As Byte)
           If Wiederholen = 1 Then
              Bildspeicher(1) = Bildspeicher(12)
           Else
              Bildspeicher(1) = 0
           End If
           For N = 12 To 2 Step -1
              Bildspeicher(n) = Bildspeicher(n - 1)
           Next N
    
        End Sub
    (Ungetestet und ohne Gewähr!)

    Die Ausgabe wird für

    LED1 oben rechts
    LED10 unten rechts
    LED91 oben links
    LED100 unten links

    berechnet. Flush used: 19%

    Gruß

    mic
    Geändert von radbruch (14.04.2013 um 18:59 Uhr) Grund: Hauptschleife vereinfacht
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. LED-Anzeige
    Von Schnippsel im Forum Elektronik
    Antworten: 21
    Letzter Beitrag: 14.01.2008, 10:36
  2. 2D - LED-Anzeige
    Von squelver im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 23
    Letzter Beitrag: 05.03.2007, 14:29
  3. LED ANzeige
    Von markus1990 im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 04.03.2006, 02:28
  4. LED Anzeige
    Von Elektronikus im Forum Elektronik
    Antworten: 24
    Letzter Beitrag: 15.02.2005, 19:10
  5. LED Anzeige
    Von Niki,bin nicht eingeloggt im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 18.05.2004, 19:06

Berechtigungen

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

12V Akku bauen