- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: LCD flackert bei Verwendung von Gosub Anweisungen! Warum?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2008
    Ort
    RLP
    Beiträge
    17
    Anzeige

    Powerstation Test
    Ok, danke!

    "Curser off" ist klar

    Ich glaub Lowerline und und Upperline statt "locate x,y" sollten deckungsgleich sein. Jedenfalls sind die beiden erstgenannten Befehle in der Hilfe explizit aufgeführt. Ich hab's mal getetstet und alles durch locate Befehle ersetzt - leider gleiches Ergebnis.

    Initlcd braucht man IMHO nicht - die Hilfe sagt dazu folgendes:
    The LCD display is initialized automatic at start up when LCD statements are used by your code.

    If fore some reason you would like to initialize it again you can use the INITLCD statement.
    hwstack, swstack und framesize hatte ich bei den Compileroptionen eingetragen - greift dann ja hoffentlich auch. Sicherheitshalber hab ich es jetzt nochmal in den Code übernommen.

    Config Debounce brauch ich doch auch nur, wenn ich nicht die 25ms Standardzeit haben will, oder?

    Mein Code sieht jetzt so aus: (Die LED-aufrufe sind zu debugzwecken)

    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    
    
    '**** Konstanten ****
    
    Const Fw_rev = "0.9"
    
    
    
    
    '**** LCD Initialisieren ****
    
    Dim ___lcdno As Bit
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.5 , Db6 = Porta.7 , Db7 = Porta.2 , E = Porta.0 , Rs = Porta.1
    
    
    
    
    '**** Variablendeklaration ****
    
    
    Config Debounce = 30
    
    
    '**** Ports etc. Parametrieren ****
    
    
    Config Portd.0 = Input
    Config Portd.1 = Input
    Config Portd.2 = Input
    Config Portd.3 = Input
    
    Config Pind.0 = Input
    Config Pind.1 = Input
    Config Pind.2 = Input
    Config Pind.3 = Input
    
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    
    '**** Sprungverteiler
    
    Initlcd
    Cls
    Cursor Off
    
    Do
    
       Locate 1 , 1
       Lcd " *** Test 1 *** "
       Locate 2 , 1
       Lcd "Lrn Prg Tst Fw?"
    
    
    
       Debounce Pind.0 , 0 , Pr , Sub
       Portb.2 = 1
    
    Loop
    
    End
    
    
    Pr:
       Cls
       Locate 2 , 1
       Lcd "test1"
       Portb.0 = 1
       Wait 1
       Portb.1 = 1
    Return

    Leider gleiches Ergebnis - funktioniert nicht. Die LEDs zeigen mir, dass er zum Label springt.

    Wie ist denn das? Der Code wird doch sequenziell abgearbeitet, oder? Eigentich sollte doch der Code zwischen Do ... Loop erst weiter ausgeführt werden wenn mit return aus dem Sub zurückgesprungen wird, oder?
    Wenn das nämlich nicht so wäre, dann würde ja u.U. schon wieder der alte Texte ins Display geschieben...

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi,
    Das Programm funktioniert auf jeden Fall, würd ich sagen.
    Nach drücken des Tasters kommt für 1 Sekunde "test1", danach gehts wieder von vorne los.
    Hab das auf dem RN-Mega8 laufen, darum hab nur die Ports ändern müssen fürs LCD, und für den Eingang PD0 den internen Pullup aktiviert, weil ich aussen keinen dran hab.

    Wie schaut das bei Dir aus ?

    Evtl. könnte man das noch optimieren, indem man den Text in der Hauptschleife nicht dauernd an das LCD sendet, wenn kein Taster gedrückt wurde, das hat aber jetzt nix mit dem Problem zu tun.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2008
    Ort
    RLP
    Beiträge
    17
    Danke linux_80 für deine Mühe.

    Bei mir funktioniert es leider nicht so. Nach dem Anschalten kommt der Text in der Hauptschleife (also die zwei Zeilen), nach einem Tastendruck bleibt er aber einfach stehen (während die LEDs schon reagieren - gesprungen wird also)

    Keine Ahnung warum das so ist! Läuft das LCD auf dem RN-Mega8 auch im 4-Bit Pin Mode oder evtl. anders?

    Grüße
    ElCapitano

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2008
    Ort
    RLP
    Beiträge
    17
    Also ich hab jetzt alles probiert,

    * Initialisiere das LCD nach dem Sprung noch mal neu,
    * schreibe mehrfach den gleichen Text nacheinander

    Alles bringt nichts - sobald er zu Pr: gesprungen ist fürt er zwar alle anderen IO Operationen aus (LEDs an PB.0 und PB.1 machen was sie sollen) aber ins LCD wird nichts mehr geschrieben...

    Pr:
    Initlcd
    Waitms 500
    For Var = 1 To 20 Step 1
    Locate 2 , 1
    Lcd "test1"
    Portb.0 = 1
    Wait 1
    Portb.1 = 1
    Wait 3

    Portb.1 = 0
    Portb.0 = 0

    Next
    Return



    Nachtrag:


    Also irgendwas mach debounbce anders als ein normaler gosub Aufruf!
    Mach ich es nämlich so:

    Code:
    Do
    
       Locate 1 , 1
       Lcd " *** Test125 *** "
       Locate 2 , 1
       Lcd "Lrn Prg Tst Fw?"
    
       If Pind.0 = 0 Then Gosub Pr
    
    Loop
    
    End
    
    
    Pr:
       Cls
       Locate 2 , 1
       Lcd "test1"
       Wait 5
    Return
    Dann funktiniert es einwandfrei!

    Nur dass ich dann die Tasten nicht mehr entprelle...

    ...gibts Alternativen zu debounce???

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Bei mir läuft das Debounce wunderbar, welche Bascom-Version hast Du, hier die 1.11.9.1, die gibts auch schon als Demo hab ich gesehen.

    Ich hab das letzte Beispiel von Dir verwendet, hab die Ports geändert, fürs RN-M8 muss man noch das RW-Pin per Hand auf 0 legen, danach erst das Initlcd, und schon gings.
    Statt Taster hab ich auch nur ein Kabel dran, das ich auf Gnd halte

    Wenn Du selber debouncen willst, musst Du nach dem erkennen des Signals (Taster) eine bestimmte Zeit warten, bleibt der Eingang auf dem Level, kannst du das Sub aufrufen, ändert sich der Wert vorzeitig, beginnt man wieder von vorne und wartet bis der gewünschte Wert wieder auftritt.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2008
    Ort
    RLP
    Beiträge
    17
    Ich hab hier die gleiche Bascom Version - nur als Demo. Vielleicht liegt ja hier der Hund begraben. Außerdem progge ich per AVR Studio - nicht direkt aus Bascom. Aber das sollte ja eigentlich keien Unterschied machen, oder?

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen