www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster nach Zeit abfragen BASCOM


Autor: Christopher Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte einem Taster nach einer bestimmten Zeit Abgefragt wird d.h.
dass wenn der Taster unter 1,5 Sekunden gedrückt wird soll der Ausgang 
Ausgeschaltet wird wenn er über 1,5 Sekunden gedrückt wird soll Portb.0 
eingeschaltet werden und Portb.1 so lange eingeschaltet werden wie auch 
der Taster gedrückt wird.
$regfile = "2313def.dat"
$crystal = 400000

Config Portb.0 = Output                                     'Relais1
Config Portb.1 = Output                                     'Relais2
Config Portb.3 = Input                                      'Taster
Config Portb.4 = Output                                     'LED
Portb.3 = 1                                                 
Portb.4 = 1
Waitms 500
Portb.4 = 0
Waitms 500
Portb.4 = 1
Waitms 500
Portb.4 = 0

Main:

If Pinb.3 = 1 Then
Waitms 1500
If Pinb.3 = 0 Then
Portb.0 = 0
Portb.1 = 0
Goto Main
End If
Waitms 3000
Portb.0 = 1
Taster:
If Pinb.3 = 1 Then
Portb.1 = 1
Goto Taster
Else
Portb.1 = 0
Goto Main
End If
Else
Goto Main
End If

Ich hoffe ihr wisst was ich meine :)

MFG

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst einen Timer.
Guckst du hier:
http://www.rn-wissen.de/index.php/Bascom_und_Timer

Gruß
Matze

PS.: 400kHz bei $crystal richtig?

Autor: Christopher Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Matze,

habe mich ein wenig eingearbeitet und losgelegt!
Würde das so funktionieren??
$regfile = "2313def.dat"
$crystal = 4000000

Config Timer0 = Timer , Prescale = 256
Dim Zähler As Byte
Zähler = 0
Enable Timer0
Dim Zint As Bit
Zint = 0
On Timer0 Timerinterput
Enable Interrupts
Config Portb.0 = Output                                     'Relais1
Config Portb.1 = Output                                     'Relais2
Config Portb.3 = Input                                      'Taster
Config Portb.4 = Output                                     'LED
Portb.4 = 1
Waitms 500
Portb.4 = 0
Waitms 500
Portb.4 = 1
Waitms 500
Portb.4 = 0
Do
If Zint = 0 Then
Debounce Pinb.3 , 1 , Timeron , Sub
Zint = 1
Else
Debounce Pinb.3 , 0 , Timeroff , Sub
Zint = 0
End If
Loop

End
Timeron:
Timer0 = 64




Return
Timerinterput:
Zähler = Zähler + 1
If Zähler = 4 Then
Portb.0 = 1
Portb.1 = 1
End If
Return
Timeroff:
Disable Timer0
If Zähler <= 3 Then
Portb.0 = 0
Portb.1 = 0
Else
Portb.0 = 0
End If
Return

MFG

Autor: Peter Hess (thunderfrog)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verständnissfrage für mich:

Config Portb.0 = Output                                     'Relais1
Config Portb.1 = Output                                     'Relais2
Config Portb.3 = Input                                      'Taster
Config Portb.4 = Output                                     'LED

Muss der Taster Input (3.Zeile) nicht mit PINB.3 gesetzt werden ?

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter Hess:

> Muss der Taster Input (3.Zeile) nicht mit PINB.3 gesetzt werden ?

Muss nicht; BASCOM ist es egal, ob da "PORTB" oder "PINB" steht. Es 
weiss, was gemeint ist, und setzt in beiden Fällen die Pin-Funktion 
richtig.

Autor: Peter Hess (thunderfrog)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Spezi

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christopher,

meiner Meinung nach nein.
Ich habe mal kurz was geschrieben. Habe allerdings andere Ports benutzt, 
weil ich gerade kein freies Steckbrett habe. Stecken überall LCD´s 
drann. Aber da kommt es ja auch nicht drauf an. Funktioniert so auf 
einem Mega8

PS.: Hab den Taster gegen Masse geschaltet, also Pullup nicht vergessen 
:-)
PPS.: 1,5 Sekunden sind echt wenig, wenn du es von Hand bedienen 
möchtest nimm lieber etwas mehr...
$regfile = "2313def.dat"
$crystal = 4000000

Config Timer0 = Timer , Prescale = 256           'Feuert 6,1x / Sekunde

Dim Ticks As Integer
Dim Tickson As Integer

Tickson = 9                                      'Passt nicht ganz, sind 1,47 Sekunden

Enable Interrupts
Config Portb.5 = Output
Config Pinb.3 = Input
Config Portb.4 = Output

Relais1 Alias Portb.5
Taster Alias Pinb.3
Led Alias Portb.4

Relais1 = 0
Taster = 1
Led=0

For Ticks = 1 To 5
Toggle Led
Waitms 500
Next
Ticks = -1


Enable Timer0
On Timer0 Timerinterput

Do
If Taster = 1 Then
   Led = 0
   If Ticks > -1 Then
      Ticks = -1
      Relais1 = 0
   Else
      Ticks = -1
   End If
Else
   Led = 1
   If Ticks = -1 Then Ticks = 0
   If Ticks = Tickson Then
      Ticks = -2
      Relais1 = 1
      End If
   End If

Loop

Timerinterput:
If Ticks > -1 Then
Incr Ticks
End If
Return

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.