PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zähler mit Bascom



Dj_Beat
26.01.2008, 12:02
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

for_ro
26.01.2008, 12:36
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

Dj_Beat
26.01.2008, 12:43
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, 13: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

Dj_Beat
26.01.2008, 13:37
Danke, werde ich mal probieren :)

Dj_Beat
26.01.2008, 13:46
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?

Dj_Beat
26.01.2008, 14:25
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

Michael
26.01.2008, 14:32
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

Dj_Beat
26.01.2008, 14:35
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, 14:48
Alarming Alias Pinb.0
Dim Alarming As Byte
und
Alarming = Alarming + 1

Macht irgendwie wenig Sinn ;-)
kannst ja gleich PortB.0 = 2 schreiben ;-)

Dj_Beat
26.01.2008, 14:50
Dass es wenig sinn macht, habe ich schon beim Schreiben verstanden ;)
Wie muss es denn aussehen, damit es Sinn macht?

peterfido
26.01.2008, 15: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