Forum: Mikrocontroller und Digitale Elektronik Mit Taster im Lcd Hochzählen


von Sascha M. (sascha32)


Angehängte Dateien:

Lesenswert?

Guten Morgen.

Ich habe ein kleines Programm geschrieben. Und es geht zum teil,aber 
wenn ich meinen Taster in der $sim drücke geht der Wert i nicht hoch.

bitte um Hilfe von euch.

mfg


$sim

                                             $regfile = "m8def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68
' Wir arbeiten hier mit 4 Meg
$crystal = 4000000

' Zuerst das LCD einstellen
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , 
Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcd = 16 * 2


Config Pinb.1 = Input
Taste Alias Pinb.1
Pinb.1 = 1


Dim I As Integer





          Cls                                               'loesche das 
LCD Display
Locate 1 , 1                                                'Cursor auf 
1 Zeile, 1 Spalte
Lcd "hallo .";
Locate 2 , 1


 I = 200
 Lcd I




Do
If Taste = 1 Then
    I = I + 10

    Do
        Waitms 10
    Loop Until Taste = 1

End If

Loop

von Krapao (Gast)


Lesenswert?

Taster ist vielleicht falsch angeschlossen.

BASCOM hat eine Debounce Routine zur Entprellung.

von mue-c (Gast)


Lesenswert?

Den PullUp aktivierst du mit PortB.1 = 1 und nicht mit PinB.1 = 1

von mue-c (Gast)


Lesenswert?

... und die Abfrage wäre danach logischer auf Taste = 0

von mue-c (Gast)


Lesenswert?

Sorry für die Salamitaktik, aber das
Locate 2,1
LCD I
muss dann noch in die Do-Loop

von Sascha M. (sascha32)


Lesenswert?

danke schön es geht, so jetzt mache ich es noch um - 10 mit einem 
anderen Taster. vielen dank erst ein mal.

von Sascha M. (sascha32)


Lesenswert?

wie mache ich es das ich jetzt - 10 runterzählen kann ich bin am 
verzweifeln.
also ich muss so lange taste plus drücken bis ich den wert habe, wenn 
ich dann was ändern möchte muss ich die minustaste drücken.

von Sascha M. (sascha32)


Lesenswert?

was haltet ihr davon


$regfile = "M32def.dat"
$crystal = 11000592


 Config Timer1 = Timer , Prescale = 256                     'Timer 
konfigurieren
On Timer1 Timerroutine 
'Timerinterrupt Subroutine zuweisen
Enable Timer1                                               'Timer 
aktivieren
Start Timer1                                                'Timer 
starten




 Config Lcdmode = Port
Config Lcdbus = 4
'Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , 
Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6


Config Lcd = 16 * 2

Cls
Locate 1 , 1
Lcd " Uv-Belichter 1 "
Locate 2 , 4
Lcd " Sascha "



Config Porta.1 = Input
Config Porta.2 = Input
Config Porta.3 = Input
Config Porta.4 = Input
Config Portb.1 = Output


Taster1 Alias Pina.1
Taster2 Alias Pina.2
Taster3 Alias Pina.3
Taster4 Alias Pina.4
Summer Alias Pinb.1

Taster1 = 1
Taster2 = 1
Taster3 = 1
Taster4 = 1


Dim Zaehler As Word
Dim Halt As Bit
Dim Halt1 As Bit
Dim Start1 As Bit
Dim Sek As Bit
Zaehler = 200
Halt = 0
Halt1 = 0
Start1 = 0





Do


If Taster1 = 0 Then
Locate 2 , 2
Lcd "Time: "
Locate 2 , 8
Lcd Zaehler
End If
 Cursor Off Noblink
If Halt = 0 Then

If Taster2 = 0 Then
Zaehler = Zaehler + 10
Halt = 1
End If
End If

If Taster2 = 1 Then
Waitms 20
Halt = 0
End If

If Zaehler > 500 Then
Zaehler = 500
End If


 If Halt1 = 0 Then


  If Taster3 = 0 Then
Zaehler = Zaehler - 10
Halt1 = 1
End If
End If

If Taster3 = 1 Then
Waitms 20
Halt1 = 0
End If





If Start1 = 0 Then

If Zaehler < 150 Then
Zaehler = 150
End If
End If
If Taster4 = 0 Then
Start1 = 1
End If
If Start1 = 1 Then
Zaehler = Zaehler - 1
End If
If Zaehler = 0 Then
Start1 = 0
End If
If Zaehler < 100 Then
Locate 2 , 10
Lcd " "
End If
If Zaehler < 10 Then
Locate 2 , 9
Lcd " "
End If
If Zaehler = 5 Then
Summer = 0
End If
If Zaehler = 3 Then
Summer = 0
End If
If Zaehler = 1 Then
Summer = 0
End If
Loop
End

  Timerroutine:
Rem

 Timer1 = 22595
 Sek = 1
 Timer1 = 65000
Return

von Sascha M. (sascha32)


Lesenswert?

Guten Morgen




Wie kann man von der letzten anweißung ( Progamm ende in einer do .... 
loop Schleife. ) wieder zurück zum anfang kommen. gibt es da  etwas für 
?


mfg

von kein Gast (Gast)


Lesenswert?

Sascha Möwert schrieb:
> Summer Alias Pinb.1
>
> Taster1 = 1
> Taster2 = 1
> Taster3 = 1
> Taster4 = 1

Hallo Sascha,

dies hier ist schonmal nicht richtig.
mit Pin... werden Eingänge abgefragt.

Dein Summer soll sicher kein Eingang sein.
Da Tasterx durch die Alias-Geshichte auch nur auf Pinx hinausläuft macht 
auch dies keinen Sinn. Das ist dann etwa so, als stehst du vor einem 
Klingeltaster und sagst: "jetzt sei gedrückt".
Wahrscheinlich wolltest du die Pullups einschalten - schau dir an, wie 
das geht.

> Timerroutine:
>    Rem
>    Timer1 = 22595
>    Sek = 1
>    Timer1 = 65000
> Return

Was hast du hier vor? Du setzt den Counter erst auf Wert A und zwei 
Takte später auf Wert B. Das "Timer1 = 22595" ist an dieser Stelle 
offenbar sinnfrei.

Die ganze If-Geschichte habe ich mir nicht angetan.
Formatiere dein Programm vernünftig, so dass erkennbar wird, was 
zusammengehört.

Gruß
keinGast

von kein Gast (Gast)


Lesenswert?

nochmal ich,

jetzt wo ichs sehe: welchen Sinn macht die Timer1-Routine überhaupt?
abgesehen davon, dass sie ihre eigene Aufruffrequenz einstellt, setzt 
sie eine unbenutzte Variable.

Sascha Möwert schrieb:
>
> Wie kann man von der letzten anweißung ( Progamm ende in einer do ....
> loop Schleife. ) wieder zurück zum anfang kommen. gibt es da  etwas für
> ?
> mfg

Zu welchem Anfang willst du denn kommen?
Eine do-loop-Schleife looped zwischen den beiden Wörtern "do" und 
"loop".

von Sascha M. (sascha32)


Lesenswert?

ja ich bin ja noch am anfang mit Bascom und atmega. ich übe ja noch, 
aber ich möchte wenn die zeit auf 0 ist das ich wieder am Cls
Locate 1 , 1
Lcd " Uv-Belichter 1 "
Locate 2 , 4
Lcd " Sascha "
also über den do hin komme. Das er wieder von anfang an anfängt.

wenn es so was gibt, geht.

von kein Gast (Gast)


Lesenswert?

nimm einfach 2 do-loop-Schleifen.

do
   locate 1,1 : lcd "Uv-Belichter"
   locate 2,4 : lcd "Sascha"
   do
       hier machst du was du tun willst
   loop until Zeit = 0
loop
end

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.