Hallo zusammen,
Zurzeit arbeite ich an einem kleinen Lichtprojekt mit den WS2812
RGB-LEDs und der Light weight WS2812 Library.
Jetzt wo ich die LEDs störungsfrei ansteuern kann, würde ich dem
Mikrocontroller gerne mit dem PC (mit Ubuntu und ohne
Serielleschnittstelle) die LED Farbwerte "mitteilen" (entweder über ein
GUI oder über die Konsole).
Die LEDs soll in den gesendeten Farben leuchten, und sobald die nächsten
Werte gesendet werden, sollen diese Farben von den LEDs angenommen
werden.
Da ich bisher in keiner Weise Erfahrungen in der
Kommunikation-Programmierung von USB etc. habe, hier meine Frage:
Welches System nutze ich am besten, und welche Hard- und Software
benötige ich dazu?
Ich hoffe ihr könnt mir helfen!
P.S.: Für die LED-Steuerung benutze ich z.Z. einen Attiny13, wenn
notwendig kann ich das natürlich ändern.
Die Komunikation per USB ist bei weitem nicht so einfach wie das
Ansteuern von LED per WS2812 .
Such dir ein Beispielprojekt für eine USB Komunikation und implementiere
darin die WS2812 Ansteuerung.
Am besten verwendest du ein Mikrocontroller-Modul mit einem eingebauten
USB-UART Chip. Dann hast du mit USB und Treibern schonmal keinen Stress.
http://chip45.de/categories/avr_mikrocontroller_module_boards_usb_uart.php
oder ein "Arduino Nano" kompatibles Modul
oder du bleibst beim ATtiny13 und verwendest ein USB-UART Adapterkabel.
Achte auf die richtige Spannung (3,3 bzw. 5 Volt).
Dann nimmst du meinen Beispiel-Code für die serielle Schnittstelle
(http://stefanfrings.de/mikrocontroller_buch/index.html). Mit Hilfe der
Anleitungen in dem Buch (Band 2) kommst du bestimmt bald zum ersten
Ergebnis.
Für die Programmierung PC Seitig findest du im Internet sicher
reichtlich Tutorials. Da geht bei jedem Betriebsystem etwas anders.
Falls es Java sein soll, schau Dir die rxTxComm Library an. Zum Testen
würde ich jedoch zunächst mit einem Terminal-Programm (Hammer Terminal)
und Textuellen Kommandos arebiten.
>Falls es Java sein soll
Das habe ich vergessen zu sagen: Ich programmiere in C
------------------------------------------------------------------------
-----
> Such dir ein Beispielprojekt für eine USB Komunikation und implementiere> darin die WS2812 Ansteuerung.> Für die Programmierung PC Seitig findest du im Internet sicher> reichtlich Tutorials.
Fällt euch da (bei beiden) spontan was ein?
> an den tiny13 einen USB-serial wandler (ft232 oder ähnlichem) dranhängen> und dann per serieller schnittstelle kommunizieren
Damit habe ich keine Probleme wichtig ist mir nur, dass es an den
USB-Anschluss angeschlossen wird.
> Mit Hilfe der> Anleitungen in dem Buch (Band 2) kommst du bestimmt bald zum ersten> Ergebnis.
@ Stefan Us
Gibt es die Büch (Band 1+2) auch gedruckt zu kaufen?
Wenn ja, wo bzw. welch ISBN?
>Hallo hier bin ich wieder, ich habe nun die Teile unter anderem einen>ATmega8 und ein 18.4320MHz Quarz
Wie schön für dich. Leider kann der ATmega8 nur 16MHz.
Hast du das Datenblatt deines uC nicht gelesen?
In "Table 63 Examples of UBRR Settings for Commonly Used Oscillator
Frequencies (Continued)" steht auch 18.432MHz was bedeutet das? Im
Datenblatt lesen bin ich noch nicht so gut :-(
schau mal auf http://www.ulrichradig.de/ in die DMX Projekte, da gibt es
eines für RGB Stripes. Das steuert zwar nicht die WS28xx Chips an, aber
mit dem DMX Protokoll hättest du einen Standard für den es viele
Controller auf der PC Seite gibt.
> Ersetz den Mega8 durch nen 88er. Der kann 20MHz.>Leider kann der ATmega8 nur 16MHz.
Danke, dann weis ich jezt wie ich es machen muss.
Aber abgesehen davon würde mich troztem interessieren was das bedeutet:
> In "Table 63 Examples of UBRR Settings for Commonly Used Oscillator> Frequencies (Continued)" steht auch 18.432MHz was bedeutet das?
Wenn ich das wüsste könnte ich in Zunkunft solche blöden Fehler besser
vermeiden.
Nur weil es theoretisch in den Registern eingestellt werden kann, heißt
es nicht, dass der Controller auch mit dieser Frequenz umgehen kann.
Aber meistens steht ganz am Anfang des Datenblatts welche Funktionen der
Controller hat.
Frager schrieb:>> an den tiny13 einen USB-serial wandler (ft232 oder ähnlichem) dranhängen>> und dann per serieller schnittstelle kommunizieren>> Damit habe ich keine Probleme wichtig ist mir nur, dass es an den> USB-Anschluss angeschlossen wird.
Moin!
Nur der Vollständigkeit halber, mit einer Billiglösung geht es auch:
Schaltung von hier: Bierdeckel-Programmer
Open-Source-Software von hier: https://guloshop.de/f/bierdeckel/
Funktionsbeschreibung und Links für die Client-Programme hier:
https://guloshop.de/shop/USB-TTL-ADC-PWM-Signalwandler:::10.html
Nicht verwirren lassen, sind zwar zum Teil Shop-Links, aber die
VUSB-Software ist quelloffen, Nachbau erwünscht. :-)
Zur Funktion: Ich würde die Ausgänge A, B und D für die Farben RGB
verwenden. Standardmäßig wird mit 161 Hz gePWMt, und zwar in 100 Stufen.
Das kann natürlich in der Software geändert werden, falls es nicht
reichen sollte.
Trotzdem, die Vorschläge von weiter oben sind genauso gut, weil du
natürlich auf weniger Aufpassen musst und mehr Freiheiten hast, wenn du
für USB einen extra Baustein verwendest. Wie gesagt, nur der
Vollständigkeit halber: ein einzelner ATtiny85 kann das auch. ;-)
Auch dafür nochmal danke!
Ich möchte folgende Frage nocheinmal aufwärmen:
> Hallo hier bin ich wieder, ich habe nun die Teile unter anderem einen> ATmega8 und ein 16Mhz (uhrsprünglich 18.4320MHz) Quarz.> Beim Programmieren bin ich bei den Fuse-Bytes hängen geblieben.> Welche Einstellung muss ich bei den Fuse-Bytes vornehmen um den Quarz> richtig nutzen zu können?>> P.S.: Ich benötige die Namen z.B. "Ext. Clock"
Frager
Frager schrieb:> P.S.: Ich benötige die Namen z.B. "Ext. Clock"
Bitte nicht! Sonst brauchst du anschließend einen externen Oszillator,
um den Mikrocontroller zu betreiben. Du willst ja nur ein Quarz
verwenden und keinen Oszillator – jedenfalls soweit ich das verstanden
habe.
Vielleicht hilft das hier:
http://www.engbedded.com/fusecalc
EDIT:
Wenn ich das richtig sehe, wäre 0xff als lfuse (Fuse-Lowbyte) eine
sinnvolle Einstellung für die Verwendung eines 16-MHz-Quarzes.
Hab allerdings mit dem ATmega8 kaum etwas gemacht, wär gut, wenn das
noch irgendwer checkt. :-)
> Du willst ja nur ein Quarz> verwenden und keinen Oszillator – jedenfalls soweit ich das verstanden> habe.
Stimmt! Es war nur ein Beispiel, weil es kurz ist und es das erste war
was mir als Name in die Augen gefallen ist.
Und auf der PC Seite empfiehlt es sich Qt zu benutzen. Mit dem QtCreater
lässt sich eine Oberfläche schnell und einfach bauen, auch die
QtSerialPort Klasse ist sicherlich von Vorteil. Ein netter Nebeneffekt
wäre, dass man das Programm auch unter Windows kompilieren kann.
> Und auf der PC Seite empfiehlt es sich Qt zu benutzen.
Guter Tipp aber, ich benutze für GUIs GTK (gtk.org)
> wär gut, wenn das> noch irgendwer checkt. :-)
Könnte das eventuell mal jemand machen?
Danke
Vielen Dank für die Hilfe ich habe die lfuse auf 0xff und hfuse auf 0xd9
gesetzt. Mit einem 16Mhz Quarz und dem serial-Programm aus dem 2. Band
(http://stefanfrings.de/mikrocontroller_buch/index.html) funktioniert
alles wie gewünscht.
Frager