-         

Ergebnis 1 bis 6 von 6

Thema: BASCOM LCD Uhr Bug

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    BASCOM LCD Uhr Bug

    Anzeige

    Code:
    $regfile = "m8def.dat"                                      ' specify the used micro
    $crystal = 1000000                                          ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 120                                              ' default use 32 for the hardware stack
    $swstack = 120                                              ' default use 10 for the SW stack
    $framesize = 50                                             ' default use 40 for the frame space
    
    
    
    
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
    
    
    Dim A As Byte
    Config Lcd = 16 * 2                                         'configure lcd screen
    
    
    
    
    
     Config Timer1 = Timer , Prescale = 1024
     Enable Timer1
     Dim Minutes As Byte
     Dim Hours As Byte
      Dim Minutes10 As Byte
     Dim Hours10 As Byte
     Dim Day As Integer
    
     Dim I As Byte
     Minutes = 0
     Minutes10 = 0
     Hours10 = 0
     Hours = 0
    
    
     Ddrd = &B00000000                                          'input D
    
    
    
     On Timer1 Isr_von_timer1
    
     Enable Interrupts
     Timer1 = 6942
    
    
         Do                                                     ' Hauptprogramm
    
          If Hours = 23 And Minutes = 56 Then
    
          Day = Day + 1
          Hours = 0
          End If
    
          Hours10 = Hours / 10
          Minutes10 = Minutes / 10
    
    
       If Pind.0 = 1 Then
       Minutes = Minutes + 1
       End If
    
        If Pind.1 = 1 Then
       Hours = Hours + 1
       End If
    
     If Pind.2 = 1 Then
       Day = Day + 1
       End If
    
     If Pind.3 = 1 Then
       Day = Day + 100
       End If
    
    
    Cls                                                         'clear the LCD display
    Lcd "Vienna Time"                                         'display this at the top line
    
    'Lowerline
    
    Locate 2 , 0                                                'select the lower line
    Lcd Str(hours10)
    Lcd Str(hours)
    Lcd ":"                                                     'display this at the lower line
    Lcd Str(minutes10)
    Lcd Str(minutes)
    
    Lcd " "
    Lcd Day
    Lcd Str(Day)
    
    
    
    
          Loop
    
    
    
    
          Isr_von_timer1:
    
     Timer1 = 6942
    
     Minutes = Minutes + 1
     If Minutes = 60 Then
        Minutes = 0
        Hours = Hours + 1
     End If
    
    
    
    
     Return
    
    
    End

    So, das ist nun meine neue Uhr

    Sie schreibt auch

    "Vienna Time",

    nur darunter die Zahlen 01:02 die wechselt hundert mal pro sekunde oder so, und dann entsteht eine Zahlenkette 1235454545125454512 -> 2ms später5454564545456465 -> 2ms 58645645647865456454 und der ganze Bildschirm flackert herum... Vlt findet jemand den Bug??


    Mfg
    Geändert von runner02 (15.09.2011 um 10:44 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Überdenk mal das CLS in Hauptschleife.


    MfG
    Rone

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Soll ich am Ende der Schleife einfach wieder zurückspringen, sodass alles beim nächsten mal einfach überschrieben wird??

    Eine kleine Änerung habe ich übrigens vorgenommen:

    Habe die Variable minutes1 eingeführt (=minutes-minutes10) , sonst wäre bei Funktion des Programmeszb. 12 -> zehn (minutes10) + 12 (minutes) also 112.
    Das selbe bei hours.


    Die unteren Zahlen sind übrigens doch nicht willkürlich! 10:10 -> 11:11 -> 12:12 .... -> 110:11010 usw... Nur geht das umschalten sehr schnell <<1sek.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Hinweis1: Versuch herauszufinden oder einfach logisch denken wie oft Deine Hauptschleife
    in einer Sekunde durchlaufen wird, und wie das sich auf Deine Anzeige auswirkt

    Hinweis2: Grundsätzlich beschreibt man das Display nur wenn sich eine Variable ändert
    also 1mal pro Sekunde >>> Goto Hinweis1


    MfG
    Rone

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Zuerst habe ich nur den Text geschrieben, und das ohne wait gemacht, da ist er nicht so stark geflimmert...

    Das mit den Zahlen dürfte dann das Problem gewesen sein... Er überarbeitet sich


    Dabei sollten die Zahlen doch nur einmal pro Minute verändert werden... (Timer1 -> 1min)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Ich hab mal die zusätzliche Variable Minutes_old eingebaut:
    Code:
    $regfile = "m8def.dat"                  ' specify the used micro
    $crystal = 1000000                      ' used crystal frequency
    $baud = 19200                           ' use baud rate
    $hwstack = 120                          ' default use 32 for the hardware stack
    $swstack = 120                          ' default use 10 for the SW stack
    $framesize = 50                         ' default use 40 for the frame space
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
    
    Dim A As Byte
    Config Lcd = 16 * 2                     'configure lcd screen
    
    Config Timer1 = Timer , Prescale = 1024
    On Timer1 Isr_von_timer1
    Timer1 = 6942
    
    Dim Minutes As Byte
    Dim Minutes_old As Byte
    Dim Hours As Byte
    Dim Minutes10 As Byte
    Dim Hours10 As Byte
    Dim Day As Integer
    Dim I As Byte
    
    Minutes = 0
    Minutes_old = 100                       ' 100 = Startanzeige aufbauen
    Minutes10 = 0
    Hours10 = 0
    Hours = 0
    
    Ddrd = &B00000000                       'input D
    
    Enable Timer1
    Enable Interrupts
    
    Cls                                     'clear the LCD display
    Lcd "Vienna Time"                       'display this at the top line
    
    Do                                      ' Hauptprogramm
    
       If Hours = 23 And Minutes = 56 Then  ' Gangkorrektur
          Day = Day + 1
          Hours = 0
          Minutes = 0
       End If
    
       If Pind.0 = 1 Then                   ' set clock
          Minutes = Minutes + 1
       End If
    
       If Pind.1 = 1 Then
          Hours = Hours + 1
          Minutes_old = 100
       End If
    
       If Pind.2 = 1 Then
          Day = Day + 1
          Minutes_old = 100
       End If
    
       If Pind.3 = 1 Then
          Day = Day + 100
          Minutes_old = 100
       End If
    
       'Lowerline
    
       If Minutes <> Minutes_old Then       ' Ausgabe, wenn sich die Minuten geändert haben
          Hours10 = Hours / 10
          Minutes10 = Minutes / 10
    
          Locate 2 , 0                      'select the lower line
          Lcd Str(hours10)
          Lcd Str(hours)
          Lcd ":"                           'display this at the lower line
          Lcd Str(minutes10)
          Lcd Str(minutes)
    
          Lcd " "
          Lcd Day
          Lcd Str(day)
          Minutes_old = Minutes             ' Anzeige wurde aktualisiert
       End If
    
    Loop
    End
    
    Isr_von_timer1:
       Timer1 = 6942
       Minutes = Minutes + 1
       If Minutes = 60 Then
          Minutes = 0
          Hours = Hours + 1
       End If
    Return
    Ungetestet, sollte aber wenigstens das von Rone schon beschriebene Prinzip zeigen.

    Gruß

    mic
    Geändert von radbruch (16.09.2011 um 12:06 Uhr) Grund: Anzeige auch beim Stellen der Uhr aktualisieren

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. USB ASP mit Bascom nutzen? bzw AVRDUDE in Bascom eirichten?
    Von dremler im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 09.04.2008, 16:35
  2. wie aus bascom *.bas eine bascom lib machen ????
    Von DarkBeast im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 08.12.2007, 19:10

Berechtigungen

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