Hallo Community
Das Projekt nähert sich seiner fertigstellung
Hardwaretechnisch sind wir fertig, jezt fehlt nur noch die Software.
Doch von anfang an. ich habe vor, eine HDD Uhr zu bauen, diese sieht von der Hardware her etwa aus wie dieses modell: https://www.youtube.com/watch?v=7Qyawcw-ots
Jezt ist nur das große Problem: wie steuer ich die einzelnen LED Reihen (5 an der Zahl) genau an.
Eine einzelne Reihe ansteuern stellt kein großes Problem dar und klappt mit ein wenig feinjustierung ziemlich gut.
Hier einmal der funktionierende code:
CodeBox BascomAVR
Dabei wird bei jeder Umdrehung ein Interrupt vom Hall Sensor ausgelöst. Ab diesem Zeitpunkt wird der Timer 1 aktiviert und soll nach einer bestimmten Zeit die LED ein und dannach auschalten.
Die Zeit wird über einen Winkel errechnet. So wird nach einer Umdrehung der Timer ausgelesen und durch 360 geteilt.
Dann wird dieser Wert mit dem errechneten Winkel multipliziert.
In diesem Test kann man den winkel via Poti einstellen um eine feinjustierung zu erreichen.
Das große Problem an der Sache ist das ansteuern aller 5 LED reihen zu verschiedenen Zeiten.
Meine bisherigen Versuche produzierten nur flackerden Mist
Und wenn ich es dann geschafft habe alle 5 Reihen anzusteuern, bleibt immer noch das Problem, wann und wie er die Zeit darstellen kann. Diese würde in 2 Variablen vorliegen: _hour und _min
Ich habe das Gefühl, dass der µC einfach nicht hinterherkommt.
Danke schonmal für eure Hilfe
Das Projekt nähert sich seiner fertigstellung
Hardwaretechnisch sind wir fertig, jezt fehlt nur noch die Software.
Doch von anfang an. ich habe vor, eine HDD Uhr zu bauen, diese sieht von der Hardware her etwa aus wie dieses modell: https://www.youtube.com/watch?v=7Qyawcw-ots
Jezt ist nur das große Problem: wie steuer ich die einzelnen LED Reihen (5 an der Zahl) genau an.
Eine einzelne Reihe ansteuern stellt kein großes Problem dar und klappt mit ein wenig feinjustierung ziemlich gut.
Hier einmal der funktionierende code:
CodeBox BascomAVR
$regfile "m8adef.dat" 'ATmega8a auswählen $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 3686400 'Prozessor auf 3,6864 MHz setzen $baud = 19200 'Datenrate Setzen 'Ports Deklarieren Config Portb = Output 'LED Ports auf Ausgang Config Portd.7 = Output 'Aliase festlegen Led1 Alias Portb.1 Config Int0 = Falling ' Configuriere Int0 (PortD.2) Auf Low Level Enable Interrupts 'einschalten Der Interrupts Enable Int0 'einschalten Von Interrupt Int0 On Int0 Isr_hall_sensor 'springe Zu Isr_von _int0 'Config Timer1 = Timer , Prescale = 8 'Timer Konfigurieren mit tmax=142ms Config Timer1 = Timer , Prescale = 1 'Timer Konfigurieren mit tmax=17,7ms Enable Timer1 'Timer starten 'On Timer0 Isr_timer1 Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Analogwandler definieren 'Variablen Dim Led1out As Byte Dim Periodendauer As Single 'Periodendauer = 1 / 460800 'Zeit errechnen, die nach 1 Timer vergeht Periodendauer = 1 / 3686400 Dim Winkeldauer As Single Dim Led1_winkel As Word Dim X As Bit Dim Umdrehung As Word 'Led1_winkel = 180 Portd.7 = 1 Do 'Hauptprogramm starten Led1_winkel = Getadc(0) Gosub Led_ausgabe 'Zur LED ansteuerung springen Loop 'Hauptprogramm Ende Isr_hall_sensor: 'Toggle Led1 'Wenn Hall Sensor Signal bekommt, wird hierher gesprungen 'Umdrehung = Timer1 * Periodendauer 'Winkeldauer = Umdrehung / 360 Winkeldauer = Timer1 / 360 'Timmer Pro Winkel errechnen Timer1 = 0 'Timer zurücksetzen X = 1 Return Led_ausgabe: 'LED1 Umdrehung = Winkeldauer * Led1_winkel 'Timer Wert mit Winkel und Zeit errechnen If Timer1 >= Umdrehung And X = 1 Then 'Wenn der Timer die richtige Zeit erreicht hat Led1 = 1 'LED1 einschalten Waitus 250 '900 µs warten Led1 = 0 'LED1 wieder ausschalten X = 0 End If 'If Abfrage beenden Return
Dabei wird bei jeder Umdrehung ein Interrupt vom Hall Sensor ausgelöst. Ab diesem Zeitpunkt wird der Timer 1 aktiviert und soll nach einer bestimmten Zeit die LED ein und dannach auschalten.
Die Zeit wird über einen Winkel errechnet. So wird nach einer Umdrehung der Timer ausgelesen und durch 360 geteilt.
Dann wird dieser Wert mit dem errechneten Winkel multipliziert.
In diesem Test kann man den winkel via Poti einstellen um eine feinjustierung zu erreichen.
Das große Problem an der Sache ist das ansteuern aller 5 LED reihen zu verschiedenen Zeiten.
Meine bisherigen Versuche produzierten nur flackerden Mist
Und wenn ich es dann geschafft habe alle 5 Reihen anzusteuern, bleibt immer noch das Problem, wann und wie er die Zeit darstellen kann. Diese würde in 2 Variablen vorliegen: _hour und _min
Ich habe das Gefühl, dass der µC einfach nicht hinterherkommt.
Danke schonmal für eure Hilfe