PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Control Mega 128 Ports ansteuern



KoenigSnuess
12.09.2010, 21:08
Hallo Leute,

Ich hab da ein Problem mit dem 128er. Mit der alten C-Control 1 konnte man alle Ports als "Wordport" gemeinsam ansteuern, für den 128er hab ich die Möglichkeit noch nicht gefunden. Ich wollte eigentlich einen 8x8x8 RGB Würfel aufbauen, wie man solche in diversen Videoportalen findet. Mit der alten C-Control 1 hatte ich einen 4x4x4 Würfel aufgebaut, ebenfalls RGB, dieser funktioniert einwandfrei. Für mehr fehlt allerdings die Geschwindigkeit, sowie mehr Ausgänge (Ports). Habe mir dann den 128er nebst Projektboard angeeignet, um dieses Manko auszumerzen.

Nach einigen Versuchen nebst Einarbeitung (ca. 2 Wochen) habe ich festgestellt, daß ich beim Multiplexen der Säulen des Würfels erhebliche Timingprobleme bekomme, da ich die Ports nacheinander befehligen muß - daher kommt die Adresse fürs Multiplexen entweder zu spät oder zu früh, je nachdem in welcher Reihenfolge ich dies versuche.

Nun meine Frage:

Kann man mehrere Ports (eventuell auch alle) mit einem Befehl adressieren? Wenn ja, wie wird das bewerkstelligt?

Wäre nett, wenn sich da jemand angesprochen fühlt, denn ich bräuchte ja für den 8x8x8 Würfel in RGB dann 8x3 Ebenen = 24 Bit, einen 1 aus 64 Multiplexer, also für die Adresse des Multiplexers nochmals 6 Bit, macht zusammen 30 Bit. Falls später dann noch PWM dazukommen sollte, müßte dies auch noch möglichst ohne Zeitverzögerung dazukommen.

Momentan experimentiere ich noch mit dem 4x4x4 Würfel am 128er, aber hier wären es dann 4x3 Ebenen, also 12 Bit, für den 1 aus 16 Multiplexer dann nochmal 4 Bit, wäre ich bei 16 Bit. Langsamer Ablauf funktioniert, aber wenn ich die Bremse löse, dann glimmen die nebenstehenden LEDs auch etwas mit, was eben das Timingproblem wäre.

mein Programmcode, der nur zu Versuchs - und Experimentierzwecken entstanden ist, lautet wie Folgt:


Dim delval As Integer
Sub Port_CNT(delay_val As Integer)
Dim i As Integer


#define PORT3 3
Port_DataDir(PORT3,255)
#define PORT2 2
Port_DataDir(PORT2,255)
For i=0 To 255
' Dies ist ein "Bild" im 4x4x4 Würfel
Port_Write(PORT3,16+0) 'Port 3
Port_Write(PORT2,1) 'Port 2, und so weiter
AbsDelay(delay_val) 'Bremsaufruf falls vorhanden ....
Port_Write(PORT3,16+8)
Port_Write(PORT2,2)
AbsDelay(delay_val)
Port_Write(PORT3,16+4)
Port_Write(PORT2,4)
AbsDelay(delay_val)
Port_Write(PORT3,16+12)
Port_Write(PORT2,8)
AbsDelay(delay_val)
Port_Write(PORT3,16+14)
Port_Write(PORT2,8)
AbsDelay(delay_val)
Port_Write(PORT3,16+6)
Port_Write(PORT2,4)
AbsDelay(delay_val)
Port_Write(PORT3,16+10)
Port_Write(PORT2,2)
AbsDelay(delay_val)
Port_Write(PORT3,16+2)
Port_Write(PORT2,1)
AbsDelay(delay_val)
Port_Write(PORT3,16+1)
Port_Write(PORT2,1)
AbsDelay(delay_val)
Port_Write(PORT3,16+9)
Port_Write(PORT2,2)
AbsDelay(delay_val)
Port_Write(PORT3,16+5)
Port_Write(PORT2,4)
AbsDelay(delay_val)
Port_Write(PORT3,16+13)
Port_Write(PORT2,8)
AbsDelay(delay_val)
Port_Write(PORT3,16+15)
Port_Write(PORT2,8)
AbsDelay(delay_val)
Port_Write(PORT3,16+7)
Port_Write(PORT2,4)
AbsDelay(delay_val)
Port_Write(PORT3,16+11)
Port_Write(PORT2,2)
AbsDelay(delay_val)
Port_Write(PORT3,16+3)
Port_Write(PORT2,1)
AbsDelay(delay_val)
Next
End Sub

'------------------------------------------------------------------------------
' Hauptprogramm
'
Sub main()
delval=1000 ' die Bremse, wie oben erwähnt
Do While True
Port_CNT(delval)
End While
End Sub