PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage wegen timer



xbgamer
06.01.2007, 14:29
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.

xbgamer
06.01.2007, 15:24
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

Rofo88
06.01.2007, 16:14
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

xbgamer
06.01.2007, 17:07
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.

Rofo88
06.01.2007, 17:30
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!!

xbgamer
06.01.2007, 18:05
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

Rofo88
06.01.2007, 18:07
Welchen Timer willst Du wechseln? (meinst Du stoppen/starten)

xbgamer
06.01.2007, 18:52
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.

Rofo88
06.01.2007, 19:16
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

xbgamer
06.01.2007, 19:44
jo wenn ich jetzt da els reinschreibe dann blinkt net mal mehr portc.2 sondern leuchtet nur noch

xbgamer
07.01.2007, 10:10
$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.

xbgamer
10.01.2007, 19:05
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.