Sparrow-3D        

Elektronik-Labor  Projekte  AVR  Sparrow          



Ein dreidimensionales Modell mit insgesamt sechs LEDs sollte als kleines Kunstobjekt entstehen. Wegen der geringen Anzahl freier Ports geht das am besten mit Charlieplexing. So kommt man mit drei Ports aus.



Von jeder Leitung zu jeder anderen Leitung gibt es jeweils zwei antiparallel geschaltete LEDs. Jede der drei Leitungen ist damit an vier LEDs angeschlossen.



Etwas anders gezeichnet erkennt man schon die gewünschte dreidimensionale Struktur der LEDs. 



Der Fuß des Objekts besteht aus einer alten LED-Lampe mit Schalter und Batteriefach. Ein Widerstand mit 20 Ohm gehörte noch zur Lampe und bleibt drin, als gemeinsamer Vorwiderstand für alle sechs LEDs. Für die Programmierung wurde eine Audiobuchse eingebaut. Die Stiftleisten des Sparrow sind durch das Gehäuse geführt.



Die Batterie passt zwar nicht genau in das Batteriefach, ist aber dafür aufladbar, ein LiPo-Akku aus einer alten E-Zigarette.



Insgesamt ergibt sich damit ein praktisches kleines Entwicklungssystem, allzeit bereit und immer wieder aufladbar.

Die Charlieplexing-LED-Ansteuerung verwendet eine Interrupt-Prozedur. Die Variable D bestimmt, welche LED gerade an ist. Die unteren sechs Bits stehen für jeweils eine LED. Jetzt könnte man sich zwar noch tiefe Gedanken über die schönsten Bitmuster machen, aber eine Zufallsfunktion tut es auch und sorgt für immer neue Muster.




Download: Sparrow_Charlie.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Charlieplexing.html

'-------------------------------------------------------------------------------
'Sparrow Charlieplexing
'-------------------------------------------------------------------------------
$regfile = "ATtiny13.dat"
$crystal = 1200000

$hwstack = 8
$swstack = 4
$framesize = 4


Dim Ticks As Word
Dim D As Byte


Config Timer0 = Timer , Prescale = 8
On Ovf0 Tim0_isr
Enable Timer0
Enable Interrupts
Start Timer0

Do
D = Rnd(255)
Waitms 1000
Loop

Tim0_isr:
Timer0 = 150
Ddrb = &B00000000
Portb = &B00000000
Ticks = Ticks + 1
If Ticks = 1 And D.0 = 1 Then
Ddrb = &B00001010
Portb = &B00000010
End If
If Ticks = 2 And D.1 = 1 Then
Ddrb = &B00001010
Portb = &B00001000
End If
If Ticks = 3 And D.2 = 1 Then
Ddrb = &B00011000
Portb = &B00001000
End If
If Ticks = 4 And D.3 = 1 Then
Ddrb = &B00011000
Portb = &B00010000
End If
If Ticks = 5 And D.4 = 1 Then
Ddrb = &B00010010
Portb = &B00000010
End If
If Ticks = 6 And D.5 = 1 Then
Ddrb = &B00010010
Portb = &B00010000
End If
If Ticks = 9 Then Ticks = 0
Return

End



Charlieplexing 2 mit RS232

Zufallsteuerung ist gut und schön, aber auf die Dauer kann es auch nervig sein. Man starrt das Ding an und fragt sich die ganze Zeit: Und wann sind endlich mal alle LEDs gleichzeitig an? Geht das überhaupt? Also muss eine zweite Software-Version her, in der alles etwas geplanter abgeht. Das Programm enthält drei Versionen einer Steuerung, die gestartet werden, wenn man bein Einschalten S1, S2 oder keinen von beiden drückt. Ohne Taster startet eine regelmäßige Lightshow mit dem krönenden Abschluss, dass  sechs LEDs drei Sekunden lang gemeinsam leuchten.  Drückt man beim Hochfahren S1, dann reagiert die Software auf serielle Kommandos mit 300 Baud, die man direkt über das SoundUART Keyboard eingeben kann. Damit lassen sich jeweils zwei Nibbles zu einem Byte eingeben und damit bestimmte Muster austesten. Und drückt man beim Start auf S2, dann sind alle LEDs an und bleiben es auch. 3D völlig statisch.



Download: Sparrow_Charlie2.zip
Direkt laden: http://tiny.systems/categorie/cheepit/CharlieplexingUART.html


'-------------------------------------------------------------------------------
'Sparrow Charlieplexing 2
'-------------------------------------------------------------------------------
$regfile = "ATtiny13.dat"
$crystal = 1200000

$hwstack = 8
$swstack = 4
$framesize = 4


Dim Ticks As Word
Dim D As Byte
Dim Lo As Byte
Dim Hi As Byte


Open "comb.2:300,8,n,1" For Input As #1


Config Timer0 = Timer , Prescale = 8
On Ovf0 Tim0_isr
Enable Timer0
Enable Interrupts
Start Timer0

'If Pinb.0 = 0 And Pinb.2 = 0 Then Goto Random

If Pinb.0 = 0 Then Goto Cominput
If Pinb.2 = 0 Then Goto All_on

Do
D = &H08 : Waitms 500
D = &H33 : Waitms 500
D = &H04 : Waitms 500
D = &H00 : Waitms 500
D = &H02 : Waitms 500
D = &H01 : Waitms 500
D = &H20 : Waitms 500
D = &H10 : Waitms 500
D = &H02 : Waitms 500
D = &H08 : Waitms 500
D = &H20 : Waitms 500
D = &H04 : Waitms 500
D = &H02 : Waitms 500
D = &H00 : Waitms 500
D = &H11 : Waitms 500
D = &H22 : Waitms 500
D = &H0C : Waitms 500
D = &H00 : Waitms 500
D = &H3F : Waitms 3000
D = &H00 : Waitms 500
Loop

Cominput:
Do
Disable Interrupts
Ddrb = &B00000000
Portb = &B00000000
Get #1 , Hi
Get #1 , Lo
D = Hi * 16
D = D + Lo
Enable Interrupts
Waitms 1000
Loop

All_on:
D = &H3F
Do
Loop


Tim0_isr:
Timer0 = 150
Ddrb = &B00000000
Portb = &B00000000
Ticks = Ticks + 1
If Ticks = 1 And D.0 = 1 Then
Ddrb = &B00001010
Portb = &B00000010
End If
If Ticks = 2 And D.1 = 1 Then
Ddrb = &B00001010
Portb = &B00001000
End If
If Ticks = 3 And D.2 = 1 Then
Ddrb = &B00011000
Portb = &B00001000
End If
If Ticks = 4 And D.3 = 1 Then
Ddrb = &B00011000
Portb = &B00010000
End If
If Ticks = 5 And D.4 = 1 Then
Ddrb = &B00010010
Portb = &B00000010
End If
If Ticks = 6 And D.5 = 1 Then
Ddrb = &B00010010
Portb = &B00010000
End If
If Ticks = 9 Then Ticks = 0
Return

End



Elektronik-Labor  Projekte  AVR  Sparrow