Microcontroller-Tutorial für Anfänger - Teil I - Grundlagen

  • Das hier wäre der Code für eine 8x8 Matrix.
    Wie gesagt: Es ist wichtig, dass du verstehst was passiert.


    [code:1]$regfile = "2313def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40



    Config Portb = Output
    Config Portd = Output
    Dim Warten As Byte
    Dim A As Byte
    Dim B as Byte


    Do 'Endlosschleife
    B = 1 'Erste Zeile wählen
    While B < 128 '128 wären 8 Zeilen
    PortD = B
    A = 1 'erstmal das erste Lichtlein anmachen
    While A < 128 'solange das letzte Licht (Nr. 8) nicht an war -> Schleife
    PortB = A 'die LEDs anschalten, die binär A entsprechen
    A = A * 2 'da immer nur eine LED leuchten soll, mit 2 multiplizieren
    Waitms 30 'etwas warten, damit mans sehen kann
    Wend 'wieder in die Schleife
    B = B * 2
    wend
    Loop 'Endlosschleife[/code:1]

  • Ne, das geht bei mir nicht, es ist immer die Zeile aus die eigentlich leuchten sollte, und die anderen sind alle an. PortD ist bei mir Minus von den LED's und müssen daher immer auf low also 0V geschaltet werden. Aber ansonsten geht das ganze zwar als Lauflicht aber halt die die an sein sollen sind aus und die die aus sein sollen sind alle an.



    Gruß Maik

  • Zitat von "MisterTitan"

    Ne, das geht bei mir nicht, es ist immer die Zeile aus die eigentlich leuchten sollte, und die anderen sind alle an. PortD ist bei mir Minus von den LED's und müssen daher immer auf low also 0V geschaltet werden. Aber ansonsten geht das ganze zwar als Lauflicht aber halt die die an sein sollen sind aus und die die aus sein sollen sind alle an.


    Wie sind die Kathoden denn an den AVR angebunden? Mit Transitoren?
    Aber wenn das das einzige ist: Schau in die Tabelle - du brauchst dann entsprechend die umgekehrten Werte:
    254, 253, 251, 247, 239, 223, 191, 127
    Das entspricht immer sieben 1ern mit einer 0.
    Ist aber programmtechnisch eher aua - daher benutzt man einfach den Logik-Befehl NOT - der kehr den Binärwert um.


    Du solltest schon Transistoren benutzen, um die Kathoden zu schalten!
    Ein 8-pin Darlington-Transistor-Array macht das sehr gut und platzsparend.


    Stefan Z

  • Zitat von "MisterTitan"

    Das hör ich jetzt zum ersten Mal, was ist den ein NOT, ich habe kein Plan was du damit meinst.


    Ist ein Logikbefehl - Seite 179 im Handbuch:

    Zitat

    There four operators in BASCOM are :
    NOT Logical complement
    AND Conjunction
    OR Disjunction
    XOR Exclusive or


    wenn B = 00000010
    dann macht B = NOT B
    B = 11111101

  • jetzt geht es, bloß spalte 5 geht in allen Zeilen nicht.


    [code:1]$regfile = "2313def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40



    Config Portb = Output
    Config Portd = Output
    Dim Warten As Byte
    Dim A As Byte
    Dim B As Byte


    Do
    B = 1
    While B < 128
    Portd = Not B
    A = 1
    While A < 128
    Portb = A
    A = A * 2
    Waitms 30
    Wend
    B = B * 2
    Wend
    Loop [/code:1]

  • jetzt hab ich es hinbekommen, es funktioniert.


    [code:1]$regfile = "2313def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40



    Config Portb = Output
    Config Portd = Output
    Dim Warten As Byte
    Dim A As Byte
    Dim B As Byte


    Do
    B = 1
    While B < 128
    Portd = Not B
    A = 1
    While A < 128
    Portb = A
    A = A * 2
    Waitms 10
    Wend
    B = B * 2
    Wend
    B = 64
    While B > 0
    Portd = Not B
    A = 128
    While A > 0
    Portb = A
    A = A / 2
    Waitms 10
    Wend
    B = B / 2
    Wend


    Loop [/code:1]


    Gruß Maik

  • Zitat von "MisterTitan"

    ich würde dir ja gerne helfen, aber ich hab zu wenig erfahrung damit, ich weiß gerade mal wie jeden ausgang ansteuere und lauflichter schreibe, ansonsten naja.


    Achwas.. da war ich vor zwei Monaten auch...
    Das wird schon - sind im Falle des RGB-Faders 3 Byte-Register, die entsprechend die Helligkeit steuern.
    0 is aus, 255 Maximum.


    Das Dumme ist halt nur, dass das Basic maximal Ausdrücke wie A = B + C beherrscht.
    In C kann man direkt Sachen wie r = (i/C)*r1+(1-i/C)*r2 eingeben, den Rest macht dann der Compiler.


    Von Rot auf Pink faden ist beispielsweise einfach:
    [code:1]Rot = 255
    Gruen = 0
    Blau = 0


    While Blau < 128
    Blau = Blau +1
    Waitms 30
    Wend[/code:1]

  • Mir ist grad eingefallen, dass man deine Methode (Ohne Transis an PortD) prima nutzen könnte, um Duo-LEDs anzusprechen (also die mit zwei den Beinen) - Wenn man dann portB und PortD tauscht, bekommt man die 2. Farbe. Ist allerdings nicht das Ei des Kolumbus - so werden Duo-Anzeigen glaubich eh angesteuert ;)


    Vor allem bräuchte man mal anständige Duo-LEDs - Grün/Orange ist nicht wircklich cool. Ich hatte mal nen Yamaha F1 Brenner - der hatte ne coole Violette/Blaue LED :led: (kA ob das ne einzelne LED war oder zwei mit Diffusor...)


    Stefan Z


    [edit] - sehe grade, dass es garkeine Duos mit nur zwei Beinen bei LED-Tech gibt. Gits die überhaupt? Oder spinne ich - je nach Polung leuchtet die anders - oder hab ichs geträumt?

  • Soweit wie ich das weiß, gabs die mal aber ob es die Heute noch gibt kann ich dir nicht.


    Aber mal was anderes , ich habe jetzt vor in meinen Zimmer ringsum an der Decke eine Leiste mit LED's zubastel und das ganze mit einen Attiny12 oder 15 anzusteuern, kann man da irgend wie was schreiben das er auf irgend eine LED automatisch zuschalten tut, so wie beim CD-Radio das Radom.



    Gruß Maik

  • Zitat von "MisterTitan"

    Ich habe jetzt vor in meinen Zimmer ringsum an der Decke eine Leiste mit LED's zubastel und das ganze mit einen Attiny12 oder 15 anzusteuern, kann man da irgend wie was schreiben das er auf irgend eine LED automatisch zuschalten tut, so wie beim CD-Radio das Radom.


    Ich verstehe leider nicht, was du mir hier mitteilen willst :)
    Du willst viele LEDs verteilen und die einzeln ansteuern?
    Oder willst du verschiedene Module haben, die untereinander kommunizieren?

  • Zitat von "MisterTitan"

    Na wie soll ich das sagen, die sollen einfach wie in der Disko zum Beispiel automatisch leuchten, wild durcheinander.


    chaotisch is einfach: jedes Modul mit je 10 RGB LEDs machen und die zusammenin einer farbe faden.
    Davon mehrere Module löten und die mit leich unterschiedlichen Random-Seeds starten. Fertig.


    Tiny2313 bietet sich hier allerdings besser an, da der Hardware-PWM beherrscht.


    Stefan Z

  • So viele RGB leds wollt ich eigentlich nicht verbauen, 16 LED's insgesamt, also 4 Grün, 4 Rot, 4 Gelb, 4 Blau und die wollt ich dann wie du sagst chaotisch durcheinander leuchten lassen, Faden muss nicht unbedingt sein, ich hab es mir eigentlich nicht vorgenommen sowas mit reinzu machen. Ganz normales flashen würde mir auch reichen.


    Gruß Maik