Port durchschalten?!

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Guten Abend,

      Ich musste das ganze aus zeitlichen Gründen ein wenig ruhen lassen. Der LED Streifen "WS2812B" ist mittlerweile angekommen. Ich versuche diesen seit zwei Tagen vergebens ans laufen zu bekommen... Ich habe das Beispielprogramm mal auf eine LED abgespeckt:

      Quellcode

      1. $regfile = "m8def.dat" '$regfile = "m32def.dat"
      2. $crystal = 16000000
      3. $PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
      4. Config Rainbow = 1 , Rb0_len = 1 , Rb0_port = Portb , Rb0_pin = 0
      5. Dim Color(3) as Byte
      6. R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
      7. Do
      8. RB_SelectChannel 0 ' select first channel
      9. R = 50 : G = 0 : B = 100 ' define a color
      10. RB_SetColor 0 , color(1) ' update led on the left
      11. RB_Send
      12. Wait 10
      13. Loop
      14. End
      Alles anzeigen
      Zum Testen nutze ich das Atmel Evaluationboard V2.01 mit dem externem 16Mhz Quarz. Ich habe eine einzelne LED vom Streifen abgeknipst, diese mit 5V und GND verbunden und an PinB0 einen 220Ohm Widerstand welcher mit DIN der LED verbunden ist.

      Was mache ich da falsch?

      Für Hilfe wäre ich sehr dankbar!

      Gruß,
      Marc
    • MarcT. schrieb:

      PinB0 einen 220Ohm Widerstand welcher mit DIN der LED verbunden ist.
      Lass den Widerstand weg, die LEDs kannst du direkt mit dem AVR verbinden.

      RB_SelectChannel 0 brauchst du nur einmal vor dem Programm ausführen, da du ja erstmal nur einen Kanal hast.
      Das brauchst du erst dann, wenn du mehrere Kanäle (mehrere Pins) benutzt.


      BASCOM-Quellcode

      1. $regfile = "m8def.dat" '$regfile = "m32def.dat"
      2. $crystal = 16000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
      7. Config Rainbow = 1 , Rb0_len = 1 , Rb0_port = Portb , Rb0_pin = 0
      8. Dim Color(3) As Byte
      9. R Alias Color(_base) : G Alias Color(_base + 1) : B Alias Color(_base + 2)
      10. Rb_selectchannel 0 ' select first channel
      11. R = 50 : G = 0 : B = 100 ' define a color
      12. Do
      13. RB_SetColor 0 , color(1) ' update led on the left
      14. RB_Send
      15. 'Wait 10
      16. Loop
      17. End
      Alles anzeigen
      Probiere es mal so...
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • ich würde die Einstellungen der fuses aus dem Programm nehmen. Hier sehe ich, es wurde mit verschiedenen Kontrollern experimentiert. Das für beide diese fuse-Einstellung passt, wäre Zufall.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Danke für die vielen Rückmeldungen

      tschoeatsch schrieb:

      ich würde die Einstellungen der fuses aus dem Programm nehmen. Hier sehe ich, es wurde mit verschiedenen Kontrollern experimentiert. Das für beide diese fuse-Einstellung passt, wäre Zufall.
      die sind nachträglich rein gekommen und nur für den Atmega8. War als Test und vergessen raus zu nehmen...

      six1 schrieb:

      Wie merkt das Michael immer an: "Blinkt eine LED an einem Ausgang im Sekunden Takt?"
      Ja, habe das gestern ausprobiert und die blinkt ziemlich perfekt im Sekundentakt. Habe dies sogar mit einem Oszilloskop gemessen...
      Allerdings ist mir aufgefallen das wenn ich den rb_send ausführe dies ca. 0,65s benötigt. Habe mal ein Ausgang eine sek 1 gesetzt, anschließend eine sek 0 gesetzt. Danach dann rb_send und das ganze dann in einer Schleife. Da ist mir dass aufgefallen.

      djmsc schrieb:

      Übrigens, falls es doch noch nicht gehen sollte musst du mal schauen ob deine Fuse richtig eingestellt sind.
      Du kannst es aber auch erstmal mit dem internen OSC von 8MHz testen
      Das teste ich mal heute Nachmittag sobald ich zuhause bin..

      Vorab schon mal vielen Dann!
    • schreib mal explizit die stackwerte und den framesize in das Programm. Vielleicht sind bei dir die Vorgabewerte total unpassend.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Sooooooo, endlich, es funzt a_22_9ac28a82

      Es war lag tatsächlich ein Problem mit dem Timing vor. Aber ganz merkwürdig. Ich habe ein Testprogramm geschrieben in dem ich 10 Mikrosekunden warte, einen Ausgang auf 1 setze, wieder 10 Mikrosekunden warte und anschließend den Ausgang wieder auf 0 setze. Da ist es mir aufgefallen (siehe Bilder). Merkwürdiger weise hat sich herausgestellt, dass ich aufmal meine Fusebits nicht mehr über Bascom setzen kann. Ich habe mir MyAVR geladen um die Fusebits zu setzen --> siehe da, es funzt ;). Und wenn es erstmal funktioniert, macht es auch richtig spaß :D.

      Vielen Dank für die tatkräftige Unterstützung hier!

      Ok:

      Nicht ok: