Problem mit Bascom Programm

Gast #732143
Lesenswert?

Hallo,

ich wollte mit Bascom ein Programm schreiben, welches beim einschalten 
des µC 2 mal hintereinander piept und dann einen Timer startet. Wenn der 
Timmer dann z.B. bei 5 Sekunden angekommen ist, soll eine Lampe für 3 
Sekunden eingeschaltet werden. Doch irgendwie will mein Programm noch 
nicht so recht funktionieren.

Am Anfang piept es 2 mal wie es auch soll, doch wenn ich dann den Taster 
drücke (Ein Öffner kein schließer), dann leuchtet die Lampe sofort auf.

$regfile = "m16def.dat"
$crystal = 16000000


Config Porta.0 = Output
Config Portd.7 = Output
Config Pina.2 = Input
Dim Zeit As Byte
Dim A As Byte
Dim Main2 As Long
Dim Main1 As Long
Dim Main3 As Long


Main1:
Zeit=0
Portd.7 = 1
Waitms 300
Portd.7 = 0
Waitms 300
Portd.7 = 1
Waitms 300
Portd.7 = 0
Goto Main2


Main2:
Do
If Pina.2 = 0 Then
Goto Main3
Else
Zeit = 0
End if

Loop

Main3:

Zeit = Zeit + 1

If Zeit = 5 Then
Porta.0 = 1
Waitms 3000
Porta.0 = 0
End If
Goto Main2

Weiß jemand rat ?
#732154
Lesenswert?

Hallo,

zwei Sachen fallen mir auf:

Du hast keine Tastenentprellung verwendet, das kann u.U Probleme geben 
muß aber nicht. Ich empfehle dir den "Debounce" Befehl zu verwenden der 
macht die Entprellung, passende Parameter stehen in der Bascom-Help.

Wichtiger: Solange der Taster gedrückt ist, rennt der uC immer in die 
Main3-Schleife. Der macht das mehrere 10000 mal je nach taktung.
Das ganze kommt dir das vor wie wenn die Lampe sofort angeht da die 5 
Takte innerhalb von ein paar microsekunden raufgezählt sind.

Einen Timer hast du keinen Verwendet, da ich keine Initialisierung dafür 
finden kann. Wenn du nen Timer verwenden willst ist das besser da mit 
den Wait-Befehlen der uC angehalten wird und in der "Wartezeit" nix 
machen kann. Machst du das mit nem Timer kann der uC nebenher noch 
andere Sachen abarbeiten da der Timer in der uC-Hardware selbstständig 
rennt. :) Wenn du einen Timer willst musst du nur wissen welchen du 
nehmen willst dein verwendeter Chip hat mehrere.

Wie erzeugst du das Piepen, hast du an dem Ausgangspin nen kleinen 
Summer angeschlossen der "von selbst" also sobald der Strom bekommt 
piepst?
Wie soll der Ablauf des Programmes sein:

Einschalten
2x Piepsen
Warten auf Tasterdruck
nach Tasterdruck 5 sec warten dann Lampe anschalten

oder hab ich was falsch gelesen?

Wenn du mir noch sagen kannst ob du am Tastereingang einen externen
Pull-Up dran hast oder ob du den internen benutzen willst, kann ich dir 
das Programm entsprechend umschreiben das es läuft. (Habe selbst die 
Bascom-Vollversion)
Den geänderten Programmcode poste ich dir dann hier.


Roland :)
Gast #732179
Lesenswert?

Hi,

Danke schonmal für deine Hilfe. Ja der Programmablauf ist so richtig.

Der Summer summt von alleine muss also nur geschaltet werden.

Und es ist kein externer Pullup gesetzt.

Trotzdem sollte es aber ohne waits gelöst werden, da später ggf. 
mehrere, auch länger als nur 5 sec dauernde Zeiten dazu kommen können. 
Deswegen wäre eine Angabe in Sekunden besser als in Millisekunden.

mfg Yannic
Gast #733000
Lesenswert?

irgendwo muss du eine sekunde warten
z. B.
Zeit = Zeit + 1
wait 1

sonst zählt er sofort bis 5 (µController sind dabei sehr schnell)

wobei warten sehr schlecht ist, da der Controller in dieser Zeit nichts 
anderes machen kann, besser einen Timer benutzen
#733032
Lesenswert?

Hallo Yannic,

sorry bin grade erst von der Arbeit heimgekommen.
Ich kann nicht alles stehen und liegen lassen nur um dir das Prog zu 
schreiben (da hätte mein Chef was dagegen :D) Ich schreib dir das wie 
versprochen, aber sicher nicht innerhalb von nen paar Stunden, 
irgendwann muß ich auch noch pennen. Kurz vor Weihnachten ist immer die 
hölle los bei uns da gibts schon mal überstunden.
Ich bin schon am Ändern des Programmes dran (grade angefangen), geht 
noch ne weile.

Roland

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren