Propeller-Clock aber eigentlich Drehlicht und die Timer ?
Hallo Leute
Schlage mich gerade mit den leidigen Timer rum :-(
Irgendwie kapiere ich das noch nicht..
Habe einen Rotor mit 8 Leds am Ende, die von einem Mega8 getaktet werden.
Das ganze dreht sich.
Für die Position ist auch ein Magnetsensor oben , der , wenn er über den Magnet fliegt, einen Pin am AVR gegen Masse zieht.
(Derzeit läuft es mit Int0, geht aber auch ohne Interupt's)
Habe sogar schon ein Wort in die Luft schreiben können :-)
Jetzt möchte ich aber gerne die Schreibgeschwindigkeit mit der Umdrehungsdauer syncronisieren.
(Damit bei jeder Geschwindigkeit die Anzeige auch am rechten Platz ist)
Komme da aber irgendwie mit den ganzen Timern nicht zurande...
(Grundverständnis)
Dachte mir das eigentlich so:
Nehme Timer1
Wenn der Magnetsensor schaltet , startet Timer1
Wenn Magnetschalter nochmal schaltet, wird der Timer1-wert gespeichert und Timer1 auf 0 gesetzt.
Timer1 läuft weiter, bis Schalter wieder schaltet u.s.w.
Diese Timer1-zeit ist nun eine Umdrehung vom Rotor.
Diese müsste ich dann durch alle Spalten teilen.
z.B. durch 360 (Winkelgradl)
Dann hätte ich die Zeit für z.B. einen Winkelgrad oder Eine Spalte.
Jetzt habe ich schon viele Artikel hier durchgelesen..
Frequenzzähler u.s.w.
Da wird aber immer ein Interupt genommen, der dann einen Timer schaltet (zurücksetzt) u.s.w.
Kann ich das den nicht gleich auch nur mit einem Counter machen...?
Oder was macht eigentlich ein Counter ?? ](*,)
(habe da auch das Buch von Kühnel. (beispiel Counter0.bas)
Da stehe ich aber auch irgendwie im Wald :-) )
Oder kann man einen Timer auch extern Trigern ?
Bitte um Hiiiilllffffeeee :-)
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Bluesmash
Dein Wunsch ist mir Befehl ;-)
Liste der Anhänge anzeigen (Anzahl: 1)
mmmhhh. scheinen nur drei Bilder zum Anhängen zu gehen..
Hier das vierte..
Du fragst vermutlich wegen den Schleifern... :-k
Da hatte ich aus meiner Bastelkiste noch was gefunden...
Über die Welle vom Motor kam so eine Gummiwalze als Isolierung.
Auf die dann eine Messinghülse.
Die Messinghülse habe ich auf die Platine vom Rotor gelötet und bildet die +5V
Für Minus habe ich vorne auf der Welle einen Schleifer.
Auf der anderen Seite vom Motor wieder mit einem Schleifer zur Versorgung (Masse)
Liste der Anhänge anzeigen (Anzahl: 1)
so ich hab jetzt mal die timer anhand der drehzahl richtig eingestellt und es funktioniert jetzt nicht schlecht die schrift wackelt so ca 2-3mm... die timer funktionieren ab ca. 800 U/min und nach oben praktisch unbegrenzt (bis mein drehflügel auseinanderfliegt...)
hier mein vorschlag für die zeichenprogrammierung, für jedes Zeichen ein array mit 5 Spalten (meine Zeichen sind 7*5 Punkte) das währen bei mir ca 30 arrays aber es wird relativ aufwändig zum programmieren, und dann kommt die zeichenerkennung noch dazu...
kann man nicht irgendwie ein array definieren so in dieser art:
x(i)
Incr x
Incr i
damit man beide zahlen hochzählen kann....
hier mal mein prog (es zeigt die ersten 3 Buchstaben von HALLO) :):
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$framesize = 512
$swstack = 512
$hwstack = 512
Config Portb = Output
Dim Umdrehung As Word
Dim Spaltenzeit As Byte
Dim I As Byte
Dim X As Byte
Dim 0(5) As Byte
Dim 1(5) As Byte
Dim 2(5) As Byte
Config Int0 = Falling
On Int0 Int0isr
Enable Int0
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr Nosave
Enable Timer0
Config Timer1 = Timer , Prescale = 8
On Timer1 Timer1isr Nosave
Enable Timer1
Enable Interrupts
Start Timer0
Do
0(1) = &B00000001
0(2) = &B11101111
0(3) = &B11101111
0(4) = &B11101111
0(5) = &B00000001
1(1) = &B10000001
1(2) = &B01101111
1(3) = &B01101111
1(4) = &B01101111
1(5) = &B10000001
2(1) = &B00000001
2(2) = &B11111101
2(3) = &B11111101
2(4) = &B11111101
2(5) = &B11111101
Loop
Int0isr:
Umdrehung = Timer1
Umdrehung = Umdrehung / 1200
Spaltenzeit = Umdrehung
Timer1 = 0
I = 0
X = 0
Return
Timer0isr:
Load Timer0 , Spaltenzeit
Incr I
If I > 5 Then
I = 0
Incr X
Portb = 255
Else
If X = 0 Then
Portb = 0(i)
Elseif X = 1 Then
Portb = 1(i)
Elseif X = 2 Then
Portb = 2(i)
End If
End If
Return
Timer1isr:
I = 0
X = 0
Return
--EDIT--
und so siehts nun aus: