- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 7 von 7 ErsteErste ... 567
Ergebnis 61 bis 67 von 67

Thema: Eine LED-Matrix 5x7 ansteuern

  1. #61
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Anzeige

    Praxistest und DIY Projekte
    Hallo for_ro

    Wenn ich den Prescaler auf 1024 hochsetzte wird die 0 fast wieder richitg angezeigt und die 1, 2 und 3 komplett richtig

    Nimm ich die LCD abfrage für die 0 raus wird, werden mir alle Zahlen wieder richitg angezeigt.

    Jedoch funktioniert dann die LCD anzeige nicht mehr ganz richitg.
    Wenn kein Taster gedrückt wird springt sie Automatisch von Taster 1 auf Taster 2 auf Taster 3 und wieder von vorne.
    Wenn ich Taster 1 drücke bleibt die LCD Anzeige auf Taster1 stehen usw.

    Ist der Timer0 für das Ansprechen wür die LCD zuständig?

    Wenn ja, könnte man dann auf Timer1 ausweichen?

    Gruß Tryan

  2. #62
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Tryan,
    zeig doch mal, wie du das jetzt geändert hast.
    Brauchst du den niedrigen Prescaler, um Flackern zu verhindern?
    ich denke das Problem mit der 0 ist, das die immer erfüllt ist, wenn kein Taster gedrückt ist. Daher würde ich da eher eine Abfrage rein machen, ob vorher auch schon 0 war, dann macht er nichts, ansonsten wird die 0 dargestellt.
    Etwa so:

    Select Case Taster
    Case 1 : Offset = 1
    Case 2 : Offset = 2
    Case 4 : Offset = 3
    Case 8 : Offset = 4
    Case 16 : Offset = 5
    Case 32 : Offset = 6
    Case 64 : Offset = 7
    Case 128 : Offset = 8
    End Select

    If Taster=0 And Offset > 0 Then
    Offset=0
    Locate 1 , 1
    Lcd "Kein Taster"
    End If

    Gruß

    Rolf

  3. #63
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hallo for_ro
    Also hier ist das Programm:
    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 8                                                'default use 10 for the SW stack
    $framesize = 40
    
    Config Porta = Input
    Config Portb = Output
    Config Portc = Input
    Config Portd = Output
    
    Dim Taster As Byte
    Dim Offset As Word                                          'kann auch byte sein, wenn du nicht mehr als 50 Zeichen brauchst
    Dim Zeichen As Word
    Dim Spalte As Byte
    Dim Werte As Byte
    Dim Display_off As Byte , Max_display_off As Byte ,
    Dim Blink_an As Word , Blink_count As Word , Max_blink_an As Word       'damit auch höhere Zahlen als 255 gehen
    
    Config Dcf77 = Pind.7 , Check = 2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Sectic = 1
    
    Config Timer0 = Timer , Prescale = 1024                     'timer läuft alle 16.000.000/256/256=250.stel Sekunde über, also etwa alle 4ms
    On Timer0 Timer0_isr
    Enable Timer0
    Enable Interrupts
    Spalte = 0
    
    Portc = &B00000000
    '---------------------------------
    'LCD einstellung
    '---------------------------------
       Config Lcdpin = Pinc , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
       Config Lcd = 20 * 4
       Initlcd
       Cursor Off
    Do
    
       Taster = Pina
           Select Case Taster
    Case 1 : Offset = 1
    Case 2 : Offset = 2
    Case 4 : Offset = 3
    Case 8 : Offset = 4
    Case 16 : Offset = 5
    Case 32 : Offset = 6
    Case 64 : Offset = 7
    Case 128 : Offset = 8
    End Select
    
    If Taster=0 And Offset > 0 Then
    Offset=0
    Locate 1 , 1
    Lcd "Kein Taster"
    End If
    
       'If Offset = 0 Then
       'Locate 1 , 1
       'Lcd "Kein Taster"
       'End If
    
       If Offset = 1 Then
       Locate 1 , 1
       Lcd "Taster 1    "
       End If
    
       If Offset = 2 Then
       Locate 1 , 1
       Lcd "Taster 2    "
       End If
    
    
       If Offset = 3 Then
       Locate 1 , 1
       Lcd "Taster 3    "
       End If
    
    
       'If Pinc.7 = 1 Then Max_display_off = 4
       'If Pinc.7 = 0 Then Max_display_off = 0
    
       'If Pinc.6 = 1 Then
          'Max_blink_an = 800
          'Blink_an = 400                                        'hier das Verhältnis (400/800), heisst nach der Hälfte der Zeit geht es an, kleiner Wert heisst länger an
       'Else
          'Max_blink_an = 0
          'Blink_an = 0
       'End If
    Loop
    
    Timer0_isr:
       Offset = Offset * 5                                      'immer 5 Werte pro Zeichen
       If Spalte = 5 Then
          Spalte = 0
       End If
       Offset = Offset + Spalte
       Werte = Lookup(offset , Zeichen_data)
       Incr Display_off
       Incr Blink_count
       If Blink_count > Max_blink_an Then Blink_count = 0
       Portd = 0                                                'zum Verhindern von Geisterbildern
       If Display_off > Max_display_off Then                    'damit bleibt das Zeichen immer für eine bestimmte Zeit aus
          Display_off = 0
          If Blink_count >= Blink_an Then
             Portb = Werte                                      'lädt die Werte
             Portd.spalte = 1                                   'Gibt die Spalte frei
             Incr Spalte
          End If
       End If
    Return
    
    Zeichen_data:
    Data &B11000001 , &B10101110 , &B10110110 , &B10111010 , &B11000001       '0
    Data &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
    Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
    Data &B11011110 , &B10111110 , &B10110110 , &B10110010 , &B11001100       '3
    Data &B11100111 , &B11101011 , &B11101101 , &B10000000 , &B11101111       '4
    Data &B11010000 , &B10110110 , &B10110110 , &B10110110 , &B11000110       '5
    Data &B10000000 , &B11110110 , &B11100110 , &B11010110 , &B10111001       'R
    Data &B11111011 , &B11111101 , &B10000000 , &B11111101 , &B11111011       'Pfeil 0ben
    Data &B11101111 , &B11011111 , &B10000000 , &B11011111 , &B11101111       'Pfeil unten
    Data &B11111111 , &B10000000 , &B10000000 , &B10000000 , &B10000000       'A
    Data &B10000000 , &B11111111 , &B10000000 , &B10000000 , &B10000000       'B
    Data &B10000000 , &B10000000 , &B11111111 , &B10000000 , &B10000000       'C
    Data &B10000000 , &B10000000 , &B10000000 , &B11111111 , &B10000000       'D
    Data &B10000000 , &B10000000 , &B10000000 , &B10000000 , &B10000000       'E
    Ja ich brauch ein niedrigen Prescaler um das flackern auf der 5x7 Matrix zu verhindern.
    Wie das Programm jetzt ist, flackert die 5x7 Matrix und beim LCD springt die anzeige von "Kein Taster" zu "Taster 1" zu "Taster 2" zu "Taster 3" und wieder zu "Kein Taster", obwohl kein Taster gedrückt wird.
    Wenn ich nun z.b. "Taster 2" drücke zeigt mir die 5x7 Matrix eine flackerne 2 an und das LCD "Taster 2".

    Wo meinst du kommen die Daten von der 5x7 Matrix und von dem LCD drucheinander?

    gruß Tryan

  4. #64
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Tryan,
    setz mal den prescaler wieder auf 64, dann hast du wieder 1ms Überlaufzeit für den Timer.
    Ich denke, dass die lange Ausgabezeit für das LCD (jedenfalls mehr als 1ms) den Timer beeinflusst.
    Ich habe deine Do...Loop mal so abgeändert, dass die Ausgabe aufs Display immer nur einmal stattfindet. Danach ist PINA=Taster und er macht nichts. Erst bei einem anderen Taster wird wieder der zugehörige Text gezeigt.

    Mach die Do..Loop so

    Code:
    Do
       If Pina <> Taster
          Taster = Pina
          Select Case Taster
             Case 0 :
                Offset = 0
                Locate 1 , 1
                Lcd "Kein Taster"
             Case 1 : Offset = 1
                Locate 1 , 1
                Lcd "Taster 1    "
             Case 2 : Offset = 2
                Locate 1 , 1
                Lcd "Taster 2    "
             Case 4 : Offset = 3
             Case 8 : Offset = 4
             Case 16 : Offset = 5
             Case 32 : Offset = 6
             Case 64 : Offset = 7
             Case 128 : Offset = 8
          End Select
       End If
    Loop
    Gruß

    Rolf

  5. #65
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hallo for_ro
    Ich hab mal deine Do Loop schleife eingesetzt jedoch ohne erfolg.
    Die LCD zeigt alles richitg an, aber die 5x7 Martix zeigt bei jeder Zahl nur drucheinander an.
    Dank für deine mühe. Es ist echt Super das du mir bei meinen Problemen Hilfst!

    Gruß Tryan

  6. #66
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Tryan,
    ich hatte übersehen, dass Offset nicht mehr jedesmal neu gesetzt ist und daher in der ISR immer nur weiter verändert wird: Offset = Offset * 5.

    Nimm mal diese Do..Loop und erste Zeile von Timer0_isr

    Code:
    Do
       If Pina <> Taster Then
          Taster = Pina
          Select Case Taster
             Case 0 :
                Zeichen = 0
                Locate 1 , 1
                Lcd "Kein Taster"
             Case 1 : Zeichen = 1
                Locate 1 , 1
                Lcd "Taster 1    "
             Case 2 : Zeichen = 2
                Locate 1 , 1
                Lcd "Taster 2    "
             Case 4 : Zeichen = 3
             Case 8 : Zeichen = 4
             Case 16 : Zeichen = 5
             Case 32 : Zeichen = 6
             Case 64 : Zeichen = 7
             Case 128 : Zeichen = 8
          End Select
       End If
    Loop
    
    Timer0_isr:
       Offset = Zeichen * 5                                     'immer 5 Werte pro Zeichen
    Gruß

    Rolf

  7. #67
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hallo for_ro,

    Du hast es mal wieder geschafft! Das Programm läuft jetzt 1A.
    Vielen Dank nochmal für deine Hilfe!
    Mal schauen ob mir noch mehr Blödsinn für das Programm einfällt

    Lg Tryab

Seite 7 von 7 ErsteErste ... 567

Berechtigungen

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

12V Akku bauen