-         

Ergebnis 1 bis 6 von 6

Thema: Suche Hilfe bei Variablen und Anwengung mit LCD

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.12.2008
    Ort
    Stockach (Germany)
    Alter
    34
    Beiträge
    15

    Suche Hilfe bei Variablen und Anwengung mit LCD

    Anzeige

    Hallo Zusammen

    vielleicht kann mir jemand bei einem Problem Helfen.
    Da ich noch nie Programmiert habe(weder in Basic noch sonst was)
    kenne ich mich nicht sehr gut mit Bascom aus.
    Habe vereinzelt Leds zum blinken bekommen und das LCD angesteuert.
    Jetzt würde es mich interesieren wie das mit den Variablen funktioniert. Bzw erklären worauf ich auchten muss und in welcher Reihenfolge die Befehle kommen müssen.
    Ne idee hätte ich schon zur Anwendung:

    Taster 1 an Pinc.1
    Taster 2 an Pinc.2

    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 ,
    Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 ,
    Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Portd = Output

    Aufgabe: Per Taste 1 die Zahl 1 bis 10 per Tastendruck nach oben zählen
    Per Taste 2 nach untenzählen.

    Das müsste relativ schnell funktionieren und für mich als Noobie auch einfach zu verstehen.

    Wenn jemand Helfen könnte würde ich mich sehr freuen

    Grüße Noobidubi

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    30.12.2008
    Ort
    Stockach (Germany)
    Alter
    34
    Beiträge
    15
    Hab mir da schnell was zusammen geschustert. Läuft alles eigentlich gar nicht schlecht,
    nur beim drücken der Taste1 zählt das Display wie verrückt durch und bei Taste2 geht nur einmal zurück.
    Woran könnte das liegen?
    Vielleicht mal das Programm durchschauen ob Ihr einen Fehler findet?

    Ein Fehler muss ja da sein, sonst würde es wie gewünscht funktionieren

    Code:
    '---------------------------------------------------------------------------
    'Titel         : LCD-Grundlagen Testen
    'Datei         : Grundlagen_LCD ansteuern
    '---------------------------------------------------------------------------
    'Funktion      : Textausgabe an LCD
    'Schaltung     : Erweiterungsplatine "LCD" an Buchsenleiste
    '              :
    '              :
    '---------------------------------------------------------------------------
    'Display-      :
    'controller    : KS0070, HD44100 kompatibel
    '---------------------------------------------------------------------------
    'Prozessor     : ATmega8 3,6864MHz
    'Sprache       : Bascom-AVR
    'Datum         : 04.11.2008
    'Version       : 1.0
    'Autor         : Stefan Merk
    '---------------------------------------------------------------------------
    ' hier Initialisierung durchführen
    '---------------------------------------------------------------------------
    $regfile = "m8def.dat"
    $crystal = 3686400
    $hwstack = 32
    $swstack = 10
    $framesize = 60
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 ,       ' Config können
    Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 ,       ' auch in einer
    Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2            ' Zeile stehen
    Config Lcd = 16 * 2                                         ' LCD mit 16Zeichen
                                                                 ' je Zeile, 2 Zeilig
    Config Portd = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    
    '---------------------------------------------------------------------------
    'Hier Alias inizialisieren
    Taster1 Alias Pinb.0
    Taster2 Alias Pinb.1
    '---------------------------------------------------------------------------
    'Hier PullUp inizialisieren
    Portb.0 = 1
    Portb.1 = 1
    '---------------------------------------------------------------------------
    'Hier Variable inizialisieren
    Dim A As Integer
    Dim B As Integer
    A = 1
    B = 1
    '---------------------------------------------------------------------------
    'Hier Unterprogramme Declarieren
    Declare Sub Count_up
    Declare Sub Count_down
    Declare Sub Weiter
    '---------------------------------------------------------------------------
    'Tasten entprellen
    Config Debounce = 30
    Debounce Pinb.0 , 0 , Count_up , Sub
    Debounce Pinb.1 , 0 , Count_down , Sub
    
    '---------------------------------------------------------------------------
    
    Cls
    Cursor Off
    Upperline
    Lcd "Counter"
    Lowerline
    Lcd "T1=Up; T2=Down"
    Wait 1
    Cls
    Upperline
    Lcd "T1=Up; T2=Down"
    Wait 1
    
    Do
    Start:
    If Taster1 = 0 Then
    Gosub Count_up
    Else
    Gosub Weiter
    End If
    
    If Taster2 = 0 Then
    Gosub Count_down
    Else
    Gosub Weiter
    End If
    
    Loop
    End
    
    Sub Count_up:
    A = A + 1
    Locate 2 , 1
    Lcd A
    End Sub
    
    Sub Count_down:
    B = A - 1
    Locate 2 , 1
    Lcd B
    End Sub
    
    Sub Weiter:
    Locate 2 , 8
    Lcd "Weiter"
    End Sub

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Noobidubi,
    die Do..Loop läuft die ganze Zeit sehr schnell ab. Nur wenn einer der beiden Taster gedrückt ist, wird kurz die entsprechende Sub aufgerufen und dann geht's weiter in der Schleife. Da du die Taster nicht so schnell wieder loslassen kannst, werden immer gleich mehrere Durchläufe stattfinden.
    Beim Count_up wird A erhöht und angezeigt. Bei mehrmaligen Durchlaufen wird A schnell größer.
    Bei Count_down wird B=A-1 gesetzt und B wird angezeigt. Da A sich nciht ändert, wird die Sub zwar mehrfach aufgerufen, aber immer der gleiche Wert in B geschrieben.
    Deine Debounce Befehle werden nur vor der Schleife aufgerufen. Wenn da keine Taste gedrückt ist, nutzen die nichts.
    Schreibe mal so:

    Code:
    Do
        Debounce Pinb.0 , 0 , Count_up , Sub
        Debounce Pinb.1 , 0 , Count_down , Sub
    Loop
    
    End
    
    Sub Count_up:
    A = A + 1
    Locate 2 , 1
    Lcd A
    End Sub
    
    Sub Count_down:
    A = A - 1
    Locate 2 , 1
    Lcd A
    End Sub
    dann solte es funktionieren.

    Gruß

    Rolf

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.12.2008
    Ort
    Stockach (Germany)
    Alter
    34
    Beiträge
    15
    hatt alles soweit funktioniert danke für die Hilfe. =D>
    Jetzt ergibts sich nur ein Problem:

    wenn bei 0 angekommen mit Taster2 gedrückt wird dann wird -1 angezeigt
    wenn man jetzt mit Taster1 nach oben zählt ergibt sich dass aus -1 dann 01
    wird und durch die Addresierung im Display Locate 2 , 1 dann bei 1 11steht bzw beim Weiterzählen 21; 31; 41 usw
    WIe kann man das Umgehen?

    Und noch eine Frage wie kann ich den Zählberreich begrenzen? So dass nur bis +10 bzw -10 gezählt werden kann.
    Habe was mit 1 to 10 oder so ähnlich im Kopf.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    if then ....

    if a>10 then a=10
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    30.12.2008
    Ort
    Stockach (Germany)
    Alter
    34
    Beiträge
    15
    Zitat Zitat von Vitis
    if then ....

    if a>10 then a=10
    danke Vitis

    code zum begrenzen des Zählers von 10 bis -10
    Codeschnippsel
    Code:
    Sub Count_up:
    A = A + 1
    If A > 10 Then A = 10                                       'begrenzt auf 10
    Locate 2 , 1
    Lcd A
    End Sub
    
    Sub Count_down:
    A = A - 1
    If A < -10 Then A = -10                                     'gebrenzt auf -10
    Locate 2 , 1
    Lcd A
    End Sub
    was jetzt noch probleme macht ist
    dass wenn unter 0 gezählt wird,
    also -1 bis -10 dann wird bei -10 3stellen im LCD benutzt.
    Wenn man dann zurück über 0 Zählt
    als 0 bis 10 dann wird die 2. und 3. Stelle im LCD nicht zurückgesetzt.
    Klartext schaut es dann so aus:

    Von -10 nach 0 per Tastendruck:
    -10; -90(sollte aber -9 sein); -80;-70;-60;-50;-40;-30;-20;-10;
    dann weiter

    von 0 bis 10 per Tastendruck:
    010(sollte aber 0 sein);110; 210;310;410;510;610;710;810;910;100

    Ich hab das Problem per CLS gelöst, bin aber damit nicht zufrieden.
    Kann man die 2. und 3. in der unteren LCD Anzeige auch anderst aktualisieren ohne dass man das Lcd mit CLS löscht?
    Wenn jemand Erfahrung gemacht hat mit solchen Sachen wäre ich für
    einen Gedankenanstoß sehr erfreut

    hier das ganze Programm mit CLS im Gosub Count_up bzw Count_down
    das Ergebnis ist wie gedacht. Ohne CLS ist es dann wie oben beschrieben
    Code:
    '---------------------------------------------------------------------------
    'Titel         : LCD-Grundlagen Testen
    'Datei         : Grundlagen_LCD ansteuern
    '---------------------------------------------------------------------------
    'Funktion      : Textausgabe an LCD
    'Schaltung     : Erweiterungsplatine "LCD" an Buchsenleiste
    '              :
    '              :
    '---------------------------------------------------------------------------
    'Display-      :
    'controller    : KS0070, HD44100 kompatibel
    '---------------------------------------------------------------------------
    'Prozessor     : ATmega8 3,6864MHz
    'Sprache       : Bascom-AVR
    'Datum         : 04.11.2008
    'Version       : 1.0
    'Autor         : Stefan Merk
    '---------------------------------------------------------------------------
    ' hier Initialisierung durchführen
    '---------------------------------------------------------------------------
    $regfile = "m8def.dat"
    $crystal = 3686400
    $hwstack = 32
    $swstack = 10
    $framesize = 60
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 ,       ' Config können
    Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 ,       ' auch in einer
    Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2            ' Zeile stehen
    Config Lcd = 16 * 2                                         ' LCD mit 16Zeichen
                                                                 ' je Zeile, 2 Zeilig
    Config Portd = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    
    '---------------------------------------------------------------------------
    'Hier Alias inizialisieren
    Taster1 Alias Pinb.0
    Taster2 Alias Pinb.1
    '---------------------------------------------------------------------------
    'Hier PullUp inizialisieren
    Portb.0 = 1
    Portb.1 = 1
    '---------------------------------------------------------------------------
    'Hier Variable inizialisieren
    Dim A As Integer
    Dim B As Integer
    A = 0
    B = 0
    '---------------------------------------------------------------------------
    'Hier Unterprogramme Declarieren
    Declare Sub Count_up
    Declare Sub Count_down
    '---------------------------------------------------------------------------
    'Tasten entprellen
    '---------------------------------------------------------------------------
    
    Cls
    Cursor Off
    Upperline
    Lcd "Counter"
    Lowerline
    Lcd "T1=Up; T2=Down"
    Wait 1
    Cls
    Upperline
    Lcd "T1=Up; T2=Down"
    Wait 1
    
    Do
    
    Debounce Taster1 , 0 , Count_up , Sub
    Debounce Taster2 , 0 , Count_down , Sub
    
    Loop
    End
    
    Sub Count_up:
    Cls                                                         'Löscht LCD
    A = A + 1                                                   'berechnet variable
    If A > 10 Then A = 10                                       'gebrenzen auf -10
    Locate 1 , 1                                                'positioniert im LCD
    Lcd "T1=Up; T2=Down"
    Locate 2 , 1                                                'positioniert im LCD
    Lcd A                                                       'schreibt Variable ins LCD
    End Sub
    
    Sub Count_down:
    Cls                                                         'Löscht LCD
    A = A - 1                                                   'berechnet Variable
    If A < -10 Then A = -10                                     'gebrenzt auf -10
    Locate 1 , 1                                                'positioniert im LCD
    Lcd "T1=Up; T2=Down"
    Locate 2 , 1                                                'positioniert im LCD
    Lcd A                                                       'schreibt Variable ins LCD
    End Sub
    grüße Nubbidubi
    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.

Berechtigungen

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