HW2: RGB Licht im Glas

Use Case

Eine Mehrfarbige Lampe die sowohl langsam zwischen den Farben wechseln kann als auch eine Farbe statisch darstellen kann.

Umsetzung

Eine Zuckerdose, die schonmal ein Loch für das Netzteilkabel hat, beinhaltet den LED-Strip.

Ein Taster schaltet zwischen Farbwechsel, fester Farbe, Farbe auf- und abblenden und weiß um.
Mit zwei Potentiometern kann man die Geschwindigkeit bzw. Farbe oder Helligkeit einstellen, abhängig vom Taster-gewählten Modus.

rgb_lamp2_Steckplatine

rgb_lamp_lochplatineIMG_2631

BOM

Bauteil Anbieter Anzahl Preis Gesamt
Drucktaster Reichelt

1

0,4

0,4

Drehpoti 10K Reichelt

2

1,67

3,34

Knopf für Poti Reichelt

2

1,01

2,02

MOSFET Reichelt

3

0,72

2,16

100 Ohm Widerstand Reichelt

3

0,086

0,258

10 kOhm Widerstand Reichelt

1

0,086

0,086

RGB-Strip (10cm Stück) Roller

1

14,99

14,99

Zuckerstreuer Depot (teurer: Butlers

1

1,99

1,99

12V-Netzteil Reste-Kiste

1

0

Original Digispark http://shop.cboden.de/

0

8,95

0

oder Digispark Clone http://www.aliexpress.com/

1

1,05

1,05

Code

https://github.com/crushcoder/arduino/blob/master/rgb_lamp/rgb_lamp.ino

Quellen

Die Lampe ist sozusagen ein Mashup folgender Webseiten:

 

Advertisements
HW2: RGB Licht im Glas

Digispark IDE unter MacOS X

Es gibt neben den normalen Arduino Boards noch einige andere Boards die die Arduino IDE nutzen (können) um programmiert zu werden.

Besonders klein und preiswert sind die Digispark Boards von Digistump.
Diese gibt es im Original bei cboden oder bei ali und eBay als Clone ab 1€.

Anschluss am Mac

Einige Boards wurden vom Mac nicht auf Anhieb gefunden.
Ein USB-Hub, am Besten mit Stromversorgung, hat mir bei einem geholfen.
In der App „Systeminformationen“ kann man übrigens sehen ob das Board erkannt wurde.

Nicht erkannte Boards

Ein Board wurde garnicht erkannt, bei diesem Clone fehlte die Firmware vollständig.
Ihn konnte ich aber per ISP programmieren.

Arduino IDE

Bei mir unter MacOS X 10.10.5 hat die Anleitung von Digispark (http://digistump.com/wiki/digispark/tutorials/connecting) nicht geholfen.
Es hagelte Fehlermeldungen beim Upload von Sketches, und einige Handarbeit war nötig.

Windows

Unter Windows könnte diese Version einfacher sein: http://cboden.de/mikro-controller/digispark-pro/erste-schritte
Dort ist eine komplette Arduino Version verlinkt.

Leider nicht für den Mac, außerdem habe ich die Seite erst nachher gefunden.

Arduino 1.6.5

Ich habe zuerst natürlich die neueste Version der IDE (1.6.7) ausprobiert, hier gab es aber am meisten Fehler.
Also 1.6.5-r5.

Danach sollte die Anleitung von Digispark ausgeführt werden.

AvrDude und micronucleus an einen ausführbaren Ort legen

Die Tools gehen davon aus das avrdude, die libusb library und das micronucleus upload tool, das letztendlich von der IDE aufgerufen wird in einem Ordner liegen.

Digispark will den Kram im Application Package der IDE ablegen, das funktionierte aber nicht aus Rechte Gründen.

Ich habe aus dem Package deswegen den gesamten avr Folder kopiert und in den Library Folder von Arduino gepackt.
Unter /Applications/Arduino_Digispark.app/Contents/Java/hardware/tools/avr nach ~/Arduino15 kopieren.

Unter ~/Library/Arduino15/staging/packages/micronucleus-2.0a4-osx.zip findet man das micronucleus tool.
Also entpacken und den Inhalt (launcher, libusb…, micronucleus) in den kopierten Folder unter /bin (~/Library/Arduino15/avr/bin) ablegen, neben avrdude.
Das File libusb-config habe ich nicht kopiert, ist afaik auch gleich.

Konfigurationsfile

Das lag bei mir unter ~/Library/Arduino15/packages/digistump/hardware/avr/1.6.5/platform.txt
bzw. ~/Library/Arduino15/packages/digistump/hardware/avr/1.6.7/platform.txt

Geändert habe ich den Eintrag tools.micronucleus.cmd.path zu

tools.micronucleus.cmd.path=/Users/jbruester/Library/Arduino15/avr/bin/launcher

Sketch uploaden

Danach konnte ich Sketche aus der IDE auf das Board laden.
Einfach wie bei Digistump beschrieben Sketch->Hochladen in der IDE auswählen und dann das Board einstöpseln.

Digispark IDE unter MacOS X

Digispark Clones / Attiny85 Board HowTo

Ich habe mir kürzlich ein paar Digispark Boards von eBay zugelegt.
Diese sind natürlich nicht Original, was, neben den Tutorials im Netz aus dem Jahr 2013,
zu zusätzlichen Problemen führt.

IMG_2636

Hier ein paar Findings was man beachten muss, bzw. wie man Sie updated.

Alles natürlich auf eigene Gefahr.
Ich habe mir einen erstmal unzugänglich gemacht (kann gerettet werden), und einen wohl mit zuviel Spannung zerlegt während ich rum probiert habe.

Ein wenig Vorkenntnisse mit Arduino und Hardware sollte auch vorhanden sein.

Version

Meine Boards sind alle Model A, d.h. das die interne LED auf Port 1 liegt.

Micronucleus Firmware updaten

Die neueste Version (beim Schreiben war das 1.11) gibts bei Github: https://github.com/micronucleus/micronucleus/tree/v1.11

Man muss die Versionen im Verzeichnis Upgrade nehmen.
Diese kann man einfach per USB auf den Digispark laden.

Die Firmware ist sozusagen in einem Programm für den Digispark eingepackt und das Programm wird dann vom Chip ausgeführt. Er flasht sich also selbst.

Man lade also micronucleus/commandline/builds/OSX/micronucleus herunter (Rechtsklick auf Raw bei Github).
Und die gewünschte Firmware aus micronucleus/upgrade/releases/ (micronucleus-1.11-upgrade.hex bei mir).

Bei MacOS muss man micronucleus ausführbar machen

chmod +x micronucleus

Dann kann man in der Kommandozeile die Firmware flashen:

./micronucleus --run micronucleus-1.11-upgrade.hex

Was bringt eine neue Version

Ich habe das natürlich gemacht weil ich dachte das die Firmware für meine Probleme verantwortlich ist.
Bei der einen Charge Boards war das nämlich noch Version 1.02, bei der anderen Version 1.06.

Die neuere Version bringt vor allem mehr Platz für eigene Programme/Sketches.
Wenn man also noch ein paar Byte braucht kann sich das lohnen.

Wo sieht man die Firmware Version?

Beim Hochladen von Programmen in der IDE wird die Version angezeigt, ziemlich am Anfang bei 30-40% (zumindest bei mir).

Was machen die verschiedenen Versionen?

entry-ext-reset-upgrade

Das ist die Version bei der Pin5 dazu genutzt wird in den Programmier-Modus zu schalten wenn man
das Board einsteckt. Wie gesagt, dazu müssen die Fuses richtig gesetzt sein.

entry-jumper-pb0-upgrade

Hier wird Pin 0 genutzt um in den Programmiermodus zu kommen, nicht Pin5.
(http://digistump.com/board/index.php/topic,320.msg8590.html#msg8590)

ledpb1-upgrade

Todo

PINs nutzen

Ich hatte geplant die sechs Pins voll zu nutzen, mit zwei Potis, einem Taster und einem RGB-Strip an den drei PWM-Ausgängen.

Pin 5

Eigentlich sollte das ein IO sein beim Digispark, aber nicht so bei den Nachbauten. Hier ist es ein bzw. der Reset-Pin. Ein Taster daran resettet also das Board.
Das ist der Default beim Attiny.

Die Originalen haben ein Fuse-Bit beim Attiny gesetzt, dadurch kann man den Pin als IO nutzen. Die Firmware wartet ja beim Starten 5 Sekunden damit Programme geladen werden können.

Andere Firmware

Jetzt könnte man meinen das man wenigstens um die 5 Sekunden rumkäme, immerhin gibt es ja auch Firmware die den Pin nutzt um den Attiny in den Programmiermodus zu schalten, dafür nicht wartet (entry-ext-reset-upgrade).
So einfach ist es aber nicht, diese Firmware fragt nämlich wie ein normaler Sketch den Pin ab, geht also davon aus das dieses Fuse Bit gesetzt ist.

Setzen des Fuse

Man kann den Pin5 recht einfach umschalten damit man ihn in Sketches als Input nutzen kann.
Hierzu muss man den Attiny per ISP programmieren.
Ich habe dazu einen Arduino Uno genutzt.

Diesen schließt man normal per USB an. In der Arduino IDE lädt man aus dem Menü Datei->Beispiele->ArduinoISP den Sketch. Im Menü Werkzeuge->Platine auf Arduino/Genuino Uno stellen und schon kann man den Sketch hochladen.

Man kann dann den UNO und den Digispark wie im verlinkten Bild verdrahten:
http://www.instructables.com/id/How-to-unlock-Digispark-ATtiny85-and-convert-it-to/step4/Programming-Digispark-via-ISP/
Der Kondensator zwischen Reset und Ground ist nur beim Uno nötig, nicht bei anderen Boards.

Jetzt geht es auf die Kommandozeile / ins Terminal. Dort geht man in den Ordner in den man micronucleus für die IDE kopiert hat.
Bei mir ist das (siehe oben) ~/Library/Arduino15/avr/bin.

Dort kann man nun

./avrdude -C~/Library/Arduino15/avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -P/dev/cu.usbmodem1411 -b19200 -U hfuse:w:0x55:m

ausführen.

Das geht aber nur einmal, denn danach kann man den Attiny nicht mehr per ISP programmieren, weil der RESET Pin ja fehlt.
Rückgängig kann man das nur machen indem man in per HVSP umprogrammiert, das ist in dem Instructable oben erklärt.

Siehe auch
http://www.mikrocontroller.net/articles/AVR_Fuses
http://digistump.com/board/index.php?topic=1039.0

Wofür ist das Resetten?

Normalerweise programmiert man Attinys per ISP-Programmer, der Reset setzt den Chip in den Programmier-Modus.
Das USB-Programmieren ist ja das Besondere des Digispark, bzw. der Micronucleus Firmware.

Siehe auch https://digistump.com/wiki/digispark/tutorials/programming#creating_digispark_compatible_clones

Pin 3 und 4

Für Taster (digitalRead)

Das hat mich auch einige Nerven gekostet, denn diese Pins haben, für die USB-Kommunikation, eine Zener-Diode.
Pin3 hat auch noch einen Pullup-Widerstand.
Ein normaler Button der 5V auf den Pin gibt, mit einem Pull-Up-Widerstand auf Ground funktioniert nicht.

Funktioniert hat es umgekehrt, der Button schaltet den Pin auf Ground, der Pull-Up bleibt auf Ground.

Für Poti (analogRead)

Todo

Pin 3 als digital Ausgang (digitalWrite)

Als Ausgang gibt es keine Merkwürdigkeiten.

Pin 4 als PWM Ausgang

Das funktioniert (inzwischen überraschenderweise) auch ohne Probleme.

Pin 1 als PWM Ausgang

Pin1 ist ja nicht nur IO, daran hängt auch noch die interne LED.
Deswegen wird diese auch mit gedimmt wenn man analogWrite(1, 50) ausführt.
Man kann die interne LED aber abklemmen (mechanisch) ohne das dies Auswirkungen haben soll.

Fritzing

Den Digispark für die Fritzing Software gibts hier: http://tuxamito.com/wiki/index.php/Digispark

Fazit

Selbst beim Original Digistump Digispark wird man die IDE zusammen basteln müssen.

Ich würde nach dieser Erfahrung zu einen Arduino Nano Clone greifen, die sind nicht viel teurer, sollten aber „out of the box“ funktionieren. Ein Nano ist eine kleinere Bauform des Uno.

Oder ein Mini Pro, der hat aber kein USB, was ich nachher aber auch nicht brauche sondern nur zum Programmieren praktischer finde.
Wobei das Ein-Ausstöpseln des Digispark einfach nur nervt, und man nachher wieder basteln muss um die 5 Sekunden beim Starten wegzubekommen. Da ist die ISP Programmierung schneller.

 

Digispark Clones / Attiny85 Board HowTo