Angepinnt 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

      "MisterTitan" schrieb:

      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

      "MisterTitan" schrieb:

      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:
      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

      "MisterTitan" schrieb:

      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

      "MisterTitan" schrieb:

      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?

      "MisterTitan" schrieb:

      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