- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 67

Thema: Eine LED-Matrix 5x7 ansteuern

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

    Praxistest und DIY Projekte
    Hi for_ro,
    alles nicht so schlimm, ich habe jetzt die Widerstände in die Zeilen eingebaut und die Ausleuchtung ist jetzt zu 95% optimal. Bin mir jetzt nicht ganz sicher warum, aber ich bin voll zu frieden

    Jetzt wollte ich gerne noch die Helligkeit in zwei stufen dimmen.
    Am Tag soll die Ausleuchtung 100% sein (bzw. bei mir 95% )
    und abends soll es nur noch 50% sein, sodass die Anzeige nicht blendet.

    Ich hatte mir gedacht, dass ich einfach die Zeit wie lange eine Spalte ansteuere verändern müsste...
    Macht man das mit PWM?
    Leider sind T0 und T1 schon belegt ist Timer2 auch in der Lage ein PWM-Signal zu erzeugen?

    Mfg Tryan

  2. #32
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Wie willst du denn die Umschaltung realisieren, über die Zeit oder einen Schalter, oder einen Fotowiderstand?

    Den Code würde ich so ändern (praktisch Soft-PWM), da du eh schon alles beisammen hast:

    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    Config Porta = Input
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    
    Dim Offset As Word                                          'kann auch byte sein, wenn du nicht mehr als 50 Zeichen brauchst
    Dim Zeichen As Byte
    Dim Spalte As Byte
    Dim Werte As Byte
    Dim Display_off As Byte , Max_display_off As Byte
    Dim Blinken As Byte
    
    Max_display_off = 1                                         'diesen Wert noch ausprobieren
    
    Config Dcf77 = Pind.2 , Check = 2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Sectic = 1
    
    Config Timer0 = Timer , Prescale = 64                       '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
    Do
       Zeichen = Asc( "2")
    Loop
    
    Timer0_isr:
       Offset = Zeichen - 49                                    'sucht Werte für Zeichen "1" ab EEProm Adresse 1
       Offset = Offset * 5                                      'immer 5 Werte pro Zeichen
       If Spalte = 6 Then
          Spalte = 1
       End If
       Offset = Offset + Spalte
       Werte = Lookup(offset , Zeichen_data)
       Incr Display_off
       Portd = 0                                                'zum Verhindern von Geisterbildern
       If Display_off > Max_display_off And Blinken = 0 Then    'damit bleibt das Zeichen immer für eine bestimmte Zeit aus
          Display_off = 0
          Portc = Werte                                         'lädt die Werte
          Portd.spalte = 1                                      'Gibt die Spalte frei
          Incr Spalte
       End If
    Return
    
    Sectic:
       Toggle Blinken
    Return
    
    
    Zeichen_data:
    Data &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
    Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
    Wenn Max_display_off auf 1 steht, bedeutet das, dass er immer einen Zyklus aussetzt. Du kannst die Zahl auch erhöhen.
    Wenn dir die Schritte zu groß sind, können wir das bestimmt auch noch verändern.
    Es kann sein, dass die Anzeige dann anfängt zu flimmern, weil wir praktisch auch die Frequenz runtersetzen. Dann müssen wir den Timer etwas anders laufen lassen.
    Probier's mal aus.

    Gruß

    Rolf

  3. #33
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hi for_ro
    Ab heute bist du offiziell für mich der Bascom Gott
    Die Umschaltung werde ich mit einem Schalter machen.
    So die letze frage, dann sollte das Projekt so weit fertig sein, ist es möglich die Zahlen Blinken zu lassen...?
    Ich kann es mit nicht vorstellen, da man ja alle gleichzeitig An und wieder Aus machen müsst und das z.b. in einem 0.5 sek takt. Da aber die Ansteuerung immer nach und nach verläuft, würde es nur zu einem flackern kommen oder?

    Mfg Tryan

  4. #34
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Tryan
    Hi for_ro
    Ab heute bist du offiziell für mich der Bascom Gott
    Ne, ne, das ist ein bisschen viel.


    Zitat Zitat von Tryan
    So die letze frage, dann sollte das Projekt so weit fertig sein, ist es möglich die Zahlen Blinken zu lassen...?
    Das Blinken habe ich dir grundsätzlich in den Code oben eingebaut. Da du Config DCF77 benutzt, kannst du auch noch Sectic=1 anhängen. Dann wird im Sekundentakt ein Label Sectic angesprungen. Dort schaltest du das Blinken ein und aus.
    Aber du musst es jetzt noch irgendwie generell einschalten, also auch wieder über einen externen Schalter oder so.

    Gruß

    Rolf

  5. #35
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Ah das ist ja super ich dachte es wäre gar nicht möglich...
    Muss ich das "Label Sectic" selbst definieren?
    Oder mach ich das mit dem Display_off?
    Ich hab es so versucht (siehe Anhang) Jedoch läuft er wie es mir dacht habe, von links nach rechts durch und blinkt nicht..
    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    Config Porta = Input
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    
    Dim Offset As Word                                'kann auch byte sein, wenn du nicht mehr als 50 Zeichen brauchst
    Dim Zeichen As Byte
    Dim Spalte As Byte
    Dim Werte As Byte
    Dim Display_off As Byte , Max_display_off As Byte ,
    Dim Blink_an As Byte , Max_blink_an As Byte
    
    Config Dcf77 = Pind.7 , Check = 2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Sectic = 1
    
    Config Timer0 = Timer , Prescale = 64             '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
    Do
       Zeichen = Asc( "2")
       If Pina.7 = 1 Then Max_display_off = 4
       If Pina.7 = 0 Then Max_display_off = 0
    
       If Pina.6 = 1 Then Max_blink_an = 40
       If Pina.6 = 0 Then Max_blink_an = 0
    Loop
    
    Timer0_isr:
       Offset = Zeichen - 49
       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_an
       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_an > Max_blink_an Then
          Blink_an = 0
          Portb = Werte                               'lädt die Werte
          Portd.spalte = 1                            'Gibt die Spalte frei
          Incr Spalte
       End If
       End If
    Return
    
    Zeichen_data:
    Data &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
    Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
    Mfg Tryan

  6. #36
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Probier erst mal meinen Code oben aus. Dann können wir weitersehen.

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Das ist doch dein Code, dass Dimmen funktioniert wunderbar... habe jetzt versucht das Blinken einzufügen..

    Mfg Tryan

  8. #38
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Ne, ich meinte diesen hier von oben:

    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    Config Porta = Input
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    
    Dim Offset As Word                                          'kann auch byte sein, wenn du nicht mehr als 50 Zeichen brauchst
    Dim Zeichen As Byte
    Dim Spalte As Byte
    Dim Werte As Byte
    Dim Display_off As Byte , Max_display_off As Byte
    Dim Blinken As Byte
    
    Max_display_off = 1                                         'diesen Wert noch ausprobieren
    
    Config Dcf77 = Pind.2 , Check = 2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Sectic = 1
    
    Config Timer0 = Timer , Prescale = 64                       '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
    Do
       Zeichen = Asc( "2")
    Loop
    
    Timer0_isr:
       Offset = Zeichen - 49                                    'sucht Werte für Zeichen "1" ab EEProm Adresse 1
       Offset = Offset * 5                                      'immer 5 Werte pro Zeichen
       If Spalte = 6 Then
          Spalte = 1
       End If
       Offset = Offset + Spalte
       Werte = Lookup(offset , Zeichen_data)
       Incr Display_off
       Portd = 0                                                'zum Verhindern von Geisterbildern
       If Display_off > Max_display_off And Blinken = 0 Then    'damit bleibt das Zeichen immer für eine bestimmte Zeit aus
          Display_off = 0
          Portc = Werte                                         'lädt die Werte
          Portd.spalte = 1                                      'Gibt die Spalte frei
          Incr Spalte
       End If
    Return
    
    Sectic:
       Toggle Blinken
    Return
    
    
    Zeichen_data:
    Data &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
    Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
    Gruß

    Rolf

  9. #39
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Ah sorry das hatte ich nicht gesehen...

    Also das Dimmen steuere ich so an:
    If Pina.7 = 1 Then Max_display_off = 4
    If Pina.7 = 0 Then Max_display_off = 0

    Aber wie steuere ich das Blinken an?
    Muss ich zum Sectic springen damit die Anzeige blinkt?
    z.b. If Pina.6 = 1 Then "springe zu Sectic" ?

    Mfg Tryan

  10. #40
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Funktioniert denn das Blinken mit meinem Code im 1-Sekundentakt?

    Gruß

    Rolf

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress