<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=31.184.196.106</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=31.184.196.106"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/31.184.196.106"/>
	<updated>2026-04-10T23:46:26Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90519</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90519"/>
		<updated>2015-12-07T22:28:13Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500 mg side effects, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
cephalexin 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
cephalexin for dogs, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
ceflex, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90515</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90515"/>
		<updated>2015-12-07T22:28:12Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500 mg side effects, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
cephalexin 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Firmware ist entwickelt und getestet auf [http://www.raspberrypi.org/downloads Raspbian Wheezy]. Die Installation von Raspbian wird auf der Raspberry Pi Seite beschrieben. &lt;br /&gt;
Die einfachste Art das Raspberry Webradio aufzusetzen ist mit dem [[#Installer|automatischen Installer]]. Hierfür kopiert man alle Ordner, die man aus dem SVN ausgecheckt hat auf den Raspberry Pi und führt den Installer wie unten beschrieben aus.&lt;br /&gt;
&lt;br /&gt;
Eine andere, noch einfachere Möglichkeit ist, ein fertiges Image zu verwenden. Dieses braucht nur auf eine SD-Karte mit mindestens 2GB geschrieben werden. &lt;br /&gt;
Das Image (Stand: 11.07.2013) ist zu finden auf [http://misc0110.net/download/webradio-image.rar misc0110.net/download/webradio-image.rar]. &lt;br /&gt;
Auf die SD-Karte schreiben kann man es (nach dem Entpacken) mit &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sudo dd if=/pfad/zum/image.img of=/dev/sdX bs=4M&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;/dev/sdX&#039;&#039; durch den Pfad zur SD Karte ersetzt werden muss. Man kann statt &#039;&#039;dd&#039;&#039; auch das graphische Tool ImageWriter (&#039;&#039;sudo apt-get install usb-imagewriter&#039;&#039;) verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Login Daten für das Image sind User: pi und Passwort: raspberry.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
Der Installer ist ein Bash-Script das alle erforderlichen Dateien auf dem Raspberry Pi installiert. Damit der Installer funktioniert, wird Internetzugang benötigt (am besten über die LAN Buchse) und er muss als root ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte werden vom Installer durchgeführt&lt;br /&gt;
* Installation aller notwendigen Softwarepakete, falls diese noch nicht installiert sind (avahi-daemon, mpg123, id3v2, usbmount, lighttpd + php5, wiringPi, libcurl, libxml2)&lt;br /&gt;
* Einrichten des lighttpd Servers und der mobilen Webseite&lt;br /&gt;
* Kompilieren der Firmware, des USB-Players und des Streaming-Players&lt;br /&gt;
* Kopieren aller Dateien in die richtigen Ordner (/home/pi wird als Installationsordner verwendet) und setzen der Berechtigungen&lt;br /&gt;
* Standard Konfiguration einspielen&lt;br /&gt;
&lt;br /&gt;
Der Installer wird mit einem Aufruf von&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo ./installer.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation muss - sofern die Firmware auf der Hardware ausgeführt wird, und nicht im Simulator - die &#039;&#039;default.conf&#039;&#039; bearbeitet werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=hardware&lt;br /&gt;
 io=hardware&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte der Webserver nicht starten, kann dies durch ein &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo chown pi:pi /var/log/lighttpd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
behoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Autostart und Autologin ===&lt;br /&gt;
Um die Firmware automatisch beim Starten des Raspberrys zu starten müssen zwei Dateien angepasst werden. &lt;br /&gt;
Zuerst editiert man die Datei &#039;&#039;/etc/inittab&#039;&#039; (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/inittab&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Man sucht die Zeile &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
und kommentiert sie aus, indem man # davor setzt. &lt;br /&gt;
Die Zeile sieht danach so aus: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unter der geänderten Zeile fügt man folgende neue Zeile ein&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/bin/login -f pi tty1 &amp;lt;/dev/tty1 &amp;gt;/dev/tty1 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies sorgt dafür, dass man automatisch als User &#039;&#039;pi&#039;&#039; angemeldet wird wenn das Betriebssystem startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach muss noch die Datei &#039;&#039;/etc/profile&#039;&#039; geändert werden (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/profile&amp;lt;/code&amp;gt;).&lt;br /&gt;
Hier fügt man einfach am Ende der Datei folgende zwei Zeilen ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  cd /home/pi&lt;br /&gt;
  ./firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch startet die Firmware automatisch wenn man den Raspberry Pi hochfährt.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
ceflex, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90514</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90514"/>
		<updated>2015-12-07T22:28:10Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500 mg side effects, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
cephalexin 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Firmware ist entwickelt und getestet auf [http://www.raspberrypi.org/downloads Raspbian Wheezy]. Die Installation von Raspbian wird auf der Raspberry Pi Seite beschrieben. &lt;br /&gt;
Die einfachste Art das Raspberry Webradio aufzusetzen ist mit dem [[#Installer|automatischen Installer]]. Hierfür kopiert man alle Ordner, die man aus dem SVN ausgecheckt hat auf den Raspberry Pi und führt den Installer wie unten beschrieben aus.&lt;br /&gt;
&lt;br /&gt;
Eine andere, noch einfachere Möglichkeit ist, ein fertiges Image zu verwenden. Dieses braucht nur auf eine SD-Karte mit mindestens 2GB geschrieben werden. &lt;br /&gt;
Das Image (Stand: 11.07.2013) ist zu finden auf [http://misc0110.net/download/webradio-image.rar misc0110.net/download/webradio-image.rar]. &lt;br /&gt;
Auf die SD-Karte schreiben kann man es (nach dem Entpacken) mit &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sudo dd if=/pfad/zum/image.img of=/dev/sdX bs=4M&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;/dev/sdX&#039;&#039; durch den Pfad zur SD Karte ersetzt werden muss. Man kann statt &#039;&#039;dd&#039;&#039; auch das graphische Tool ImageWriter (&#039;&#039;sudo apt-get install usb-imagewriter&#039;&#039;) verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Login Daten für das Image sind User: pi und Passwort: raspberry.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
Der Installer ist ein Bash-Script das alle erforderlichen Dateien auf dem Raspberry Pi installiert. Damit der Installer funktioniert, wird Internetzugang benötigt (am besten über die LAN Buchse) und er muss als root ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte werden vom Installer durchgeführt&lt;br /&gt;
* Installation aller notwendigen Softwarepakete, falls diese noch nicht installiert sind (avahi-daemon, mpg123, id3v2, usbmount, lighttpd + php5, wiringPi, libcurl, libxml2)&lt;br /&gt;
* Einrichten des lighttpd Servers und der mobilen Webseite&lt;br /&gt;
* Kompilieren der Firmware, des USB-Players und des Streaming-Players&lt;br /&gt;
* Kopieren aller Dateien in die richtigen Ordner (/home/pi wird als Installationsordner verwendet) und setzen der Berechtigungen&lt;br /&gt;
* Standard Konfiguration einspielen&lt;br /&gt;
&lt;br /&gt;
Der Installer wird mit einem Aufruf von&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo ./installer.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation muss - sofern die Firmware auf der Hardware ausgeführt wird, und nicht im Simulator - die &#039;&#039;default.conf&#039;&#039; bearbeitet werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=hardware&lt;br /&gt;
 io=hardware&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte der Webserver nicht starten, kann dies durch ein &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo chown pi:pi /var/log/lighttpd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
behoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Autostart und Autologin ===&lt;br /&gt;
Um die Firmware automatisch beim Starten des Raspberrys zu starten müssen zwei Dateien angepasst werden. &lt;br /&gt;
Zuerst editiert man die Datei &#039;&#039;/etc/inittab&#039;&#039; (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/inittab&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Man sucht die Zeile &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
und kommentiert sie aus, indem man # davor setzt. &lt;br /&gt;
Die Zeile sieht danach so aus: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unter der geänderten Zeile fügt man folgende neue Zeile ein&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/bin/login -f pi tty1 &amp;lt;/dev/tty1 &amp;gt;/dev/tty1 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies sorgt dafür, dass man automatisch als User &#039;&#039;pi&#039;&#039; angemeldet wird wenn das Betriebssystem startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach muss noch die Datei &#039;&#039;/etc/profile&#039;&#039; geändert werden (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/profile&amp;lt;/code&amp;gt;).&lt;br /&gt;
Hier fügt man einfach am Ende der Datei folgende zwei Zeilen ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  cd /home/pi&lt;br /&gt;
  ./firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch startet die Firmware automatisch wenn man den Raspberry Pi hochfährt.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Fertiges Gerät ==&lt;br /&gt;
&lt;br /&gt;
=== Fotos ===&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:RaspberryTopOpen.jpg|thumb|left|250px|Gehäuse mit offenem Deckel]]&lt;br /&gt;
| [[Image:RaspberryOpen.jpg|thumb|left|250px|Offenes Gerät]]&lt;br /&gt;
| [[Image:RaspberryBeforePainting.jpg|thumb|left|250px|Bootlogo (vor dem Lackieren)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
&lt;br /&gt;
[https://vimeo.com/60248710 Raspberry Webradio Demo]&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90512</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90512"/>
		<updated>2015-12-07T22:28:10Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500 mg side effects, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdatei ====&lt;br /&gt;
Alle Einstellungen die konfiguriert werden können sind in der &#039;&#039;default.conf&#039;&#039; zu finden.&lt;br /&gt;
Die Optionen sollten selbsterklärend sein, es sollte jedoch nicht notwendig sein hier manuell etwas anzupassen (ausgenommen der Eintrag des [[#SHOUTcast_Unterst.C3.BCtzung|Shoutcast API Keys]]).&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
identify pill, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Keflex, you must view http://cephalexin.name/ website. &lt;br /&gt;
cephalexin 500mg, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Firmware ist entwickelt und getestet auf [http://www.raspberrypi.org/downloads Raspbian Wheezy]. Die Installation von Raspbian wird auf der Raspberry Pi Seite beschrieben. &lt;br /&gt;
Die einfachste Art das Raspberry Webradio aufzusetzen ist mit dem [[#Installer|automatischen Installer]]. Hierfür kopiert man alle Ordner, die man aus dem SVN ausgecheckt hat auf den Raspberry Pi und führt den Installer wie unten beschrieben aus.&lt;br /&gt;
&lt;br /&gt;
Eine andere, noch einfachere Möglichkeit ist, ein fertiges Image zu verwenden. Dieses braucht nur auf eine SD-Karte mit mindestens 2GB geschrieben werden. &lt;br /&gt;
Das Image (Stand: 11.07.2013) ist zu finden auf [http://misc0110.net/download/webradio-image.rar misc0110.net/download/webradio-image.rar]. &lt;br /&gt;
Auf die SD-Karte schreiben kann man es (nach dem Entpacken) mit &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sudo dd if=/pfad/zum/image.img of=/dev/sdX bs=4M&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;/dev/sdX&#039;&#039; durch den Pfad zur SD Karte ersetzt werden muss. Man kann statt &#039;&#039;dd&#039;&#039; auch das graphische Tool ImageWriter (&#039;&#039;sudo apt-get install usb-imagewriter&#039;&#039;) verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Login Daten für das Image sind User: pi und Passwort: raspberry.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
Der Installer ist ein Bash-Script das alle erforderlichen Dateien auf dem Raspberry Pi installiert. Damit der Installer funktioniert, wird Internetzugang benötigt (am besten über die LAN Buchse) und er muss als root ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte werden vom Installer durchgeführt&lt;br /&gt;
* Installation aller notwendigen Softwarepakete, falls diese noch nicht installiert sind (avahi-daemon, mpg123, id3v2, usbmount, lighttpd + php5, wiringPi, libcurl, libxml2)&lt;br /&gt;
* Einrichten des lighttpd Servers und der mobilen Webseite&lt;br /&gt;
* Kompilieren der Firmware, des USB-Players und des Streaming-Players&lt;br /&gt;
* Kopieren aller Dateien in die richtigen Ordner (/home/pi wird als Installationsordner verwendet) und setzen der Berechtigungen&lt;br /&gt;
* Standard Konfiguration einspielen&lt;br /&gt;
&lt;br /&gt;
Der Installer wird mit einem Aufruf von&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo ./installer.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation muss - sofern die Firmware auf der Hardware ausgeführt wird, und nicht im Simulator - die &#039;&#039;default.conf&#039;&#039; bearbeitet werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=hardware&lt;br /&gt;
 io=hardware&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte der Webserver nicht starten, kann dies durch ein &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo chown pi:pi /var/log/lighttpd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
behoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Autostart und Autologin ===&lt;br /&gt;
Um die Firmware automatisch beim Starten des Raspberrys zu starten müssen zwei Dateien angepasst werden. &lt;br /&gt;
Zuerst editiert man die Datei &#039;&#039;/etc/inittab&#039;&#039; (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/inittab&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Man sucht die Zeile &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
und kommentiert sie aus, indem man # davor setzt. &lt;br /&gt;
Die Zeile sieht danach so aus: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unter der geänderten Zeile fügt man folgende neue Zeile ein&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/bin/login -f pi tty1 &amp;lt;/dev/tty1 &amp;gt;/dev/tty1 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies sorgt dafür, dass man automatisch als User &#039;&#039;pi&#039;&#039; angemeldet wird wenn das Betriebssystem startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach muss noch die Datei &#039;&#039;/etc/profile&#039;&#039; geändert werden (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/profile&amp;lt;/code&amp;gt;).&lt;br /&gt;
Hier fügt man einfach am Ende der Datei folgende zwei Zeilen ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  cd /home/pi&lt;br /&gt;
  ./firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch startet die Firmware automatisch wenn man den Raspberry Pi hochfährt.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Fertiges Gerät ==&lt;br /&gt;
&lt;br /&gt;
=== Fotos ===&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:RaspberryTopOpen.jpg|thumb|left|250px|Gehäuse mit offenem Deckel]]&lt;br /&gt;
| [[Image:RaspberryOpen.jpg|thumb|left|250px|Offenes Gerät]]&lt;br /&gt;
| [[Image:RaspberryBeforePainting.jpg|thumb|left|250px|Bootlogo (vor dem Lackieren)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
&lt;br /&gt;
[https://vimeo.com/60248710 Raspberry Webradio Demo]&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90510</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90510"/>
		<updated>2015-12-07T22:28:09Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex 500 mg side effects, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdatei ====&lt;br /&gt;
Alle Einstellungen die konfiguriert werden können sind in der &#039;&#039;default.conf&#039;&#039; zu finden.&lt;br /&gt;
Die Optionen sollten selbsterklärend sein, es sollte jedoch nicht notwendig sein hier manuell etwas anzupassen (ausgenommen der Eintrag des [[#SHOUTcast_Unterst.C3.BCtzung|Shoutcast API Keys]]).&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
identify pill, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SHOUTcast Unterstützung ===&lt;br /&gt;
Die Unterstützung für die SHOUTcast API kann alles was man braucht&lt;br /&gt;
* Suchen nach Stationen&lt;br /&gt;
* Anzeigen der Stationen nach Genre&lt;br /&gt;
* Liste der Top Stationen&lt;br /&gt;
* Zufällige Stationen (wenn man sich gerne überraschen lässt)&lt;br /&gt;
&lt;br /&gt;
Leider benötigt man für die SHOUTcast API einen Developer Key der nicht so einfach zu bekommen ist (und den man auch nicht veröffentlichen darf). &lt;br /&gt;
Wer die oben erwähnten Features also verwenden möchte, kann entweder versuchen einen SHOUTcast Developer Key zu bekommen, oder man verwendet einfach einen der Keys die im Internet umherschwirren... (siehe Links).&lt;br /&gt;
Das Abspielen von SHOUTcast Streams funktioniert natürlich auch ohne Developer Key.&lt;br /&gt;
&lt;br /&gt;
Der Developer Key muss in der Konfigurations-Datei &#039;&#039;default.conf&#039;&#039; überall eingetragen werden, wo [DevKey] vorkommt.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Firmware ist entwickelt und getestet auf [http://www.raspberrypi.org/downloads Raspbian Wheezy]. Die Installation von Raspbian wird auf der Raspberry Pi Seite beschrieben. &lt;br /&gt;
Die einfachste Art das Raspberry Webradio aufzusetzen ist mit dem [[#Installer|automatischen Installer]]. Hierfür kopiert man alle Ordner, die man aus dem SVN ausgecheckt hat auf den Raspberry Pi und führt den Installer wie unten beschrieben aus.&lt;br /&gt;
&lt;br /&gt;
Eine andere, noch einfachere Möglichkeit ist, ein fertiges Image zu verwenden. Dieses braucht nur auf eine SD-Karte mit mindestens 2GB geschrieben werden. &lt;br /&gt;
Das Image (Stand: 11.07.2013) ist zu finden auf [http://misc0110.net/download/webradio-image.rar misc0110.net/download/webradio-image.rar]. &lt;br /&gt;
Auf die SD-Karte schreiben kann man es (nach dem Entpacken) mit &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sudo dd if=/pfad/zum/image.img of=/dev/sdX bs=4M&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;/dev/sdX&#039;&#039; durch den Pfad zur SD Karte ersetzt werden muss. Man kann statt &#039;&#039;dd&#039;&#039; auch das graphische Tool ImageWriter (&#039;&#039;sudo apt-get install usb-imagewriter&#039;&#039;) verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Login Daten für das Image sind User: pi und Passwort: raspberry.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
Der Installer ist ein Bash-Script das alle erforderlichen Dateien auf dem Raspberry Pi installiert. Damit der Installer funktioniert, wird Internetzugang benötigt (am besten über die LAN Buchse) und er muss als root ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte werden vom Installer durchgeführt&lt;br /&gt;
* Installation aller notwendigen Softwarepakete, falls diese noch nicht installiert sind (avahi-daemon, mpg123, id3v2, usbmount, lighttpd + php5, wiringPi, libcurl, libxml2)&lt;br /&gt;
* Einrichten des lighttpd Servers und der mobilen Webseite&lt;br /&gt;
* Kompilieren der Firmware, des USB-Players und des Streaming-Players&lt;br /&gt;
* Kopieren aller Dateien in die richtigen Ordner (/home/pi wird als Installationsordner verwendet) und setzen der Berechtigungen&lt;br /&gt;
* Standard Konfiguration einspielen&lt;br /&gt;
&lt;br /&gt;
Der Installer wird mit einem Aufruf von&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo ./installer.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation muss - sofern die Firmware auf der Hardware ausgeführt wird, und nicht im Simulator - die &#039;&#039;default.conf&#039;&#039; bearbeitet werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=hardware&lt;br /&gt;
 io=hardware&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte der Webserver nicht starten, kann dies durch ein &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo chown pi:pi /var/log/lighttpd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
behoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Autostart und Autologin ===&lt;br /&gt;
Um die Firmware automatisch beim Starten des Raspberrys zu starten müssen zwei Dateien angepasst werden. &lt;br /&gt;
Zuerst editiert man die Datei &#039;&#039;/etc/inittab&#039;&#039; (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/inittab&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Man sucht die Zeile &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
und kommentiert sie aus, indem man # davor setzt. &lt;br /&gt;
Die Zeile sieht danach so aus: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unter der geänderten Zeile fügt man folgende neue Zeile ein&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/bin/login -f pi tty1 &amp;lt;/dev/tty1 &amp;gt;/dev/tty1 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies sorgt dafür, dass man automatisch als User &#039;&#039;pi&#039;&#039; angemeldet wird wenn das Betriebssystem startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach muss noch die Datei &#039;&#039;/etc/profile&#039;&#039; geändert werden (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/profile&amp;lt;/code&amp;gt;).&lt;br /&gt;
Hier fügt man einfach am Ende der Datei folgende zwei Zeilen ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  cd /home/pi&lt;br /&gt;
  ./firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch startet die Firmware automatisch wenn man den Raspberry Pi hochfährt.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Fertiges Gerät ==&lt;br /&gt;
&lt;br /&gt;
=== Fotos ===&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:RaspberryTopOpen.jpg|thumb|left|250px|Gehäuse mit offenem Deckel]]&lt;br /&gt;
| [[Image:RaspberryOpen.jpg|thumb|left|250px|Offenes Gerät]]&lt;br /&gt;
| [[Image:RaspberryBeforePainting.jpg|thumb|left|250px|Bootlogo (vor dem Lackieren)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
&lt;br /&gt;
[https://vimeo.com/60248710 Raspberry Webradio Demo]&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90508</id>
		<title>Raspberry-Webradio</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Raspberry-Webradio&amp;diff=90508"/>
		<updated>2015-12-07T22:28:08Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [https://www.mikrocontroller.net/user/show/misc Michael Schwarz]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Wettbewerb Header}}&lt;br /&gt;
[[Image:RaspberryWebradioSmall.png|right|thumb|300px|Raspberry Webradio]]&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Wer kennt das nicht, man möchte einfach nur Musik hören und egal auf welchen Radio Sender man schaltet, entweder hört man Werbung, Nachrichten, unnötige Ansagen irgendwelcher Moderatoren oder die gefühlte 317te Wiederholung der Charts. &lt;br /&gt;
Glücklicherweise gibt es eine bessere und obendrein kostenlose Alternative: Internet-Radio. Mit [http://www.shoutcast.com SHOUTcast] gibt es dazu auch ein Verzeichnis, das annähernd 50.000 Online-Radiosender listet. &lt;br /&gt;
Doch da ich nicht immer meinen PC einschalten möchte um Musik zu hören, musste ein Standalone Gerät her. Und da ich gerade meinen Raspberry Pi erhalten hatte, schien das ein gutes Projekt zu sein um den Mini-Computer sinnvoll einzusetzen. &lt;br /&gt;
&lt;br /&gt;
Das Projekt hat dann doch mehr Zeit in Anspruch genommen als zuerst gedacht, doch das Ergebnis kann sich sehen lassen und muss sich auch nicht vor kommerziellen Geräten verstecken, die in höheren Preisklassen liegen. &lt;br /&gt;
&lt;br /&gt;
Eine ausführliche [[#Downloads|Anleitung]] gibt es natürlich auch, in welcher die Bedienung des Gerätes genau beschrieben wird.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Hier ist eine Liste der Hauptfeatures des Raspberry Webradios&lt;br /&gt;
&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3 Shoutcast Streams&#039;&#039;&#039; über WLAN oder Ethernet&lt;br /&gt;
* Abspielen von &#039;&#039;&#039;MP3s von USB&#039;&#039;&#039;-Medien mit Unterstützung von Playlists&lt;br /&gt;
* Anzeige der &#039;&#039;&#039;Song Informationen&#039;&#039;&#039; (sowohl von MP3s als auch von Streams)&lt;br /&gt;
* Vollständige &#039;&#039;&#039;Shoutcast Unterstützung&#039;&#039;&#039; (Suchen von Stations, Top Stations, Stationen nach Genre, Zufällige Stations)&lt;br /&gt;
* &#039;&#039;&#039;Lieblingsstationen&#039;&#039;&#039; und Verwaltung der Favoriten&lt;br /&gt;
* Android App zur &#039;&#039;&#039;Fernsteuerung&#039;&#039;&#039;&lt;br /&gt;
* Schlummerfunktion&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Hauptprogramm läuft auf einem Raspberry Pi (Model B) mit 256 MB RAM, getaktet auf 700MHz. Die Interaktion mit dem Benutzer erfolgt über ein Blau-Weiß Grafik-Display mit KS0108 Controller und einer Auflösung von 128x64 Pixel, sowie über einen Drehencoder und 6 Tasten. &lt;br /&gt;
&lt;br /&gt;
Um den Raspberry Pi zu entlasten, und da dieser nicht besonders viele I/O Pins zur Verfügung stellt, stehen ihm zwei Mikrocontroller als &amp;quot;Co-Prozessoren&amp;quot; zur Verfügung. &lt;br /&gt;
Ein ATMega32 dient als Bridge zwischen Raspberry und GLCD und ein ATTiny2313 wird verwendet um den Drehencoder und die Tasten auszuwerten.&lt;br /&gt;
&lt;br /&gt;
=== Technische Daten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funktion !! Hardware&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Prozessor&#039;&#039;&#039; || Raspberry Pi (Model B, 256MB RAM)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LCD Controller&#039;&#039;&#039; || ATMega32 @ 14,3181 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;I/O Controller&#039;&#039;&#039; || ATTiny2313 @ 8 MHz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Display&#039;&#039;&#039; || GLCD KS0108 (128x64) S/W Display&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Eingabe&#039;&#039;&#039; || Drehencoder und 6 Taster&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSchematics.png|thumb|left|200px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
Der Raspberry Pi wird über den GPIO Pin Header mit 5V versorgt. Der ATMega32 und das Display werden ebenfalls mit 5V versorgt. Die 3,3V für den ATTiny2313 stellt der Raspberry Pi an seinen GPIO Ports zur Verfügung [http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29]. &lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryIO.png|thumb|right|100px|Raspberry Pi I/O Pins]]&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch des Raspberry liegt laut Spezifikation bei 700mA, das Gerät sollte also mit einem Netzteil versorgt werden das 1A liefern kann, vor allem wenn ein WLAN Stick verwendet wird.&lt;br /&gt;
Mein Webradio wird durch ein USB Handy-Ladegerät (5V @ 1A) mit Strom versorgt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GLCD Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry nur wenige Pins hat und diese nur 3,3V Pegel haben dient der ATMega32 sowohl als Pegel-Converter, Portexpander und Display Treiber. &lt;br /&gt;
Die Stromversorgung erfolgt über die 5V mit welchen auch der Raspberry Pi gespeist wird. Die 3,3V der I/O Pins reichen für den ATMega um es als High-Pegel zu erkennen, eine Kommunikation in die andere Richtung findet nicht statt. &lt;br /&gt;
Die einzige Aufgabe des Mikrocontrollers ist es, die vom Raspberry erhaltenen Daten an das Display weiterzuleiten. Die Kommunikation erfolgt über ein Clock und ein Data Signal. Bei jedem high-low Übergang wird das Bit vom Data-Pin übernommen und in einem Ringbuffer gespeichert, damit keine Daten verloren gehen. Der Inhalt des Ringbuffer wird dann regelmäßig an das Display gesendet. Ein vollständiges Bild hat eine Größe von 1024 Bytes (128x64 Bit). Danach werden die Daten für das nächste Bild gesendet. Überprüfungen finden nicht statt und es werden ausschließlich die Rohdaten des Bildes gesendet um den Overhead so gering wie möglich zu halten und damit eine hohe Bildaufbaugeschwindigkeit zu erhalten. &lt;br /&gt;
&lt;br /&gt;
Das Format der Daten schaut folgendermaßen aus&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0-127 !! Byte 128-255 !! ... !! Byte 895-1023&lt;br /&gt;
|-&lt;br /&gt;
| Bilddaten 1.-8. Zeile || Bilddaten 9.-16. Zeile || Bilddaten 17.-120. Zeile || Bilddaten 121.-128. Zeile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jedes gesendete Byte enthält 8 vertikale Pixel, es werden also durch das Senden von 128 Bytes immer 8 Zeilen auf das Display geschrieben.&lt;br /&gt;
&lt;br /&gt;
Bei einer Taktung des ATMegas mit 14,3181MHz wird damit eine maximale Refresh-Rate von 12 Bildern/Sekunde erreicht. Im Produktiveinsatz hat sich eine Refreshrate von ungefähr 6,5 Bildern/Sekunde als völlig ausreichend herausgestellt und sich als sehr stabil bewährt. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich zur Grafik steuert der ATMega auch noch die Hintergrundbeleuchtung des Displays. Diese ist so geschaltet, dass beim Einschalten des Gerätes die Beleuchtung aktiviert wird und bei Bedarf vom Raspberry deaktiviert werden kann.&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryRadioInside.jpg|thumb|right|200px|Raspberry Pi, Platine mit GLCD- und IO-Bridge]]&lt;br /&gt;
&lt;br /&gt;
=== I/O Bridge ===&lt;br /&gt;
&lt;br /&gt;
Da der ATMega32 mit den Aufgaben als Grafik-Bridge schon ziemlich ausgelastet ist handhabt ein weiter Mikrocontroller, ein ATTiny2313, die Eingabe über den Drehencoder und die 6 Taster. &lt;br /&gt;
Kommuniziert wird bei beim ATMega ebenfalls über ein Data- und Clock-Signal, diesmal jedoch in die andere Richtung. Der ATTiny agiert nur als Slave und sendet die Zustände der Taster und des Encoders an den Raspberry wenn dieser ein Clock-Signal anlegt. &lt;br /&gt;
&lt;br /&gt;
Eine vollständige Übertragung ist 3 Byte (24 Bit) lang und enthält für jeden Taster ein Bit ob er seit der letzten Abfrage gedrückt wurde, weiters für jeden Taster ein Bit ob er seit der letzten Abfrage für längere Zeit gedrückt wurde und schließlich noch ein Byte das die Anzahl der Steps des Drehencoders seit der letzten Abfrage enthält. &lt;br /&gt;
&lt;br /&gt;
Erstes Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zweites Byte, wenn das entsprechende Bit gesetzt ist, wurde der Taster seit der letzten Abfrage für längere Zeit gedrückt, sonst nicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Taster 5 || Taster 4 || Taster 3 || Taster 2 || Taster 1 || Taster 0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Drittes Byte, die Anzahl der Steps die der Drehencoder seit der letzten Abfrage gedreht wurde. Positive Werte bedeuten eine Drehung nach rechts, negative eine Drehung nach links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit 7 !! Bit 6 !! Bit 5 !! Bit 4 !! Bit 3 !! Bit 2 !! Bit 1 !! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Drehencoder Änderung (als 8-Bit signed char)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Entprellroutinen für die Taster und die Auswerte-Routine für den Drehencoder sind in diesem Controller implementiert, sodass sich der Raspberry Pi nicht mehr darum kümmern muss.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Für den Zugriff auf das Internet kann man entweder die Ethernet Buchse des Raspberry Pi verwenden oder einen WLAN Stick an einen der USB Ports anschließen. Hier ist der &#039;&#039;Netgear N150 Wireless USB Microadapter&#039;&#039; empfehlenswert, da er sowohl klein als auch recht günstig ist und es für den Raspberry Pi einen Treiber gibt. &lt;br /&gt;
Eine Anleitung zur Installations des Treibers gibt es hier: http://pkern.at/1342/netgear-n150-wireless-usb-microadapter-auf-dem-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des WLAN (Suche, Verbinden und Authentifizierung) kann vollständig über das Gerät erfolgen, sodass es auch möglich ist das Radio mitzunehmen und mit einem anderen WLAN Hotspot zu verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software des Webradios besteht aus mehreren Teilen und kann in folgende Kategorien eingeteilt werden&lt;br /&gt;
; Software&lt;br /&gt;
: [[#Firmware|Hauptprogramm]] das am Raspberry Pi läuft (&amp;quot;Firmware&amp;quot;), programmiert in C&lt;br /&gt;
: [[#Streaming_und_USB-Player|Stream Player und USB-Player]], programmiert in C&lt;br /&gt;
: [[#Android_App|Android Fernsteuerungsprogramm]], programmiert in Java&lt;br /&gt;
: [[#Installer|Installer]] zur erstmaligen Einrichtung, programmiert in Bash&lt;br /&gt;
; Interfaces&lt;br /&gt;
: Kleine Hilfstools zur Kommunikation mit dem Betriebssystem, programmiert in Bash&lt;br /&gt;
: Firmware für die [[#Bridges|Bridges]] (I/O und GLCD), programmiert in C&lt;br /&gt;
: Mobile Webseite zur Fernsteuerung, programmiert in PHP und JavaScript&lt;br /&gt;
; Developer Tools&lt;br /&gt;
: [[#Simulator|Simulator]], programmiert in C++&lt;br /&gt;
: Bild-Konverter für Firmware, programmiert in Bash&lt;br /&gt;
: Font-Creator von F. Maximilian Thiele (apetech)&lt;br /&gt;
&lt;br /&gt;
Der Zusammenhang der wichtigsten Teile ist in diesem Diagramm zu sehen&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioModules.png|border|600px|Software Module]]&lt;br /&gt;
&lt;br /&gt;
Graue Rechtecke sind Hardware-Komponenten (Display, Taster, Drehencoder), die Software-Hardware Bridges sind blau eingezeichnet, die gelben Elemente sind Software-Interfaces (Bash-Scripts), Software Komponenten sind weiß und in grün gehalten sind Betriebssystem-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
&lt;br /&gt;
Die Software für die beiden Mikrocontroller ist in C geschrieben und kann mit einem Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make hex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt werden bzw. mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make flash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erstellt und geflasht werden. Vor dem  Flashen sollte man allerdings noch die Zeile mit dem Programmer im Makefile anpassen.&lt;br /&gt;
Die Fuses können durch den Aufruf von &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  make fuses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
richtig gesetzt werden. Für den ATMega32 bedeutet das: Taktfrequenz auf Quarz und JTAG deaktivieren (damit PORTC verwendet werden kann). Das Entspricht den Fuse-Werten &lt;br /&gt;
Low-Fuse 0xde und High-Fuse 0xd9)&lt;br /&gt;
Am ATTiny stellen die Fuses die interne Taktfrequenz auf 8MHz. Die Fuse-Werte sind Low-Fuse 0xe4, High-Fuse 0xdf und Extended-Fuse 0xff.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenzen der Mikrocontroller sind nicht kritisch, für den ATMega32 sollte alles im Bereich von 12MHz bis 16MHz funktionieren. Schlimmstenfalls muss der Wert &amp;lt;code&amp;gt;GLCD_DELAY&amp;lt;/code&amp;gt; in der &#039;&#039;glcd.h&#039;&#039; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
Die Firmware für den ATMega32 enthält auch das Boot-Logo, welches mit dem &#039;&#039;convert&#039;&#039; Script aus einem PNG erzeugt wurde. Das Bild kann durch ein beliebiges anderes Bild ausgetauscht werden, es muss dann nur der Aufruf zu &amp;lt;code&amp;gt;GLCDD_XBMDraw_P(data, x, y, width, height)&amp;lt;/code&amp;gt; in der &#039;&#039;main.c&#039;&#039; angepasst werden (außer das neue Bild ist ebenfalls 59x56 Pixel groß).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
Die Firmware ist das Herzstück des Projekts. Sie ist zuständig für die Ein- und Ausgabe, das Starten und Stoppen von Musik und für die Verwaltung. &lt;br /&gt;
In regelmäßigen Intervallen werden die Benutzereingaben von der I/O Bridge geholt, auf diese reagiert und der neue Display Inhalt an die Grafik-Bridge gesendet. &lt;br /&gt;
&lt;br /&gt;
Möchte der User Musik abspielen, entscheidet die Firmware ob es ein lokales File oder ein Stream ist, und delegiert die Aufgabe dann entweder an den USB-Player oder den Stream-Player.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdatei ====&lt;br /&gt;
Alle Einstellungen die konfiguriert werden können sind in der &#039;&#039;default.conf&#039;&#039; zu finden.&lt;br /&gt;
Die Optionen sollten selbsterklärend sein, es sollte jedoch nicht notwendig sein hier manuell etwas anzupassen (ausgenommen der Eintrag des [[#SHOUTcast_Unterst.C3.BCtzung|Shoutcast API Keys]]).&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
identify pill, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;br /&gt;
&lt;br /&gt;
=== Simulator ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RaspberryWebradioSimulator.png|thumb|200px|Simulator nach dem Starten]]&lt;br /&gt;
&lt;br /&gt;
Da es relativ umständlich ist, die Software jedesmal auf den Raspberry zu übertragen und zu testen existiert auch ein Simulator, der die komplette Hardware simuliert. &lt;br /&gt;
Der Simulator ist in C++ geschrieben mit wxWidgets als GUI Framework. Der Simulator ist nur unter Linux getestet, da die Software auch unter Linux entwickelt wurde. Das liegt auch nahe, da auf dem Raspberry Pi ein modifiziertes Debian läuft und es nie geplant war, dass die Software auf einer anderen Plattform als auf dem Raspberry Pi läuft.&lt;br /&gt;
&lt;br /&gt;
Um das Programm im Simulator zu testen muss der Quellcode nur mit dem Debugging Makefile kompiliert werden. Dieses setzt das Simulationsmakro und linkt die wiringPi Bibliothek nicht zum Programm. &lt;br /&gt;
Weiters müssen noch die &#039;&#039;default.conf&#039;&#039; folgendermaßen angepasst werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=sim&lt;br /&gt;
 io=sim&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Die Hardware Zugriffe werden dadurch auf Datei-Operationen umgeleitet. Diese Dateien sind die Kommunikationsschnittstelle zum Simulator. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Starten des Simulators kann man als Parameter den Pfad zur Software mitgeben, damit diese sofort geladen wird.&lt;br /&gt;
Der Simulator selbst kann im Grunde nicht mehr als das Display, den Drehencoder und die Tasten zu simulieren, das ist aber ausreichend, um die komplette Funktionalität (bis auf die Hintergrundbeleuchtung) der Firmware zu testen.&lt;br /&gt;
Die Oberfläche des Simulators ist zwar nicht schön, aber zweckmäßig.&lt;br /&gt;
&lt;br /&gt;
Die Buttons in der ersten Zeile simulieren den Drehencoder (linke, Ok, rechts), die zweite und dritte Zeile enthalten die Buttons und die letzte Zeile ermöglicht das Simulieren des Gedrückthaltens der Tasten 1-4 für längere Zeit.&lt;br /&gt;
Ein Klick auf den Screenshot Button speichert das aktuelle Bild im Ordner des Simulators als &amp;quot;lcd.png&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Android App ===&lt;br /&gt;
[[Image:RaspberryAndroidHome.png|left|thumb|160px|Startseite der Android App]]&lt;br /&gt;
&lt;br /&gt;
Da der Raspberry Pi noch genügend Ressourcen hat, läuft im Hintergrund ein Webserver, der es erlaubt das Gerät auch über ein Android-Smartphone zu steuern. &lt;br /&gt;
Die App dafür ist ebenfalls auf der [http://code.google.com/p/raspberry-webradio/downloads/list Downloadseite des Projekts] zu finden. &lt;br /&gt;
&lt;br /&gt;
Das Smartphone muss natürlich im gleichen Netzwerk sein (WLAN), damit das Webradio gefunden werden kann. Um das Gerät zu finden, braucht man nicht einmal die IP-Adresse wissen, da in der App ein Zeroconf-Client implementiert wurde, der den Raspberry automatisch findet (der Zeroconf Name ist &#039;&#039;raspberrypi.local&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wurde das Raspberry Webradio gefunden, kann man ihn der App sehen, welches Lied gerade abgespielt wird (inklusive Bild des Interpreten, falls vorhanden), Stationen aus der Favoriten-Liste und vom USB-Medium abspielen sowie neue SHOUTcast Stationen und SHOUTcast Streams hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um das App zu installieren, kopiert man die apk Datei einfach auf das Smartphone und öffnet sie mit einem beliebigen Datei-Explorer auf dem Handy. &lt;br /&gt;
Die einzigen Voraussetzungen für die App sind Android 2.2 und aufwärts sowie WLAN, da das Smartphone natürlich im gleichen Netzwerk sein muss wie das Webradio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SHOUTcast Unterstützung ===&lt;br /&gt;
Die Unterstützung für die SHOUTcast API kann alles was man braucht&lt;br /&gt;
* Suchen nach Stationen&lt;br /&gt;
* Anzeigen der Stationen nach Genre&lt;br /&gt;
* Liste der Top Stationen&lt;br /&gt;
* Zufällige Stationen (wenn man sich gerne überraschen lässt)&lt;br /&gt;
&lt;br /&gt;
Leider benötigt man für die SHOUTcast API einen Developer Key der nicht so einfach zu bekommen ist (und den man auch nicht veröffentlichen darf). &lt;br /&gt;
Wer die oben erwähnten Features also verwenden möchte, kann entweder versuchen einen SHOUTcast Developer Key zu bekommen, oder man verwendet einfach einen der Keys die im Internet umherschwirren... (siehe Links).&lt;br /&gt;
Das Abspielen von SHOUTcast Streams funktioniert natürlich auch ohne Developer Key.&lt;br /&gt;
&lt;br /&gt;
Der Developer Key muss in der Konfigurations-Datei &#039;&#039;default.conf&#039;&#039; überall eingetragen werden, wo [DevKey] vorkommt.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Firmware ist entwickelt und getestet auf [http://www.raspberrypi.org/downloads Raspbian Wheezy]. Die Installation von Raspbian wird auf der Raspberry Pi Seite beschrieben. &lt;br /&gt;
Die einfachste Art das Raspberry Webradio aufzusetzen ist mit dem [[#Installer|automatischen Installer]]. Hierfür kopiert man alle Ordner, die man aus dem SVN ausgecheckt hat auf den Raspberry Pi und führt den Installer wie unten beschrieben aus.&lt;br /&gt;
&lt;br /&gt;
Eine andere, noch einfachere Möglichkeit ist, ein fertiges Image zu verwenden. Dieses braucht nur auf eine SD-Karte mit mindestens 2GB geschrieben werden. &lt;br /&gt;
Das Image (Stand: 11.07.2013) ist zu finden auf [http://misc0110.net/download/webradio-image.rar misc0110.net/download/webradio-image.rar]. &lt;br /&gt;
Auf die SD-Karte schreiben kann man es (nach dem Entpacken) mit &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sudo dd if=/pfad/zum/image.img of=/dev/sdX bs=4M&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;/dev/sdX&#039;&#039; durch den Pfad zur SD Karte ersetzt werden muss. Man kann statt &#039;&#039;dd&#039;&#039; auch das graphische Tool ImageWriter (&#039;&#039;sudo apt-get install usb-imagewriter&#039;&#039;) verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Login Daten für das Image sind User: pi und Passwort: raspberry.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
Der Installer ist ein Bash-Script das alle erforderlichen Dateien auf dem Raspberry Pi installiert. Damit der Installer funktioniert, wird Internetzugang benötigt (am besten über die LAN Buchse) und er muss als root ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte werden vom Installer durchgeführt&lt;br /&gt;
* Installation aller notwendigen Softwarepakete, falls diese noch nicht installiert sind (avahi-daemon, mpg123, id3v2, usbmount, lighttpd + php5, wiringPi, libcurl, libxml2)&lt;br /&gt;
* Einrichten des lighttpd Servers und der mobilen Webseite&lt;br /&gt;
* Kompilieren der Firmware, des USB-Players und des Streaming-Players&lt;br /&gt;
* Kopieren aller Dateien in die richtigen Ordner (/home/pi wird als Installationsordner verwendet) und setzen der Berechtigungen&lt;br /&gt;
* Standard Konfiguration einspielen&lt;br /&gt;
&lt;br /&gt;
Der Installer wird mit einem Aufruf von&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo ./installer.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation muss - sofern die Firmware auf der Hardware ausgeführt wird, und nicht im Simulator - die &#039;&#039;default.conf&#039;&#039; bearbeitet werden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [hardware]&lt;br /&gt;
 lcd=hardware&lt;br /&gt;
 io=hardware&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte der Webserver nicht starten, kann dies durch ein &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 sudo chown pi:pi /var/log/lighttpd/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
behoben werden.&lt;br /&gt;
&lt;br /&gt;
=== Autostart und Autologin ===&lt;br /&gt;
Um die Firmware automatisch beim Starten des Raspberrys zu starten müssen zwei Dateien angepasst werden. &lt;br /&gt;
Zuerst editiert man die Datei &#039;&#039;/etc/inittab&#039;&#039; (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/inittab&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Man sucht die Zeile &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
und kommentiert sie aus, indem man # davor setzt. &lt;br /&gt;
Die Zeile sieht danach so aus: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #1:2345:respawn:/sbin/getty --noclear 38400 tty1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unter der geänderten Zeile fügt man folgende neue Zeile ein&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  1:2345:respawn:/bin/login -f pi tty1 &amp;lt;/dev/tty1 &amp;gt;/dev/tty1 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies sorgt dafür, dass man automatisch als User &#039;&#039;pi&#039;&#039; angemeldet wird wenn das Betriebssystem startet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach muss noch die Datei &#039;&#039;/etc/profile&#039;&#039; geändert werden (z.B. mit &amp;lt;code&amp;gt;sudo nano /etc/profile&amp;lt;/code&amp;gt;).&lt;br /&gt;
Hier fügt man einfach am Ende der Datei folgende zwei Zeilen ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  cd /home/pi&lt;br /&gt;
  ./firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch startet die Firmware automatisch wenn man den Raspberry Pi hochfährt.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ich kann keine Musik hören&#039;&#039;&#039;&lt;br /&gt;
Es kann sein, dass die Standard Audio Ausgabe auf dem HDMI Port erfolgt. Umschalten auf die Audio Buchse kann man mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine weitere Möglichkeit ist, dass entweder die Bash Scripts nicht dort liegen, wie es in der &#039;&#039;default.conf&#039;&#039; angegeben ist, oder die Bash-Scripts nicht ausführbar sind. Wenn die Software allerdings mit dem Installer Script installiert wurde sollte das nicht der Fall sein.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Es wird eine falsche Uhrzeit angezeigt&#039;&#039;&#039;&lt;br /&gt;
Das ist dann der Fall, wenn die Zeitzone nicht richtig eingestellt ist. Das Ändern der Zeitzone ist nicht schwer und sieht z.B. für Wien so aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mv /etc/localtime /etc/localtime.old&lt;br /&gt;
  sudo cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Der Drehencoder funktioniert nicht/verhält sich seltsam&#039;&#039;&#039;&lt;br /&gt;
Möglicherweise sind die beiden Ausgänge vertauscht. Tauschen der Pins PD5 und PD6 sollte helfen (entweder in Software oder Hardware)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Im Simulator funktioniert das Abspielen von Streams/MP3s nicht&#039;&#039;&#039;&lt;br /&gt;
Die Firmware geht davon aus, das alle notwendigen Dateien in &#039;&#039;/home/pi&#039;&#039; legen. Abhilfe schafft entweder das Anlegen des Ordners &#039;&#039;/home/pi&#039;&#039; und hineinkopieren der relevanten Dateien in diesen Ordner oder das Ändern der Pfade in der &#039;&#039;default.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Das Display zeigt Streifen an/ist verschoben/unleserlich nachdem ich das Audio-Kabel ein/ausgesteckt habe&#039;&#039;&#039;&lt;br /&gt;
Das ist ein bekannter Bug, der manchmal auftritt, den ich aber noch nicht lokalisieren konnte. Beheben kann man ihn im Moment nur, indem man das Gerät herunterfährt (Settings -&amp;gt; Shutdown), vom Strom trennt und wieder mit Strom versorgt. Dadurch wird der Display Controller zurückgesetzt und man sollte wieder ein normales Bild haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Die Android App zeigt nur &#039;&#039;Loading... Please wait...&#039;&#039; an&#039;&#039;&#039;&lt;br /&gt;
Wenn ein Neustart der App nichts hilft (manchmal wird der Raspberry nicht gefunden), dann kann es daran liegen, dass das Handy nicht im gleichen Netwzerk ist (wenn es z.B. über 3G im Internet ist und nicht mit WLAN) oder dass der Raspberry im Moment keine aktive Internet Verbindung hat. Der zweite Fall kann dann auftreten, wenn der Raspberry über WLAN verbunden ist, und für längere keine Zeit kein Traffic verursacht wurde. Abhilfe schafft hier das manuelle Starten einer Internet Radio Station, danach sollte es auch über die Android App wieder funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Fertiges Gerät ==&lt;br /&gt;
&lt;br /&gt;
=== Fotos ===&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:RaspberryTopOpen.jpg|thumb|left|250px|Gehäuse mit offenem Deckel]]&lt;br /&gt;
| [[Image:RaspberryOpen.jpg|thumb|left|250px|Offenes Gerät]]&lt;br /&gt;
| [[Image:RaspberryBeforePainting.jpg|thumb|left|250px|Bootlogo (vor dem Lackieren)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
&lt;br /&gt;
[https://vimeo.com/60248710 Raspberry Webradio Demo]&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Wie jeder Entwickler weiß, ist ein Produkt nie fertig. Das gilt auch bei diesem Projekt und so habe ich bereits einige Ideen für zukünftige Software Updates.&lt;br /&gt;
* Abspielen von Musik aus YouTube Videos (bereits in der Testphase)&lt;br /&gt;
* Eine Weckerfunktion&lt;br /&gt;
* Erweitern des Simulators um die Simulation der Hintergrundbeleuchtung und einer Debug Console&lt;br /&gt;
* Unterstützung weiterer Musik Formate (ogg und wma)&lt;br /&gt;
* Bessere USB Wiedergabe (Anzeige der Restzeit/Gesamtzeit, voriges Lied, zufälliges Lied, Wiederholen, ...)&lt;br /&gt;
* Aufnahme der Internet Streams als MP3&lt;br /&gt;
* Erweiterung der Android App um mehr Funktionen&lt;br /&gt;
&lt;br /&gt;
Um immer auf dem neuesten Stand zu sein, empfiehlt es sich hin und wieder die Projektseite zu besuchen, bei größeren Updates werde ich natürlich auch diesen Artikel aktualisieren. &lt;br /&gt;
Sollte das Projekt jemand nachbauen, wünsche ich viel Spaß dabei und ich würde mich über Fotos und/oder Videos freuen.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/downloads/detail?name=manual.pdf Anleitung]&lt;br /&gt;
* Sourcecode siehe Projektseite ([http://code.google.com/p/raspberry-webradio/source/checkout Code Checkout - Projekt Seite])&lt;br /&gt;
* Image (Stand 11.07.2013) ([http://misc0110.net/download/webradio-image.rar Raspberry-Webradio Image])&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://code.google.com/p/raspberry-webradio/ Das Projekt auf Google Code]&lt;br /&gt;
* [http://www.ohloh.net/p/raspberry-webradio/analyses/latest/languages_summary Ohloh Code Statistik]&lt;br /&gt;
* [http://elinux.org/RPi_Low-level_peripherals Raspberry Pi Low Level Peripherals]&lt;br /&gt;
* [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi Library]&lt;br /&gt;
* [http://www.smackfu.com/stuff/programming/shoutcast.html Reverse Engineering des Shoutcast Metadaten Protokolls]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Zeroconf Zeroconf]&lt;br /&gt;
* [http://www.dbox2world.net/board293-coolstream-hd1/board313-coolstream-downloads/board309-coolstream-firmware/10242-betafirmware-1-95-vom-07-12-2010/index6.html Shoutcast API Key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Kategorie:Audio]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Schieberegister&amp;diff=90503</id>
		<title>AVR-Tutorial: Schieberegister</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Schieberegister&amp;diff=90503"/>
		<updated>2015-12-07T20:13:18Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello! &lt;br /&gt;
If you need Cephalexin Capsules, you must view http://cephalexin.name/ website. &lt;br /&gt;
keflex dosage, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=74xx&amp;diff=90498</id>
		<title>74xx</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=74xx&amp;diff=90498"/>
		<updated>2015-12-07T20:13:18Z</updated>

		<summary type="html">&lt;p&gt;31.184.196.106: Cephalexin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Die 74xx-Serie ist die am weitesten verbreitete [[Digital]]-IC-Familie. Das Präfix gibt Auskunft über den verwendbaren Temperaturbereich.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Familie || Temperaturbereich || Einsatzgebiet&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|74||0°C bis +70°C || Standard (engl. commercial)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|54||-55°C bis +125°C || Militärisch (engl. military)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|84||-25°C bis +85°C || Industriell (engl. industrial)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Baureihen ==&lt;br /&gt;
Eine ausführliche Beschreibung der verschiedenen Logikbaureihen gibt es im [http://www.ti.com/lit/sg/sdyu001aa/sdyu001aa.pdf Logic Guide 2014] von Texas Instruments. &lt;br /&gt;
&lt;br /&gt;
* TTL (&#039;&#039;&#039;T&#039;&#039;&#039;ransistor &#039;&#039;&#039;T&#039;&#039;&#039;ransistor &#039;&#039;&#039;L&#039;&#039;&#039;ogic, Logik auf Bipolartransistorbasis, veraltet)&lt;br /&gt;
** 74 = TTL&lt;br /&gt;
** 74H = Highspeed TTL&lt;br /&gt;
** 74ALS = Advanced Low Power Schottky TTL&lt;br /&gt;
** 74AS = Advanced Schottky TTL&lt;br /&gt;
** 74F = Fast TTL&lt;br /&gt;
** 74L = Low Power TTL&lt;br /&gt;
** 74LS = Low Power Schottky TTL (Ersatz für 74 und 74L)&lt;br /&gt;
** 74S = Schottky TTL&lt;br /&gt;
&lt;br /&gt;
* CMOS (&#039;&#039;&#039;C&#039;&#039;&#039;omplementary &#039;&#039;&#039;M&#039;&#039;&#039;etal &#039;&#039;&#039;O&#039;&#039;&#039;xide &#039;&#039;&#039;S&#039;&#039;&#039;emiconductor, Feldeffekttransistoren mit gegensätzlicher Polarität)&lt;br /&gt;
** 74AC = Advanced CMOS&lt;br /&gt;
** 74ACT = AC mit TTL-kompatiblen Eingängen&lt;br /&gt;
** 74HC = High Speed CMOS&lt;br /&gt;
** 74HCT = HC mit TTL-kompatiblen Eingängen&lt;br /&gt;
** 74AHC =  Advanced High-Speed CMOS&lt;br /&gt;
** 74AHCT = AHC mit TTL-kompatiblen Eingängen&lt;br /&gt;
** 74VHC = Very High Speed CMOS&lt;br /&gt;
** 74VHCT = VHC mit TTL-kompatiblen Eingängen&lt;br /&gt;
** 74LV =  Low-Voltage CMOS&lt;br /&gt;
** 74LVC =  Low-Voltage CMOS (Vcc 1,65 bis 3,60 Volt, Eingänge sind auch bei niedriger Vcc bis 5,5 Volt tolerant)&lt;br /&gt;
** 74LVX =  Low-Voltage CMOS (Vcc 2,00 bis 3,60 Volt, Eingänge sind auch bei niedriger Vcc bis 5,5 Volt tolerant)&lt;br /&gt;
&lt;br /&gt;
* ECL (&#039;&#039;&#039;E&#039;&#039;&#039;mitter &#039;&#039;&#039;C&#039;&#039;&#039;oupled &#039;&#039;&#039;L&#039;&#039;&#039;ogic, Emittergekoppelte Logik)&lt;br /&gt;
** 74ECL&lt;br /&gt;
** 74ECTL&lt;br /&gt;
&lt;br /&gt;
* Langsame störsichere Logik&lt;br /&gt;
** 74LSL&lt;br /&gt;
** 74SZL&lt;br /&gt;
&lt;br /&gt;
* BICMOS [[Bus]]-Interface-Logik (CMOS und Bipolartechnik kombiniert)&lt;br /&gt;
** 74BCT (siehe [http://focus.ti.com/docs/logic/catalog/overview/overview.jhtml?templateId=5020&amp;amp;path=templatedata/cm/ovw/data/bct_overview Texas Instruments])&lt;br /&gt;
** 74ABT&lt;br /&gt;
&lt;br /&gt;
== Typen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- übersetzen! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- style=&amp;quot;background:#ffdead;&amp;quot;&lt;br /&gt;
! Typ || Pins || Anzahl || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 00 || 14 || 4 || 2 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 01 || 14 || 4 || 2 Input NAND (OC=[[Ausgangsstufen Logik-ICs#Open_Collector|Open Collector]])&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 02 || 14 || 4 || 2 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 03 || 14 || 4 || 2 Input NAND (OC) Andere Belegung als 7401&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 04 || 14 || 6 || Inverter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 05 || 14 || 6 || Inverter (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 06 || 14 || 6 || Inverter Buffer/Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 07 || 14 || 6 || Buffer/Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 08 || 14 || 4 || 2 Input AND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 09 || 14 || 4 || 2 Input AND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 10 || 14 || 3 || 3 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 11 || 14 || 3 || 3 Input AND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 12 || 14 || 3 || 3 Input NAND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 13 || 14 || 2 || 4 Input NAND [[Schmitt-Trigger]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 14 || 14 || 6 || Inverter Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 15 || 14 || 3 || 3 Input AND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 16 || 14 || 6 || Inverter Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 17 || 14 || 6 || Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 18 || 14 || 2 || 4 Input NAND Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 19 || 14 || 6 || Inverter Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 20 || 14 || 2 || 4 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 21 || 14 || 2 || 4 Input AND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 22 || 14 || 2 || 4 Input NAND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 24 || 14 || 4 || 2 Input NAND Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 25 || 14 || 2 || 4 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 26 || 14 || 4 || 2 Input NAND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 27 || 14 || 3 || 3 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 28 || 14 || 4 || 2 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 30 || 14 || 1 || 8 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 31 || 16 || - || Verzögerungs-Element (je 2 Non-Inverting, Inverting, 2 Input NAND)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 32 || 14 || 4 || 2 Input OR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 33 || 14 || 4 || 2 Input NOR (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 34 || 14 || 6 || Treiber&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 35 || 14 || 6 || Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 36 || 14 || 4 || 2 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 37 || 14 || 4 || 2 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 38 || 14 || 4 || 2 Input NAND (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 39 || 14 || 4 || 2 Input NAND Treiber (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 40 || 14 || 2 || 4 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 41 || 16 || - || BCD -&amp;gt; Decimal Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 42 || 16 || - || BCD -&amp;gt; Decimal Decoder&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 43 || 16 || - || Excess-3 -&amp;gt; Decimal Decoder&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 44 || 16 || - || Excess-3-Gray -&amp;gt; Decimal Decoder&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 45 || 16 || - || BCD -&amp;gt; Decimal Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 46 || 16 || - || BCD -&amp;gt; 7-Segment Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 47 || 16 || - || BCD -&amp;gt; 7-Segment Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 48 || 16 || - || BCD -&amp;gt; 7-Segment Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 49 || 14 || - || BCD -&amp;gt; 7-Segment Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 50 || 14 || - || Dual 2-Wide 2-Input AND-OR-INVERT (1 expandable)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 51 || 14 || 2 || AND-OR-INVERT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 52 || 14 || ? || Expandable AND-OR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 53 || 14 || 1 || Expandable 4-Wide AND-OR-INVERT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 54 || 14 || 1 || 3-2-2-3 Input AND-OR-INVERT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 55 || 14 || 1 || 2-Wide 4-Input AND-OR-INVERT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 72 || 14 || 1 || And-Gated-JK-MS [[Flipflop]] with preset &amp;amp;  clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 73 || 14 || 2 || JK [[Flipflop]] with clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 74 || 14 || 2 || D [[Flipflop]] with preset &amp;amp; clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 75 || 16 || - || 4-Bit Bistable [[Latch]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 76 || 16 || 2 || JK [[Flipflop]] with preset &amp;amp; clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 78 || 14 || 2 || JK [[Flipflop]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 86 || 14 || 4 || 2 Input XOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 90 || 14 || - || Decade Counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 92 || 14 || - || Divide By-Twelve Counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 93 || 14 || - || 4-Bit Binary Counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 95 || 14 || - || 4 Bit Parallel Access Shift Register&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 107 || 14 || 2 || JK [[Flipflop]] with clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 109 || 16 || 2 || JK [[Flipflop]] with preset &amp;amp; clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 112 || 16 || 2 || JK [[Flipflop]] with preset &amp;amp; clear, inverted clock inputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 121 || 14 || - || Monostable Multivibrator With Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 122 || 14 || - || Retriggerable Monostable Multivibrator&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 123 || 16 || 2 || Retriggerable Monostable Multivibrator&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 125 || 14 || 4 || [[Ausgangsstufen Logik-ICs#Tri-state|Tri-State]] Buffer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 126 || 14 || 4 || Tri-State Buffer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 132 || 14 || 4 || 2 Input NAND Schmitt-Trigger&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 133 || 16 || 1 || 13 Input NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 136 || 14 || 4 || 2 Input XOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 137 || 16 || 1 || 3-to-8 line decoder / demultiplexer with address latches, low-active outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 138 || 16 || 1 || 3-to-8 line decoder / demultiplexer , low-active outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 139 || 16 || 2 || 2-to-4 line decoder / demultiplexer , low-active outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 146 || 16 || - || BCD -&amp;gt; Decimal Decoder (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 147 || 16 || - || 10-Line -&amp;gt; 4-Line BCD Priority Encoder&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 148 || 16 || - || 8-Line -&amp;gt; 3-Line Priority Encoder&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 151 || 16 || 1 || 8:1 Multiplexer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 154 || 24 || 1 || 4-Line -&amp;gt; 16-Line Decoder/Demultiplexer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 155 || 16 || 2 || 2-Line -&amp;gt; 4-Line Decoder/Demultiplexer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 156 || 16 || 2 || 2-Line -&amp;gt; 4-Line Decoder/Demultiplexer (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 157 || 16 || 4 || 2:1 Multiplexer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 158 || 16 || 4 || 2:1 Multiplexer , inverted outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 161 || 16 || - || Sync 4 Bit Binary Counter Async Reset&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 164 || 14 || - || 8 Bit Serial Shift Register&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 165 || 16 || - || 8-Bit Parallel -&amp;gt; Serial (PISO) Shift Register&amp;lt;br&amp;gt;siehe auch [[AVR-Tutorial: Schieberegister]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 177 || 14 || - || Presetable Binary Counter/[[Latch]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 190 || 16 || - || Decimal Up/Down Counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 191 || 16 || - || 4-Bit Up/Down Binary Converter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 192 || 16 || - || Decimal Up/Down Counter mit Clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 193 || 16 || - || 4-Bit Up/Down Binary Counter mit Clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 194 || 16 || - || 4-Bit Bidirectional Universal Shift Register&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 221 || 16 || 2 || Monostable Multivibrator with Reset&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 238 || 16 || 1 || 3-to-8 line decoder / demultiplexer , high-active outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 239 || 16 || 2 || 2-to-4 line decoder / demultiplexer , high-active outputs&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 240 || 20 || - || 8-Bit Tri-State Buffer/Line Driver (invertierend)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 241 || 20 || - || 8-Bit Tri-State Buffer/Line Driver&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 242 || 14 || - || 4-Bit Bus Transceiver (invertierend)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 243 || 14 || - || 4-Bit Bus Transceiver (nicht invertierend)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 244 || 20 || - || 8-Bit Tri-State Buffer/Line Driver (nicht invertierend) - Variante: 16244: 16-Bit-Version&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 245 || 20 || - || 8-Bit Bus Transceiver - Variante: 16T245: 16-Bit-Version&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 251 || 16 || - || 8-Bit Input Multiplexer; 3-State&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 259 || 16 || - || 8-Bit Adressable [[Latch]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 260 || 14 || 2 || 5 Input NOR&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 266 || 14 || 4 || 2 Input Exclusive NOR (OC)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 273 || 20 || 8 || Octal D-Type Edge-Triggered Flip-Flop with Clear&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 283 || 16 || - || 4-Bit Volladdierer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 288 || 16 || - || 256-bit PROM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 299 || 20 || - || 8-Bit Universal Shift Register, Common IO-Pins, 3-State&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 365 || 16 || - || 6-Bit Buffer; 3-State&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 366 || 16 || 6 || Tri-State Inverting Buffer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 367 || 16 || 6 || Tri-State Buffer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 373 || 20 || - || 8-Bit Transparent [[Latch]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 374 || 20 || - || 8-Bit Positiv Edge Triggerd Register&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 393 || 14 || 2 || 4-Bit Binary Counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 541 || 20 || - || 8-Bit Tri-State Buffer/Line Driver&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 573 || 20 || - || 8-Bit Tri-State D-Type [[Latch]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 574 || 20 || 8 || Tri-State [[Flipflop]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 590 || 16 || - || 8-Bit binary counter, 3-state output register&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 595 || 16 || - || 8-Bit Serial -&amp;gt; Parallel (SIPO) Shift Register&amp;lt;br&amp;gt;siehe auch [[AVR-Tutorial: Schieberegister]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 4040 || 16 || - || 12-Bit Binary counter&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 4051 || 16 || - || 1:8 Multiplexer/Demultiplexer&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#efefef; text-align:right; font-weight: bold;&amp;quot; | 4066 || 14 || 4 || Bilateral Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/322862?goto=new#3514909 Forumsbeitrag]: Datumszähler von 2000-2099 aus TTL-Schaltkreisen&lt;br /&gt;
&lt;br /&gt;
Hello! &lt;br /&gt;
If you need Cephalexin Antibiotic, you must view http://cephalexin.name/ website. &lt;br /&gt;
generic for keflex, cephalexin 500mg capsule antibiotic|cephalexin for dogs|cephalexin 500 mg side effects|cefalexin|keflex 500mg cephalexin|cephalexin 500 mg capsule|what is cephalexin used for|cephalexin 500mg|cephalexin side effects|what is cephalexin|cephalexin 500 mg|keflex|cephalexin 500|cephalexin 250 mg|antibiotic cephalexin|cephalexin antibiotic|cephalex|side effects of cephalexin|cephalexin keflex|keflex antibiotic|keflex 500 mg|cefalexina 500 mg|cephalexin 500mg capsule antibiotic for dogs|teva cephalexin|cephalexin 500 mg capsule for dogs|cephalexin 250 mg for dogs|cephalexin 500 mg capsules|cephalexin brand name|cefalexina|keflex medication|keflex side effects|what is keflex|generic for keflex|keflex 500 mg side effects|keflex capsules 500mg what is it used for|keflex 500|keflex dosing|keflex 500mg|keflex generic|kefalex|pill|side effects of keflex|keflex dosage|identify pill|ceflex|keflex 500mg dosage|keflex allergy|keflex dose|cefalexina para que sirve.&lt;/div&gt;</summary>
		<author><name>31.184.196.106</name></author>
	</entry>
</feed>