-         

Ergebnis 1 bis 5 von 5

Thema: 8x8 Matrix ?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.06.2008
    Beiträge
    32

    8x8 Matrix ?

    Anzeige

    Hallo,
    Ich wollte einen Matrix ansteuern so 5x8 besser 8x8.
    Jetz dachte ich mir wenn ichs dem µC einfacher mache müste es leichter zu machen sein.
    AtMega8, 2x 4051(8fach multiplexer/dem.) an je drei ports, und daran angeschlossen
    jeweils ein ULN2803 und ein UDN2981. INH von den 4051 an OC1A

    In meiner Naivität dachte ich ich lege ein Array 64Byte an, oder nen Speicherbereich,
    hinterlege dort die Helligkeitswerte und gut.
    So nach dem Motto:

    Do
    For x = 0 to 63
    Compare1a = A(x)
    PORTD = X
    Next
    Loop

    Ein hübschen blinken ja, gezielte Ansteuerung eher nicht.
    Soll eigentlich für einen Bekannten sein, grosses Brett-(Rollenspiel) "Mittelalter" 2-3 qm.
    Sollen viele Fackel "brennen", möglichst hübsch halt.
    Das was es jetzt macht passt eher zu ner Technoparty

    Wäre schön wenn da jemand anregungen oder Ideen in Bascom hätte.
    Nach möglichkeit ohne I2C Spezial ICs.

    Gruss Achim

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Indizes gehen bei Bascom von 1 weg, nicht von 0

    Ich mißtraue, dass das mit dem Compare so funzt.
    1) mach ein Waitms 100 oder so in die Schleife (vor dem Next)

    2) Versuch es mal ohne dem compare, setze OC1A direkt auf 0 u. 1
    und mach ein nachvollziehbares Muster in das array. ob das ganze überhaupt so passt
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.06.2008
    Beiträge
    32
    Hallo robert,

    also mit 1 und 0 und wait gar kein problem.
    Mit 1 und 0 ohne wait ein Problem.
    Ich hatte auch erst mit wait getestet ob die Matrix so funktioniert.
    Und ohne wait nahm ich an das es ein Softwareproblem ist.

    Mit höherer Frequenz fangen auch die ungwewollten LEDs an zu glimmen,
    bis es schliesslich bei max. Frequenz eine helle Gläche ist. Bis 1ms verzögerung
    erträglich dann fällt es auf. Verschieden Umbauten gemacht

    Einen Fet vor den ULN 2803 gesteuert von OC1A.
    Den UDN2981 durch Transistoren ersetzt. bzw mit grossem VorWiderstand direkt
    von den 4051 Treiben lassen.
    Ein zusätzliches Port auf die INH-Eingänge der 4051 zum dunkelschalten während
    des setzens der neuen Werte.
    Alles ohne erfolg.

    Da werde ich wohl noch mal suchen müssen.

    PB0 - PB7 Zeilen
    PD0 - PD7 Spalten
    Und dann auf eins von beiden eine 8fach software PWM.(wenn ich finde wie mans macht)
    Währe das eine machbare Sache mit eine mega 8 ?
    Ich habe schon das Forum durchsucht aber nichts wirklich passendes gefunden.

    Für jeden Tip Dankbar.

    Gruss Achim

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn's schneller wird, überlappt sich die sache, d.h. die stellst über PortD eine Led ein, hast aber noch den compare von der vorigen LED

    du müsstest eigentlich:
    Code:
    Do 
      For x = 0 to 63            ' nächster
            PORTD = X              ' Auswahl der LED     
            compare  = a(x)         ' mehr oder weniger aufrehen
            Waitms nn               ' etwas leuchten lassen 
            compare = 0             ' auf jeden Fall abdrehen
      Next                             ' weiter 
    Loop
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.06.2008
    Beiträge
    32
    Hallo robert,

    Gebastelt, verworfen, geb.... usw. Jetz nur noch ein ULN2803 mit Fet davor.
    Den vorherigen Fehler denke ich gefunden zu haben, aber jetzt gehts so.
    Ist was bei rausgekommen was für das geforderte den zweck erfüllt,
    naja 24 1/2 LEDs die erste will nicht, ist aber bestimmt zu verbessern.
    Also 2xmal bauen.

    Du kanst ja wenn Du lust hast mal nen Blick drauf werfen und ein paar
    Anregungen geben. So von wegen Lerneffekt.

    Code:
    $regfile = "M8def.dat"
    $crystal = 16000000
    $hwstack = 50
    $swstack = 10
    $framesize = 40
    
    Ddrb = &B00011111
    Ddrc = &B00000001
    Ddrd = &B00011111
    
    Portb = &B00000001
    Portd = &B00000001
    
    Dim Z As Integer
    Dim Z1 As Integer
    Dim Z2 As Integer
    Dim A(25) As Byte
    Dim B(25) As Byte
    Dim C As Byte
    Dim X As Byte
    Dim Y As Byte
    
    Config Adc = Single , Prescaler = Auto
    Start Adc
    Config Timer0 = Timer , Prescale = 8
    Enable Timer0
    Enable Interrupts
    On Ovf0 Test
    
    Do
    
       Z1 = Getadc(5)
       Z2 = Getadc(4) / 20
       For Y = 1 To 25
          A(y) = Rnd(z2)
       Next
    
    Loop
    
    Test:
    Portc.0 = 0							'FET
    Incr Z : If Z > Z1 Then Z = 0
    Incr X : If X => 25 Then X = 0
    If B(x) < 1 Then B(x) = 1 : Decr B(x)
    
    Portb = Portb * 2 : If Portb => 32 Then Portd = Portd * 2
    If Portb => 32 Then Portb = 1
    If Portd => 32 Then Portd = 1
    
    If B(x) > 0 Then Portc.0 = 1 Else Portc.0 = 0
    If Z = 0 Then C = Memcopy(a(1) , B(1) , 25)
    
    Return
    Ich würde gerne ausser den zwei Potis noch einen Schalter in die Kiste bauen
    um Prescale von timer0 über einen Schalter festzulegen. (vor dem Einschalten)
    Ich habe Testweise eine Variable ausprobiert, gibt aber eine Fehlermeldung.
    Weil dann kann man alles einstellen, von ruhigem Wandbild bis Techno.

    Läst sich das irgendwie machen ?


    Gruss Achim

Berechtigungen

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