-
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?
-
Das wäre eine Möglichkeit. Allerdings nicht getestet...
Code:
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
-
Alarming Alias Pinb.0
Dim Alarming As Byte
und
Alarming = Alarming + 1
Macht irgendwie wenig Sinn ;-)
kannst ja gleich PortB.0 = 2 schreiben ;-)