Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage wegen timer
hallo,
ich soll für meinen vater eine steuerung für unsere schnapsbrennerei bauen.
jetzt soll ich ne schaltung programmieren dass ein sekundentakt läuft den ich anschalte.
der sekundentakt läuft im moment auf portb 0
wenn nun aber zb portc 1=1 wird soll dieser sekundentakt aufhören und er soll an portb 2 weiterlaufen. wenn dann portc 2=1 is soll er wieder an portc 0 weiterlaufen
problem is ich weiß net wie man en sekundentakt gescheit hinbekommt mit dem timer 1 denke ich mal is es gut zu machen aber wie genau kennt ihr da en paar gescheite seiten ich hab zwar das rowalt buch aber irgendwie werd ich da net ganz schlau.
ok den sekundentakt habe ich jetzt muss ich es eben so hinkriegen wie ich es beschrieben habe.
$regfile = "m8def.dat"
$crystal = 3686400
Baud 9600
Config Portb = Output
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 34285
Do
Loop
End
Isr_von_timer1:
Timer1 = 36736
Toggle Portb.0
Return
Ne schön wenn Du schon ne Sekunde hast, mit der anderen Erklärung komm ich nicht so richtig klar.
der sekundentakt läuft im moment auf portb 0
wenn nun aber zb portc 1=1 wird soll dieser sekundentakt aufhören und er soll an portb 2 weiterlaufen.
if PinC.1=1 then
Toggle Portb.2
else
Toggle Portb.0
end if
wenn dann portc 2=1 is soll er wieder an portc 0 weiterlaufen
Wann lief der an PortC.0 schon mal????
MfG
sorry war als beispiel gedacht. habe jetzt folgendes um erst mal des hinzubekommen. will den timer mit pinc. 0 einschalten geht aber irgendwie net ganz
$regfile = "m8def.dat"
$crystal = 3686400
Baud 9600
Config Portb = Output
Config Pinc.0 = Input
Portc = &B00000001
Dim Taste As Bit
Taste = 0
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 36736
Do
If Pinc.0 = 1 Then
Taste = 1
Else
taste =0
Loop
End If
End
Isr_von_timer1:
Timer1 = 36736
If Taste = 1 Then
Toggle Portb.0
End If
Return
zu dem anderen also ich möchte wenn an pinc.1 eine taste gedrückt wird dass der timer auf portb.1 weiterläuft. wenn nun an pinc2 eine taste gedrückt wird soll er wieder auf pinc.0 weiterlaufen sprich er soll immer wechseln.
Wenn der Befehl If Pinc.0 = 1 Then Taste = 1 ausgeführt wird verlässt das Programm die If-Schleide und landet auf dem Befehl END. Damit endet das Programm und alles Interrups werden ausgeschaltet!!
hups alles klar hab ich jetzt weiß jemand zufällig wie ich den timer dann wechseln lasse?
hab jetzt mal dass so geschrieben wechselt auch aber wenn ich zurückwechsle toggelt portc.0 nicht mehr weiter.
$regfile = "m8def.dat"
$crystal = 3686400
Baud 9600
Config Portb = Output
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Portc = &B11111111
Dim Taste As Bit
Dim Taste1 As Bit
Dim Taste2 As Bit
Taste = 0
Taste1 = 0
Taste2 = 0
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 36736
Do
If Pinc.0 = 0 Then
Taste = 1
End If
If Pinc.1 = 0 Then
Taste1 = 1
End If
If Pinc.2 = 0 Then
Taste2 = 1
End If
Loop
Isr_von_timer1:
Timer1 = 36736
If Taste = 1 Then
Toggle Portb.0
End If
If Taste1 = 1 Then
Portb.0 = 0
Toggle Portb.1
End If
If Taste2 = 1 Then
Portb.1 = 0
Toggle Portb.0
End If
Return
Welchen Timer willst Du wechseln? (meinst Du stoppen/starten)
ich meine jetzt wechselt er ja wenn ich pinc.1 drücke auf portb.1
und wenn ich pinc.2 drücke sollte er wieder zurück wechseln auf portc.0 allerdings togelt er nicht weiter. sprich die led leuchtet dauernd und blinkt net.
Is ja klar. Du setzt nacheinnander deine Taster*-Variablen auf 1 (im Hauptprogramm).
Wenn Du dann den 3 Taster drückst führt er alle If-Schleifen in der Interruprotiene aus. Da wirst Du wohl auch mal einen deiner Taster-Variablen wieder auf null setzten müssen.
MfG
jo wenn ich jetzt da els reinschreibe dann blinkt net mal mehr portc.2 sondern leuchtet nur noch
$regfile = "m8def.dat"
$crystal = 3686400
Baud 9600
Config Portb = Output
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Portc = &B11111111
Dim Taste As Bit
Dim Taste1 As Bit
Dim Taste2 As Bit
Taste = 0
Taste1 = 0
Taste2 = 0
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 36736
Do
If Pinc.0 = 0 Then
Taste = 1
End If
If Pinc.1 = 0 Then
Taste1 = 1
Else
Taste1 = 0
End If
If Pinc.2 = 0 Then
Taste2 = 1
Else
Taste2 = 0
End If
Loop
Isr_von_timer1:
Timer1 = 36736
If Taste = 1 Then
Toggle Portb.0
End If
If Taste1 = 1 Then
Portb.0 = 0
Toggle Portb.1
End If
If Taste2 = 1 Then
Portb.1 = 0
Toggle Portb.0
End If
Return
jetzt is eben dass problem je nachdem ich pin0 oder pinb1 auf 1 setze dass portb1 oder portb0 1 bleibt also sich nicht auf 0 setzt wie ich es in der isr angegeben habe.
hallo
also hab mal schnell noch ne frage.
wenn ich nun im hauptprogramm
if pinc.4 =1 then
portb.0 =0
portb.1 =0
schreibe wird dann der befehl in der isr auch beendet? ich mein soll er ja aber tut er dass dann auch.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.