mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Bascom Programm


Autor: Yannic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Yannic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yannic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann keiner mehr helfen ?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannic wrote:
> Kann keiner mehr helfen ?

Wobei?

Autor: Yannic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich es umsetzten kann das ich die Zeitangaben bei denen die Lampe 
leuchtet im sekundentakt angeben kann.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, also wie man einen Timer-Interrupt bzw. einen Timer in Bascom 
realisiert.
Ich mache mich mal schlau, ob und ggf. wie das geht.
Kann aber etwas dauern...

Schwupp bin wieder da.

Im Roboternetz ist ein Tutorial sogar in Deutsch:
http://www.roboternetz.de/wissen/index.php/Bascom_und_Timer

Autor: PeterL (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Yannic (Gast)

>Wie ich es umsetzten kann das ich die Zeitangaben bei denen die Lampe
>leuchtet im sekundentakt angeben kann.

Bitte? Was ist an

Waitms 300

unverständlich? Kleiner Tip. 1000ms = 1s.

MfG
Falk

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yannic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wollte keinen Druck machen. Vielen Dank das du dich dran versuchst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.