Hi Searcher,
das gefällt mir, weniger Zeilen und damit auch übersichtlicher
. Es funktioniert mit einer kleinen Änderung, da ich an den Foto-LEDs mit einem Transistor die Polung invertiere bedarf es eine 1 bei "opto_1 = 0..." oder die Transistoren wieder entfernen. Die Namen der Variablen werde ich im fertigen Programm so umbennenen das ich sie in X Jahren noch wiedererkenne
.
Was ich noch nicht verstehe:
* ocr0a = 78 --- Wer oder was ist das?
* compare0a --- Wer oder was ist das, warum nicht timer0?
Das kleine Testprogramm sieht dann so aus:
Code:
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
$regfile = "attiny44.dat"
$crystal = 8000000
$hwstack = 40 ' $hwstack = 34
$swstack = 40 ' $swstack = 20
$framesize = 40 ' $framesize = 24
' --- Deklarationen... -----------------------------------------------------------------------------------------
enable interrupts
ocr0a = 78
config timer0 = timer , prescale = 1024 , CLEAR_TIMER = 1 ' about 10 milliseconds compare0A interrupt
on compare0a isr_deadtime '
enable COMPARE0A
config porta = output
config portb = input
config lcdpin = pin , Db4 = porta.2 , Db5 = porta.3 , Db6 = porta.4 , Db7 = porta.5 , E = porta.0 , Rs = porta.1
config lcd = 20 * 4
cursor off : cls
opto_1 alias pinb.1 ' light barrier track 1
opto_2 alias pinb.2 ' light barrier track 2
' --- Variablen... ---------------------------------------------------------------------------------------------
const deadtime = 100 ' 100 * 10ms of copmare0a interrupt
dim monoflop_1 as byte
dim monoflop_2 as byte
dim round_1 as byte ' round counter
dim round_2 as byte ' round counter
dim Z_formatiert as string * 2 : Z_formatiert = "" ' Zahlen rechtsbündige formatieren
' --- Programm Anfang ------------------------------------------------------------------------------------------
locate 1,1 : lcd "Formel X 20 Runden"
locate 2,1 : lcd "--------------------"
locate 3,1 : lcd "Spur 1 ---- Runde 0"
locate 4,1 : lcd "Spur 2 ---- Runde 0"
do
if opto_1 = 1 and monoflop_1 = 0 then
incr round_1
Z_formatiert = str(round_1)
locate 3,1 : lcd "Spur 1 ---- Runde" ; format(Z_formatiert , " ")
monoflop_1 = deadtime
endif
if opto_2 = 1 and monoflop_2 = 0 then
incr round_2
Z_formatiert = str(round_2)
locate 4,1 : lcd "Spur 1 ---- Runde" ; format(Z_formatiert , " ")
monoflop_2 = deadtime
endif
loop
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
isr_deadtime:
if monoflop_1 > 0 then decr monoflop_1
if monoflop_2 > 0 then decr monoflop_2
return
' --- Programm Ende --------------------------------------------------------------------------------------------
end
Grüßle, Hermann
Lesezeichen