Archiv verlassen und diese Seite im Standarddesign anzeigen : 10x10 Charlieplexed LED anzeige ansteuern
Guten tag, ich habe eine 10x10 Charlieplexed LED anzeige gebaut mit dieser Zeichnung:
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)
$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
radbruch
13.04.2013, 13:22
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/threads/55286-LED-Matrix-m%C3%B6glichst-effizient-ansteuern?p=528611&viewfull=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...
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)
https://www.roboternetz.de/community/attachment.php?attachmentid=25117
Mein Charlieplexed 10x10 LED Matrix hat aber 11 pins notig:
https://www.roboternetz.de/community/attachment.php?attachmentid=25116
radbruch
13.04.2013, 14:25
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/threads/46211-LED-Matrix-am-RP6?p=443747&viewfull=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):
' 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/threads/43885-ProBot-mit-asuro-Mega8?p=519240&viewfull=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
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?
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
radbruch
14.04.2013, 00:31
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.
$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
radbruch
14.04.2013, 10:47
Hallo
Mit Bildspeicher und Scrollen:
$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 SubKeine 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
Wie sieht denn dein Aufbau aus?
https://www.roboternetz.de/community/attachment.php?attachmentid=25127
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ß:
https://www.roboternetz.de/community/attachment.php?attachmentid=25126
$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
radbruch
14.04.2013, 19:24
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:
$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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.