LaborTageBadge2011: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
(small changes)
Keine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{ProjektInfoBox
{{ProjektInfoBox
|name       = LaborTageBadge2011
|name=Labortage Badge 2011
|status     = Stable
|status=unknown
|image       = Badge2011TopRender.jpg
|image=Badge2011TopRender.jpg
|description = Badge der Labortage 2011
|description=Badge der Labortage 2011
|author     = [[Benutzer:Suschman|Suschman]], [[Benutzer:bg|bg]]   
|author=[[Benutzer:Suschman|Suschman]], [[Benutzer:bg|bg]]  <!-- username    = Suschman -->
<!-- username    = Suschman -->
|version=1.0
|version     = 1.0
|update=28.10.2011
|update     = 28.10.2011
|platform=AVR (ATtiny45)
|platform   = AVR (ATtiny45)
|license=GPL
|license     = GPL
|download=[https://github.com/das-labor/labortage2011badge GIT]
|download   = Software: [https://www.das-labor.org/usergit/labortage2011badge/ GIT]<br>
|tags=Licht & Sound,
Software: [https://www.das-labor.org/usertrac/labortage2011badge TRAC]<br>
Hardware: [https://www.das-labor.org/svn/hardware/labortagebadge2011 SVN]
}}
}}
==About==
==About==


Das "Ticket" der [[Labortage_2011|Labortage]] ist dieses mal kein Ram-Riegel, sondern eine echte Platine mit Funktion!<br>
Das "Ticket" der [[Labortage_2011|Labortage 2011]] ist dieses mal kein Ram-Riegel, sondern eine echte Platine mit Funktion!<br>
Genießt das Logo der Labortage auf der einen Seite, und bestückt euch euren eigenen <u>RGB-LED Controller mit USB</u> auf der anderen.
Genießt das Logo der Labortage auf der einen Seite, und bestückt euch euren eigenen <u>RGB-LED Controller mit USB</u> auf der anderen.
==Second Run==
Auf der Seite [[LaborTageBadge2011/SecondRun]] können sich alle eintragen, die Interesse haben Bauteile zu bestellen, um ihr Badge noch zu vervollständigen.


==Funktion==
==Funktion==
Der AVR kommuniziert mit dem PC über USB mit Hilfe der [http://www.obdev.at/products/vusb vUSB] library. Darüber kann man dann mittles eines commandline programms die LED steuern, sowie den Taster abfragen und den Temperatursensor des AVR auslesen.<br>
Der AVR kommuniziert mit dem PC über USB mit Hilfe der [http://www.obdev.at/products/vusb vUSB] library. Darüber kann man dann mittels eines commandline Programms die LED steuern, sowie den Taster abfragen und den Temperatursensor des AVR auslesen.<br>
<!--Mittels des [http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger FastBoot] bootloaders kann man auch später den AVR noch über den IO-pin des Tasters programmieren, da die Resetleitung und SPI aus Pinmangel abgeschaltet sind.-->
<!--Mittels des [http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger FastBoot] bootloaders kann man auch später den AVR noch über den IO-pin des Tasters programmieren, da die Resetleitung und SPI aus Pinmangel abgeschaltet sind.-->
Grundsätzlich kann man die Firmware auf dem Badge als black box betrachten und sich am commandline tool austoben :).
Grundsätzlich kann man die Firmware auf dem Badge als black box betrachten und sich am commandline tool austoben :).
Dies auch, weil der der AVR über USB aufgrund der Funktionsweise seiner selfprogram-funktion nicht (ohne klimmzüge) über USB programmierbar ist und  der vorgesehene serielle one-pin Bootloader nicht fertig wurde...
Dies auch, weil der der AVR über USB aufgrund der Funktionsweise seiner selfprogram-Funktion nicht (ohne Klimmzüge) über USB programmierbar ist und  der vorgesehene serielle one-pin Bootloader nicht fertig wurde...


==Schaltung==
==Schaltung==
Zeile 71: Zeile 72:
| LATB T66C
| LATB T66C
|}
|}
http://www.reichelt.de/?ACTION=20;AWKID=514176;PROVID=2084


===Aufbau===
===Aufbau===
Zeile 98: Zeile 101:
     -s --set-rgb <red>:<green>:<blue> ................. set color
     -s --set-rgb <red>:<green>:<blue> ................. set color
     -g --get-rgb ...................................... read color from device and print
     -g --get-rgb ...................................... read color from device and print
    -j --fade-rgb <rd>:<gd>:<bd>:<cnt> ................ change color by <rd>, <rg> and <rb> <cnt> times (all 8ms)
     -r --read-mem <addr>:<length> ..................... read RAM
     -r --read-mem <addr>:<length> ..................... read RAM
     -w --write-mem <addr>:<length>[:data] ............. write RAM
     -w --write-mem <addr>:<length>[:data] ............. write RAM
Zeile 104: Zeile 108:
     -b --read-button .................................. read status of button
     -b --read-button .................................. read status of button
     -k --wait-for-button[=(on|off)] ................... wait for button press (default: on)
     -k --wait-for-button[=(on|off)] ................... wait for button press (default: on)
     -t --read-temperature ............................. read temperature sensor and output raw value
     -t --read-temperature ............................. read temperature sensor and output raw value
  Please note:
  Please note:
   If you use optional parameters you have to use two different way to specify the parameter,
   If you use optional parameters you have to use two different ways to specify the parameter,
   depending on if you use short or long options.
   depending on if you use short or long options.
   Short options: You have to put the parameter directly behind the option letter. Exp: -koff
   Short options: You have to put the parameter directly behind the option letter. Exp: -koff
Zeile 113: Zeile 116:


Wenn die LED zu dunkel ist: der Parameter für -s ist <u>16 Bit</u> Dezimal, also bis 65535.<br>
Wenn die LED zu dunkel ist: der Parameter für -s ist <u>16 Bit</u> Dezimal, also bis 65535.<br>
Wenn noch jemand einen Bausatz hat und keinen programmierten Prozessor, der melde sich bei Suschman, ich schicke ihn dann zu.<br>
Wenn noch jemand einen Bausatz hat und keinen programmierten Prozessor, der melde sich bei Suschman, ich schicke ihn dann zu.<br>
===Funktionen===
Helligkeitswerte sind 16-Bit lang, d.h. maximale Helligkeit entspricht 65535 oder 0xffff. Bei sehr niedrigen Werten, kann es jedoch sein, dass das Tastverhältnis so ungünstig ist, dass ein Flackern wahrgenommen werden kann.
==== Set Color ====
-s --set-rgb <red>:<green>:<blue>
Setzt die Farbe auf die RGB-Werte <red>:<green>:<blue>
==== Fade ====
-j --fade-rgb <rd>:<gd>:<bd>:<cnt>
Das Badge kann selbstständig linear (ohne Gammakorrektur) faden. Die ersten drei Parameter geben den Wert an, um den die Farbe alle 8ms (wirklich 8ms?) geändert wird.
Der vierte Parameter gibt an wie viele Zyklen gemacht werden, bis das Faden aufhört. Gefadet werden kann in beide Richtungen, um den Farbwert zu verringern muss die 16-Bit 2-er-Komplement Darstellung angegeben werden (also 0xffff für -1 0xfffe für -2 ... 0x8000 für -32768).


===Berechtigungen===
===Berechtigungen===
Zeile 121: Zeile 136:
In der Datei /etc/udev/rules.d/20-usb.rules . Euer user sollte dann natürlich in der Gruppe dialout sein. Ihr könnt natürlich auch eine beliebige andere Gruppe oder Eigentümer wählen.
In der Datei /etc/udev/rules.d/20-usb.rules . Euer user sollte dann natürlich in der Gruppe dialout sein. Ihr könnt natürlich auch eine beliebige andere Gruppe oder Eigentümer wählen.


Zu beachten ist, dass bei dem obigen Beispiel '''ALLE''' USB Geräte unter dem Zugriff der entsprechenden Gruppe und Eigentümer steht.
Zu beachten ist, dass bei dem obigen Beispiel '''ALLE''' USB Geräte unter dem Zugriff der entsprechenden Gruppe und Eigentümer steht. Alternativ kann per
 
SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", GROUP="user"
==Stuff (Ideen)==
nur der Zugriff auf das Labor-Badge der Gruppe erlaubt werden. Ach ja, und wer will, kann die Zeile mit einem freundlichen
*Eat more Humans
RUN+="...../labortage2011badge/commandline/badge-tool -s 65535:32535:0"
*Programmiert eine Playroutine für fading Animationen
beenden (... mit dem korrekten Pfad ersetzen) und kann damit die initiale Farbe des badges steuern.
*Baut eine Dbus-Integration (wenn ihr es wagt *g*)
*Plugin für $Musicplayer als Visualisierungserweiterung.
*[http://code.google.com/p/boblight/ BIBlight] integration.
*[[LaborTageBadge2011/DioderMod| Umbau einer IKEA LED-Leiste]]
*Winsowskompabilität
*...


==Beispielcode==
==Beispielcode==
<!--
===CPU-Status===
===CPU-Status===
Kleines Tool in Perl was einem den CPU-Status farblich anzeigt. Desto roter desto schneller.
Kleines Tool in Perl was einem den CPU-Status (tacktfrequenz-stufen) farblich anzeigt. Desto roter desto schneller.
<pre>#!/usr/bin/perl
<pre>#!/usr/bin/perl


Zeile 179: Zeile 189:
sleep(1); #Nicht das System fressen :3
sleep(1); #Nicht das System fressen :3
}</pre>
}</pre>
 
-->
===Blink===
===Blink===
Kleines farbliches Blinktool als Bash script.
Kleines farbliches Blinktool als Bash script.
Zeile 203: Zeile 213:
./badge-tool -s 00000:00000:30000
./badge-tool -s 00000:00000:30000
} done
} done
</pre>
===CPU Load===
One-liner der die cpu load im system anzeigt (c muss auf die anzahl cpus angepasst werden):
<pre>
./badge-tool -s 0:0:0;\
(while true; do cat /proc/loadavg; sleep 1; done)|\
awk 'BEGIN{m=0x07fff; c=2}{print "./badge-tool", "-s", int($1 * m) ":" 0 ":" int((c - $1) * m); fflush() }'|\
sh
</pre>
===NET Load===
One-liner der die netzwerk load im system anzeigt:
<pre>
(while true; do cat /proc/net/dev; sleep 1; done)|awk 'BEGIN{m=0x0ffff;c=0}/eth0/{d1=($2-c1)/10; d2=($10-c2)/10; if (d1>m) d1=m; if (d2>m) d2=m; print "./badge-tool", "-s", int(d1) ":" int(d2) ":" int(0); fflush(); c1=$2; c2=$10; }' | sh
</pre>
</pre>


[[Kategorie:Labortage]]
[[Kategorie:Labortage]]
[[Kategorie:Microcontroller]]
[[Kategorie:Microcontroller]]

Aktuelle Version vom 8. April 2017, 00:03 Uhr

           
Labortage Badge 2011

Release status: unknown [box doku]

Badge2011TopRender.jpg
Description Badge der Labortage 2011
Author(s)  Suschman, bg
Last Version  1.0
Platform  AVR (ATtiny45)
License  GPL
Download  GIT



About[Bearbeiten | Quelltext bearbeiten]

Das "Ticket" der Labortage 2011 ist dieses mal kein Ram-Riegel, sondern eine echte Platine mit Funktion!
Genießt das Logo der Labortage auf der einen Seite, und bestückt euch euren eigenen RGB-LED Controller mit USB auf der anderen.

Second Run[Bearbeiten | Quelltext bearbeiten]

Auf der Seite LaborTageBadge2011/SecondRun können sich alle eintragen, die Interesse haben Bauteile zu bestellen, um ihr Badge noch zu vervollständigen.

Funktion[Bearbeiten | Quelltext bearbeiten]

Der AVR kommuniziert mit dem PC über USB mit Hilfe der vUSB library. Darüber kann man dann mittels eines commandline Programms die LED steuern, sowie den Taster abfragen und den Temperatursensor des AVR auslesen.
Grundsätzlich kann man die Firmware auf dem Badge als black box betrachten und sich am commandline tool austoben :). Dies auch, weil der der AVR über USB aufgrund der Funktionsweise seiner selfprogram-Funktion nicht (ohne Klimmzüge) über USB programmierbar ist und der vorgesehene serielle one-pin Bootloader nicht fertig wurde...

Schaltung[Bearbeiten | Quelltext bearbeiten]

Badge2011Schematic.png Badge2011Silk.png Badge2011TopRender.jpg Labtagebadge3d.png

Platine[Bearbeiten | Quelltext bearbeiten]

Die Platine ist zweilagig mit Lötstoplack, Bestückungsdruck und HAL-Zinn. Auf der einen Seite befindet sich die Schaltung, auf der anderen das Logo der Labortage. Die Platine wurde mit freundlicher Unterstützung von Basista Leiterplatten gefertigt.

Stückliste[Bearbeiten | Quelltext bearbeiten]

Name Part Reichelt
C1 SMD 0603 100nF X7R-G0603 100N
R1 SMD 0603 1,8 kOhm SMD-0603 1,8K
R2-R6 SMD 0603 68 Ohm SMD-0603 68
AVR ATtiny45 SO8 ATTINY 45-20SU
D1,D2 MiniMelf 1N4148 1N 4148 SMD
USB MiniUSB Buchse SMD USB BWM SMD
SW Kurzhubtaster SMD TASTER 9314
LED OSRAM MultiLED PLCC-4 LATB T66C

http://www.reichelt.de/?ACTION=20;AWKID=514176;PROVID=2084

Aufbau[Bearbeiten | Quelltext bearbeiten]

Der Aufbau erfordert durch die relativ dichte Bestückung in SMD und mit 0603 Bauteilen etwas Erfahrung im Löten von SMD. Wenn ihr es euch nicht zutraut, sucht euch einen Bastler der für etwas Mate Hand anlegt ;).
Bestückt wird von den niedrigen zu den hohen Bauteilen. Also zuerst C1, R1 und R2 bis R6 verlöten. Dann die beiden Dioden D1 und D2, dabei auf die Polarität achten. Nun die LED, deren abgeschrägte Kante auf Pad1 richtung Aussenkante-Stitleiste zeigt. Der AVR hat einen Punkt zur Markierung der mit dem Bestückungsdruck übereinstimmen muss. Zum Schluss kommen der Taster und die Mini USB Buchse. Diese deren Masseanschlüsse festbraten, und dann vorsichtig mit minimal Lötzinn die eigentlichen Pins verlöten. Die Stiftleiste wird nicht bestückt, ausser ihr last die LED weg und möchtet eine andere abgesetzt anschliessen, z.B den Diodermod.
Arbeitet sorgfältig und macht immer mal wieder eine Sichtprüfung auf Kurzschlüsse und schlechte Lötstellen.

Software[Bearbeiten | Quelltext bearbeiten]

Der AVR ist im Bauteilesatz der Labortage vorprogrammiert, das Binary für den PC muss unter Linux noch mit libusb übersetzt werden. Für Windows kann es prinzipiell auch übersetzt werden, dies ist aber nicht getestet.

Bauen für Linux[Bearbeiten | Quelltext bearbeiten]

Debian/Ubuntu wird angenommen:

sudo aptitude install build-essential git libusb-dev
git clone http://www.das-labor.org/usergit/labortage2011badge/
cd ./labortage2011badge/commandline
make
./badge-tool 
usage:
   ./badge-tool [<option>] <command> <parameter string>
 where <option> is one of the following:
   -p --pad[=<pad value>] ............................ pad writing data with <pad value> (default 0) to specified length
   -f --file <name> .................................. use file <name> for reading or writing data
   --i-am-sure ....................................... do not ask safety question
   -l --loop <value> ................................. execute action <value> times
 <command> is one of the following
   -s --set-rgb <red>:<green>:<blue> ................. set color
   -g --get-rgb ...................................... read color from device and print
   -j --fade-rgb <rd>:<gd>:<bd>:<cnt> ................ change color by <rd>, <rg> and  <cnt> times (all 8ms)
   -r --read-mem <addr>:<length> ..................... read RAM
   -w --write-mem <addr>:<length>[:data] ............. write RAM
   -z --read-flash <addr>:<length> ................... read flash
   -q --reset[=<delay>] .............................. reset the controller with delay in range 0..9
   -b --read-button .................................. read status of button
   -k --wait-for-button[=(on|off)] ................... wait for button press (default: on)
   -t --read-temperature ............................. read temperature sensor and output raw value
Please note:
  If you use optional parameters you have to use two different ways to specify the parameter,
  depending on if you use short or long options.
  Short options: You have to put the parameter directly behind the option letter. Exp: -koff
  Long options: You have to seperate the option from the parameter with '='. Exp: --pad=0xAA

Wenn die LED zu dunkel ist: der Parameter für -s ist 16 Bit Dezimal, also bis 65535.

Wenn noch jemand einen Bausatz hat und keinen programmierten Prozessor, der melde sich bei Suschman, ich schicke ihn dann zu.

Funktionen[Bearbeiten | Quelltext bearbeiten]

Helligkeitswerte sind 16-Bit lang, d.h. maximale Helligkeit entspricht 65535 oder 0xffff. Bei sehr niedrigen Werten, kann es jedoch sein, dass das Tastverhältnis so ungünstig ist, dass ein Flackern wahrgenommen werden kann.

Set Color[Bearbeiten | Quelltext bearbeiten]

-s --set-rgb <red>:<green>:<blue>

Setzt die Farbe auf die RGB-Werte <red>:<green>:<blue>

Fade[Bearbeiten | Quelltext bearbeiten]

-j --fade-rgb <rd>:<gd>:<bd>:<cnt>

Das Badge kann selbstständig linear (ohne Gammakorrektur) faden. Die ersten drei Parameter geben den Wert an, um den die Farbe alle 8ms (wirklich 8ms?) geändert wird. Der vierte Parameter gibt an wie viele Zyklen gemacht werden, bis das Faden aufhört. Gefadet werden kann in beide Richtungen, um den Farbwert zu verringern muss die 16-Bit 2-er-Komplement Darstellung angegeben werden (also 0xffff für -1 0xfffe für -2 ... 0x8000 für -32768).

Berechtigungen[Bearbeiten | Quelltext bearbeiten]

Wenn sich das Programm nur als root nutzen lässt, kann dass an einer fehlenden udev-rule liegen. Abhilfe kann eine Regel wie die folgende schaffen:

BUS=="usb",OWNER="root",GROUP="dialout"

In der Datei /etc/udev/rules.d/20-usb.rules . Euer user sollte dann natürlich in der Gruppe dialout sein. Ihr könnt natürlich auch eine beliebige andere Gruppe oder Eigentümer wählen.

Zu beachten ist, dass bei dem obigen Beispiel ALLE USB Geräte unter dem Zugriff der entsprechenden Gruppe und Eigentümer steht. Alternativ kann per

SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", GROUP="user"

nur der Zugriff auf das Labor-Badge der Gruppe erlaubt werden. Ach ja, und wer will, kann die Zeile mit einem freundlichen

RUN+="...../labortage2011badge/commandline/badge-tool -s 65535:32535:0"

beenden (... mit dem korrekten Pfad ersetzen) und kann damit die initiale Farbe des badges steuern.

Beispielcode[Bearbeiten | Quelltext bearbeiten]

Blink[Bearbeiten | Quelltext bearbeiten]

Kleines farbliches Blinktool als Bash script.

#!/bin/bash
cd ./labortage2011badge/commandline
echo Das Labor
echo BLINKEN FOO
while true;
do
{
./badge-tool -s 30000:00000:00000
./badge-tool -s 00000:30000:00000
./badge-tool -s 00000:00000:30000
./badge-tool -s 30000:30000:00000
./badge-tool -s 00000:30000:30000
./badge-tool -s 30000:00000:30000
./badge-tool -s 30000:00000:30000
./badge-tool -s 30000:30000:00000
./badge-tool -s 00000:30000:30000
./badge-tool -s 30000:00000:00000
./badge-tool -s 00000:30000:00000
./badge-tool -s 00000:00000:30000
} done

CPU Load[Bearbeiten | Quelltext bearbeiten]

One-liner der die cpu load im system anzeigt (c muss auf die anzahl cpus angepasst werden):

./badge-tool -s 0:0:0;\
(while true; do cat /proc/loadavg; sleep 1; done)|\
awk 'BEGIN{m=0x07fff; c=2}{print "./badge-tool", "-s", int($1 * m) ":" 0 ":" int((c - $1) * m); fflush() }'|\
sh

NET Load[Bearbeiten | Quelltext bearbeiten]

One-liner der die netzwerk load im system anzeigt:

(while true; do cat /proc/net/dev; sleep 1; done)|awk 'BEGIN{m=0x0ffff;c=0}/eth0/{d1=($2-c1)/10; d2=($10-c2)/10; if (d1>m) d1=m; if (d2>m) d2=m; print "./badge-tool", "-s", int(d1) ":" int(d2) ":" int(0); fflush(); c1=$2; c2=$10; }' | sh