Archiv verlassen und diese Seite im Standarddesign anzeigen : Zähler mit Bascom
hallo!
ich möchte einen Zähler proggen.
habe im Internet leider keine Beispielprogramme gefunden.
also wenn am einem Pin 3 mal (innerhalb von 10 sekunden) high gemessen wird, soll an einem anderen Pin high signal für anliegen.
wie mache ich das?
Ein Beipiel vielleicht?
Danke
Hallo,
was hat das mit einem Zähler zu tun? Oder meinst du, jeweils 3 Impulse an einem Pin sollen durch einen Puls an einem anderen ersetzt werden, also praktisch ein Teiler : 3?
Wie lange soll das high am Ausgang erhalten bleiben?
Kommen die Eingangsimpulse von einem Taster (Prellen!) oder von einer Art Impulsgeber?
Gruß
Rolf
ok, ich erzähle es genauer.
Ich bin dabei einen GSM-pager für das auto zu bauen. das Handy im auto soll mich anrufen, wenn die alarmanlage losgeht.
Dazu wollte ich den Signal von der Sirene verwenden.
also wenn die Sirene angeht (wird mit pin von AVR verbunden), soll das handy einen At-Befehl ans Handy über UART senden, dass das handy mich anruft.
soweit, so gut. aber die Sirene macht auch Töne bei Schärfen, entschärfen der Alarmanlage. Peep und peep-peep (typisch, kennt wohl jeder).
Dann soll das handy mich natürlich nicht anrufen. Sondern erst wenn es dauerhaft peept. Vorwarnung peep-peep-peep-peep, alarm uuuuuuuuaaaaaaaaa-uuuuuuuuuuaaaaaaaa :)
Verstehst du?
peterfido
26.01.2008, 14:30
Das wäre eine Möglichkeit. Allerdings nicht getestet...
Dim Sek As Byte
Dim Ms As Integer
Dim Zaehler As Byte
Config Pinb.0 = Input
Config Portb.1 = Output
Config Portb.2 = Output
Alarmeing Alias Pinb.0
Ausgang Alias Portb.1
Led Alias Portb.2
Do
Gosub Msek
If Alarmeing = 1 Then
If Zaehler = 0 Then
Ms = 0
Sek = 0
End If
Zaehler = Zaehler + 1
If Zaehler = 3 Then
Set Ausgang
Sek = 0
End If
Do
Gosub Msek
Loop Until Alarmeing = 0
End If
Loop
End
Msek: 'Jede Millisekunde
Waitms 1
Ms = Ms + 1
If Ms = 1000 Then
Sek = Sek + 1
Ms = 0
End If
If Sek > 10 Then
Zaehler = 0
Sek = 0
Toggle Led
Reset Ausgang
End If
Return
Danke, werde ich mal probieren :)
Also ich werde dein code etwas bearbeiten, und jemand guckt, ob das so richtig ist:
Dim Sek As Byte
Dim Ms As Integer
Dim Zaehler As Byte
Config Pinb.0 = Input
Alarmeing Alias Pinb.0
Do
Alarmeing = Alarmeing + 1
If Alarmeing = 3 Then
Gosub Alarm
End If
Loop
End
Alarm:
wait 1
print 'ausgabe über UART
Input "atd+49xxxxxxxx;"
wait 40
print 'zur Sicherheit, falls handy Handy nicht gewählt hat
Input "atd+49xxxxxxxx;"
wait 10
Return
kann das so funktionieren?
Hier der code:
$regfile = "m16def.dat"
$crystal = 4000000
$baud = 19200
Config Pinb.0 = Input
Alarming Alias Pinb.0
Dim Alarming As Byte
Do
Alarming = Alarming + 1 '!!!!!!!!!!!!!!
If Alarming > 2 Then
Gosub Alarm
End If
Loop
End
Alarm:
Wait 1
Print
Input "atd+49xxxxxxx;"
Wait 40
Return
Bei der Zeile mit !!!!!!!!!! mekert der Compiler.
kann das einer vielleicht korriegieren?
Danke
Hallo Alexander,
der Compiler meckert nicht nur, er sagt dir sogar was ihm nicht passt. Nur lesen mußt du es selber.
Warten wir mal ab, was die Jungs vom µC.net dazu sagen.
Gruß, Michael
Er sagt invalid datatyp.
Ich weiss, es sieht auch komisch aus, aber ich weiss nicht, wie es richitg ist.
Vielleicht kann mir einer dabei helfen
Christopher1
26.01.2008, 15:48
Alarming Alias Pinb.0
Dim Alarming As Byte
und
Alarming = Alarming + 1
Macht irgendwie wenig Sinn ;-)
kannst ja gleich PortB.0 = 2 schreiben ;-)
Dass es wenig sinn macht, habe ich schon beim Schreiben verstanden ;)
Wie muss es denn aussehen, damit es Sinn macht?
peterfido
26.01.2008, 16:22
Bei deinem Ansatz wird der Alarm auch ausgelöst, wenn 3mal das Auto abgeschlossen wurde oder so...
$regfile = "m16def.dat"
$crystal = 4000000
$baud = 19200
Dim Sek As Byte
Dim Ms As Integer
Dim Zaehler As Byte
Config Pinb.0 = Input
Config Portb.1 = Output
Config Portb.2 = Output
Alarmeing Alias Pinb.0
Ausgang Alias Portb.1
Led Alias Portb.2
Do
Gosub Msek
If Alarmeing = 1 Then
If Zaehler = 0 Then
Ms = 0
Sek = 0
End If
Zaehler = Zaehler + 1
If Zaehler = 3 Then
Gosub Alarm
End If
Do
Gosub Msek
Loop Until Alarmeing = 0
End If
Loop
End
Msek: 'Jede Millisekunde
Waitms 1
Ms = Ms + 1
If Ms = 1000 Then
Sek = Sek + 1
Ms = 0
End If
If Sek > 10 Then 'zaehler zurücksetzen, wenn innerhalb 10 Sek die 3 Töne nicht erreicht worden
Zaehler = 0
Sek = 0
Toggle Led 'LED zur Signalisierung, dass das Programm arbeitet.
Reset Ausgang
End If
Return
Alarm:
Sek = 0
Set Ausgang 'z.B. für LED Anzeige oder einem Relais, welches das Handy einschaltet
Wait 1 'evtl länger warten, falls Handy "Hochfährt"
Print "atd+49xxxxxxx;"
'Input "atd+49xxxxxxx;"
Wait 40
'evtl einlesen, ob ein OK vom Handy kommt.
Reset Ausgang 'abschalten der LED oder des Handys
Return
edit: Bei deinem Codeansatz wird immer Alarm ausgelöst
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.