?? Wieso nicht, wer sagt das ??..portc.Col (dass das halt da durchläuft) aber das geht nicht.
Hi,
ich bin neu hier und will mich erstmal kurz vorstellen.
Ich bin Phil, 20 und bin Neueinsteiger im Thema Elektronik.
Ich habe zwischen den Jahren ein Programmiergerät für einen ATmega32 mit Programmierkabel gelötet. Das war das erstemal, dass ich mit einem Lötkolben gearbeitet habe und mich mit Spannungen und Strom beschäftigt habe. Bin von daher von meinem ergebnis um so überraschter.
Antrieb für mein neues Hobby war ein Video auf YouTube von einer LED-Matrix und da dachte ich mir "das will ich auch"! Ja und nun bin ich hier angelangt mit meinen Fragen, denn hier auf dieser Seite habe ich sehr viel über BASCOM-avr erfahren.
Hatte vorher auch noch nie was mit basic zu tun (nur php, mySQL und etwas Pascal) und habe nun mein eigenes Programm für mutliplexing geschrieben:
Meine Frage ist nun: Wie kann ich diesen Code etwas kürzen?Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1600000 $baud = 9600 Config Portc = Output Config Portb = Output Portc.0 = 0 Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Portb.7 = 0 Dim Col As Integer Dim Row As Integer Dim Time As Integer Time = 1 Do For Col = 0 To 8 Config Porta = Input Portc.0 = 0 Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Portb.7 = 0 If Col = 0 Then Portc.0 = 1 Waitms Time Elseif Col = 1 Then Portc.1 = 1 Waitms Time Elseif Col = 2 Then Portc.2 = 1 Waitms Time Elseif Col = 3 Then Portc.3 = 1 Waitms Time Elseif Col = 3 Then Portc.3 = 1 Waitms Time Elseif Col = 4 Then Portc.4 = 1 Waitms Time Elseif Col = 5 Then Portc.5 = 1 Waitms Time Elseif Col = 6 Then Portc.6 = 1 Waitms Time Elseif Col = 7 Then Portc.7 = 1 Waitms Time Elseif Col = 8 Then Portb.7 = 1 Waitms Time End If For Row = 0 To 3 Config Porta = Input If Row = 0 Then Config Porta.0 = Output Waitms Time Elseif Row = 1 Then Config Porta.1 = Output Waitms Time Elseif Row = 2 Then Config Porta.2 = Output Waitms Time End If Next Next Loop
in php wüsste ich das, denn ich würde dieses ganzen if - ellseif dinger kürzen in dem ich einfach mache:
portc.Col (dass das halt da durchläuft) aber das geht nicht.
Ich hoffe, mir kannn jmd helfen!
______
was ich vllt noch erwähnen müsste: An PA0-2 sind die Ebenen der 3x3x3 Matrix. an PC0-7 und PB7 sind die Spalten der Matrix.
?? Wieso nicht, wer sagt das ??..portc.Col (dass das halt da durchläuft) aber das geht nicht.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Bascom sagt das!
PORTC. ist fest definiert - Col ist eine Variable.
*grmpf*
richtig. und ?..PORTC. ist fest definiert - Col ist eine Variable..
probier mal
Code:for n = 0 to 7 portc.n = 1 next
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hey,
geht wohl doch - aber mit nur col!
Wenn ich das unten bei den rows mache kommt:Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1600000 $baud = 9600 Config Portc = Output Config Portb = Output Portc = 0 Portb = 0 Dim Col As Integer Dim Row As Integer Dim Time As Integer Time = 1000 Do For Col = 0 To 8 Config Porta = Input Portc = 0 Portb = 0 Portc.col = 1 Waitms Time Portc.col = 1 Waitms Time For Row = 0 To 3 Config Porta = Input Config Porta.row = Output Waitms Time Elseif Row = 1 Then Config Porta.1 = Output Waitms Time Elseif Row = 2 Then Config Porta.2 = Output Waitms Time End If Next Next Loop
UNOWN Config PARAMETER [PORTA.ROW]
Das ist natürlich ein Brimsen... Config Porta.row = Output ..
das wär dann DDRA.row = 1
Unterschied ist : Compile-time versus Run-Time
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
also anstatt:
Config Porta.row = Output
mach ich
DDRA.row = 1
eh net, oder?
richtig.
DDRA ist das In/out controll register
PINA ist Input
PORTA ist Output
und, unabhängig davon,
kannst du bei einem beliebigen Byte feste Werte (PORTB.3 = ) oder eben auch variable verwenden (PORTB.var = )
Schau aber nochmal in dein Programm :
"for col = 0 to 8" wären 9 Bits, soviele gibt's nicht
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
okay mein code sieht jetzt so aus:
Was kann ich jetzt noch machen?Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1600000 $baud = 9600 Config Portc = Output Config Portb = Output Dim Col As Integer Dim Row As Integer Do For Col = 0 To 8 Config Porta = Input Portc = 0 Portb = 0 Portc.col = 1 If Col = 8 Then Portb.7 = 1 End If For Row = 0 To 3 Config Porta = Input DDRA.row = 1 Next Next Loop
DIM COL AS BYTE
DIM ROW AS BYTE
spart schonmal RAM und ist eleganter... mehr als 255 Zeilen/Spalten wirste kaum haben, oder?
Und wieso setzt du PortA ständig als Input?
Das brauchste nur einmal ganz oben vor dem Loop für beide Ports als Output machen.
FOR COL = 0 TO 8
ist immer noch falsch, der Port hat nur 8 Pins, angefangen bei 0. 0 bis 8 sind aber 9 Zustände
Der nächste Schritt wäre jetzt ein Shadow-RAM in dem der µC den "Bildschirminhalt" ablegt und dann immer wieder abspielt.
Das geht prima mit nem Array, der M32 hat ja auch ausreichend RAM für sowas:
DIM SHADOW_RAM(3) AS BYTE
wäre dann ein Byte-Array mit 3 Einträgen.
Bitte beachten: in Bascom ist das erste Element immer 1, nicht 0 (beim EEP ists dann wieder 0, also aufpassen!)...
Zugreifen kannst du so:
FOR X = 1 TO 3
PRINT SHADOW_RAM(X)
NEXT X
Lesezeichen