Henry
28.02.2009, 22:18
Hallo,
ich bin gerade dabei mit BASCOM eine Schalting zu programmieren, die mir später mal die Beleuchtung in einem RC-Modell steuern soll.
Zu dieser gehöhrt z.B. die ansteuerung zweier LEDs als Doppelblitz, wie es bei Einsatzfahrzeugen üblich ist.
Nun habe ich dies zur Zeit über einen Zähler realisiert und steuere die Ausgänge mit IF-Abfragen. (siehe Code)
Da dies im Moment die einzige Funktion ist an der ich tüftel, funktioniert es auch ganz gut.
Nun habe ich aber die Befürchtung, wenn ich weitere Dinge in meinem Programm anstellen möchte (z.B. die Auswertung eines RC-Kanals), das ich dann in Schwieriglkeiten kommen werde was Optik angeht (unregelmäßiges Blinken).
Es sollen vermutlich auch noch andere Ausgänge mit Blitz bzw. Blink funktionen belegt werden.
Kann mir jemand einen Tipp geben wie solch eine Funktion eleganter gelöst werden kann, ohne das sie vom Hauptprogramm beeinträchtigt wird?
Die If-Abfragen in die Interruptroutine zu verlegen ist vermutlich die noch schlechtere Umsetzung.
Hier noch der derzeitige Code:
'--------------------------------------------------------------
' Beleuchtung_M8_test.bas
' Testprogramm für Beleuchtungssteuerung
'--------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
Config POrtC = Output
Config PORTB.4 = Output
Config portb.5 = Output
Config Timer0 = Timer , PRESCALE = 64
On Timer0 Tim0_isr
Enable Timer0
Enable Interrupts
Timer0 = 131 'Timerregister auf 156 voreinstellen
Dim zaehler as Integer
Doppelblitz1 Alias PortC.5
Doppelblitz2 Alias Portc.4
KontrollLED Alias PortB.4
Zaehler = 0
Do
If zaehler = 10 or zaehler = 210 then
Doppelblitz1 = 1
End IF
If zaehler = 160 or zaehler = 360 then
Doppelblitz1 = 0
End IF
If zaehler = 410 or zaehler = 610 then
Doppelblitz2 = 1
End IF
If zaehler = 560 or zaehler = 760 then
Doppelblitz2 = 0
End IF
If zaehler >= 1000 then
zaehler = 0
end IF
Loop
'Interruptrotiene Timer0 Overflow
Tim0_isr:
Timer0 = 131 'Timerregister auf 156 voreinstellen
incr zaehler
Return
End
Danke schon einmal für eure Hilfe
ich bin gerade dabei mit BASCOM eine Schalting zu programmieren, die mir später mal die Beleuchtung in einem RC-Modell steuern soll.
Zu dieser gehöhrt z.B. die ansteuerung zweier LEDs als Doppelblitz, wie es bei Einsatzfahrzeugen üblich ist.
Nun habe ich dies zur Zeit über einen Zähler realisiert und steuere die Ausgänge mit IF-Abfragen. (siehe Code)
Da dies im Moment die einzige Funktion ist an der ich tüftel, funktioniert es auch ganz gut.
Nun habe ich aber die Befürchtung, wenn ich weitere Dinge in meinem Programm anstellen möchte (z.B. die Auswertung eines RC-Kanals), das ich dann in Schwieriglkeiten kommen werde was Optik angeht (unregelmäßiges Blinken).
Es sollen vermutlich auch noch andere Ausgänge mit Blitz bzw. Blink funktionen belegt werden.
Kann mir jemand einen Tipp geben wie solch eine Funktion eleganter gelöst werden kann, ohne das sie vom Hauptprogramm beeinträchtigt wird?
Die If-Abfragen in die Interruptroutine zu verlegen ist vermutlich die noch schlechtere Umsetzung.
Hier noch der derzeitige Code:
'--------------------------------------------------------------
' Beleuchtung_M8_test.bas
' Testprogramm für Beleuchtungssteuerung
'--------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
Config POrtC = Output
Config PORTB.4 = Output
Config portb.5 = Output
Config Timer0 = Timer , PRESCALE = 64
On Timer0 Tim0_isr
Enable Timer0
Enable Interrupts
Timer0 = 131 'Timerregister auf 156 voreinstellen
Dim zaehler as Integer
Doppelblitz1 Alias PortC.5
Doppelblitz2 Alias Portc.4
KontrollLED Alias PortB.4
Zaehler = 0
Do
If zaehler = 10 or zaehler = 210 then
Doppelblitz1 = 1
End IF
If zaehler = 160 or zaehler = 360 then
Doppelblitz1 = 0
End IF
If zaehler = 410 or zaehler = 610 then
Doppelblitz2 = 1
End IF
If zaehler = 560 or zaehler = 760 then
Doppelblitz2 = 0
End IF
If zaehler >= 1000 then
zaehler = 0
end IF
Loop
'Interruptrotiene Timer0 Overflow
Tim0_isr:
Timer0 = 131 'Timerregister auf 156 voreinstellen
incr zaehler
Return
End
Danke schon einmal für eure Hilfe