-
Danke für deinen Beitrag, aber der Tip kam ja schon von Zapo. Leider brachte mir das auch keine Erfolge, egal wie ich das Programm schreibe, er macht nicht alles was in der Sub steht. Bzw. machen wird er es vielleicht, nur kommt es, aus welchem Grund auch immer, nicht an.
Der Port wird ja geschalten und wenn ich's als Interrupt schreibe funktionierts auch. Nur als Sub nicht.
Zu schnell kann es ja auch nicht sein, ich warte ja in der Sub noch ca. 2 Sekunden lang bevor ich wieder ins Hauptprogramm springe.
Habt ihr noch mehr Ideen? Ich kann's drehen wie ich will, es funktioniert einfach nicht.
Grüße und danke
Enrico
-
lass das
Toggle Portd.0
___lcdno = 0
einfach mal weg!
schreibe einfach nur:
do
'Hauptprogramm
'debounce.....usw
loop
schniedelwutz:
cls
lcd "test"
wait 2 'ganz wichtig sonst siehst du den TEXT nicht !!!!
return
Zapo.
so wie schon 2x beschrieben, das MUß funktionieren!
und was auch gehen muß wäre:
if pinx.x = 0 then gosub schniedelwutz 'geht auf jeden FALL!!!! brauchst auch kein end if wenns in einer Zeile steht!
---> füge dann aber um zu entprellen direkt am Anfang der SUB eine kleine Wartezeit von 100 - 200 ms ein...... merkst du aber...
-
Auch das habe ich schon erfolglos probiert. Es ist ja nicht so, dass er nicht in die Sub geht wenn ich die Taste drücke - das macht er ja. Das einzige was er nicht macht, ist den Text aus der Sub auf dem LCD anzeigen.
Ich habe gerade noch probiert in der Sub eine Zählvariable bei jedem Tastdruck um eins zu erhöhen und dann im Hauptprogramm auf dem LCD anzuzeigen, auch das funktioniert problemlos.
Liegt es vielleicht an Bascom, dass das nicht funktioniert - Programmfehler?
Grüße
Enrico
-
kann nicht sein, ich gebe auch in SUBs Texte aus! mit und ohne Interrupt sollte das Funktionieren...
-
Hallo,
das hilft mir nur leider nicht weiter. Woran kann es denn noch liegen? Hardware vielleicht? Wobei das Display ja funktionsfähig ist.
Grüße
Enrico
-
also ... wenn ich mir die hilfe von bascom zum thema debounce so ansehe, komme ich zu dem schluss, dass das so nicht gehen kann, wie du es eingegeben hast. ich denke du musst ein label setzten statt der sub-prozedur.
Code:
$regfile = "m8def.dat"
$crystal = 3686400 'Quarz: 3,6864 MHz
Ddrc = &B00000000
Ddrd = &B00000001 'Int0 als Eingang konfiguriert - Programmiertaste
Portc = &B00001111
Portd.4 = 1 'Pull-Up von Int0 an
Portd.3 = 1 'Pull-Up von PD3 an
Config Scl = Portc.5 'SCL-Port auf Port C.5
Config Sda = Portc.4 'SDA-Port auf Port C.4
Config Lcd = 40 * 4 'Anzeigemodus 40 x 4 Zeichen
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portb.1 , E2 = Portb.2 , Rs = Portb.3
Declare Sub Temperaturen 'Sub für Programmierung in zweiter Ebene
Declare Sub Schaltzeiten 'Sub für Programmierung in zweiter Ebene
Declare Sub Prog_auswahl 'Sub für Programmier-Auswahl
Declare Sub Wert_hoch 'Sub Temperatur hochzählen
Declare Sub Wert_runter 'Sub Temperatur runterzählen
Declare Sub Speichern 'Werte speichern
Declare Sub Pfeil_rechts 'Auswahl für Programmiermodus Pfeil nach rechts
Declare Sub Pfeil_links 'Auswahl für Programmiermodus Pfeil nach links
Declare Sub Programm
Dim ___lcdno As Bit 'Umschaltbyte für Anzeige 0=Chip 1; 1=Chip 2
Dim W_adr_1 As Byte 'Schreibadresse vom PCF8574(1)
Dim R_adr_1 As Byte 'Leseadresse vom PCF8574(1)
Dim Dat_1 As Byte 'Datenwerte vom PCF8574(1)
Dim W_adr_2 As Byte 'Schreibadresse vom PCF8574(2)
Dim R_adr_2 As Byte 'Leseadresse vom PCF8574(2)
Dim W_adr_3 As Byte 'Schreibadresse vom PCF8591(1)
Dim R_adr_3 As Byte 'Leseadresse vom PCF8591(1)
Dim T_boiler As Byte 'Temperatur vom Boiler
Dim T_puffer As Byte 'Temperatur vom Puffer
'******************** LCD initialisieren
___lcdno = 0 'auf Chip 1 schalten
Initlcd 'die beiden oberen Zeilen initialisieren
Cls
Locate 1 , 1
Lcd "Ausen Vorlauf Boiler Puffer" 'Beschriftung der ersten Zeile
Cursor Off
Do
___lcdno = 0 'auf Chip 1 schalten
Locate 2 , 1
Lcd "Test Test Test"
Debounce Pind.4 , 0 , Programm , Sub
Loop
end ; ----->>>>> hier ein end
Programm : ; <--------------------------- hier das label
Portd.0 = Not Portd.0
___lcdno = 0 'auf Chip 1 schalten
Initlcd 'die beiden oberen Zeilen initialisieren
Cls
Locate 1 , 1
Lcd "Programm" 'Beschriftung der ersten Zeile
Waitms 200
return ;<---------------------- hier das return
so ist es zumindest in der help beschrieben
-
habe deine orginalcode vom ersten thread genommen und den
debounce befehl ersetzt mit
If Pind.4 = 0 Then Programm
jetzt springt es ins sub und schreibt im sim mir auch den text
"programm".warum auch immer es bei debounce nicht funzt
weiss ich auch nicht,teste es halt mal.setzte die zeit vom waitms 200
ruhig mal auf 2 sekunden.
-
Das glaube ich ja nicht, mit der IF-Abfrage funktioniert es wirklich.
Aber warum nicht mit Debounce???
Na gut, wenn es so ist, dann ist es eben so. Aber gibt es da noch eine andere Möglichkeit einer sinnvollen Tastentprellung?
Grüße und vielen Dank für die zahlreiche Hilfe.
Enrico
-
ja .tastenentprellung wäre in dem fall mir einer warteschleife möglich.
kenne mich da auch noch nicht so aus,progge erst seit dez 06.warum der debounce nicht funzt ist mir auch ein rätzel.
aber was solls es geht ja jetzt wie du möchtest.wenn du herausbekommst
wie es mit deboundce funzt,melde dich.
-
Problem gelöst
Hallo,
das Problem ist gelöst, der Tip kam aus dem Forum von mcselec.com, ich habe vergessen die Biliothek für das 40 * 4 Display in den Code einzufügen bzw. in den Einstellungen von Bascom richtig einzustellen.
Da ich das nicht gemacht habe hat das ganze zwar funktioniert, aber der Text wurde irgendwo hingeschrieben und ausgerechnet dort hin, wo ich ihn nicht mehr sehen konnte.
Mit der richtigen Einstellung funktioniert es also ohne Probleme.
Also mal wieder viel Wind um nichts...
Danke aber nochmal für die starke Unterstützung!
Grüße
Enrico