-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: LCD zeigt nur ganz kurz an und ist wieder leer

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627

    LCD zeigt nur ganz kurz an und ist wieder leer

    Anzeige

    Es ist, als wen man etwas an das LCD sendet und sofort CLS hinteher schickt...

    Ich habe zum testen den Wait 3 sekunden befehl reingechrieben und nun blitzt der Text nur noch ganz kurz auf...

    Was ist denn daran falsch?!

    Tobias

    Code:
    $regfile = "m8def.dat"                                      'AT-Mega8
    $crystal = 8000000                                          'Quarz: 8 MHz   INTERN!!!
    '$baud = 1200                                                'Baudrate der UART: 2400 Baud
    
    
    
    'Konfiguration LCD
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portd.6 , E = Portd.7 , Rs = Portb.0
    Cursor Off Noblink                                          ' Cursor aus
    
    
    'Timer
    'Config Portc = Input
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64       'FÜR PWM!!!
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64       'FÜR PWM!!!
    Config Timer0 = Timer, Prescale = 1024
    On Timer0 Timer0
    Const Timervorgabe = 61
    Enable Timer0
    Enable Interrupts
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang
    Ddrc = &B0000011                                            '1 Ausgang, 0 Eingang = Pin PC6-2 als Eingang; 1-0 als Ausgang
    Ddrd = &B11111011                                           '1 Ausgang, 0 Eingang = Pin PD7-0 als Ausgang; 0 als Eingang (Freigabe)
    'Portc = &B11111111                                         'PC0...PC7 auf High setzen
    Portb.1 = 0                                                 'damit der Motor nicht kurzzeitig anläuft
    
    
    
    '-------------------------------------------------------------------------------
    ' Variablen
    '-------------------------------------------------------------------------------
    Dim Anzeige_z As Byte                                       'Zähler Anzeige
    Dim Anzeige_auto As Bit
    Dim Anzeige_hand As Bit
    Dim Anzeige_e As Bit
    
    Dim Analog_in1 As Word                                      '=0-1023 vom Analogeingang
    Dim S1 As Bit                                               'Schalter 1
    Dim S2 As Bit                                               'Schalter 2
    Dim S3 As Bit                                               'Schalter 3
    Dim S3_m As Bit                                             'Schalter 3 MERKER
    
    Dim Pro1 As Integer
    Dim Pro2 As Single
    Dim Proz As Integer
    
    Dim Pwm1 As Single
    Dim Pwm As Integer
    
    Dim Taste_s1 As Byte
    
    'Anzeige
    
    
    
    '-------------------------------------------------------------------------------
    'Programm:
    '-------------------------------------------------------------------------------
    
    '----------
    'ANNIMATION
    '----------
    
    '----------------------------
    Start Adc
    Cls   'LCD löschen
    
    Anzeige_auto = 1
    Anzeige_hand = 0
    Anzeige_e = 0
    
    
    
    Do
    Portb.5 = 1                                                 'LCD Beleuchtung an
    
    If Pinc.3 = 0 Then                                          'Schalter 1
    S1 = 1
    Else
    S1 = 0
    End If
    
    If Pinc.4 = 0 Then                                          'Schalter 2
    S2 = 1
    Else
    S2 = 0
    End If
    
    If Pinc.5 = 0 Then                                          'Schalter 3
    S3 = 1
    Else
    S3 = 0
    End If
    
    
    Wait 3
    
    
    'Analogeingänge auslesen:
    'Analog_in1 = Getadc(1)                                      'Wert aus Analogeingang laden
    '
    '
    ''Umrechnung Eingang -> %
    ' Pro1 = Analog_in1 - 16                                     'Prozent1Wert  analog 16-90 also -16 = 0-74
    ' Pro2 = Pro1 * 1.351                                        'Rechnen: 100% / max(74) = 1.351
    ' Proz = Round(pro2)
    '
    ''Umrechnung % -> PWM
    ' Pwm1 = Proz * 2.55
    ' Pwm = Round(pwm1)
    '
    ''Motorsteuerung
    'If Pind.2 = 1 Then
    'Compare1a = Pwm
    'Else
    'Compare1a = 0
    'End If
    
    
    '---ANZEIGE AUTO WÄHLEN ---------------------------------------
    If Anzeige_hand = 1 And S1 = 1 And S2 = 0 And S3 = 0 Then
    
       'Anzeige_auto = 1
       'Anzeige_hand = 0
       'Anzeige_e = 0
    
    End If
    
    
    '---ANZEIGE HAND WÄHLEN---------------------------------------
    If Anzeige_auto = 1 And S3 = 1 And S2 = 0 And S1 = 0 Then
    
       Anzeige_auto = 0
       Anzeige_hand = 1
       Anzeige_e = 0
    
    End If
    
    
    '---ANZEIGE "E" WÄHLEN---------------------------------------
    If Taste_s1 => 120 And S2 = 0 And S3 = 0 Then               'ca. 3 Sekunden
       Taste_s1 = 0
    
       'Anzeige_auto = 0
       'Anzeige_hand = 0
       'Anzeige_e = 1
    
    End If
    
     Wait 3
    
    '-------------------------------------------------------------
    If Anzeige_z => 40 Then                                     'Wenn zähler voll, dann zur ausgewählten Anzeige gehen!
     Anzeige_z = 0
    
     If Anzeige_auto = 1 Then
     Goto Anzeige_auto
     End If
    
     If Anzeige_hand = 1 Then
     Goto Anzeige_hand
     End If
    
     If Anzeige_e = 1 Then
     Goto Anzeige_e
     End If
    
    End If
    
    Wait 3
    '===RS232===
    
    
    
    'Print "ANZEIGE_Z: " ; Anzeige_z ,                           'Zähler Anzeige
    'Print "Anzeige_Auto: " ; Anzeige_auto ,
    'Print "Anzeige_Hand: " ; Anzeige_hand ,
    'Print "Anzeige_E: " ; Anzeige_e ,
    
    'print "Analog in: " ; Analog_in1 ,                         '=0-1023 vom Analogeingang
    'Print "S1: " ; S1 ,                                         'Schalter 1
    'Print "S2: " ; S2 ,                                         'Schalter 2
    'Print "S3: " ; S3 ,                                         'Schalter 3
    'Print "S3_m: "; S3_m ,                                      'Schalter 3 MERKER
    
    'Print "Pro1: "; Pro1 ,
    'Print  "Pro2: " ; Pro2 ,
    'Print "Proz: " ; Proz ,
    
    'Print "PWM1: "; Pwm1 ,
    'Print "PWM: "; Pwm ,
    
    'Print "Taste_s1: " ; Taste_s1 ,
    
    Loop
    
    
    
    '-------------------------------------------------------------------------------
    'Sprungmarken
    '-------------------------------------------------------------------------------
    Timer0:                                                     'Timer1-Interruptroutine  (40 x pro Sekunde)
      Timer0 = Timervorgabe
      Incr Anzeige_z
    
      If S1 = 1 Then                                            'soll nur hochgezählt werden, wenn Taste links gedrückt
      Incr Taste_s1
      Else
      S1 = 0
      End If
    
    Return
    
    
    
    '------------------------------------------
    Anzeige_auto:
    Cls
    Locate 1 , 1
    Lcd "Drehzahl:"
    Locate 1 , 11
    Lcd Str(proz , "X") ; " %"
    
    Locate 2 , 1
    Lcd Str(s1 , "x")
    Locate 2 , 2
    Lcd Str(s2 , "x")
    Locate 2 , 3
    Lcd Str(s3 , "x")
    
    
    Locate 2 , 6
    Lcd ">AUTO<"
    Locate 2 , 12
    Lcd "Hand"
    Locate 2 , 16
    Lcd Str(anzeige_z , "x")
    
    Return
    
    '------------------------------------------
    Anzeige_hand:
    Cls
    Locate 1 , 1
    Lcd "Drehzahl:"
    Locate 1 , 11
    Lcd Str(proz , "X") ; " %"
    
    Locate 2 , 1
    Lcd "back"
    Locate 2 , 8
    Lcd "-"
    Locate 2 , 14
    Lcd "+"
    
    Return
    
    
    '------------------------------------------
    Anzeige_e:
    Cls
    Locate 1 , 1
    Lcd "Drehzahl:"
    Locate 1 , 11
    Lcd Str(proz , "X") ; " %"
    
    Locate 2 , 1
    Lcd Str(analog_in1 , "xxxx") ; "B"
    Locate 2 , 7
    Lcd Str(pwm , "x") ; "PWM"
    
    Return

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Problem

    Hi Tobias,

    ich habe nicht dein ganzes Prog durchgeguckt, aber würde "Timer0" nicht auch als Label für die ISR nehmen, weil Timer0 ein reserviertes Wort ist.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Hallo Dirk,
    habe ich geändert - leider ohne Erfolg...
    Da muss noch etwas anderes sein

    Tobias

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    kann das damit zu tun haben dass ich die Frequenz von 1MHz auf 8 erhöht habe?!

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    ...hast Du denn auch die Frequenz in den Fuses des MC geändert ?
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Im oberen Block steht ein "Baud" ganz allein ohne weitere Angaben. Fehlt da nicht noch die Angabe, welche Rate verwendet werden soll?

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    Code:
    If Anzeige_auto = 1 Then
     Goto Anzeige_auto
     End If
    Ersetze mal die goto's durch Gosub's.


    Gruß
    Christopher

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Hallo,
    - also die Fuses habe ich geändert
    - das Baud steht da als Kommentar (?) ich hatte zum Fehlersuchen div. sachen gesendet...
    -GoSub? werd ich gleich mal versuchen

    Tobias

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    JUHUUUUUUUUUUUU!!!
    @chr-mt:
    GoSub!!! das war der Fehler...
    Kannst du mir noch erklären warum - also ich habe gosub nocht niee benuzt... immer nur goto

    Danke für eure Hilfe!!!
    Tobias

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    Hallo!

    Ich hab zwar noch nie was mit Bsacom gemacht, aber BASIC generell kenne ich.
    Es gibt einen grundlegenden Unterschied zwischen 'goto' und 'gosub' :

    goto : springt an die angegebene Stelle und setzt das Programm dort fort

    gosub: springt an die angegebene Stelle, merkt sich, von wo es gesprungen ist, und bei 'return' springt es zurück(!), direkt hinter das 'gosub' und macht da weiter.

    MfG Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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