- 3D-Druck Einstieg und Tipps         
Seite 5 von 7 ErsteErste ... 34567 LetzteLetzte
Ergebnis 41 bis 50 von 67

Thema: Eine LED-Matrix 5x7 ansteuern

  1. #41
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Anzeige

    Praxistest und DIY Projekte
    Dein Code funktioniert grundsätzlich, aber ich sehe da zwei Probleme:
    Blink_an = 0 in der ISR, direkt vor dem Port schalten.
    Das sorgt dafür, dass der Vergleich nur ein einziges Mal zutrifft, danach ist das Display wieder aus.
    Du musst das Hochzählen dieser Variable durchlaufen lassen. Das Verhältnis von Max_blink_an und 255 (weil Byte) gibt dir das Blink Verhältnis. Und das ist das zweite Problem: Meistens will man ein 50/50 Verhältnis, weil das besser aussieht. Dein Code würde mehr ein PWM erzeugen, also feste Frequenz aber veränderbares Verhältnis. Bei Display_off ist das so, weil du da ja dimmen willst. Beim Blinken über den Sectic ist das Verhältnis automatisch 50/50, die gesamte Dauer 2 Sekunden. Das könnte etwas langsam sein, geht mit Sekundentakt aber nicht schneller. Wenn du es schneller haben willst dann so wie du angefangen hast.
    Du müsstest dann erst einmal überlegen, in welchem Verhältnis an und aus sein sollen und dann auch die absolute Zeit für eine Periode.
    Deine Timer ISR wird jetzt etwa 1000 mal pro Sekunde aufgerufen. Wenn die gesamte Periode also z.B. 1 Sekunde sein soll, dann zählst du eine Variable bis 1000 hoch. Der Wechsel käme dann bei 500, wenn du 50/50 haben willst. Für langsamers Blinken zählst du höher, für kürzeres entsprechend niedriger. Solange du nicht wesentlich niedriger gehst, kommt dir das mit den anderen Umschaltungen nicht in die Quere.
    Ich habe es dir mal in deinen Code eingebaut:
    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 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 = 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 = 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 = 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_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 &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
    Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
    Gruß

    Rolf

  2. #42
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hey for_ro

    Also wenn ich dein Programm so teste, sagt Bascom das er nicht Max_blink_aus "versteht". hast du dich da Verschrieben? Sollte es Max_blink_an sein? Oder hast du die DIM für Max_blink_aus vergessen?

    Ich hab beide Möglichkeiten gestest jedoch blink die anzeige nicht...es passiert nichts

    mfg Tryan

  3. #43
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Tryan,
    da waren gleich mehrere Fehler drin.
    Ich kann hier leider nichts kontrollieren, da ich hier kein Bascom habe.
    Probier es noch einmal mit dem Code in meiner letzten Mail.

    Gruß

    Rolf

  4. #44
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hi for_ro

    ich weiß gar nicht wie ich dir für alles danken kann.
    Ohne dich hätte ich wahrscheinlich schon aufgeben!
    Jetzt läuft alles so wie es mir vorgestellt habe.
    Und mit 21% ist die Bascom Demo schon so gut wie ausgereizt.

    Also nochmal vielen vielen Dank!!!!

    Mfg Tryan

  5. #45
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hi for_ro, hallo forum,

    Ich wollte gerne noch mehr Zeichen und Buchstaben in meinem Programm anzeigen lassen. Jedoch kann ich leider nur max 8 Zeichen anzeigen lassen.
    Ab dem neunten Zeichen, zeigt mir die Anzeige nur noch wildes durcheinander.

    Ich glaube das einfach Offset und Zeichen mit einem Byte schon voll belegt sind. Aber wenn ich Offset und Zeichen als Word dimmensioniere. Zeigt die Anzeige das gleiche durcheinander an.

    Wo liegt mein Fehler?

    Danke für eure Hilfe

    Mfg Tryan

  6. #46
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Tryan,
    stell doch mal dein aktuelles Programm ein.
    Dann ist das bestimmt kein Problem.

    Gruß

    Rolf

  7. #47
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hallo for_ro
    also es hat sich nicht viel verändert.
    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    Config Porta = Input
    Config Portb = Output
    Config Portc = Input
    Config Portd = Output
    
    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 = 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
    
    Portc = &B00000000
    
    Do
      If Pina.0 = 0 And Pina.1 = 0 And Pina.2 = 0 And Pina.3 = 0 And Pina.4 = 0 And Pina.5 = 0 And Pina.6 = 0 And Pina.7 = 0 Then
      Zeichen = Asc( "1" )
      End If
    
       If Pina.0 = 1 Then Zeichen = Asc( "2")
    
       If Pina.1 = 1 Then Zeichen = Asc( "3")
    
       If Pina.2 = 1 Then Zeichen = Asc( "4")
    
       If Pina.3 = 1 Then Zeichen = Asc( "5")
    
       If Pina.4 = 1 Then Zeichen = Asc( "6")
    
       If Pina.5 = 1 Then Zeichen = Asc( "7")
    
       If Pina.6 = 1 Then Zeichen = Asc( "8")
    
       'If Pina.7 = 1 Then Zeichen = Asc( "9")            'deaktiviert um mehr als 9 zeichen mit PortA zu realisieren
    
       If Pina.7 = 1 Then Zeichen = Asc( "10")
    
    
    
       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 = 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_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 &B10000000 , &B10000000 , &B10000000 , &B10000000 , &B10000000       'Voll an
    Ich muss mich korriegen es ist möglich 9 Zeichen darzustellen.
    Aber beim 10ten Zeichen wird dieses nicht angezeigt.

    Gruß
    Tryan

  8. #48
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo tryan,
    du scheinst die Funktion von PortA geändert zu haben. Was soll der genau machen?
    Wenn ich mich richtig erinnere, kannst du irgendwie zwischen den 5 Anzeigen hin und hergehen und die aktuelle Zahl soll blinken. Dann kannst du sie über externe Taster rauf und runterzählen. Und die gesamte Anzeige war dimmbar.
    Erkläre doch noch einmal, wie das ablaufen soll.

    Gruß

    Rolf

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

    Also bei PortA passiert nicht anderes als z.b. Taster1 High dann eine 1 in der 5x7 LED-Matrix anzeigen. Wenn Taster2 High dann eine 2 in der Matrix anzeigen usw... Wenn kein Taster High ist wird eine 0 angezeigt
    Es gibt nicht die Möglichkeit die Zahlen hoch zählen zu lassen.

    Aber du hast recht es gibt die Möglichkeit die Anzeige blinken und zu dimmen. Das passier hier:
    Code:
    'Dimmen
    If Pinc.7 = 1 Then Max_display_off = 4
       If Pinc.7 = 0 Then Max_display_off = 0
    
    'Blinken
       If Pinc.6 = 1 Then
          Max_blink_an = 800
          Blink_an = 400                                     
       Else
          Max_blink_an = 0
          Blink_an = 0
       End If
    Ich hoffe ich konnte dir die Grundfunktion soweit erklären.

    Gruß Tryan

  10. #50
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo tryan,
    wäre es nicht besser, du würdest nur eine Rauf- und eine Runter-Taste benutzen, um die Werte in der Anzeige zu ändern? Sonst musst du doch jede Menge Eingänge ver(sch)wenden, um ein Zeichen vorzugeben.
    Dies ist sicherlich keine große Sache zu programmieren. Dann kannst du im Prinzip beliebig viele Zeichen darstellen. Wenn man es ganz cool machen will, würde bei kurz drücken nur ein Zeichen weitergeschaltet, bei längerem Drücken gleich mehrere.
    Aber das solltest du jetzt entscheiden, ansonsten musst den ganzen Code nachher wieder ändern, wenn du noch mehr Zeichen sehen willst.

    Gruß

    Rolf

Seite 5 von 7 ErsteErste ... 34567 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests