- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Debounce -> Sub -> LCD "" Funktioniert nicht

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    52
    Beiträge
    294

    Debounce -> Sub -> LCD "" Funktioniert nicht

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    ich bin Ratlos!

    Ich frage mit Debounce eine Taste ab. Wenn die Taste "0" ist, dann Springe ich in eine Unterroutine die etwas auf dem LCD ausgeben soll.

    Doch leider wird auf dem LCD nichts angezeigt. (Das "Eins" wird angezeigt, nur das "Zwei" nicht!)

    Irgendwie weis ich nicht was ich falsch mache!

    Gruß Bernd
    Angehängte Dateien Angehängte Dateien

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Du mußt überprüfen, ob die Taste (der Pin) tatsächlich "0" UND "1" erreichen kann. (Pullup ?).
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Gast
    Hallo Robert,

    die Pins erreichen tatsächlich "0" und "1" (nachgemessen). Ich setze ein STK500 zum Testen ein. Und einen Atmega8, habe ich vergessen zu erwähnen.

    Das irre ist, das die Subroutinen auch angesprungen werden. Herausgefunden habe ich das indem ich die Subroutinen etwas erweitert habe. Es wird ein Portpin umgeschalten an dem ich eine LED angehängt habe. Und die schaltet auch brav ein und aus!

    Noch Irrer ist aber, das sich die Sache im Simulator genau so verhält! Doch das "Zwei" wird nicht ausgegeben obwohl die Subroutine angesprungen und "abgearbeitet" wird.

    Zur Not mache ich die Sache eben mit einem Merkerbit, das nach dem Tastendruck gesetzt wird und springe nach der Abfrage mit "gosub" in die Unterroutine. Das Funktioniert, ist aber meiner Meinung nach keine saubere Sache, weil es ja eigentlich mit dem "Debounce" gehen müsste!

    Gruß Bernd (immer Ratloser)

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    D.h. EINZELN funktionieren, so scheint's, das "debounce" UND die subroutine "zwei", nur im Zusammenhang nicht.
    Kannst du deine "Merkerversion" posten, die ja funktioniert ?
    Da sich mein Glaube an Wunder in Grenzen hält, passiert da irgendein Unfug, den man finden muß
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Gast
    Hallo Robert,

    danke für Deine hilfe beim Unfug finden. Ich werde heute Abend die LED-Version Rekonstruieren und Posten.

    Die Merkerversion habe ich bisher nur auf dem Papier ist aber nicht schwer umzusetzen, solche Routinen hab ich in meiner Z80 Assembler Phase öfters gemacht. 15 Minuten mit Test genügen.

    Am besten ich mache eine kombinierte Version, habe heute zum Glück nichts geplant.

    Kleine Anmerkung: solche "komischen" Dinge waren Jahrelang der Grund warum ich Assembler programmiert habe. Ich habe Hochsprachen nie ganz getraut. Aber für Assembler fehlt mir inzwischen die (zusammenhängende) Zeit und da ist Bascom um längen besser für mich.

    Gruß Bernd

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Lieber Gast ! Ich kann deine Argumente völlig nachvollziehen.
    Wie auch immer: Daß der Debounce so brutalen Unsinn treibt, glaub' ich auch wieder nicht, dazu wird er zu oft verwendet.
    Also, schau' mer' mal.

    PS: Z80 ? Womöglich gar ZX81 od Spectrum ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    52
    Beiträge
    294
    Hi robert,

    sorry, habe gar nicht gemerkt das ich nicht eingelogged war...

    So, hier nun der Code.

    Die Merkerversion funktioniert komischer weise auch nicht.

    Die Einstellungen in meinem Bascom (1.11.7.7 Vollversion) sind: 4 Bit, Atmega8 und ich Takte mit 4MHz.

    Code:
    Config Lcdpin = Pin , E = Portd.1 , Rs = Portd.3 , Db7 = Portd.7 , Db6 = Portd.6 ,
    Config Lcdpin = Pin , Db5 = Portd.5 , Db4 = Portd.4
    
    Config Lcd = 16 * 4
    
    Config Portc = Output
    
    Dim ___lcdno As Bit
    Dim Mbit As Bit
    
    Initlcd
    Cls
    Lcd "Eins"
    
    Haupt:
    
    Debounce Pinb.1 , 0 , Zwei , Sub
    Debounce Pinb.2 , 0 , Merker , Sub
    If Mbit = 1 Then Gosub Drei
    Goto Haupt
    
    Zwei:
    
    Locate 2 , 1
    Lcd "Zwei"
    Portc.0 = Not Portc.0
    
    Return
    
    Merker:
    
    Mbit = 1
    Return
    
    Drei:
    
    Locate 3 , 1
    Lcd "Drei"
    Mbit = 0
    Portc.1 = Not Portc.1
    
    Return
    
    End
    Die Routine "Drei" wird über einen Merker angesprungen. Funktioniert aber auch nicht. Ich habe es weiter oben missverständlich ausgedrückt. Mit "das funktioniert" meinte ich das Prinzip. Die Routine hatte ich zu dem Zeitpunkt noch nicht im AVR getestet.

    Wie Du siehst schalte ich in den Unterroutinen "Zwei" und "Drei" je einen Portpin um. Das mache ich zur Kontrolle ob auch wirklich in die Unterroutine gesprungen wird.

    Es wird hineingesprungen (die LEDs schalten brav um), aber auf dem LCD wird nichts ausgegeben.

    Im Bascom Simulator genau das gleiche.

    Ich hoffe Du findest was!

    Gruß Bernd

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Tscha, mach folgendes, zum Fehler einkreisen:
    Füge nach LCD "Eins" zwei Gehorsamkeitsprünge aus:
    LCD "Eins"
    gosub zwei ' sehen, ob sub korrekt
    gosub drei ' sehen, ob sub korrekt
    Waitms 2000 ' etwas zeit, zu schauen
    Cls ' wieder weg damit
    Haupt: 'normalbetrieb
    ....

    Wenn nix zu sehen ist, hat's was mit den LCD-Befehlen an sich
    Wenn schon --> die Leds funzen nicht -- >Problem DEBOUNCE
    die Leds funzen, nix LOCATE/ LCD --> Problem
    da schauen wir dann weiter
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    52
    Beiträge
    294
    Hi Robert,

    ich glaube ich wende mich mit dem Problem direkt an den Bascom Entwickler.

    Ich habe die zwei Gosub-Zeilen, das Waitms und das CLS wie die vorgeschlagen hast eingebaut.

    Ereignis:

    Programm wie gepostet: hat NICHT Funktioniert!
    Programm modifiziert nach Deinem Vorschlag: es Funktioniert! Taste drücken, "Zwei" oder "Drei" wird angezeigt!
    Dann habe ich einen Befehl nach dem anderen wieder entfernt um den Fehler irgendwie einzukreisen.
    Und jetzt kommt der Hammer der mich an meinem Verstand zweifeln läßt!
    Das Programm hat wieder die Form wie von mir gepostet. Allerdings hat dieses Programm jetzt keine Fehlfunktion mehr!

    Wie kann denn das sein?

    Ich habe Null Plan!

    Ich werde Bascom neu Installieren, mal sehen was dann los ist.

    Das von mir gepostete Programm ist nämlich nur der Rest eines größeren Programms, das ich schon total demontiert habe um auf den Fehler zu kommen. Deshalb das kleine hier, denn wer will hier schon von zig Zeilen unnötigem Code belästigt werden...

    Schade das es in meinem "großen" Programm trotzdem nicht Funktioniert. Da habe ich den "Trick" nämlich auch gleich ausprobiert, aber da hats nichts gebracht!

    Gruß Bernd

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi Bernd: Nur zur sicherheit: vergrößere mal den HW- und den SW-Stack. Im Fehlerfalls liefert das nämlich sehr seltsame Effekte.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress