<?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=Werner-b</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=Werner-b"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Werner-b"/>
	<updated>2026-04-21T20:07:03Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57398</id>
		<title>AVR-GCC-Tutorial/Die Timer und Zähler des AVR</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57398"/>
		<updated>2011-05-25T09:03:14Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* 16-Bit Timer/Counter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die heutigen Mikrocontroller und insbesondere die RISC-[[AVR]]s sind für viele Steuerungsaufgaben zu schnell. Wenn wir beispielsweise eine [[LED]] oder Lampe blinken lassen wollen, können wir selbstverständlich nicht die CPU-Frequenz verwenden, da ja dann nichts mehr vom Blinken zu bemerken wäre.&lt;br /&gt;
&lt;br /&gt;
Wir brauchen also eine Möglichkeit, Vorgänge in Zeitabständen durchzuführen, die geringer als die Taktfrequenz des Controllers sind. Selbstverständlich sollte die resultierende Frequenz auch noch möglichst genau und stabil sein.&lt;br /&gt;
&lt;br /&gt;
Hier kommen die im AVR vorhandenen Timer/Counter zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Ein Timer ist ganz einfach ein bestimmtes Register im µC, das völlig ohne Zutun des Programms, also per Hardware, hochgezählt wird. Das alleine wäre noch nicht allzu nützlich, wenn nicht dieses Hardwareregister bei bestimmten Zählerständen einen Interrupt auslösen könnte. &lt;br /&gt;
&lt;br /&gt;
Ein solches Ereignis ist der Overflow (Überlauf): Da die Bitbreite des Registers beschränkt ist, kommt es natürlich auch vor, dass der Zähler so hoch zählt, dass der nächste Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der Zähler wieder auf 0 zurückgesetzt wird. Dieses Ereignis nennt man den Overflow und es ist möglich an dieses Ereignis einen Interrupt zu koppeln.&lt;br /&gt;
&lt;br /&gt;
Ein anderes Anwendungsgebiet ist das Zählen von Impulsen, welche über einen I/O-Pin zugeführt werden.&lt;br /&gt;
&lt;br /&gt;
Als Eingangstakt für die Timer/Counter kann entweder die CPU-Taktfrequenz, der Vorteiler-Ausgang oder ein an einen I/O-Pin angelegtes Signal verwendet werden. Wenn ein externes Signal verwendet wird, so darf dessen Frequenz nicht höher sein als die Hälfte des CPU-Taktes.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Ausführungen beziehen sich im Wesentlichen auf den AT90S2313. Für andere Modelltypen müsst ihr euch die allenfalls notwendigen Anpassungen aus den Datenblättern der entsprechenden Controller herauslesen.&lt;br /&gt;
&lt;br /&gt;
== Der Vorteiler (Prescaler) ==&lt;br /&gt;
&lt;br /&gt;
Der Vorteiler dient dazu, den CPU-Takt vorerst um einen einstellbaren Faktor zu reduzieren. Die so geteilte Frequenz wird den Eingängen der Timer zugeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir mit einem CPU-Takt von 4 MHz arbeiten und den Vorteiler auf 1024 einstellen, wird also der Timer mit einer Frequenz von 4 MHz / 1024, also mit &#039;&#039;&#039;ca.&#039;&#039;&#039; 4 kHz versorgt. Wenn also der Timer läuft, so wird das Zählregister (TCNTx) mit dieser Frequenz inkrementiert.&lt;br /&gt;
&lt;br /&gt;
== Timer-Bitzahlen verschiedener AVRs ==&lt;br /&gt;
&lt;br /&gt;
Wir unterscheiden grundsätzlich zwischen 8-Bit Timern, welche eine Auflösung von 256 (2^8) aufweisen und 16-Bit Timern mit einer Auflösung von 65536 (2^16). &lt;br /&gt;
&lt;br /&gt;
Alle AVR-Modelle verfügen über mindestens einen, teilweise sogar zwei, 8-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! AVR-Typ || Timer/Counter0 || Timer/Counter1 || Timer/Counter2&lt;br /&gt;
|- &lt;br /&gt;
| AT90S2313  ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATtiny2313 ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATmega8    || 8  || 16 || 8&lt;br /&gt;
|- &lt;br /&gt;
| ATmega88   || 8  || 16 || 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Der 8-Bit Timer wird z.B bei AT90S2313 über folgende Register angesprochen (bei anderen Typen weitestgehend analog):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
Timer &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&lt;br /&gt;
&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;CS02&#039;&#039;&#039;|| &#039;&#039;&#039;CS01&#039;&#039;&#039;|| &#039;&#039;&#039;CS00&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS02, CS01, CS00&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{|  class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS02 || CS01 || CS00 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin &#039;&#039;&#039;TO&#039;&#039;&#039; verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin &#039;&#039;&#039;TO&#039;&#039;&#039; als Ausgang geschaltet ist.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer &#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses ist als 8-Bit Aufwärtszähler mit Schreib- und Lesezugriff&lt;br /&gt;
realisiert. Wenn der Zähler den Wert 255 erreicht hat, beginnt er beim&lt;br /&gt;
nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um nun also den Timer0 in Betrieb zu setzen und ihn mit einer Frequenz von 1/8-tel des CPU-Taktes zählen zu lassen, schreiben wir die folgende Befehlszeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    TCCR0 = (1&amp;lt;&amp;lt;CS01);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt nun aufwärts bis 255, um dann wieder bei 0 zu beginnen. Der aktuelle Zählerstand steht in TCNT0. Bei jedem Überlauf von 255 auf 0 wird das Timer Overflow Flag &#039;&#039;&#039;TOV0&#039;&#039;&#039; im Timer Interrupt Flag &#039;&#039;&#039;TIFR&#039;&#039;&#039;-Register gesetzt und, falls so konfiguriert, ein entsprechender Timer-Overflow-Interrupt ausgelöst und die daran gebundene Interrupt-Service-Routine (ISR) abgearbeitet. Das TOV Flag &lt;br /&gt;
lässt sich durch das Hineinschreiben einer 1 und nicht wie erwartet einer 0 wieder zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
=== Overflow Interrupt ===&lt;br /&gt;
&lt;br /&gt;
Jedesmal wenn der Timer seinen höchsten Wert erreicht hat, erfolgt ein Overflow und der Timer beginnt wieder bei 0 zu zählen. An diesen Overflow kann eine Funktion, die sog. Overflow-ISR, gebunden werden. Damit hat man die Möglichkeit, bestimmte Funktionalitäten in regelmäßigen Zeitabständen ausführen zu lassen. Wie groß diese Zeitabstände sind, wird ausschließlich von der Zählfrequenz des Timers und der Bitbreite des Timers (also dem höchsten Wert, den der Timer erreichen kann) bestimmt. Die Zählfrequenz wiederrum hängt von Taktfrequenz des Controllers und dem eingestellten Vorteiler ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: AT90S2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
&lt;br /&gt;
  // Overflow Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;TOIE0);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /* Sonstige Aktionen */&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Overflow Interrupt Handler&lt;br /&gt;
wird aufgerufen, wenn TCNT0 von&lt;br /&gt;
255 auf 0 wechselt (256 Schritte),&lt;br /&gt;
d.h. ca. alle 2 ms&lt;br /&gt;
*/&lt;br /&gt;
#ifndef TIMER0_OVF_vect&lt;br /&gt;
// Für ältere WinAVR Versionen z.B. WinAVR-20071221 &lt;br /&gt;
#define TIMER0_OVF_vect TIMER0_OVF0_vect&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
ISR (TIMER0_OVF_vect)&lt;br /&gt;
{&lt;br /&gt;
  /* Interrupt Aktion alle&lt;br /&gt;
  (1000000/8)/256 Hz = 488,28125 Hz&lt;br /&gt;
  bzw.&lt;br /&gt;
  1/488,28125 s = 2,048 ms  &lt;br /&gt;
  */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man in einer ISR jeden beliebigen Code ausführen lassen. Allerdings sollte man sich an die Grundregeln der ISR Programmierung halten: Nur das tun was unbedingt notwendig ist. Eine ISR sollte (zeitlich gesehen) so kurz wie möglich aber so lang wie notwendig sein. Komplexe Ausgaben auf LCD oder gar auf die UART gehören nicht in eine ISR. Sie dauern einfach zu lange und blockieren so den Prozessor zu lange. Programme, die mehrere Dinge quasi gleichzeitig machen, werden so zu lange blockiert.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenz, mit der eine ISR aufgerufen wird, erscheint nach obigen Ausführungen recht starr, aber sie lässt sich feiner anpassen. Eine Möglichkeit bestünde darin, den Zählerstand des Registers TCNT0 nach einem Overflow auf einen Wert größer als 0 zu setzen. Somit blieben bis zum nächsten Overflow weniger Zähltakte, was die Frequenz erhöhen würde.&lt;br /&gt;
&lt;br /&gt;
Modernere AVRs kennen allerdings einen eleganteren Weg zur Anpassung der Interrupt-Frequenz: den CTC Modus&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CTC&#039;&#039;&#039; Clear Timer on Compare Match (Auto Reload) ===&lt;br /&gt;
&lt;br /&gt;
Im CTC Modus des Timers ist es möglich, anstelle der durch die Hardware bedingten Obergrenze des Timers, eine andere Zahl zu benutzen, an der der Timer einen Interrupt auslöst und wieder bei 0 zu zählen anfängt. Neben dem Aktivieren des CTC Modus genügt es dazu, einfach den gewünschten Endwert in ein spezielles Register, das OCR0A, zu laden. Und natürlich hat auch die ISR dann einen anderen Namen. Weitere Anmerkungen und Erläuterungen finden sich im CTC-Kapitel der 16-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: Attiny2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Variablen für die Zeit&lt;br /&gt;
volatile unsigned int millisekunden;&lt;br /&gt;
volatile unsigned int sekunde;&lt;br /&gt;
volatile unsigned int minute;&lt;br /&gt;
volatile unsigned int stunde;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0A = (1&amp;lt;&amp;lt;WGM01); // CTC Modus&lt;br /&gt;
  TCCR0B |= (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
  // ((1000000/8)/1000) = 125&lt;br /&gt;
  OCR0A = 125-1;&lt;br /&gt;
&lt;br /&gt;
  // Compare Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;OCIE0A);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /*Hier kann die aktuelle Zeit&lt;br /&gt;
      ausgeben werden*/&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Compare Interrupt Handler &lt;br /&gt;
wird aufgerufen, wenn &lt;br /&gt;
TCNT0 = OCR0A = 125-1 &lt;br /&gt;
ist (125 Schritte), d.h. genau alle 1 ms&lt;br /&gt;
*/&lt;br /&gt;
ISR (TIMER0_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  millisekunden++;&lt;br /&gt;
  if(millisekunden == 1000)&lt;br /&gt;
  {&lt;br /&gt;
    sekunde++;&lt;br /&gt;
    millisekunden = 0;&lt;br /&gt;
    if(sekunde == 60)&lt;br /&gt;
    {&lt;br /&gt;
      minute++;&lt;br /&gt;
      sekunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(minute == 60)&lt;br /&gt;
    {&lt;br /&gt;
      stunde++;&lt;br /&gt;
      minute = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(stunde == 24)&lt;br /&gt;
    {&lt;br /&gt;
      stunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anm.: In diesem Beispiel ist es egal, ob TCCR0B absolut gesetzt wird (TCCR0B = (1&amp;lt;&amp;lt;CS01)) oder der Prescaler-Wert zum alten Inhalt hinzugeODERt wird (TCCR0B |= (1&amp;lt;&amp;lt;CS01)). Die anderen Bits in TCCR0B sind nach dem Reset 0 und sollen auch 0 bleiben. Wenn man sicher nur bestimmte Bits ändern will, ist das ODER (bzw. UND mit dem Kehrwert) sicherer. Näheres dazu im Artikel [[Bitmanipulation]].&lt;br /&gt;
&lt;br /&gt;
== 16-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Viele AVR-Modelle besitzen außer den 8-Bit Timern auch 16-Bit Timer. Die 16-Bit Timer/Counter sind etwas komplexer aufgebaut als die 8-Bit Timer/Counter, bieten dafür aber auch viel mehr Möglichkeiten, als da sind:&lt;br /&gt;
&lt;br /&gt;
* Die [[PWM]]-Betriebsart zur Erzeugung eines pulsweitenmodulierten Ausgangssignals. &lt;br /&gt;
* Vergleichswert-Überprüfung mit Erzeugung eines Ausgangssignals (Output Compare Match).&lt;br /&gt;
* Einfangen eines Eingangssignals mit Speicherung des aktuellen Zählerwertes (Input Capturing), mit zuschaltbarer Rauschunterdrückung (Noise Filtering).&lt;br /&gt;
&lt;br /&gt;
Folgende Register sind dem Timer/Counter 1 zugeordnet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;A&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem und dem folgenden Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;COM1A1&#039;&#039;&#039;|| &#039;&#039;&#039;COM1A0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;PWM11&#039;&#039;&#039;|| &#039;&#039;&#039;PWM10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R|| R|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COM1A1&#039;&#039;&#039;, &#039;&#039;&#039;COM1A0&#039;&#039;&#039; (&#039;&#039;&#039;Co&#039;&#039;&#039;mpare &#039;&#039;&#039;M&#039;&#039;&#039;atch Control Bits)&lt;br /&gt;
:Diese 2 Bits bestimmen die Aktion, welche am Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; ausgeführt werden soll, wenn der Wert des Datenregisters des Timer/Counter 1 den Wert des Vergleichsregisters erreicht, also ein so genannter Compare Match auftritt.&lt;br /&gt;
:Der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) muss mit dem Datenrichtungsregister als Ausgang konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Das Signal am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird invertiert (Toggle).&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 0 gesetzt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 1 gesetzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart haben diese Bits eine andere Funktion.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;nicht invertierende PWM&#039;&#039;.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 1 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 0 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;invertierende PWM&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PWM11&#039;&#039;&#039;, &#039;&#039;&#039;PWM10&#039;&#039;&#039; (&#039;&#039;&#039;PWM&#039;&#039;&#039; Mode Select Bits)&lt;br /&gt;
:Mit diesen 2 Bits wird die PWM-Betriebsart des Timer/Counter 1 gesteuert.&lt;br /&gt;
* PWM10 PWM11 wurden umbenannt in WGM10 und WGM11&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! PWM11 || PWM10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Die PWM-Betriebsart ist nicht aktiviert. Timer/Counter 1 arbeitet als normaler Timer bzw. Zähler.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 8-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| 9-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 10-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;B&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;ICNC1&#039;&#039;&#039;|| &#039;&#039;&#039;ICES1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;WGM13&#039;&#039;&#039;|| &#039;&#039;&#039;WGM12 (CTC1)&#039;&#039;&#039;|| &#039;&#039;&#039;CS12&#039;&#039;&#039;|| &#039;&#039;&#039;CS11&#039;&#039;&#039;|| &#039;&#039;&#039;CS10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R/W || R/W || R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICNC1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;N&#039;&#039;&#039;oise &#039;&#039;&#039;C&#039;&#039;&#039;anceler (4 CKs) Timer/Counter 1&lt;br /&gt;
:oder auf Deutsch Rauschunterdrückung des Eingangssignals.&lt;br /&gt;
:Wenn dieses Bit gesetzt ist und mit dem Input Capture Signal gearbeitet wird so werden nach der Triggerung des Signals mit der entsprechenden Flanke (steigend oder fallend) am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; jeweils 4 Messungen mit der CPU-Frequenz des Eingangssignals abgefragt. Nur dann, wenn alle 4 Messungen den gleichen Zustand aufweisen gilt das Signal als erkannt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICES1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;E&#039;&#039;&#039;dge &#039;&#039;&#039;S&#039;&#039;&#039;elect Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Mit diesem Bit wird bestimmt, ob die steigende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=1) oder fallende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=0) Flanke zur Auswertung des Input Capture Signals an Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; heran gezogen wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CTC1&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lear &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter on Compare Match Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, so wird nach einer Übereinstimmung des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; mit dem Vergleichswert in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
:Da die Übereinstimmung im Takt nach dem Vergleich behandelt wird, ergibt sich je nach eingestelltem Vorteiler ein etwas anderes Zählverhalten:&lt;br /&gt;
:Wenn der Vorteiler auf 1 gestellt, und C der voreingestellte Vergleichswert ist, dann nimmt das Datenregister, im CPU-Takt betrachtet, folgende Werte an:&lt;br /&gt;
:... | C-2 | C-1 | C | 0 | 1 |...&lt;br /&gt;
:Wenn der Vorteiler z.&amp;amp;nbsp;B. auf 8 eingestellt ist, dann nimmt das Datenregister folgende Werte an:&lt;br /&gt;
:... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0, 0, 0, 0, 0, 0, 0 |...&lt;br /&gt;
:In der PWM-Betriebsart hat dieses Bit keine Funktion.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS12&#039;&#039;&#039;, &#039;&#039;&#039;CS11&#039;&#039;&#039;, &#039;&#039;&#039;CS10&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS12 || CS11 || CS10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin T1, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin T1 verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin T1 als Ausgang geschaltet ist.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
Dieses ist als 16-Bit Aufwärtszähler mit Schreib- und Lesezugriff realisiert. Wenn der Zähler den Wert 65535 erreicht hat, beginnt er beim nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 ||&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In der PWM-Betriebsart wird das Register als Auf/Ab-Zähler verwendet, d.h. der Wert steigt zuerst von 0, bis er den Überlauf von 65535 auf 0 erreicht hat. Dann zählt das Register rückwärts wiederum bis 0.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;OCR1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt.. Zudem muss zuerst &#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;TCNT1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Wert im Output Compare Register wird ständig mit dem aktuellen Wert im Datenregister TCNT1H/TCNT1L verglichen. Stimmen die beiden Werte überein, so wird ein sogenannter Output Compare Match ausgelöst. Die entsprechenden Aktionen werden über die Timer/Counter 1 Control und Status Register eingestellt.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;TCNT1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt. Zudem muss zuerst &#039;&#039;&#039;OCR1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;OCR1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;OCR1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;OCR1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R|| R|| R|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Input Capture Register ist ein 16-Bit Register. Bei einigen AVR Modellen kann es als TOP Value für bestimmte PWM Modes verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wenn am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; die gemäß Einstellungen im &#039;&#039;&#039;TCCR1B&#039;&#039;&#039; definierte Flanke erkannt wird, so wird der aktuelle Inhalt des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; sofort in dieses Register kopiert und das Input Capture Flag &#039;&#039;&#039;ICF1&#039;&#039;&#039; im Timer Interrupt Flag Register &#039;&#039;&#039;TIFR&#039;&#039;&#039; gesetzt.&lt;br /&gt;
&lt;br /&gt;
{{Warnung|Wie bereits oben erwähnt, müssen vor dem Zugriff auf dieses Register alle Interrupts gesperrt werden. Zudem müssen Low- und Highbyte des Registers in der richtigen Reihenfolge bearbeitet werden:&lt;br /&gt;
;Lesen&amp;amp;#58;: &#039;&#039;&#039;ICR1L&#039;&#039;&#039; &amp;amp;rarr; &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
Bei Verwendung des Compilers wird der Zugriff in der korrekten Reihenfolge ausgeführt, wenn man das 16-Bit register ICR1 verwendet anstatt zwei Zugriffe auf 8-Bit Register.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Die PWM-Betriebsart ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter 1 in der PWM-Betriebsart betrieben wird, so bilden das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und das Vergleichsregister &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; einen 8-, 9- oder 10-Bit, frei laufenden PWM-Modulator, welcher als PWM-Signal am &#039;&#039;&#039;OC1&#039;&#039;&#039;-Pin (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) abgegriffen werden kann. Das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; wird dabei als Auf-/Ab-Zähler betrieben, welcher von 0 an aufwärts zählt bis zur Obergrenze und danach wieder zurück auf 0.&lt;br /&gt;
Die Obergrenze ergibt sich daraus, ob 8-, 9- oder 10-Bit PWM verwendet wird, und zwar gemäß folgender Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Auflösung || Obergrenze || Frequenz&lt;br /&gt;
|- &lt;br /&gt;
| 8 || 255 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 510&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 511 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 1022&lt;br /&gt;
|- &lt;br /&gt;
|10 || 1023 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 2046&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn nun der Zählerwert im Datenregister den in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; gespeicherten Wert erreicht, wird der Ausgabepin &#039;&#039;&#039;OC1&#039;&#039;&#039; gesetzt bzw. gelöscht, je nach Einstellung von &#039;&#039;&#039;COM1A1&#039;&#039;&#039; und &#039;&#039;&#039;COM1A0&#039;&#039;&#039; im &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;-Register.&lt;br /&gt;
&lt;br /&gt;
Ich habe versucht, die entsprechenden Signale in der folgenden Grafik zusammenzufassen&lt;br /&gt;
&lt;br /&gt;
[[Image:PWM Theorie 3.gif]] [[Image:PWM Theorie 4.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichswert-Überprüfung (Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Hier wird in ein spezielles Vergleichswertregister (&#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039;) ein Wert eingeschrieben, welcher ständig mit dem aktuellen Zählerwert verglichen wird.&lt;br /&gt;
Erreicht der Zähler den in diesem Register eingetragenen Wert, so kann ein Signal (0 oder 1) am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; erzeugt und/oder ein Interrupt ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Zu erwähnen ist in dem Zusammenhang, dass das zur Compare-Einheit gehörende Interrupt-Flag erst beim auf die Übereinstimmung der Werte folgenden Timertakt gesetzt wird. Das ist v.a. deshalb wichtig, da es sonst bei OCRnx = 0 einen undefinierten Zustand gäbe.&lt;br /&gt;
&lt;br /&gt;
Möchte man ein Compare-Ereignis 100 Takte nach dem Timerüberlauf auslösen, dann muss in das betreffende Compare-Register eine 99 geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== CTC-Betriebsart (Clear Timer on Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Das sogenannte &#039;&#039;&#039;Compare Match-Ereignis&#039;&#039;&#039; kann auch dazu verwendet werden, um den Timer automatisch zurückzusetzen (d.h. das TCNT-Register wird zu Null gesetzt). Diese Betriebsart heißt &amp;quot;Clear Timer on Compare Match&amp;quot;, also auf deutsch &amp;quot;Lösche Timer bei Vergleichsübereinstimmung&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktionalität ist es möglich, sehr präzise Taktsignale zu erzeugen, ohne dabei programmtechnisch eingreifen zu müssen. &#039;&#039;&#039;Diese Funktion ersetzt das bei anderen Controllern und Timern ohne Compare-Einheit erforderliche Timer Reload&#039;&#039;&#039; (also das Nachladen des Zählregisters mit &amp;quot;Überlaufwert minus gewünschte Taktzahl bis zum Überlauf&amp;quot;, v.a. verbreitet bei 8051er-µCs).&lt;br /&gt;
&lt;br /&gt;
Zur Erzeugung eines Taktes per Hardware muss lediglich eine der CTC-Betriebsarten ausgewählt werden und einer der OCnx-Pins so gesetzt werden, dass er bei Auftreten des Compare Match getoggelt wird (über die COM-Bits).&lt;br /&gt;
&lt;br /&gt;
Die Frequenz des Taktes am entsprechenden Ausgang ist dann:&lt;br /&gt;
&amp;lt;math&amp;gt;f_\text{OC} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot \left( \text{OCRnx} + 1 \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Umgeformt gilt für OCRnx:&lt;br /&gt;
&amp;lt;math&amp;gt;\text{OCRnx} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot f_\text{OC}} - 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Betriebsart macht das Timer-Nachladen, das bei AVRs, die ja im Unterschied zu 8051-Derivaten keine Auto-Reload-Funktion haben, immer mit Ungenauigkeiten und programmtechnischen Klimmzügen verbunden ist, überflüssig. Ist das OCRnx einmal gesetzt, dann wird das Signal am Ausgang kontinuierlich ausgegeben, ohne dass die Anwendersoftware eingreifen muss (es sei denn, die Frequenz soll geändert werden).&lt;br /&gt;
&lt;br /&gt;
Beim ATmega8 hat der 8-Bit-Timer 0 keine Compare-Einheit, so dass dort CTC und auch sonstige automatische Vergleichsoperationen nicht möglich sind. Bei Timer 1 und Timer 2 ist das jedoch möglich. Bei den neueren AVRs besitzen i.d.R. &#039;&#039;alle&#039;&#039; Timer eine oder mehrere Compare-Einheiten, so dass dort eine größere Flexibilität gegeben ist.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zu den PWM-Betriebsarten wird die Registeraktualisierung bei CTC nicht automatisch synchronisiert. Schreibt man einen neuen Compare-Wert, dann wird dieser sofort übernommen, was zu Fehlfunktionen führen kann, wenn der neue Compare-Wert höher ist, als der aktuelle Stand von TCNTnx. In den PWM-Betriebsarten wird hingegen der TOP-Wert synchron bei Erreichen von TOP oder BOTTOM aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Einfangen eines Eingangssignals (Input Capturing) ===&lt;br /&gt;
&lt;br /&gt;
Bei dieser Betriebsart wird an den Input Capturing Pin (ICP) des Controllers eine Signalquelle angeschlossen.&lt;br /&gt;
Nun kann je nach Konfiguration entweder ein Signalwechsel von 0 nach 1 (steigende Flanke) oder von 1 nach 0 (fallende Flanke) erkannt werden und der zu diesem Zeitpunkt aktuelle Zählerstand in ein spezielles Register abgelegt werden. Gleichzeitig kann auch ein entsprechender Interrupt ausgelöst werden.&lt;br /&gt;
Wenn die Signalquelle ein starkes Rauschen beinhaltet, kann die Rauschunterdrückung eingeschaltet werden. Dann wird beim Erkennen der konfigurierten Flanke über 4 Taktzyklen das Signal überwacht und nur dann, wenn alle 4 Messungen gleich sind, wird die entsprechende Aktion ausgelöst.&lt;br /&gt;
&lt;br /&gt;
== Gemeinsame Register ==&lt;br /&gt;
&lt;br /&gt;
Verschiedene Register beinhalten Zustände und Einstellungen, welche sowohl&lt;br /&gt;
für den 8-Bit, als auch für den 16-Bit Timer/Counter in ein und demselben&lt;br /&gt;
Register zu finden sind.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIMSK&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;M&#039;&#039;&#039;a&#039;&#039;&#039;sk&#039;&#039;&#039;&lt;br /&gt;
Register&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOIE1&#039;&#039;&#039;|| &#039;&#039;&#039;OCIE1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TICIE&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOIE0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R || R/W || R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 1 ein Timer Overflow 1 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCIE1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare Match &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Beim Timer/Counter 1 kann zusätzlich zum Überlauf ein Vergleichswert definiert werden.&lt;br /&gt;
&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird beim Erreichen des Vergleichswertes ein Compare Match Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TICIE&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird ein Capture Event Interrupt ausgelöst, wenn ein entsprechendes Signalereignis am Pin PD6(ICP) auftritt. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein, wenn auch ein entsprechender Interrupt ausgelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 0 ein Timer Overflow 0 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIFR&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;F&#039;&#039;&#039;lag &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOV1&#039;&#039;&#039;|| &#039;&#039;&#039;OCF1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;ICF1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOV0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R/W|| R|| R/W|| R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 1 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart wird das Bit gesetzt, wenn die Zählrichtung von auf- zu abwärts und umgekehrt geändert wird (Zählerwert = 0).&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCF1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn der aktuelle Wert des Datenregisters von Timer/Counter 1 mit demjenigen im Vergleichsregister &#039;&#039;&#039;OCR1&#039;&#039;&#039; übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICF1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn ein Capture-Ereignis aufgetreten ist, welches anzeigt, dass der Wert des Datenregisters des  Timer/Counter 1 in das Input Capture Register ICR1 übertragen wurde.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 0 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial]]&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57397</id>
		<title>AVR-GCC-Tutorial/Die Timer und Zähler des AVR</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57397"/>
		<updated>2011-05-25T09:00:24Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die heutigen Mikrocontroller und insbesondere die RISC-[[AVR]]s sind für viele Steuerungsaufgaben zu schnell. Wenn wir beispielsweise eine [[LED]] oder Lampe blinken lassen wollen, können wir selbstverständlich nicht die CPU-Frequenz verwenden, da ja dann nichts mehr vom Blinken zu bemerken wäre.&lt;br /&gt;
&lt;br /&gt;
Wir brauchen also eine Möglichkeit, Vorgänge in Zeitabständen durchzuführen, die geringer als die Taktfrequenz des Controllers sind. Selbstverständlich sollte die resultierende Frequenz auch noch möglichst genau und stabil sein.&lt;br /&gt;
&lt;br /&gt;
Hier kommen die im AVR vorhandenen Timer/Counter zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Ein Timer ist ganz einfach ein bestimmtes Register im µC, das völlig ohne Zutun des Programms, also per Hardware, hochgezählt wird. Das alleine wäre noch nicht allzu nützlich, wenn nicht dieses Hardwareregister bei bestimmten Zählerständen einen Interrupt auslösen könnte. &lt;br /&gt;
&lt;br /&gt;
Ein solches Ereignis ist der Overflow (Überlauf): Da die Bitbreite des Registers beschränkt ist, kommt es natürlich auch vor, dass der Zähler so hoch zählt, dass der nächste Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der Zähler wieder auf 0 zurückgesetzt wird. Dieses Ereignis nennt man den Overflow und es ist möglich an dieses Ereignis einen Interrupt zu koppeln.&lt;br /&gt;
&lt;br /&gt;
Ein anderes Anwendungsgebiet ist das Zählen von Impulsen, welche über einen I/O-Pin zugeführt werden.&lt;br /&gt;
&lt;br /&gt;
Als Eingangstakt für die Timer/Counter kann entweder die CPU-Taktfrequenz, der Vorteiler-Ausgang oder ein an einen I/O-Pin angelegtes Signal verwendet werden. Wenn ein externes Signal verwendet wird, so darf dessen Frequenz nicht höher sein als die Hälfte des CPU-Taktes.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Ausführungen beziehen sich im Wesentlichen auf den AT90S2313. Für andere Modelltypen müsst ihr euch die allenfalls notwendigen Anpassungen aus den Datenblättern der entsprechenden Controller herauslesen.&lt;br /&gt;
&lt;br /&gt;
== Der Vorteiler (Prescaler) ==&lt;br /&gt;
&lt;br /&gt;
Der Vorteiler dient dazu, den CPU-Takt vorerst um einen einstellbaren Faktor zu reduzieren. Die so geteilte Frequenz wird den Eingängen der Timer zugeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir mit einem CPU-Takt von 4 MHz arbeiten und den Vorteiler auf 1024 einstellen, wird also der Timer mit einer Frequenz von 4 MHz / 1024, also mit &#039;&#039;&#039;ca.&#039;&#039;&#039; 4 kHz versorgt. Wenn also der Timer läuft, so wird das Zählregister (TCNTx) mit dieser Frequenz inkrementiert.&lt;br /&gt;
&lt;br /&gt;
== Timer-Bitzahlen verschiedener AVRs ==&lt;br /&gt;
&lt;br /&gt;
Wir unterscheiden grundsätzlich zwischen 8-Bit Timern, welche eine Auflösung von 256 (2^8) aufweisen und 16-Bit Timern mit einer Auflösung von 65536 (2^16). &lt;br /&gt;
&lt;br /&gt;
Alle AVR-Modelle verfügen über mindestens einen, teilweise sogar zwei, 8-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! AVR-Typ || Timer/Counter0 || Timer/Counter1 || Timer/Counter2&lt;br /&gt;
|- &lt;br /&gt;
| AT90S2313  ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATtiny2313 ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATmega8    || 8  || 16 || 8&lt;br /&gt;
|- &lt;br /&gt;
| ATmega88   || 8  || 16 || 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Der 8-Bit Timer wird z.B bei AT90S2313 über folgende Register angesprochen (bei anderen Typen weitestgehend analog):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
Timer &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&lt;br /&gt;
&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;CS02&#039;&#039;&#039;|| &#039;&#039;&#039;CS01&#039;&#039;&#039;|| &#039;&#039;&#039;CS00&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS02, CS01, CS00&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{|  class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS02 || CS01 || CS00 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin &#039;&#039;&#039;TO&#039;&#039;&#039; verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin &#039;&#039;&#039;TO&#039;&#039;&#039; als Ausgang geschaltet ist.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer &#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses ist als 8-Bit Aufwärtszähler mit Schreib- und Lesezugriff&lt;br /&gt;
realisiert. Wenn der Zähler den Wert 255 erreicht hat, beginnt er beim&lt;br /&gt;
nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um nun also den Timer0 in Betrieb zu setzen und ihn mit einer Frequenz von 1/8-tel des CPU-Taktes zählen zu lassen, schreiben wir die folgende Befehlszeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    TCCR0 = (1&amp;lt;&amp;lt;CS01);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt nun aufwärts bis 255, um dann wieder bei 0 zu beginnen. Der aktuelle Zählerstand steht in TCNT0. Bei jedem Überlauf von 255 auf 0 wird das Timer Overflow Flag &#039;&#039;&#039;TOV0&#039;&#039;&#039; im Timer Interrupt Flag &#039;&#039;&#039;TIFR&#039;&#039;&#039;-Register gesetzt und, falls so konfiguriert, ein entsprechender Timer-Overflow-Interrupt ausgelöst und die daran gebundene Interrupt-Service-Routine (ISR) abgearbeitet. Das TOV Flag &lt;br /&gt;
lässt sich durch das Hineinschreiben einer 1 und nicht wie erwartet einer 0 wieder zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
=== Overflow Interrupt ===&lt;br /&gt;
&lt;br /&gt;
Jedesmal wenn der Timer seinen höchsten Wert erreicht hat, erfolgt ein Overflow und der Timer beginnt wieder bei 0 zu zählen. An diesen Overflow kann eine Funktion, die sog. Overflow-ISR, gebunden werden. Damit hat man die Möglichkeit, bestimmte Funktionalitäten in regelmäßigen Zeitabständen ausführen zu lassen. Wie groß diese Zeitabstände sind, wird ausschließlich von der Zählfrequenz des Timers und der Bitbreite des Timers (also dem höchsten Wert, den der Timer erreichen kann) bestimmt. Die Zählfrequenz wiederrum hängt von Taktfrequenz des Controllers und dem eingestellten Vorteiler ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: AT90S2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
&lt;br /&gt;
  // Overflow Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;TOIE0);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /* Sonstige Aktionen */&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Overflow Interrupt Handler&lt;br /&gt;
wird aufgerufen, wenn TCNT0 von&lt;br /&gt;
255 auf 0 wechselt (256 Schritte),&lt;br /&gt;
d.h. ca. alle 2 ms&lt;br /&gt;
*/&lt;br /&gt;
#ifndef TIMER0_OVF_vect&lt;br /&gt;
// Für ältere WinAVR Versionen z.B. WinAVR-20071221 &lt;br /&gt;
#define TIMER0_OVF_vect TIMER0_OVF0_vect&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
ISR (TIMER0_OVF_vect)&lt;br /&gt;
{&lt;br /&gt;
  /* Interrupt Aktion alle&lt;br /&gt;
  (1000000/8)/256 Hz = 488,28125 Hz&lt;br /&gt;
  bzw.&lt;br /&gt;
  1/488,28125 s = 2,048 ms  &lt;br /&gt;
  */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man in einer ISR jeden beliebigen Code ausführen lassen. Allerdings sollte man sich an die Grundregeln der ISR Programmierung halten: Nur das tun was unbedingt notwendig ist. Eine ISR sollte (zeitlich gesehen) so kurz wie möglich aber so lang wie notwendig sein. Komplexe Ausgaben auf LCD oder gar auf die UART gehören nicht in eine ISR. Sie dauern einfach zu lange und blockieren so den Prozessor zu lange. Programme, die mehrere Dinge quasi gleichzeitig machen, werden so zu lange blockiert.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenz, mit der eine ISR aufgerufen wird, erscheint nach obigen Ausführungen recht starr, aber sie lässt sich feiner anpassen. Eine Möglichkeit bestünde darin, den Zählerstand des Registers TCNT0 nach einem Overflow auf einen Wert größer als 0 zu setzen. Somit blieben bis zum nächsten Overflow weniger Zähltakte, was die Frequenz erhöhen würde.&lt;br /&gt;
&lt;br /&gt;
Modernere AVRs kennen allerdings einen eleganteren Weg zur Anpassung der Interrupt-Frequenz: den CTC Modus&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CTC&#039;&#039;&#039; Clear Timer on Compare Match (Auto Reload) ===&lt;br /&gt;
&lt;br /&gt;
Im CTC Modus des Timers ist es möglich, anstelle der durch die Hardware bedingten Obergrenze des Timers, eine andere Zahl zu benutzen, an der der Timer einen Interrupt auslöst und wieder bei 0 zu zählen anfängt. Neben dem Aktivieren des CTC Modus genügt es dazu, einfach den gewünschten Endwert in ein spezielles Register, das OCR0A, zu laden. Und natürlich hat auch die ISR dann einen anderen Namen. Weitere Anmerkungen und Erläuterungen finden sich im CTC-Kapitel der 16-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: Attiny2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Variablen für die Zeit&lt;br /&gt;
volatile unsigned int millisekunden;&lt;br /&gt;
volatile unsigned int sekunde;&lt;br /&gt;
volatile unsigned int minute;&lt;br /&gt;
volatile unsigned int stunde;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0A = (1&amp;lt;&amp;lt;WGM01); // CTC Modus&lt;br /&gt;
  TCCR0B |= (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
  // ((1000000/8)/1000) = 125&lt;br /&gt;
  OCR0A = 125-1;&lt;br /&gt;
&lt;br /&gt;
  // Compare Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;OCIE0A);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /*Hier kann die aktuelle Zeit&lt;br /&gt;
      ausgeben werden*/&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Compare Interrupt Handler &lt;br /&gt;
wird aufgerufen, wenn &lt;br /&gt;
TCNT0 = OCR0A = 125-1 &lt;br /&gt;
ist (125 Schritte), d.h. genau alle 1 ms&lt;br /&gt;
*/&lt;br /&gt;
ISR (TIMER0_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  millisekunden++;&lt;br /&gt;
  if(millisekunden == 1000)&lt;br /&gt;
  {&lt;br /&gt;
    sekunde++;&lt;br /&gt;
    millisekunden = 0;&lt;br /&gt;
    if(sekunde == 60)&lt;br /&gt;
    {&lt;br /&gt;
      minute++;&lt;br /&gt;
      sekunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(minute == 60)&lt;br /&gt;
    {&lt;br /&gt;
      stunde++;&lt;br /&gt;
      minute = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(stunde == 24)&lt;br /&gt;
    {&lt;br /&gt;
      stunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anm.: In diesem Beispiel ist es egal, ob TCCR0B absolut gesetzt wird (TCCR0B = (1&amp;lt;&amp;lt;CS01)) oder der Prescaler-Wert zum alten Inhalt hinzugeODERt wird (TCCR0B |= (1&amp;lt;&amp;lt;CS01)). Die anderen Bits in TCCR0B sind nach dem Reset 0 und sollen auch 0 bleiben. Wenn man sicher nur bestimmte Bits ändern will, ist das ODER (bzw. UND mit dem Kehrwert) sicherer. Näheres dazu im Artikel [[Bitmanipulation]].&lt;br /&gt;
&lt;br /&gt;
== 16-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Viele AVR-Modelle besitzen außer den 8-Bit Timern auch 16-Bit Timer. Die 16-Bit Timer/Counter sind etwas komplexer aufgebaut als die 8-Bit Timer/Counter, bieten dafür aber auch viel mehr Möglichkeiten, als da sind:&lt;br /&gt;
&lt;br /&gt;
* Die [[PWM]]-Betriebsart zur Erzeugung eines pulsweitenmodulierten Ausgangssignals. &lt;br /&gt;
* Vergleichswert-Überprüfung mit Erzeugung eines Ausgangssignals (Output Compare Match).&lt;br /&gt;
* Einfangen eines Eingangssignals mit Speicherung des aktuellen Zählerwertes (Input Capturing), mit zuschaltbarer Rauschunterdrückung (Noise Filtering).&lt;br /&gt;
&lt;br /&gt;
Folgende Register sind dem Timer/Counter 1 zugeordnet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;A&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem und dem folgenden Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;COM1A1&#039;&#039;&#039;|| &#039;&#039;&#039;COM1A0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;PWM11&#039;&#039;&#039;|| &#039;&#039;&#039;PWM10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R|| R|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COM1A1&#039;&#039;&#039;, &#039;&#039;&#039;COM1A0&#039;&#039;&#039; (&#039;&#039;&#039;Co&#039;&#039;&#039;mpare &#039;&#039;&#039;M&#039;&#039;&#039;atch Control Bits)&lt;br /&gt;
:Diese 2 Bits bestimmen die Aktion, welche am Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; ausgeführt werden soll, wenn der Wert des Datenregisters des Timer/Counter 1 den Wert des Vergleichsregisters erreicht, also ein so genannter Compare Match auftritt.&lt;br /&gt;
:Der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) muss mit dem Datenrichtungsregister als Ausgang konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Das Signal am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird invertiert (Toggle).&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 0 gesetzt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 1 gesetzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart haben diese Bits eine andere Funktion.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;nicht invertierende PWM&#039;&#039;.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 1 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 0 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;invertierende PWM&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PWM11&#039;&#039;&#039;, &#039;&#039;&#039;PWM10&#039;&#039;&#039; (&#039;&#039;&#039;PWM&#039;&#039;&#039; Mode Select Bits)&lt;br /&gt;
:Mit diesen 2 Bits wird die PWM-Betriebsart des Timer/Counter 1 gesteuert.&lt;br /&gt;
* PWM10 PWM11 wurden umbenannt in WGM10 und WGM11&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! PWM11 || PWM10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Die PWM-Betriebsart ist nicht aktiviert. Timer/Counter 1 arbeitet als normaler Timer bzw. Zähler.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 8-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| 9-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 10-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;B&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;ICNC1&#039;&#039;&#039;|| &#039;&#039;&#039;ICES1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;WGM13&#039;&#039;&#039;|| &#039;&#039;&#039;WGM12 (CTC1)&#039;&#039;&#039;|| &#039;&#039;&#039;CS12&#039;&#039;&#039;|| &#039;&#039;&#039;CS11&#039;&#039;&#039;|| &#039;&#039;&#039;CS10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R/W || R/W || R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICNC1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;N&#039;&#039;&#039;oise &#039;&#039;&#039;C&#039;&#039;&#039;anceler (4 CKs) Timer/Counter 1&lt;br /&gt;
:oder auf Deutsch Rauschunterdrückung des Eingangssignals.&lt;br /&gt;
:Wenn dieses Bit gesetzt ist und mit dem Input Capture Signal gearbeitet wird so werden nach der Triggerung des Signals mit der entsprechenden Flanke (steigend oder fallend) am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; jeweils 4 Messungen mit der CPU-Frequenz des Eingangssignals abgefragt. Nur dann, wenn alle 4 Messungen den gleichen Zustand aufweisen gilt das Signal als erkannt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICES1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;E&#039;&#039;&#039;dge &#039;&#039;&#039;S&#039;&#039;&#039;elect Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Mit diesem Bit wird bestimmt, ob die steigende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=1) oder fallende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=0) Flanke zur Auswertung des Input Capture Signals an Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; heran gezogen wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CTC1&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lear &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter on Compare Match Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, so wird nach einer Übereinstimmung des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; mit dem Vergleichswert in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
:Da die Übereinstimmung im Takt nach dem Vergleich behandelt wird, ergibt sich je nach eingestelltem Vorteiler ein etwas anderes Zählverhalten:&lt;br /&gt;
:Wenn der Vorteiler auf 1 gestellt, und C der voreingestellte Vergleichswert ist, dann nimmt das Datenregister, im CPU-Takt betrachtet, folgende Werte an:&lt;br /&gt;
:... | C-2 | C-1 | C | 0 | 1 |...&lt;br /&gt;
:Wenn der Vorteiler z.&amp;amp;nbsp;B. auf 8 eingestellt ist, dann nimmt das Datenregister folgende Werte an:&lt;br /&gt;
:... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0, 0, 0, 0, 0, 0, 0 |...&lt;br /&gt;
:In der PWM-Betriebsart hat dieses Bit keine Funktion.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS12&#039;&#039;&#039;, &#039;&#039;&#039;CS11&#039;&#039;&#039;, &#039;&#039;&#039;CS10&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS12 || CS11 || CS10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin T1, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin T1 verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin T1 als Ausgang geschaltet ist.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
Dieses ist als 16-Bit Aufwärtszähler mit Schreib- und Lesezugriff realisiert. Wenn der Zähler den Wert 65535 erreicht hat, beginnt er beim nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 ||&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In der PWM-Betriebsart wird das Register als Auf/Ab-Zähler verwendet, d.h. der Wert steigt zuerst von 0, bis er den Überlauf von 65535 auf 0 erreicht hat. Dann zählt das Register rückwärts wiederum bis 0.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;OCR1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt.. Zudem muss zuerst &#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;TCNT1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Wert im Output Compare Register wird ständig mit dem aktuellen Wert im Datenregister TCNT1H/TCNT1L verglichen. Stimmen die beiden Werte überein, so wird ein sogenannter Output Compare Match ausgelöst. Die entsprechenden Aktionen werden über die Timer/Counter 1 Control und Status Register eingestellt.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;TCNT1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt. Zudem muss zuerst &#039;&#039;&#039;OCR1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;OCR1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;OCR1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;OCR1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R|| R|| R|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Input Capture Register ist ein 16-Bit Register mit Lesezugriff. Es kann im ATmega8 nicht beschrieben werden. Bei anderen ATmega Modellen kann es als TOP Value für bestimmte PWM Modes verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wenn am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; die gemäß Einstellungen im &#039;&#039;&#039;TCCR1B&#039;&#039;&#039; definierte Flanke erkannt wird, so wird der aktuelle Inhalt des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; sofort in dieses Register kopiert und das Input Capture Flag &#039;&#039;&#039;ICF1&#039;&#039;&#039; im Timer Interrupt Flag Register &#039;&#039;&#039;TIFR&#039;&#039;&#039; gesetzt.&lt;br /&gt;
&lt;br /&gt;
{{Warnung|Wie bereits oben erwähnt, müssen vor dem Zugriff auf dieses Register alle Interrupts gesperrt werden. Zudem müssen Low- und Highbyte des Registers in der richtigen Reihenfolge bearbeitet werden:&lt;br /&gt;
;Lesen&amp;amp;#58;: &#039;&#039;&#039;ICR1L&#039;&#039;&#039; &amp;amp;rarr; &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
Bei Verwendung des Compilers wird der Zugriff in der korrekten Reihenfolge ausgeführt, wenn man das 16-Bit register ICR1 verwendet anstatt zwei Zugriffe auf 8-Bit Register.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Die PWM-Betriebsart ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter 1 in der PWM-Betriebsart betrieben wird, so bilden das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und das Vergleichsregister &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; einen 8-, 9- oder 10-Bit, frei laufenden PWM-Modulator, welcher als PWM-Signal am &#039;&#039;&#039;OC1&#039;&#039;&#039;-Pin (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) abgegriffen werden kann. Das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; wird dabei als Auf-/Ab-Zähler betrieben, welcher von 0 an aufwärts zählt bis zur Obergrenze und danach wieder zurück auf 0.&lt;br /&gt;
Die Obergrenze ergibt sich daraus, ob 8-, 9- oder 10-Bit PWM verwendet wird, und zwar gemäß folgender Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Auflösung || Obergrenze || Frequenz&lt;br /&gt;
|- &lt;br /&gt;
| 8 || 255 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 510&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 511 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 1022&lt;br /&gt;
|- &lt;br /&gt;
|10 || 1023 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 2046&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn nun der Zählerwert im Datenregister den in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; gespeicherten Wert erreicht, wird der Ausgabepin &#039;&#039;&#039;OC1&#039;&#039;&#039; gesetzt bzw. gelöscht, je nach Einstellung von &#039;&#039;&#039;COM1A1&#039;&#039;&#039; und &#039;&#039;&#039;COM1A0&#039;&#039;&#039; im &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;-Register.&lt;br /&gt;
&lt;br /&gt;
Ich habe versucht, die entsprechenden Signale in der folgenden Grafik zusammenzufassen&lt;br /&gt;
&lt;br /&gt;
[[Image:PWM Theorie 3.gif]] [[Image:PWM Theorie 4.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichswert-Überprüfung (Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Hier wird in ein spezielles Vergleichswertregister (&#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039;) ein Wert eingeschrieben, welcher ständig mit dem aktuellen Zählerwert verglichen wird.&lt;br /&gt;
Erreicht der Zähler den in diesem Register eingetragenen Wert, so kann ein Signal (0 oder 1) am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; erzeugt und/oder ein Interrupt ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Zu erwähnen ist in dem Zusammenhang, dass das zur Compare-Einheit gehörende Interrupt-Flag erst beim auf die Übereinstimmung der Werte folgenden Timertakt gesetzt wird. Das ist v.a. deshalb wichtig, da es sonst bei OCRnx = 0 einen undefinierten Zustand gäbe.&lt;br /&gt;
&lt;br /&gt;
Möchte man ein Compare-Ereignis 100 Takte nach dem Timerüberlauf auslösen, dann muss in das betreffende Compare-Register eine 99 geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== CTC-Betriebsart (Clear Timer on Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Das sogenannte &#039;&#039;&#039;Compare Match-Ereignis&#039;&#039;&#039; kann auch dazu verwendet werden, um den Timer automatisch zurückzusetzen (d.h. das TCNT-Register wird zu Null gesetzt). Diese Betriebsart heißt &amp;quot;Clear Timer on Compare Match&amp;quot;, also auf deutsch &amp;quot;Lösche Timer bei Vergleichsübereinstimmung&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktionalität ist es möglich, sehr präzise Taktsignale zu erzeugen, ohne dabei programmtechnisch eingreifen zu müssen. &#039;&#039;&#039;Diese Funktion ersetzt das bei anderen Controllern und Timern ohne Compare-Einheit erforderliche Timer Reload&#039;&#039;&#039; (also das Nachladen des Zählregisters mit &amp;quot;Überlaufwert minus gewünschte Taktzahl bis zum Überlauf&amp;quot;, v.a. verbreitet bei 8051er-µCs).&lt;br /&gt;
&lt;br /&gt;
Zur Erzeugung eines Taktes per Hardware muss lediglich eine der CTC-Betriebsarten ausgewählt werden und einer der OCnx-Pins so gesetzt werden, dass er bei Auftreten des Compare Match getoggelt wird (über die COM-Bits).&lt;br /&gt;
&lt;br /&gt;
Die Frequenz des Taktes am entsprechenden Ausgang ist dann:&lt;br /&gt;
&amp;lt;math&amp;gt;f_\text{OC} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot \left( \text{OCRnx} + 1 \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Umgeformt gilt für OCRnx:&lt;br /&gt;
&amp;lt;math&amp;gt;\text{OCRnx} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot f_\text{OC}} - 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Betriebsart macht das Timer-Nachladen, das bei AVRs, die ja im Unterschied zu 8051-Derivaten keine Auto-Reload-Funktion haben, immer mit Ungenauigkeiten und programmtechnischen Klimmzügen verbunden ist, überflüssig. Ist das OCRnx einmal gesetzt, dann wird das Signal am Ausgang kontinuierlich ausgegeben, ohne dass die Anwendersoftware eingreifen muss (es sei denn, die Frequenz soll geändert werden).&lt;br /&gt;
&lt;br /&gt;
Beim ATmega8 hat der 8-Bit-Timer 0 keine Compare-Einheit, so dass dort CTC und auch sonstige automatische Vergleichsoperationen nicht möglich sind. Bei Timer 1 und Timer 2 ist das jedoch möglich. Bei den neueren AVRs besitzen i.d.R. &#039;&#039;alle&#039;&#039; Timer eine oder mehrere Compare-Einheiten, so dass dort eine größere Flexibilität gegeben ist.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zu den PWM-Betriebsarten wird die Registeraktualisierung bei CTC nicht automatisch synchronisiert. Schreibt man einen neuen Compare-Wert, dann wird dieser sofort übernommen, was zu Fehlfunktionen führen kann, wenn der neue Compare-Wert höher ist, als der aktuelle Stand von TCNTnx. In den PWM-Betriebsarten wird hingegen der TOP-Wert synchron bei Erreichen von TOP oder BOTTOM aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Einfangen eines Eingangssignals (Input Capturing) ===&lt;br /&gt;
&lt;br /&gt;
Bei dieser Betriebsart wird an den Input Capturing Pin (ICP) des Controllers eine Signalquelle angeschlossen.&lt;br /&gt;
Nun kann je nach Konfiguration entweder ein Signalwechsel von 0 nach 1 (steigende Flanke) oder von 1 nach 0 (fallende Flanke) erkannt werden und der zu diesem Zeitpunkt aktuelle Zählerstand in ein spezielles Register abgelegt werden. Gleichzeitig kann auch ein entsprechender Interrupt ausgelöst werden.&lt;br /&gt;
Wenn die Signalquelle ein starkes Rauschen beinhaltet, kann die Rauschunterdrückung eingeschaltet werden. Dann wird beim Erkennen der konfigurierten Flanke über 4 Taktzyklen das Signal überwacht und nur dann, wenn alle 4 Messungen gleich sind, wird die entsprechende Aktion ausgelöst.&lt;br /&gt;
&lt;br /&gt;
== Gemeinsame Register ==&lt;br /&gt;
&lt;br /&gt;
Verschiedene Register beinhalten Zustände und Einstellungen, welche sowohl&lt;br /&gt;
für den 8-Bit, als auch für den 16-Bit Timer/Counter in ein und demselben&lt;br /&gt;
Register zu finden sind.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIMSK&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;M&#039;&#039;&#039;a&#039;&#039;&#039;sk&#039;&#039;&#039;&lt;br /&gt;
Register&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOIE1&#039;&#039;&#039;|| &#039;&#039;&#039;OCIE1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TICIE&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOIE0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R || R/W || R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 1 ein Timer Overflow 1 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCIE1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare Match &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Beim Timer/Counter 1 kann zusätzlich zum Überlauf ein Vergleichswert definiert werden.&lt;br /&gt;
&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird beim Erreichen des Vergleichswertes ein Compare Match Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TICIE&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird ein Capture Event Interrupt ausgelöst, wenn ein entsprechendes Signalereignis am Pin PD6(ICP) auftritt. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein, wenn auch ein entsprechender Interrupt ausgelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 0 ein Timer Overflow 0 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIFR&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;F&#039;&#039;&#039;lag &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOV1&#039;&#039;&#039;|| &#039;&#039;&#039;OCF1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;ICF1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOV0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R/W|| R|| R/W|| R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 1 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart wird das Bit gesetzt, wenn die Zählrichtung von auf- zu abwärts und umgekehrt geändert wird (Zählerwert = 0).&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCF1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn der aktuelle Wert des Datenregisters von Timer/Counter 1 mit demjenigen im Vergleichsregister &#039;&#039;&#039;OCR1&#039;&#039;&#039; übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICF1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn ein Capture-Ereignis aufgetreten ist, welches anzeigt, dass der Wert des Datenregisters des  Timer/Counter 1 in das Input Capture Register ICR1 übertragen wurde.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 0 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial]]&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57396</id>
		<title>AVR-GCC-Tutorial/Die Timer und Zähler des AVR</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR&amp;diff=57396"/>
		<updated>2011-05-25T08:56:52Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* 16-Bit Timer/Counter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die heutigen Mikrocontroller und insbesondere die RISC-[[AVR]]s sind für viele Steuerungsaufgaben zu schnell. Wenn wir beispielsweise eine [[LED]] oder Lampe blinken lassen wollen, können wir selbstverständlich nicht die CPU-Frequenz verwenden, da ja dann nichts mehr vom Blinken zu bemerken wäre.&lt;br /&gt;
&lt;br /&gt;
Wir brauchen also eine Möglichkeit, Vorgänge in Zeitabständen durchzuführen, die geringer als die Taktfrequenz des Controllers sind. Selbstverständlich sollte die resultierende Frequenz auch noch möglichst genau und stabil sein.&lt;br /&gt;
&lt;br /&gt;
Hier kommen die im AVR vorhandenen Timer/Counter zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Ein Timer ist ganz einfach ein bestimmtes Register im µC, das völlig ohne Zutun des Programms, also per Hardware, hochgezählt wird. Das alleine wäre noch nicht allzu nützlich, wenn nicht dieses Hardwareregister bei bestimmten Zählerständen einen Interrupt auslösen könnte. &lt;br /&gt;
&lt;br /&gt;
Ein solches Ereignis ist der Overflow (Überlauf): Da die Bitbreite des Registers beschränkt ist, kommt es natürlich auch vor, dass der Zähler so hoch zählt, dass der nächste Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der Zähler wieder auf 0 zurückgesetzt wird. Dieses Ereignis nennt man den Overflow und es ist möglich an dieses Ereignis einen Interrupt zu koppeln.&lt;br /&gt;
&lt;br /&gt;
Ein anderes Anwendungsgebiet ist das Zählen von Impulsen, welche über einen I/O-Pin zugeführt werden.&lt;br /&gt;
&lt;br /&gt;
Als Eingangstakt für die Timer/Counter kann entweder die CPU-Taktfrequenz, der Vorteiler-Ausgang oder ein an einen I/O-Pin angelegtes Signal verwendet werden. Wenn ein externes Signal verwendet wird, so darf dessen Frequenz nicht höher sein als die Hälfte des CPU-Taktes.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Ausführungen beziehen sich auf den AT90S2313. Für andere Modelltypen müsst ihr euch die allenfalls notwendigen Anpassungen aus den Datenblättern der entsprechenden Controller herauslesen.&lt;br /&gt;
&lt;br /&gt;
== Der Vorteiler (Prescaler) ==&lt;br /&gt;
&lt;br /&gt;
Der Vorteiler dient dazu, den CPU-Takt vorerst um einen einstellbaren Faktor zu reduzieren. Die so geteilte Frequenz wird den Eingängen der Timer zugeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir mit einem CPU-Takt von 4 MHz arbeiten und den Vorteiler auf 1024 einstellen, wird also der Timer mit einer Frequenz von 4 MHz / 1024, also mit &#039;&#039;&#039;ca.&#039;&#039;&#039; 4 kHz versorgt. Wenn also der Timer läuft, so wird das Zählregister (TCNTx) mit dieser Frequenz inkrementiert.&lt;br /&gt;
&lt;br /&gt;
== Timer-Bitzahlen verschiedener AVRs ==&lt;br /&gt;
&lt;br /&gt;
Wir unterscheiden grundsätzlich zwischen 8-Bit Timern, welche eine Auflösung von 256 (2^8) aufweisen und 16-Bit Timern mit einer Auflösung von 65536 (2^16). &lt;br /&gt;
&lt;br /&gt;
Alle AVR-Modelle verfügen über mindestens einen, teilweise sogar zwei, 8-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! AVR-Typ || Timer/Counter0 || Timer/Counter1 || Timer/Counter2&lt;br /&gt;
|- &lt;br /&gt;
| AT90S2313  ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATtiny2313 ||  8 || 16 || -&lt;br /&gt;
|- &lt;br /&gt;
| ATmega8    || 8  || 16 || 8&lt;br /&gt;
|- &lt;br /&gt;
| ATmega88   || 8  || 16 || 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Der 8-Bit Timer wird z.B bei AT90S2313 über folgende Register angesprochen (bei anderen Typen weitestgehend analog):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
Timer &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&lt;br /&gt;
&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;CS02&#039;&#039;&#039;|| &#039;&#039;&#039;CS01&#039;&#039;&#039;|| &#039;&#039;&#039;CS00&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS02, CS01, CS00&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{|  class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS02 || CS01 || CS00 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin &#039;&#039;&#039;TO&#039;&#039;&#039;, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin &#039;&#039;&#039;TO&#039;&#039;&#039; verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin &#039;&#039;&#039;TO&#039;&#039;&#039; als Ausgang geschaltet ist.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT0&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer &#039;&#039;&#039;0&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses ist als 8-Bit Aufwärtszähler mit Schreib- und Lesezugriff&lt;br /&gt;
realisiert. Wenn der Zähler den Wert 255 erreicht hat, beginnt er beim&lt;br /&gt;
nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um nun also den Timer0 in Betrieb zu setzen und ihn mit einer Frequenz von 1/8-tel des CPU-Taktes zählen zu lassen, schreiben wir die folgende Befehlszeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    TCCR0 = (1&amp;lt;&amp;lt;CS01);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Zähler zählt nun aufwärts bis 255, um dann wieder bei 0 zu beginnen. Der aktuelle Zählerstand steht in TCNT0. Bei jedem Überlauf von 255 auf 0 wird das Timer Overflow Flag &#039;&#039;&#039;TOV0&#039;&#039;&#039; im Timer Interrupt Flag &#039;&#039;&#039;TIFR&#039;&#039;&#039;-Register gesetzt und, falls so konfiguriert, ein entsprechender Timer-Overflow-Interrupt ausgelöst und die daran gebundene Interrupt-Service-Routine (ISR) abgearbeitet. Das TOV Flag &lt;br /&gt;
lässt sich durch das Hineinschreiben einer 1 und nicht wie erwartet einer 0 wieder zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
=== Overflow Interrupt ===&lt;br /&gt;
&lt;br /&gt;
Jedesmal wenn der Timer seinen höchsten Wert erreicht hat, erfolgt ein Overflow und der Timer beginnt wieder bei 0 zu zählen. An diesen Overflow kann eine Funktion, die sog. Overflow-ISR, gebunden werden. Damit hat man die Möglichkeit, bestimmte Funktionalitäten in regelmäßigen Zeitabständen ausführen zu lassen. Wie groß diese Zeitabstände sind, wird ausschließlich von der Zählfrequenz des Timers und der Bitbreite des Timers (also dem höchsten Wert, den der Timer erreichen kann) bestimmt. Die Zählfrequenz wiederrum hängt von Taktfrequenz des Controllers und dem eingestellten Vorteiler ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: AT90S2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0 = (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
&lt;br /&gt;
  // Overflow Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;TOIE0);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /* Sonstige Aktionen */&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Overflow Interrupt Handler&lt;br /&gt;
wird aufgerufen, wenn TCNT0 von&lt;br /&gt;
255 auf 0 wechselt (256 Schritte),&lt;br /&gt;
d.h. ca. alle 2 ms&lt;br /&gt;
*/&lt;br /&gt;
#ifndef TIMER0_OVF_vect&lt;br /&gt;
// Für ältere WinAVR Versionen z.B. WinAVR-20071221 &lt;br /&gt;
#define TIMER0_OVF_vect TIMER0_OVF0_vect&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
ISR (TIMER0_OVF_vect)&lt;br /&gt;
{&lt;br /&gt;
  /* Interrupt Aktion alle&lt;br /&gt;
  (1000000/8)/256 Hz = 488,28125 Hz&lt;br /&gt;
  bzw.&lt;br /&gt;
  1/488,28125 s = 2,048 ms  &lt;br /&gt;
  */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man in einer ISR jeden beliebigen Code ausführen lassen. Allerdings sollte man sich an die Grundregeln der ISR Programmierung halten: Nur das tun was unbedingt notwendig ist. Eine ISR sollte (zeitlich gesehen) so kurz wie möglich aber so lang wie notwendig sein. Komplexe Ausgaben auf LCD oder gar auf die UART gehören nicht in eine ISR. Sie dauern einfach zu lange und blockieren so den Prozessor zu lange. Programme, die mehrere Dinge quasi gleichzeitig machen, werden so zu lange blockiert.&lt;br /&gt;
&lt;br /&gt;
Die Taktfrequenz, mit der eine ISR aufgerufen wird, erscheint nach obigen Ausführungen recht starr, aber sie lässt sich feiner anpassen. Eine Möglichkeit bestünde darin, den Zählerstand des Registers TCNT0 nach einem Overflow auf einen Wert größer als 0 zu setzen. Somit blieben bis zum nächsten Overflow weniger Zähltakte, was die Frequenz erhöhen würde.&lt;br /&gt;
&lt;br /&gt;
Modernere AVRs kennen allerdings einen eleganteren Weg zur Anpassung der Interrupt-Frequenz: den CTC Modus&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CTC&#039;&#039;&#039; Clear Timer on Compare Match (Auto Reload) ===&lt;br /&gt;
&lt;br /&gt;
Im CTC Modus des Timers ist es möglich, anstelle der durch die Hardware bedingten Obergrenze des Timers, eine andere Zahl zu benutzen, an der der Timer einen Interrupt auslöst und wieder bei 0 zu zählen anfängt. Neben dem Aktivieren des CTC Modus genügt es dazu, einfach den gewünschten Endwert in ein spezielles Register, das OCR0A, zu laden. Und natürlich hat auch die ISR dann einen anderen Namen. Weitere Anmerkungen und Erläuterungen finden sich im CTC-Kapitel der 16-Bit Timer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/* uC: Attiny2313 */&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Variablen für die Zeit&lt;br /&gt;
volatile unsigned int millisekunden;&lt;br /&gt;
volatile unsigned int sekunde;&lt;br /&gt;
volatile unsigned int minute;&lt;br /&gt;
volatile unsigned int stunde;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  // Timer 0 konfigurieren&lt;br /&gt;
  TCCR0A = (1&amp;lt;&amp;lt;WGM01); // CTC Modus&lt;br /&gt;
  TCCR0B |= (1&amp;lt;&amp;lt;CS01); // Prescaler 8&lt;br /&gt;
  // ((1000000/8)/1000) = 125&lt;br /&gt;
  OCR0A = 125-1;&lt;br /&gt;
&lt;br /&gt;
  // Compare Interrupt erlauben&lt;br /&gt;
  TIMSK |= (1&amp;lt;&amp;lt;OCIE0A);&lt;br /&gt;
&lt;br /&gt;
  // Global Interrupts aktivieren&lt;br /&gt;
  sei();&lt;br /&gt;
&lt;br /&gt;
  while(1)&lt;br /&gt;
  {&lt;br /&gt;
    /*Hier kann die aktuelle Zeit&lt;br /&gt;
      ausgeben werden*/&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Der Compare Interrupt Handler &lt;br /&gt;
wird aufgerufen, wenn &lt;br /&gt;
TCNT0 = OCR0A = 125-1 &lt;br /&gt;
ist (125 Schritte), d.h. genau alle 1 ms&lt;br /&gt;
*/&lt;br /&gt;
ISR (TIMER0_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
  millisekunden++;&lt;br /&gt;
  if(millisekunden == 1000)&lt;br /&gt;
  {&lt;br /&gt;
    sekunde++;&lt;br /&gt;
    millisekunden = 0;&lt;br /&gt;
    if(sekunde == 60)&lt;br /&gt;
    {&lt;br /&gt;
      minute++;&lt;br /&gt;
      sekunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(minute == 60)&lt;br /&gt;
    {&lt;br /&gt;
      stunde++;&lt;br /&gt;
      minute = 0;&lt;br /&gt;
    }&lt;br /&gt;
    if(stunde == 24)&lt;br /&gt;
    {&lt;br /&gt;
      stunde = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anm.: In diesem Beispiel ist es egal, ob TCCR0B absolut gesetzt wird (TCCR0B = (1&amp;lt;&amp;lt;CS01)) oder der Prescaler-Wert zum alten Inhalt hinzugeODERt wird (TCCR0B |= (1&amp;lt;&amp;lt;CS01)). Die anderen Bits in TCCR0B sind nach dem Reset 0 und sollen auch 0 bleiben. Wenn man sicher nur bestimmte Bits ändern will, ist das ODER (bzw. UND mit dem Kehrwert) sicherer. Näheres dazu im Artikel [[Bitmanipulation]].&lt;br /&gt;
&lt;br /&gt;
== 16-Bit Timer/Counter ==&lt;br /&gt;
&lt;br /&gt;
Viele AVR-Modelle besitzen außer den 8-Bit Timern auch 16-Bit Timer. Die 16-Bit Timer/Counter sind etwas komplexer aufgebaut als die 8-Bit Timer/Counter, bieten dafür aber auch viel mehr Möglichkeiten, als da sind:&lt;br /&gt;
&lt;br /&gt;
* Die [[PWM]]-Betriebsart zur Erzeugung eines pulsweitenmodulierten Ausgangssignals. &lt;br /&gt;
* Vergleichswert-Überprüfung mit Erzeugung eines Ausgangssignals (Output Compare Match).&lt;br /&gt;
* Einfangen eines Eingangssignals mit Speicherung des aktuellen Zählerwertes (Input Capturing), mit zuschaltbarer Rauschunterdrückung (Noise Filtering).&lt;br /&gt;
&lt;br /&gt;
Folgende Register sind dem Timer/Counter 1 zugeordnet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;A&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem und dem folgenden Register stellen wir ein, wie wir den Timer/Counter verwenden möchten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Register ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;COM1A1&#039;&#039;&#039;|| &#039;&#039;&#039;COM1A0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;PWM11&#039;&#039;&#039;|| &#039;&#039;&#039;PWM10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R|| R|| R/W|| R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COM1A1&#039;&#039;&#039;, &#039;&#039;&#039;COM1A0&#039;&#039;&#039; (&#039;&#039;&#039;Co&#039;&#039;&#039;mpare &#039;&#039;&#039;M&#039;&#039;&#039;atch Control Bits)&lt;br /&gt;
:Diese 2 Bits bestimmen die Aktion, welche am Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; ausgeführt werden soll, wenn der Wert des Datenregisters des Timer/Counter 1 den Wert des Vergleichsregisters erreicht, also ein so genannter Compare Match auftritt.&lt;br /&gt;
:Der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) muss mit dem Datenrichtungsregister als Ausgang konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Das Signal am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird invertiert (Toggle).&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 0 gesetzt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Der Output Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird auf 1 gesetzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart haben diese Bits eine andere Funktion.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! COM1A1 || COM1A0 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Output-Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; wird nicht angesteuert.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;nicht invertierende PWM&#039;&#039;.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Wird beim Hochzählen der Wert im Vergleichsregister erreicht, so wird der Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; auf 1 gesetzt.&lt;br /&gt;
Wird beim Herunterzählen der Wert im Vergleichsregister erreicht, so wird der Pin auf 0 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Man nennt dies &#039;&#039;invertierende PWM&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PWM11&#039;&#039;&#039;, &#039;&#039;&#039;PWM10&#039;&#039;&#039; (&#039;&#039;&#039;PWM&#039;&#039;&#039; Mode Select Bits)&lt;br /&gt;
:Mit diesen 2 Bits wird die PWM-Betriebsart des Timer/Counter 1 gesteuert.&lt;br /&gt;
* PWM10 PWM11 wurden umbenannt in WGM10 und WGM11&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! PWM11 || PWM10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Die PWM-Betriebsart ist nicht aktiviert. Timer/Counter 1 arbeitet als normaler Timer bzw. Zähler.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 8-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| 9-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| 10-Bit PWM Betriebsart aktivieren.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCCR1B&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister &#039;&#039;&#039;B&#039;&#039;&#039; Timer &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;ICNC1&#039;&#039;&#039;|| &#039;&#039;&#039;ICES1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;WGM13&#039;&#039;&#039;|| &#039;&#039;&#039;WGM12 (CTC1)&#039;&#039;&#039;|| &#039;&#039;&#039;CS12&#039;&#039;&#039;|| &#039;&#039;&#039;CS11&#039;&#039;&#039;|| &#039;&#039;&#039;CS10&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R/W || R/W || R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICNC1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;N&#039;&#039;&#039;oise &#039;&#039;&#039;C&#039;&#039;&#039;anceler (4 CKs) Timer/Counter 1&lt;br /&gt;
:oder auf Deutsch Rauschunterdrückung des Eingangssignals.&lt;br /&gt;
:Wenn dieses Bit gesetzt ist und mit dem Input Capture Signal gearbeitet wird so werden nach der Triggerung des Signals mit der entsprechenden Flanke (steigend oder fallend) am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; jeweils 4 Messungen mit der CPU-Frequenz des Eingangssignals abgefragt. Nur dann, wenn alle 4 Messungen den gleichen Zustand aufweisen gilt das Signal als erkannt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICES1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;E&#039;&#039;&#039;dge &#039;&#039;&#039;S&#039;&#039;&#039;elect Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Mit diesem Bit wird bestimmt, ob die steigende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=1) oder fallende (&#039;&#039;&#039;ICES1&#039;&#039;&#039;=0) Flanke zur Auswertung des Input Capture Signals an Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; heran gezogen wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CTC1&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lear &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ounter on Compare Match Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, so wird nach einer Übereinstimmung des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; mit dem Vergleichswert in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; auf 0 gesetzt.&lt;br /&gt;
:Da die Übereinstimmung im Takt nach dem Vergleich behandelt wird, ergibt sich je nach eingestelltem Vorteiler ein etwas anderes Zählverhalten:&lt;br /&gt;
:Wenn der Vorteiler auf 1 gestellt, und C der voreingestellte Vergleichswert ist, dann nimmt das Datenregister, im CPU-Takt betrachtet, folgende Werte an:&lt;br /&gt;
:... | C-2 | C-1 | C | 0 | 1 |...&lt;br /&gt;
:Wenn der Vorteiler z.&amp;amp;nbsp;B. auf 8 eingestellt ist, dann nimmt das Datenregister folgende Werte an:&lt;br /&gt;
:... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0, 0, 0, 0, 0, 0, 0 |...&lt;br /&gt;
:In der PWM-Betriebsart hat dieses Bit keine Funktion.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CS12&#039;&#039;&#039;, &#039;&#039;&#039;CS11&#039;&#039;&#039;, &#039;&#039;&#039;CS10&#039;&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;lock &#039;&#039;&#039;S&#039;&#039;&#039;elect Bits)&lt;br /&gt;
:Diese 3 Bits bestimmen die Quelle für den Timer/Counter:&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! CS12 || CS11 || CS10 || Resultat&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Stopp, Der Timer/Counter wird angehalten.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 8&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 64&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| CPU-Takt / 256&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| CPU-Takt / 1024&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Externer Pin T1, fallende Flanke&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Externer Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Wenn als Quelle der externe Pin T1 verwendet wird, so wird ein Flankenwechsel auch erkannt, wenn der Pin T1 als Ausgang geschaltet ist.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/&#039;&#039;&#039;C&#039;&#039;&#039;ou&#039;&#039;&#039;nt&#039;&#039;&#039;er Daten Register Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
Dieses ist als 16-Bit Aufwärtszähler mit Schreib- und Lesezugriff realisiert. Wenn der Zähler den Wert 65535 erreicht hat, beginnt er beim nächsten Zyklus wieder bei 0.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0 ||&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In der PWM-Betriebsart wird das Register als Auf/Ab-Zähler verwendet, d.h. der Wert steigt zuerst von 0, bis er den Überlauf von 65535 auf 0 erreicht hat. Dann zählt das Register rückwärts wiederum bis 0.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;OCR1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt.. Zudem muss zuerst &#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;TCNT1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;TCNT1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;OCR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;OCR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| R/W|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Wert im Output Compare Register wird ständig mit dem aktuellen Wert im Datenregister TCNT1H/TCNT1L verglichen. Stimmen die beiden Werte überein, so wird ein sogenannter Output Compare Match ausgelöst. Die entsprechenden Aktionen werden über die Timer/Counter 1 Control und Status Register eingestellt.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf &#039;&#039;&#039;TCNT1&#039;&#039;&#039; oder &#039;&#039;&#039;ICR1&#039;&#039;&#039; zugegriffen wird.&lt;br /&gt;
Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt. Zudem muss zuerst &#039;&#039;&#039;OCR1L&#039;&#039;&#039; und erst danach &#039;&#039;&#039;OCR1H&#039;&#039;&#039; ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrupts gesperrt werden. Dann muss zuerst das &#039;&#039;&#039;OCR1H&#039;&#039;&#039;-Register und erst danach das &#039;&#039;&#039;OCR1L&#039;&#039;&#039;-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
| Timer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;R&#039;&#039;&#039;egister Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7|| 6|| 5|| 4|| 3|| 2|| 1|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;MSB&#039;&#039;&#039;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &amp;amp;nbsp;|| &#039;&#039;&#039;LSB&#039;&#039;&#039;|| &#039;&#039;&#039;ICR1L&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R|| R|| R|| R|| R|| R|| R|| R|| &amp;amp;nbsp;&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Input Capture Register ist ein 16-Bit Register mit Lesezugriff. Es kann im ATmega8 nicht beschrieben werden. Bei anderen ATmega Modellen kann es als TOP Value für bestimmte PWM Modes verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wenn am Input Capture Pin &#039;&#039;&#039;ICP&#039;&#039;&#039; die gemäß Einstellungen im &#039;&#039;&#039;TCCR1B&#039;&#039;&#039; definierte Flanke erkannt wird, so wird der aktuelle Inhalt des Datenregisters &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; sofort in dieses Register kopiert und das Input Capture Flag &#039;&#039;&#039;ICF1&#039;&#039;&#039; im Timer Interrupt Flag Register &#039;&#039;&#039;TIFR&#039;&#039;&#039; gesetzt.&lt;br /&gt;
&lt;br /&gt;
{{Warnung|Wie bereits oben erwähnt, müssen vor dem Zugriff auf dieses Register alle Interrupts gesperrt werden. Zudem müssen Low- und Highbyte des Registers in der richtigen Reihenfolge bearbeitet werden:&lt;br /&gt;
;Lesen&amp;amp;#58;: &#039;&#039;&#039;ICR1L&#039;&#039;&#039; &amp;amp;rarr; &#039;&#039;&#039;ICR1H&#039;&#039;&#039;&lt;br /&gt;
Bei Verwendung des Compilers wird der Zugriff in der korrekten Reihenfolge ausgeführt, wenn man das 16-Bit register ICR1 verwendet anstatt zwei Zugriffe auf 8-Bit Register.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Die PWM-Betriebsart ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Timer/Counter 1 in der PWM-Betriebsart betrieben wird, so bilden das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; und das Vergleichsregister &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; einen 8-, 9- oder 10-Bit, frei laufenden PWM-Modulator, welcher als PWM-Signal am &#039;&#039;&#039;OC1&#039;&#039;&#039;-Pin (&#039;&#039;&#039;PB3&#039;&#039;&#039; beim 2313) abgegriffen werden kann. Das Datenregister &#039;&#039;&#039;TCNT1H&#039;&#039;&#039;/&#039;&#039;&#039;TCNT1L&#039;&#039;&#039; wird dabei als Auf-/Ab-Zähler betrieben, welcher von 0 an aufwärts zählt bis zur Obergrenze und danach wieder zurück auf 0.&lt;br /&gt;
Die Obergrenze ergibt sich daraus, ob 8-, 9- oder 10-Bit PWM verwendet wird, und zwar gemäß folgender Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Auflösung || Obergrenze || Frequenz&lt;br /&gt;
|- &lt;br /&gt;
| 8 || 255 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 510&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 511 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 1022&lt;br /&gt;
|- &lt;br /&gt;
|10 || 1023 || f&amp;lt;sub&amp;gt;TC1&amp;lt;/sub&amp;gt; / 2046&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn nun der Zählerwert im Datenregister den in &#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039; gespeicherten Wert erreicht, wird der Ausgabepin &#039;&#039;&#039;OC1&#039;&#039;&#039; gesetzt bzw. gelöscht, je nach Einstellung von &#039;&#039;&#039;COM1A1&#039;&#039;&#039; und &#039;&#039;&#039;COM1A0&#039;&#039;&#039; im &#039;&#039;&#039;TCCR1A&#039;&#039;&#039;-Register.&lt;br /&gt;
&lt;br /&gt;
Ich habe versucht, die entsprechenden Signale in der folgenden Grafik zusammenzufassen&lt;br /&gt;
&lt;br /&gt;
[[Image:PWM Theorie 3.gif]] [[Image:PWM Theorie 4.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Vergleichswert-Überprüfung (Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Hier wird in ein spezielles Vergleichswertregister (&#039;&#039;&#039;OCR1H&#039;&#039;&#039;/&#039;&#039;&#039;OCR1L&#039;&#039;&#039;) ein Wert eingeschrieben, welcher ständig mit dem aktuellen Zählerwert verglichen wird.&lt;br /&gt;
Erreicht der Zähler den in diesem Register eingetragenen Wert, so kann ein Signal (0 oder 1) am Pin &#039;&#039;&#039;OC1&#039;&#039;&#039; erzeugt und/oder ein Interrupt ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Zu erwähnen ist in dem Zusammenhang, dass das zur Compare-Einheit gehörende Interrupt-Flag erst beim auf die Übereinstimmung der Werte folgenden Timertakt gesetzt wird. Das ist v.a. deshalb wichtig, da es sonst bei OCRnx = 0 einen undefinierten Zustand gäbe.&lt;br /&gt;
&lt;br /&gt;
Möchte man ein Compare-Ereignis 100 Takte nach dem Timerüberlauf auslösen, dann muss in das betreffende Compare-Register eine 99 geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== CTC-Betriebsart (Clear Timer on Compare Match) ===&lt;br /&gt;
&lt;br /&gt;
Das sogenannte &#039;&#039;&#039;Compare Match-Ereignis&#039;&#039;&#039; kann auch dazu verwendet werden, um den Timer automatisch zurückzusetzen (d.h. das TCNT-Register wird zu Null gesetzt). Diese Betriebsart heißt &amp;quot;Clear Timer on Compare Match&amp;quot;, also auf deutsch &amp;quot;Lösche Timer bei Vergleichsübereinstimmung&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktionalität ist es möglich, sehr präzise Taktsignale zu erzeugen, ohne dabei programmtechnisch eingreifen zu müssen. &#039;&#039;&#039;Diese Funktion ersetzt das bei anderen Controllern und Timern ohne Compare-Einheit erforderliche Timer Reload&#039;&#039;&#039; (also das Nachladen des Zählregisters mit &amp;quot;Überlaufwert minus gewünschte Taktzahl bis zum Überlauf&amp;quot;, v.a. verbreitet bei 8051er-µCs).&lt;br /&gt;
&lt;br /&gt;
Zur Erzeugung eines Taktes per Hardware muss lediglich eine der CTC-Betriebsarten ausgewählt werden und einer der OCnx-Pins so gesetzt werden, dass er bei Auftreten des Compare Match getoggelt wird (über die COM-Bits).&lt;br /&gt;
&lt;br /&gt;
Die Frequenz des Taktes am entsprechenden Ausgang ist dann:&lt;br /&gt;
&amp;lt;math&amp;gt;f_\text{OC} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot \left( \text{OCRnx} + 1 \right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Umgeformt gilt für OCRnx:&lt;br /&gt;
&amp;lt;math&amp;gt;\text{OCRnx} = \frac{f_\text{CPU}}{\text{Prescaler} \cdot f_\text{OC}} - 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Betriebsart macht das Timer-Nachladen, das bei AVRs, die ja im Unterschied zu 8051-Derivaten keine Auto-Reload-Funktion haben, immer mit Ungenauigkeiten und programmtechnischen Klimmzügen verbunden ist, überflüssig. Ist das OCRnx einmal gesetzt, dann wird das Signal am Ausgang kontinuierlich ausgegeben, ohne dass die Anwendersoftware eingreifen muss (es sei denn, die Frequenz soll geändert werden).&lt;br /&gt;
&lt;br /&gt;
Beim ATmega8 hat der 8-Bit-Timer 0 keine Compare-Einheit, so dass dort CTC und auch sonstige automatische Vergleichsoperationen nicht möglich sind. Bei Timer 1 und Timer 2 ist das jedoch möglich. Bei den neueren AVRs besitzen i.d.R. &#039;&#039;alle&#039;&#039; Timer eine oder mehrere Compare-Einheiten, so dass dort eine größere Flexibilität gegeben ist.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zu den PWM-Betriebsarten wird die Registeraktualisierung bei CTC nicht automatisch synchronisiert. Schreibt man einen neuen Compare-Wert, dann wird dieser sofort übernommen, was zu Fehlfunktionen führen kann, wenn der neue Compare-Wert höher ist, als der aktuelle Stand von TCNTnx. In den PWM-Betriebsarten wird hingegen der TOP-Wert synchron bei Erreichen von TOP oder BOTTOM aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Einfangen eines Eingangssignals (Input Capturing) ===&lt;br /&gt;
&lt;br /&gt;
Bei dieser Betriebsart wird an den Input Capturing Pin (ICP) des Controllers eine Signalquelle angeschlossen.&lt;br /&gt;
Nun kann je nach Konfiguration entweder ein Signalwechsel von 0 nach 1 (steigende Flanke) oder von 1 nach 0 (fallende Flanke) erkannt werden und der zu diesem Zeitpunkt aktuelle Zählerstand in ein spezielles Register abgelegt werden. Gleichzeitig kann auch ein entsprechender Interrupt ausgelöst werden.&lt;br /&gt;
Wenn die Signalquelle ein starkes Rauschen beinhaltet, kann die Rauschunterdrückung eingeschaltet werden. Dann wird beim Erkennen der konfigurierten Flanke über 4 Taktzyklen das Signal überwacht und nur dann, wenn alle 4 Messungen gleich sind, wird die entsprechende Aktion ausgelöst.&lt;br /&gt;
&lt;br /&gt;
== Gemeinsame Register ==&lt;br /&gt;
&lt;br /&gt;
Verschiedene Register beinhalten Zustände und Einstellungen, welche sowohl&lt;br /&gt;
für den 8-Bit, als auch für den 16-Bit Timer/Counter in ein und demselben&lt;br /&gt;
Register zu finden sind.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIMSK&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;M&#039;&#039;&#039;a&#039;&#039;&#039;sk&#039;&#039;&#039;&lt;br /&gt;
Register&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOIE1&#039;&#039;&#039;|| &#039;&#039;&#039;OCIE1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TICIE&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOIE0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R/W || R || R/W || R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 1 ein Timer Overflow 1 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCIE1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare Match &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Beim Timer/Counter 1 kann zusätzlich zum Überlauf ein Vergleichswert definiert werden.&lt;br /&gt;
&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird beim Erreichen des Vergleichswertes ein Compare Match Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TICIE&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird ein Capture Event Interrupt ausgelöst, wenn ein entsprechendes Signalereignis am Pin PD6(ICP) auftritt. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein, wenn auch ein entsprechender Interrupt ausgelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOIE0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;E&#039;&#039;&#039;nable Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird bei einem Überlauf des Datenregisters des Timer/Counter 0 ein Timer Overflow 0 Interrupt ausgelöst. Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;TIFR&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;F&#039;&#039;&#039;lag &#039;&#039;&#039;R&#039;&#039;&#039;egister&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;TOV1&#039;&#039;&#039;|| &#039;&#039;&#039;OCF1A&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;ICF1&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;TOV0&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W|| R/W|| R|| R|| R/W|| R|| R/W|| R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV1&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 1 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:In der PWM-Betriebsart wird das Bit gesetzt, wenn die Zählrichtung von auf- zu abwärts und umgekehrt geändert wird (Zählerwert = 0).&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OCF1A&#039;&#039;&#039; (&#039;&#039;&#039;O&#039;&#039;&#039;utput &#039;&#039;&#039;C&#039;&#039;&#039;ompare &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn der aktuelle Wert des Datenregisters von Timer/Counter 1 mit demjenigen im Vergleichsregister &#039;&#039;&#039;OCR1&#039;&#039;&#039; übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICF1&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nput &#039;&#039;&#039;C&#039;&#039;&#039;apture &#039;&#039;&#039;F&#039;&#039;&#039;lag Timer/Counter &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn ein Capture-Ereignis aufgetreten ist, welches anzeigt, dass der Wert des Datenregisters des  Timer/Counter 1 in das Input Capture Register ICR1 übertragen wurde.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TOV0&#039;&#039;&#039; (&#039;&#039;&#039;T&#039;&#039;&#039;imer/Counter &#039;&#039;&#039;O&#039;&#039;&#039;verflow Flag Timer/Counter &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird vom Controller gesetzt, wenn beim Timer 0 ein Überlauf des Datenregisters stattfindet.&lt;br /&gt;
&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn der zugehörige Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden, indem eine logische 1 (!) in das entsprechende Bit geschrieben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial]]&lt;br /&gt;
[[Kategorie:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56547</id>
		<title>Receiver-Mainboard Plattform Philips PNX8950</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56547"/>
		<updated>2011-04-15T04:56:30Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Fernbedienung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Links =&lt;br /&gt;
Hier nur die wichtigsten Links (Hauptdiskussionsthread und andere Wikis), den Rest unter &amp;quot;weitergehende Infos im Netz&amp;quot;&lt;br /&gt;
* Diskussionsthread [http://www.mikrocontroller.net/topic/210759 Pollin - Receiver-Mainboard mit Twin DVB-T/C Tuner, NXP PNX8950EH]&lt;br /&gt;
&lt;br /&gt;
* Bedienungsanleitung [http://www1.medion.de/downloads/download.pl?lang=de&amp;amp;filename=bda_md29052_de.pdf&amp;amp;id=7946&amp;amp;type=anleitungen MEDION LIFE S27200 - MD 29052]&lt;br /&gt;
&lt;br /&gt;
= Wichtiger Hinweis =&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:red;color:white;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vor dem Arbeiten an der Platine oder Öffnen des Gehäuses ist der Netzstecker (230V) zu ziehen. Denn: Der Kühlkörper (des Netzteils) führt eine Spannung von 115V!!!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Betriebssysteme =&lt;br /&gt;
&lt;br /&gt;
== Bestehenden Inhalt aus dem Flash auslesen ==&lt;br /&gt;
&lt;br /&gt;
Von User AgentData wird freundlicherweise die [http://www.mikrocontroller.net/attachment/106071/complete_nand_layout.rar Erklärung sowie der Source für den Dumper] zur Verfügung gestellt. Im Ergebnis bekommt man dafür die Original Firmware-Dateien und kann so den Lieferzustand jederzeit wieder herstellen. Der für den direkten Zugriff auf das NAND benötigte Code befindet sich übrigens in der Datei /Windows/TmToolbox.dll (read/write/erase). &lt;br /&gt;
&lt;br /&gt;
Damit dürfte der Grundstein für jegliche Weiterentwicklung gelegt sein.&lt;br /&gt;
&lt;br /&gt;
== Neues Firmware-Image installieren ==&lt;br /&gt;
&lt;br /&gt;
# Auf einen mit FAT32 formatierten USB-Stick folgende Datein kopieren: &lt;br /&gt;
:* flashing.txt&lt;br /&gt;
:* phStbRootApp_256M_0_t.mi&lt;br /&gt;
:* phStbRootApp_256M_1_t.mi&lt;br /&gt;
:* WinCe1.nb0 &lt;br /&gt;
:Die Dateien befinden sich z.B. im Ordner WCE1 der Datei swu.zip&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf ON (DIL Schalter auf Pollin Board)&lt;br /&gt;
# USB-Stick am USB-Port auf der Geräterückseite des Receivers anschließen&lt;br /&gt;
# Receiver einschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# Am Receiver auf Power drücken. Bei Fehlermeldung auf Bildschirm: Anderen USB Stick (oder per SD-Karte + Reader) probieren und/oder Receiver per Fernbedienung einschalten. Wenn alles funktioniert, erscheint eine Anzeige auf dem Bildschirm, daß das Update durchgeführt wird und man den Receiver nicht ausschalten soll, bis das Update eingespielt ist. Falls irgend etwas falsch läuft, startet das Windows CE und zeigt den Telegen-Desktop. Dann nochmal alles überprüfen.&lt;br /&gt;
# Auf dem roten, 4-stelligen Frontdisplay der Box wird nun für die insgesamt 4 Flash-Vorgänge jeweils der Fortschritt in Prozent angezeigt. Achtung: Es werden insgesamt 4 Dateien einzeln geflasht, die Prozentzahl klettert also vier Mal bis auf 100%.&lt;br /&gt;
# Nach kurzer Zeit (1 oder 2 Minuten) erscheint eine Meldung, dass das Software-Update erfolgreich war&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf OFF setzen. &lt;br /&gt;
&lt;br /&gt;
:Nun wird die Box beim Einschalten auf dem TV einen hin- und herwandernden roten Balken zeigen. Die weiteren Programmpunkte sind selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
== WindowsCE ==&lt;br /&gt;
&lt;br /&gt;
*Windows CE 5.0&lt;br /&gt;
*Windows CE Kernel for MIPS (Built on Mar 29 2005 at 14:00:54)&lt;br /&gt;
*Telegent Kernel V0.9.3.16 (Built on Sep  4 2006 at 22:23:55)&lt;br /&gt;
&lt;br /&gt;
User AgentData hat das im Auslieferungszustand auf dem Gerät befindliche WindowsCE ausgelesen (siehe hierzu [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Bestehenden_Inhalt_aus_dem_Flash_auslesen Inhalt aus dem Flash auslesen]). Dadurch kann beispielsweise eine [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#MoreTv_als_Medion_gelabelt mit MoreTV &amp;quot;aktualisierte&amp;quot;] Box nun auch wieder in den Auslieferungszustand zurückversetzt werden. Die [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Update-Prozedur] ist identisch.&lt;br /&gt;
&lt;br /&gt;
== MoreTv als Medion gelabelt ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ein großes Danke gilt den Benutzern Fritz und M. W.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete Soft- und Hardware&lt;br /&gt;
# Festplatte SATA-Anschluß, 160GB oder mehr (im Original 250GB), Formatierung s.u.&lt;br /&gt;
# USB-Stick, FAT32 formatiert&lt;br /&gt;
# Software: [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip dieses] ZIP-Archiv ([https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdate, SWU_Finland_V1.0.3.454)]&lt;br /&gt;
&lt;br /&gt;
Ein Hinweis&lt;br /&gt;
:Beim Start der Box ohne Modifikation wird WindowsCE gestartet und kann mittels USB-Maus und Tastatur bedient werden. Nach erfolgtem Flash-Vorgang ist dies nicht mehr möglich.&lt;br /&gt;
&lt;br /&gt;
Hier nun die Kurzanleitung zum &#039;Tuning&#039;&lt;br /&gt;
* USB-Stick vorbereiten&lt;br /&gt;
:Den Inhalt des Ordner WCE1, aus der Datei [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip swu.zip] (SWU_Finland_V1.0.3.454), auf einen formatierten USB-Stick (FAT32) kopieren und wie [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren hier] beschrieben installieren.&lt;br /&gt;
&lt;br /&gt;
* Festplatte vorbereiten&lt;br /&gt;
:# Auf der einzubauenden Festplatte eine erweiterte Partition mit zwei logischen Laufwerken mit FAT32-Dateisystem anlegen. Mit dem kostenlosen Windows Programm &amp;quot;[http://www.easeus.com/download.htm EASEUS Partition Master 8.0.1 Home Edition]&amp;quot; lassen sich die Partitionen leicht anlegen, unter Linux ist FAT32 im Programm fdisk übrigens der Typ &#039;b&#039;. &lt;br /&gt;
:# Auf das erste logische Laufwerk (minimum 2GB, im Original 19,53GB, das entspricht exakt 20000MB) den gesamten Inhalt des zuvor ausgepackten [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdates] kopieren.&lt;br /&gt;
:# Die Ordner moreTVn und moreTVn.INIT zu moreTV und moreTV.INIT umbenenen.&lt;br /&gt;
:# Das zweite logische Laufwerk (je größer desto besser, im Original 213,4GB) bleibt leer.&lt;br /&gt;
&lt;br /&gt;
: Die fehlenden Ordner auf der Festplatte werden beim ersten Starten der Box automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
: ACHTUNG: Die USB-Anschlüsse werden nach der Installation von der MoreTV-Software nicht mehr unterstützt. Eine Ausnahme bildet einzig und alleine das [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Flash-Update].&lt;br /&gt;
:USB-Speichersticks und Externe-Festplatten werden zwar noch erkannt und als USBDisk in das Dateisystem eingebunden können aber über die MoreTV-Software nicht angesprochen werden. USB-Keyboard und -Maus werden unter MoreTV nicht mehr erkannt und können auch nicht benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zeitzonen-Einstellung ===&lt;br /&gt;
&lt;br /&gt;
Eigentlich sollte sich die Uhrzeit bei richtigem Empfang automatisch einstellen.&lt;br /&gt;
Dies ist nicht immer der Fall, der folgende Trick hat bei DVB-C geholfen.&lt;br /&gt;
&lt;br /&gt;
==== Methode 1: Werksreset/Ländereinstellung ====&lt;br /&gt;
Bei der Ländereinstellung muß Finnland ausgewählt und als PLZ 00100 (Helsinki) eingegeben werden. Dazu  Setup-&amp;gt;Sonstiges-&amp;gt;Werkseinstellung  aufrufen. Natürlich sind dann alle Einstellungen (Programme) neu einzustellen.&lt;br /&gt;
&lt;br /&gt;
Damit wird die Zeitzone auf Finnland umgestellt +1 Std. Die Finnen haben&lt;br /&gt;
zwar auch Sommerzeit, da die Sommerzeitumstellung aber ja nicht&lt;br /&gt;
funktioniert passt es dann. Das muß allerdings zum Ende der Sommerzeit&lt;br /&gt;
wieder zurückgestellt werden, mit den gleichen Unannehmlichkeiten.&lt;br /&gt;
&lt;br /&gt;
==== Methode 2: Datenbank ändern ====&lt;br /&gt;
&lt;br /&gt;
Alternativ lässt sich die Ländereinstellung auf Dateiebene ändern, hierbei handelt es sich jedoch leider um ein binäres Datenbankformat. Die Konfiguration befindet sich in der Datei /HardDisk/moreTV.persistent/tbConfigurations.xbc welche z.B. über FTP erreichbar ist. Die Datei lässt sich z.B. mit einem Hex-Editor wie GHex2 unter Linux öffnen, es sollte eine Struktur mit Wertenamen und deren Variabeln erkennbar sein. Recht im Anfang befindet sich eine Einstellung &amp;quot;COUNTRY_ID&amp;quot; - nach vier kleinen Werten befindet sich (hier Offset 0x32) eine ASCII-Zahl, z.B. 1 (0x31) für Deutschland(?). In meinem Fall brachte eine Änderung auf 2 (0x32) mit anschließendem Neustart den gewünschten Effekt für die Zeiteinstellung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Kann jemand mit Methode 1 bestätigen, dass 2==Finnland ist?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Die CPU wird pauschal von Linux unterstützt.&lt;br /&gt;
&lt;br /&gt;
Der Kernel ist hier erhältlich:&lt;br /&gt;
*Einstiegsseite: http://www.linux-mips.org/wiki/Main_Page &lt;br /&gt;
*Download: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/&lt;br /&gt;
&lt;br /&gt;
== Interessant zum weiteren Testen ==&lt;br /&gt;
&lt;br /&gt;
*elecard firmware&lt;br /&gt;
*MontaVista Linux Professional Edition&lt;br /&gt;
&lt;br /&gt;
= Unterstützte Codecs =&lt;br /&gt;
&lt;br /&gt;
Quelle: [http://www.synnex.com.tw/oem/mic_link/seminar%20download/y70303.pdf]&lt;br /&gt;
&lt;br /&gt;
*dual: SD MPEG-1/2&lt;br /&gt;
*single: SD MPEG-4, WM9, H264,DivX; HD MPEG-2 (1080i), WM9(720p)&lt;br /&gt;
*Audio: dual stereo (2.0 + 2.0),MPEG-1, Dolby AC-3&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen = &lt;br /&gt;
&lt;br /&gt;
===Platinen===&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NzQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_T_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-T Tuner (390 052, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NjQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_C_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-C Tuner (390 053, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/MzQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/RS232_Einbaubuchse.html Pollin : RS232-Einbaubuchse (721 856, 0,25€)], zur Befestigung werden noch zwei passende Sechskant-Schraubbolzen benötigt&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NDQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/USB_2_0_Einbaubuchse.html Pollin : USB 2.0-Einbaubuchse (721 855, 0,25€)]&lt;br /&gt;
&lt;br /&gt;
===Zubehör===&lt;br /&gt;
:Netzteil, Gehäuse, Fernbedienung:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NjUwOTQ2OTk-/Stromversorgung/Netzgeraete/Festspannungs_Netzgeraete/Schaltnetzteil_DELTA_EADP_50DF_12_V_4_16_A.html Pollin : Schaltnetzteil DELTA EADP-50DF, 12 V-/4,16 A (350 943 , 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDg4OTM1OTk-/Bauelemente_Bauteile/Gehaeuse/Stahlblech_Gehaeuse_mit_Frontblende.html Pollin : Stahlblech-Gehäuse mit Frontblende (460 119, 2,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/Nzc5OTczOTk-/SAT_Antennentechnik/Satelliten_Technik/Fernbedienungen/Infrarot_Fernbedienung_RCX155.html Pollin : Infrarot-Fernbedienung RCX155 (620 022, 1,95€)]&lt;br /&gt;
:SATA:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NTQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Kabel.html Pollin : SATA-Kabel, 2x SATA-Stecker, 0,35m (721 854, 0,50€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDM0OTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/HDD_Stromversorgungskabel.html Pollin : PC-Stromversorgungskabel, 2x 5,25&amp;quot;- Stecker, 2x HDD-Stecker, 70mm (720 569, 0,20€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDI1ODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter (721 475, 0,85)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTUwOTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter, mit Rastnase! (720 948, 0,55)]&lt;br /&gt;
:WLAN:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDY5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_miniPCI_Karte_XG_603.html Pollin : WLAN miniPCI-Karte XG-603 (711 035, 3,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MjUwOTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antennen_Adapterkabel.html Pollin : WLAN-Antennen-Adapterkabel (710 947, 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTM5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne 4 dBi. Länge 140 mm Reverse-SMA (710 068, 1,95€)] oder alternativ &lt;br /&gt;
*[http://www.pollin.de/shop/dt/NzY3ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_Antenne_FSC_5_dBi_RP_SMA.html Pollin : WLAN-Antenne, mit Standfuß, Reverse-SMA, 5 dBi (711 232, 3,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDE0OTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne, Reverse-SMA, 5 dBi (710 585, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/ODI5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antenne.html Pollin : WLAN-Antenne, mit magnetischem Standfuß, Reverse-SMA, 7 dBi (711 071, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.reichelt.de/?ACTION=3;ARTICLE=61136;PROVID=2402 Reichelt: LAN DN-70100, WLAN-Antenne, Reverse-SMA, 5 dBi (LAN DN-70100, 3,65€)]&lt;br /&gt;
 &lt;br /&gt;
:DVB-T und DVB-C:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MzQ3ODI0OTk-/SAT_Antennentechnik/Kabel/Antennen_Anschlusskabel_75_150_mm.html Pollin : Antennen-Anschlusskabel 75 Ω, 150 mm (571 256, 0,15€)] zum Durchschleifen des DVB-Signals&lt;br /&gt;
:DVB-T:&lt;br /&gt;
*Bitte beachten: Passive antennen sind grundsätzlich nicht zu empfehlen. Zumindest nicht im Zimmer. Ausser man wohnt am Sender :D&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTc4ODI0OTk-/SAT_Antennentechnik/DVB_T_DVB_C/Antennen/DVB_T_Antenne_QOSMIO.html Pollin : DVB-T Antenne QOSMIO, passiv (571 128, 2,95€)]&lt;br /&gt;
:DVB-S:&lt;br /&gt;
*[http://www.elsner-computer.de/product_info.php?info=p430032_Dream-Multimedia-Tuner-7020S---7020Si---DVB-S.html Tuner 7020S Elsner Shop 39€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!!]&lt;br /&gt;
*[http://www.hm-sat-shop.de/receiver-digital-dreambox/sat-tuner-fuer-dreambox-7020-philips.html HM Sat Shop:DVB-S Tuner zum Sat-Umbau, 49€.] &lt;br /&gt;
*[http://www.devilcards.de/Ersatzteile-Dreambox/Dream-Multimedia-Tuner-7020S-7020Si-DVB-S::225.html DevilCards Dream Multimedia Tuner 7020S DVB-S 37€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!! ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Entweder zwei bestücken oder exklusiv einen. Mischbetrieb scheinbar nicht möglich!&lt;br /&gt;
&lt;br /&gt;
*...außerdem Plexiglas/Kunststoff-Zuschnitt (13cm x 15cm) als HD-Träger sowie diverse Schrauben aus der PC-Grabbelkiste (7* Gehäuse, 1* Front-USB, 4* Schaltnetzteil, 6* Mainboard, 4* HD-Träger, 4* HD, 3* Frontpanel)&lt;br /&gt;
*zu guter letzt wäre ein passender [http://www.mikrocontroller.net/attachment/106125/box.jpg Berührungsschutz für das Schaltnetzteil] noch eine sinnvolle Maßnahme zur Vermeidung von Personenschäden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== technische Daten ==&lt;br /&gt;
:Hauptprozessor PNX-8950 CPU&lt;br /&gt;
:Flash-ROM 64 MB&lt;br /&gt;
:RAM-Speicher 256 MB&lt;br /&gt;
:Festplatte 250 GB (bei original Medion-Gerät) &lt;br /&gt;
*Conditional Access Interface&lt;br /&gt;
:1 Steckplatz (PCMCIA, DVB Common Interface Standard)&lt;br /&gt;
:1 Steckplatz (CONAX und andere)&lt;br /&gt;
*A/V &amp;amp; Data In/Out-Anschlüsse extern&lt;br /&gt;
:Video CVBS/S-VIDEO-Ausgang (PAL)&lt;br /&gt;
:TV-SCART (PAL/RGB-Ausgang)&lt;br /&gt;
:VCR-SCART&lt;br /&gt;
:Audio L/R-Ausgang&lt;br /&gt;
:Optical S/PDIF Digital Audio- oder Dolby AC-3 Bitstream-Ausgang&lt;br /&gt;
:serielle Schnittstelle (9-poliger D-Sub Type)&lt;br /&gt;
:RJ 45 (LAN 10/100MBit)&lt;br /&gt;
:WLAN-Antennensockel (Reverse-SMA Buchse)&lt;br /&gt;
:2x USB (1 Vorder-/Rückseite)&lt;br /&gt;
:2x Tuner (Philips DVB-T Tuner TU1216L/IVP über Input/Loop-Through-Connector F-Type, IEC 169-2, Buchse/Stecker)&lt;br /&gt;
*Ports/Anschlüsse intern&lt;br /&gt;
:3x USB 2.0 (einer davon über Kabel mit Front-USB verbunden)&lt;br /&gt;
:2x SATA-150&lt;br /&gt;
:RS232 (Console)&lt;br /&gt;
:miniPCI für WLAN-Karte XG-603 (über Verbindungskabel mit U.FL-Stecker an rückwärtige Reverse-SMA Buchse)&lt;br /&gt;
*Tuner &amp;amp; Service Decoder&lt;br /&gt;
:2 Philips DVB-T Tuner TU1216L/IVP&lt;br /&gt;
:RF-Anschlussimpedanz 75 Ohm&lt;br /&gt;
:Input/Loop-through-Connector F-Type, IEC 600169-2/24 (IEC-F-Anschluss)&lt;br /&gt;
:Frequenzbereich 45 ~ 860 MHz&lt;br /&gt;
:Signalpegel Eingang min. 74 dBm&lt;br /&gt;
:Modulation QPSK, 16 und 64 QAM&lt;br /&gt;
*MPEG Transport-Stream A/V Decoding&lt;br /&gt;
:Transport-Stream ISO/IEC 13818-1 MPEG-2&lt;br /&gt;
:Profile-Level 2x MPEG-2 MP@ML (PIP)&lt;br /&gt;
:Aspect Ratio 4:3, 16:9, Pan &amp;amp; Scan, Letterbox&lt;br /&gt;
:Videoauflösung 720x576&lt;br /&gt;
:Audio-Decoding MPEG-1 Layer 1, 2, 3&lt;br /&gt;
*Stromversorgung&lt;br /&gt;
:Eingangsspannung 100~240V AC, 1,5 A, 50/60 Hz&lt;br /&gt;
:Stromaufnahme ohne HDD max. 2 A&lt;br /&gt;
:Energieverbrauch im Betrieb Max. 50 W, Standby: 12 W&lt;br /&gt;
:Schutz durch Interne Sicherung (auf Schaltnetzteil eingelötet)&lt;br /&gt;
:HDD-Stromversorgung on Board&lt;br /&gt;
*Physische Spezifikationen&lt;br /&gt;
:Größe/Abmessungen (BxHxT) 440 x 265 x 70 mm&lt;br /&gt;
:Betriebstemperatur +5°C - +40°C&lt;br /&gt;
&lt;br /&gt;
== Jumper ==&lt;br /&gt;
* J1: JTAG (Header 2x5, nicht bestückt)&lt;br /&gt;
* J2: RS-232 Console (3:RX=RS232.3, 5:TX=RS232.2, 9:GND=RS232.5, Header 2x5)&lt;br /&gt;
* J4: (Header 2*10)&lt;br /&gt;
* J6: (Header 2x1, neben HD-Power)&lt;br /&gt;
* J8: (Header 2x3 nicht bestückt)&lt;br /&gt;
* J27: Massepunkt(1:GND, 2:GND, Header 2*1, zwischen SCART und Audio-Buchse)&lt;br /&gt;
* J30: USB Port 4 (über 4 pol Kabel verbunden mit Front USB, Header 1x4) &lt;br /&gt;
* J31: USB Port 3 (Header 1x4)&lt;br /&gt;
* J32: (Header 2x1, nicht bestückt, neben SW1)&lt;br /&gt;
* J34: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 1, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J35: (Header 2x1, nicht bestückt, neben Tuner 1)&lt;br /&gt;
* J36: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 2, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J37: (Header 2x1, nicht bestückt, neben Tuner 2)&lt;br /&gt;
* J41: Anschluß Bedien-PCB, Infrarot-Receiver (5 pol)&lt;br /&gt;
* J42: Anschluß Bedien-PCB, Tastatur + Display (10 pol)&lt;br /&gt;
* J43: 12V von Schaltnetzteil&lt;br /&gt;
* J45: nicht bestückt, Hohlbuchse, 12V Spannungsversorgung&lt;br /&gt;
* J46: USB Port 2 (Header 1x4)&lt;br /&gt;
* J47: SPDIF-Ausgang&lt;br /&gt;
&lt;br /&gt;
== LEDs ==&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED1: grün&amp;lt;/span&amp;gt;, blinkt, wenn am rückwärtigen USB-Anschluss beispielsweise eine Maus angeschlossen ist (zwischen U1 und nicht bestücktem HDMI-Chip U42)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED2: blau&amp;lt;/span&amp;gt; (neben Befestigungsloch H3)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED3: rot&amp;lt;/span&amp;gt;, wahrscheinlich Netzkontroll-LED (Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED4: grün&amp;lt;/span&amp;gt;, leuchtet nur ganz schwach (neben LED3, Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED5: grün&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED6: blau&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED7: rot&amp;lt;/span&amp;gt; (neben LED5)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED8: grün&amp;lt;/span&amp;gt;, zeigt HD-Schreibzugriff bei einer Aufnahme an (neben J6, USB Port 2)&lt;br /&gt;
&lt;br /&gt;
==Varianten==&lt;br /&gt;
===DVB-T===&lt;br /&gt;
===DVB-C===&lt;br /&gt;
Die Box kann mit großer Sicherheit keine QAM256 modulierten Programme wiedergeben.&lt;br /&gt;
Programme, die QAM64 moduliert sind werden problemlos und sicher wiedergegeben&lt;br /&gt;
:Einwand: Zwar bekomme auch ich keine QAM256-Kanäle rein, aber laut den Datenblättern können sowohl Decoder als auch Tuner QAM256. Eventuell mal mit Verstärkern/Dämpfern testen... (adlerweb, 7.Apr 2011)&lt;br /&gt;
&lt;br /&gt;
== Bilder/Innenleben ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;225&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Bild:moretv_1.jpg|Gesamtansicht&lt;br /&gt;
Bild:moretv_2.jpg|JTAG-Anschluss für LPC921F (unter anderem) und Platz zur Montage einer 3,5&amp;quot; Festplatte&lt;br /&gt;
Bild:moretv_3.jpg|Board komplett&lt;br /&gt;
Bild:moretv_4.jpg|DVI – nicht bestückt&lt;br /&gt;
Bild:moretv_5.jpg|DVB-T Tuner&lt;br /&gt;
Bild:moretv_6.jpg|CPU RAM etc.&lt;br /&gt;
Bild:moretv_7.jpg|mini PCI, Sata, CI-Slot, Smartcard&lt;br /&gt;
Bild:moretv_8.jpg|Rückseite komplett&lt;br /&gt;
Bild:moretv_9.jpg|CI-Controller&lt;br /&gt;
Bild:moretv_10.jpg|Sata-Controller&lt;br /&gt;
Bild:moretv_11.jpg|RAM und TDA8024T SmartCard-Interface&lt;br /&gt;
Bild:moretv_12.jpg|LAN DP83816 (fast identisch zu SiS 900)&lt;br /&gt;
Bild:moretv_13.jpg|SW1 auf ON = SW-Update&amp;lt;br/&amp;gt;SW2 auf ON = JTAG Enable&lt;br /&gt;
Bild:moretv_14.jpg|Stromversorgung&lt;br /&gt;
Bild:moretv_15.jpg|Anschluss J4&lt;br /&gt;
Bild:EJTAG.jpg|CON1: EJTAG für den PNX8950&lt;br /&gt;
Bild:Tuner_Jumper1.JPG|Wie man sieht, müssen keinerlei Jumper gesetzt sein, um DVB-T empfangen zu können.&lt;br /&gt;
Bild:Console.png|RS-232 Console auf J2&lt;br /&gt;
Bild:lpc_8051_power.png|3,3Volt auf J4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schnittstellen ==&lt;br /&gt;
&lt;br /&gt;
* 4x USB (bei Verwendung von moreTV werden die USB-Ports nicht mehr unterstützt)&lt;br /&gt;
** 3x intern: J31 USB Port3, J46 USB Port2&lt;br /&gt;
** 2x extern: J30 USB Port4 (Frontpanel), CON9&lt;br /&gt;
** Pinout: PIN4:GND/Schwarz, PIN3:D+/Grün, PIN2:D-/Weiss, Pin1:+5V/Rot&lt;br /&gt;
&lt;br /&gt;
* 2x RS-232&lt;br /&gt;
:* 1x intern, Pinbelegung (J2)&lt;br /&gt;
::* &#039;&#039;&#039;hier einfügen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:*1x extern, Pinbelegung (J33):&lt;br /&gt;
::* 6 gnd&lt;br /&gt;
::* 5 rx1 r2in MAX2333 (U10)&lt;br /&gt;
::* 4 rx2 r1in MAX2333 (U10)&lt;br /&gt;
::* 3 tx1 T2out MAX2333 (U10)&lt;br /&gt;
::* 2 tx2 T1out MAX2333 (U10)&lt;br /&gt;
::* 1 gnd  0&lt;br /&gt;
::* das O ist die Markierung auf der Platine&lt;br /&gt;
&lt;br /&gt;
== Chips ==&lt;br /&gt;
Übersicht über die verwendeten Bausteine mit Links auf ensprechende Datenblätter, Quellen etc.&lt;br /&gt;
&lt;br /&gt;
* Multimedia-CPU Philips PNX8950EH/M2/S1&lt;br /&gt;
**[http://datasheet.octopart.com/PNX8950EH/M2/S1%2C55-NXP-datasheet-8325175.pdf Datasheet PNX8950EH/M2/S1]&lt;br /&gt;
**[http://www.brightsign.biz/documents/HD2000HardwareGuide.pdf Brightsign Hardwareguide]&lt;br /&gt;
**[http://www.kanecomputing.co.uk/pdfs/mds_mds810.pdf MDS-810]&lt;br /&gt;
*[http://www.alldatasheet.com/datasheet-pdf/pdf/98585/SAMSUNG/K4H511638C-UCCC.html 4x 512 MBit DDR SDRAM SAMSUNG K4H511638C-UCCC]&lt;br /&gt;
* [http://www.hynix.com/datasheet/pdf/flash/HY27(U_S)S(08_16)121A%20Series(Rev1.3).pdf HYNIX HY27US08121A 512 Mbit NAND Flash]&lt;br /&gt;
* [http://www.siliconimage.com/docs/SiI-DS-0102-D.pdf SiI3512 SATA150 Controller]&lt;br /&gt;
*[http://www.national.com/ds/DP/DP83816.pdf 10/100 Mbps PCI Ethernet-Controller NATIONAL DP83816]&lt;br /&gt;
* High Speed USB PCI Host Controller Philips ISP1561BM [http://www.nxp.com/acrobat_download2/expired_datasheets/ISP1561_2.pdf Datasheet]&lt;br /&gt;
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1068 MAX3222]&lt;br /&gt;
* PNX8510HW [http://www.datasheetcatalog.org/datasheet/philips/PNX8510_PNX8511_4.pdf Datasheet]&lt;br /&gt;
* Bedienteil mit LED-Display, Infrarotempfänger usw.&lt;br /&gt;
* In der DVB-C-Version: Philips CU1216 DVB-C Tuner [http://read.pudn.com/downloads138/sourcecode/others/589797/CU1216L-3-datasheet.pdf Datasheet]&lt;br /&gt;
** Philips TDA10023 (DVB-C Channel Decoder) [http://www.datasheetdownload.com/download.php?id=677273 Datasheet]&lt;br /&gt;
* In der DVB-T-Version: Philips TU1216 DVB-T Tuner&lt;br /&gt;
** Philips TDA10046 (DVB-T Channel Decoder) [http://www.nxp.com/acrobat/literature/9397/75009522.pdf Spec Sheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda1004x.c - linuxtv.org Frontend Treiber]&lt;br /&gt;
** Philips TDA6650 (5 V mixer/oscillator and low noise PLL synthesizer for hybrid terrestrial tuner) [http://www.nxp.com/documents/data_sheet/TDA6650TT_6651TT.pdf Datasheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda665x.c - linuxtv.org Tuner Treiber]&lt;br /&gt;
* Philips TDA8024T (IC Card Interface) [http://www.nxp.com/documents/data_sheet/TDA8024.pdf Datasheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nicht bestückte ICs:&lt;br /&gt;
* U42 DVI (wahrscheinlich [http://www.nxp.com/documents/data_sheet/TDA9983B.pdf Philips TDA9983])&lt;br /&gt;
* U40 ????&lt;br /&gt;
* U41 ????&lt;br /&gt;
* U44 ????&lt;br /&gt;
* U45 ????&lt;br /&gt;
* U48 ????&lt;br /&gt;
* U51 ????&lt;br /&gt;
* U59 ????&lt;br /&gt;
&lt;br /&gt;
== Fernbedienung ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP]] Codes:  &lt;br /&gt;
&lt;br /&gt;
Protokoll: NEC&amp;lt;br /&amp;gt;&lt;br /&gt;
Geräte ID: 0x6B44&amp;lt;br /&amp;gt;&lt;br /&gt;
Tastencodes:&amp;lt;br &amp;gt;&lt;br /&gt;
* 00	0&lt;br /&gt;
* 01	EXIT&lt;br /&gt;
* 02	8&lt;br /&gt;
* 03	INFO&lt;br /&gt;
* 04	4&lt;br /&gt;
* 05    Stumm&lt;br /&gt;
* 06	HELP&lt;br /&gt;
* 07	OK&lt;br /&gt;
* 08	2&lt;br /&gt;
* 09	REC&lt;br /&gt;
 &lt;br /&gt;
* 0B	Marker&lt;br /&gt;
* 0C	6&lt;br /&gt;
&lt;br /&gt;
* 0E	Down&lt;br /&gt;
* 0F	V-&lt;br /&gt;
* 10	1&lt;br /&gt;
* 11	AV&lt;br /&gt;
* 12	9&lt;br /&gt;
* 13	Right&lt;br /&gt;
* 14	5&lt;br /&gt;
* 15	Archiv&lt;br /&gt;
&lt;br /&gt;
* 17	P-&lt;br /&gt;
* 18	3&lt;br /&gt;
* 19	Up&lt;br /&gt;
* 1A	Yellow&lt;br /&gt;
* 1B	Left&lt;br /&gt;
* 1C	7&lt;br /&gt;
* 1D	Stop/LIVE&lt;br /&gt;
* 1E	RED&lt;br /&gt;
* 1F    V+&lt;br /&gt;
&lt;br /&gt;
* 40	MORE&lt;br /&gt;
* 41	LIST&lt;br /&gt;
* 42	FFWD&lt;br /&gt;
&lt;br /&gt;
* 44    Chap-&lt;br /&gt;
&lt;br /&gt;
* 46    Play&lt;br /&gt;
&lt;br /&gt;
* 48	TV&lt;br /&gt;
* 49	#&lt;br /&gt;
* 4A	GREEN&lt;br /&gt;
&lt;br /&gt;
* 4C	EPG&lt;br /&gt;
&lt;br /&gt;
* 4E	SLOW&lt;br /&gt;
&lt;br /&gt;
* 50	P+&lt;br /&gt;
* 51	*&lt;br /&gt;
* 52	POWER&lt;br /&gt;
&lt;br /&gt;
* 54	FREW&lt;br /&gt;
&lt;br /&gt;
* 56	PAUSE&lt;br /&gt;
&lt;br /&gt;
* 58	Setup&lt;br /&gt;
* 59	TEXT&lt;br /&gt;
* 5A	BLUE&lt;br /&gt;
&lt;br /&gt;
* 5C	Chap+&lt;br /&gt;
&lt;br /&gt;
* 5E	PiP&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
Übersicht über verwendete Software (Betriebssysteme, Compiler, Tools, etc)&lt;br /&gt;
&lt;br /&gt;
* Software Update: [http://www.mikrocontroller.net/attachment/105209/swu.zip swu.zip]&lt;br /&gt;
&lt;br /&gt;
* Bootloader&lt;br /&gt;
:Eventuell [http://www.denx.de/wiki/U-Boot/SourceCode U-Boot] support mit diesen 4 patches:&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachents/20061204/e9922ec2/attachment.obj pnx8550support.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061206/556029b0/attachment.obj nxp_i2c.diff.gz]&lt;br /&gt;
:#  [http://lists.denx.de/pipermail/u-boot/attachments/20061211/bff13619/attachment.obj nxp_pci.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061211/8d42666e/attachment.obj mips_timer2.diff]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overview&lt;br /&gt;
+The Silverbox is a development platform based on the NXP PNX8550&lt;br /&gt;
+(Nexperia) media processor.  It consists of a MIPS32 compatible PR4450&lt;br /&gt;
+core, accompanied by two TriMedia processors.  Typical use for the&lt;br /&gt;
+PNX8550 is in settop box and advanced analogue and digital TV sets.&lt;br /&gt;
+&lt;br /&gt;
+This first version of U-Boot for this platform supports a minimal set&lt;br /&gt;
+of commands and hardware.  Feature to be added in the near future are&lt;br /&gt;
+PCI bus, Ethernet, NAND flash and USB support.&lt;br /&gt;
+&lt;br /&gt;
+Boot Methods&lt;br /&gt;
+U-Boot for the Silverbox is typically loaded into SDRAM using an EJTAG&lt;br /&gt;
+probe.  The load address and entry point is 0xA0010000.&lt;br /&gt;
+&lt;br /&gt;
+As NAND flash support is not yet available a single page NAND flash&lt;br /&gt;
+loader is also not available.  This limits this U-Boot version, but&lt;br /&gt;
+a single page loader based on U-Boot 1.1.3 is available on request.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Screenshot der Windows CE 5.0 Oberfläche (über VNC mit der Box verbunden http://efonvnc.sourceforge.net/)&lt;br /&gt;
&lt;br /&gt;
[[Datei:CEscreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Anwendungen und Ideen =&lt;br /&gt;
==Realisierte Projekte/Anwendungen==&lt;br /&gt;
&lt;br /&gt;
=== FTP-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des ftp-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\ftpsvr.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den FTP-Server [http://www.mikrocontroller.net/attachment/104995/ftpsvr.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
* Als Login-Daten für den FTP-Server können beliebige Werte eingeben, z.B.&lt;br /&gt;
::   Benutzer: root&lt;br /&gt;
::   Passwort: root&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen:&#039;&#039;&#039;&lt;br /&gt;
* Die Exe-Dateien aus dem Windows-Verzeichnis können aber nicht bzw. nicht alle kopiert werden. Im Total-Commander werden die Attribute 555 angezeigt. Vielleicht hat ja noch jemand eine Idee, wie man das überwinden kann. Das sind Dateien, die im ROM angeordnet und bereits auf feste Adressen geladen sind, so daß sie direkt ausführbar sind - also nicht direkt kopier- und an anderer Stelle verwendbar. Idee: wahrscheinlich finden sich diese Dateien in einem Platform-Kit oder einer EVC-Version (EmbeddedVisualC..) von Microsoft.&lt;br /&gt;
* Der FTP-Server unterstützt nicht alle Befehle des FTP-Protokolls, so ist es mit einigen Clients z.B. nicht möglich eine Datei zu überschreiben - die aktuelle Datei löschen und dann die Neue in den Ordner kopieren funktioniert jedoch.&lt;br /&gt;
&lt;br /&gt;
=== VNC-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des vnc-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\winvnc.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;\Windows\explorer.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den VNC-Server [http://www.mikrocontroller.net/attachment/105859/winvnc.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
&lt;br /&gt;
Sofern More.TV läuft ist auf dem Client nur ein schwarzer Bildschirm zu sehen. Minimiert man es lässt sich die WinCE-Oberfläche normal nutzen.&lt;br /&gt;
&lt;br /&gt;
==Anwendungsideen==&lt;br /&gt;
&lt;br /&gt;
===Unter Linux===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* Asterisk Server&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Multimedia Client/Server&lt;br /&gt;
* Wetterstation logging Server&lt;br /&gt;
* Solar logging Server&lt;br /&gt;
&lt;br /&gt;
===Unter WinCE===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Media Portal Client/Server&lt;br /&gt;
* Kamera Server&lt;br /&gt;
* Spielekonsole für minigames&lt;br /&gt;
* Download Server&lt;br /&gt;
&lt;br /&gt;
==== ROM entpacken / erweitern ====&lt;br /&gt;
Über die Software [http://www.xs4all.nl/~itsme/projects/xda/dumprom.html dumprom] soll sich die Systempartition entpacken lassen, mit [http://www.xs4all.nl/~itsme/projects/xda/romtools.html romtools] wieder zusammenbauen. Über diesen Weg könnte es möglich sein eine bestehende CE-Installation um weitere Funktionen zu ergänzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hardware-Mods===&lt;br /&gt;
====SATA Power-Mod====&lt;br /&gt;
Der interne Molex für die SATA-Platte liefert an der +12V-Schiene nur ca. 11V welche unter Last bis auf ca. 10V einbrechen können. Für den Anlaufstrom vor allem älterer Festplatten kann dies ggf. zu wenig sein.&lt;br /&gt;
&lt;br /&gt;
Ich habe die +12V der Festplatte vom Molex getrennt und direkt mit der 12V-Schiene des Netzteils verbunden. Da die Kommandos zum Abschalten der Festplatte per SATA gegeben werden ist der Standby-Betrieb durch diese Änderung nicht beeinträchtigt.&lt;br /&gt;
&lt;br /&gt;
= weitergehende Infos im Netz =&lt;br /&gt;
Alles was noch weiterführende Infos bietet. Andere Wikis, Beiträge, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.oohito.com/wince/mips_o_j.htm MIPS FTP Server]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56546</id>
		<title>Receiver-Mainboard Plattform Philips PNX8950</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56546"/>
		<updated>2011-04-15T04:54:02Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Fernbedienung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Links =&lt;br /&gt;
Hier nur die wichtigsten Links (Hauptdiskussionsthread und andere Wikis), den Rest unter &amp;quot;weitergehende Infos im Netz&amp;quot;&lt;br /&gt;
* Diskussionsthread [http://www.mikrocontroller.net/topic/210759 Pollin - Receiver-Mainboard mit Twin DVB-T/C Tuner, NXP PNX8950EH]&lt;br /&gt;
&lt;br /&gt;
* Bedienungsanleitung [http://www1.medion.de/downloads/download.pl?lang=de&amp;amp;filename=bda_md29052_de.pdf&amp;amp;id=7946&amp;amp;type=anleitungen MEDION LIFE S27200 - MD 29052]&lt;br /&gt;
&lt;br /&gt;
= Wichtiger Hinweis =&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:red;color:white;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vor dem Arbeiten an der Platine oder Öffnen des Gehäuses ist der Netzstecker (230V) zu ziehen. Denn: Der Kühlkörper (des Netzteils) führt eine Spannung von 115V!!!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Betriebssysteme =&lt;br /&gt;
&lt;br /&gt;
== Bestehenden Inhalt aus dem Flash auslesen ==&lt;br /&gt;
&lt;br /&gt;
Von User AgentData wird freundlicherweise die [http://www.mikrocontroller.net/attachment/106071/complete_nand_layout.rar Erklärung sowie der Source für den Dumper] zur Verfügung gestellt. Im Ergebnis bekommt man dafür die Original Firmware-Dateien und kann so den Lieferzustand jederzeit wieder herstellen. Der für den direkten Zugriff auf das NAND benötigte Code befindet sich übrigens in der Datei /Windows/TmToolbox.dll (read/write/erase). &lt;br /&gt;
&lt;br /&gt;
Damit dürfte der Grundstein für jegliche Weiterentwicklung gelegt sein.&lt;br /&gt;
&lt;br /&gt;
== Neues Firmware-Image installieren ==&lt;br /&gt;
&lt;br /&gt;
# Auf einen mit FAT32 formatierten USB-Stick folgende Datein kopieren: &lt;br /&gt;
:* flashing.txt&lt;br /&gt;
:* phStbRootApp_256M_0_t.mi&lt;br /&gt;
:* phStbRootApp_256M_1_t.mi&lt;br /&gt;
:* WinCe1.nb0 &lt;br /&gt;
:Die Dateien befinden sich z.B. im Ordner WCE1 der Datei swu.zip&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf ON (DIL Schalter auf Pollin Board)&lt;br /&gt;
# USB-Stick am USB-Port auf der Geräterückseite des Receivers anschließen&lt;br /&gt;
# Receiver einschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# Am Receiver auf Power drücken. Bei Fehlermeldung auf Bildschirm: Anderen USB Stick (oder per SD-Karte + Reader) probieren und/oder Receiver per Fernbedienung einschalten. Wenn alles funktioniert, erscheint eine Anzeige auf dem Bildschirm, daß das Update durchgeführt wird und man den Receiver nicht ausschalten soll, bis das Update eingespielt ist. Falls irgend etwas falsch läuft, startet das Windows CE und zeigt den Telegen-Desktop. Dann nochmal alles überprüfen.&lt;br /&gt;
# Auf dem roten, 4-stelligen Frontdisplay der Box wird nun für die insgesamt 4 Flash-Vorgänge jeweils der Fortschritt in Prozent angezeigt. Achtung: Es werden insgesamt 4 Dateien einzeln geflasht, die Prozentzahl klettert also vier Mal bis auf 100%.&lt;br /&gt;
# Nach kurzer Zeit (1 oder 2 Minuten) erscheint eine Meldung, dass das Software-Update erfolgreich war&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf OFF setzen. &lt;br /&gt;
&lt;br /&gt;
:Nun wird die Box beim Einschalten auf dem TV einen hin- und herwandernden roten Balken zeigen. Die weiteren Programmpunkte sind selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
== WindowsCE ==&lt;br /&gt;
&lt;br /&gt;
*Windows CE 5.0&lt;br /&gt;
*Windows CE Kernel for MIPS (Built on Mar 29 2005 at 14:00:54)&lt;br /&gt;
*Telegent Kernel V0.9.3.16 (Built on Sep  4 2006 at 22:23:55)&lt;br /&gt;
&lt;br /&gt;
User AgentData hat das im Auslieferungszustand auf dem Gerät befindliche WindowsCE ausgelesen (siehe hierzu [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Bestehenden_Inhalt_aus_dem_Flash_auslesen Inhalt aus dem Flash auslesen]). Dadurch kann beispielsweise eine [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#MoreTv_als_Medion_gelabelt mit MoreTV &amp;quot;aktualisierte&amp;quot;] Box nun auch wieder in den Auslieferungszustand zurückversetzt werden. Die [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Update-Prozedur] ist identisch.&lt;br /&gt;
&lt;br /&gt;
== MoreTv als Medion gelabelt ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ein großes Danke gilt den Benutzern Fritz und M. W.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete Soft- und Hardware&lt;br /&gt;
# Festplatte SATA-Anschluß, 160GB oder mehr (im Original 250GB), Formatierung s.u.&lt;br /&gt;
# USB-Stick, FAT32 formatiert&lt;br /&gt;
# Software: [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip dieses] ZIP-Archiv ([https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdate, SWU_Finland_V1.0.3.454)]&lt;br /&gt;
&lt;br /&gt;
Ein Hinweis&lt;br /&gt;
:Beim Start der Box ohne Modifikation wird WindowsCE gestartet und kann mittels USB-Maus und Tastatur bedient werden. Nach erfolgtem Flash-Vorgang ist dies nicht mehr möglich.&lt;br /&gt;
&lt;br /&gt;
Hier nun die Kurzanleitung zum &#039;Tuning&#039;&lt;br /&gt;
* USB-Stick vorbereiten&lt;br /&gt;
:Den Inhalt des Ordner WCE1, aus der Datei [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip swu.zip] (SWU_Finland_V1.0.3.454), auf einen formatierten USB-Stick (FAT32) kopieren und wie [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren hier] beschrieben installieren.&lt;br /&gt;
&lt;br /&gt;
* Festplatte vorbereiten&lt;br /&gt;
:# Auf der einzubauenden Festplatte eine erweiterte Partition mit zwei logischen Laufwerken mit FAT32-Dateisystem anlegen. Mit dem kostenlosen Windows Programm &amp;quot;[http://www.easeus.com/download.htm EASEUS Partition Master 8.0.1 Home Edition]&amp;quot; lassen sich die Partitionen leicht anlegen, unter Linux ist FAT32 im Programm fdisk übrigens der Typ &#039;b&#039;. &lt;br /&gt;
:# Auf das erste logische Laufwerk (minimum 2GB, im Original 19,53GB, das entspricht exakt 20000MB) den gesamten Inhalt des zuvor ausgepackten [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdates] kopieren.&lt;br /&gt;
:# Die Ordner moreTVn und moreTVn.INIT zu moreTV und moreTV.INIT umbenenen.&lt;br /&gt;
:# Das zweite logische Laufwerk (je größer desto besser, im Original 213,4GB) bleibt leer.&lt;br /&gt;
&lt;br /&gt;
: Die fehlenden Ordner auf der Festplatte werden beim ersten Starten der Box automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
: ACHTUNG: Die USB-Anschlüsse werden nach der Installation von der MoreTV-Software nicht mehr unterstützt. Eine Ausnahme bildet einzig und alleine das [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Flash-Update].&lt;br /&gt;
:USB-Speichersticks und Externe-Festplatten werden zwar noch erkannt und als USBDisk in das Dateisystem eingebunden können aber über die MoreTV-Software nicht angesprochen werden. USB-Keyboard und -Maus werden unter MoreTV nicht mehr erkannt und können auch nicht benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zeitzonen-Einstellung ===&lt;br /&gt;
&lt;br /&gt;
Eigentlich sollte sich die Uhrzeit bei richtigem Empfang automatisch einstellen.&lt;br /&gt;
Dies ist nicht immer der Fall, der folgende Trick hat bei DVB-C geholfen.&lt;br /&gt;
&lt;br /&gt;
==== Methode 1: Werksreset/Ländereinstellung ====&lt;br /&gt;
Bei der Ländereinstellung muß Finnland ausgewählt und als PLZ 00100 (Helsinki) eingegeben werden. Dazu  Setup-&amp;gt;Sonstiges-&amp;gt;Werkseinstellung  aufrufen. Natürlich sind dann alle Einstellungen (Programme) neu einzustellen.&lt;br /&gt;
&lt;br /&gt;
Damit wird die Zeitzone auf Finnland umgestellt +1 Std. Die Finnen haben&lt;br /&gt;
zwar auch Sommerzeit, da die Sommerzeitumstellung aber ja nicht&lt;br /&gt;
funktioniert passt es dann. Das muß allerdings zum Ende der Sommerzeit&lt;br /&gt;
wieder zurückgestellt werden, mit den gleichen Unannehmlichkeiten.&lt;br /&gt;
&lt;br /&gt;
==== Methode 2: Datenbank ändern ====&lt;br /&gt;
&lt;br /&gt;
Alternativ lässt sich die Ländereinstellung auf Dateiebene ändern, hierbei handelt es sich jedoch leider um ein binäres Datenbankformat. Die Konfiguration befindet sich in der Datei /HardDisk/moreTV.persistent/tbConfigurations.xbc welche z.B. über FTP erreichbar ist. Die Datei lässt sich z.B. mit einem Hex-Editor wie GHex2 unter Linux öffnen, es sollte eine Struktur mit Wertenamen und deren Variabeln erkennbar sein. Recht im Anfang befindet sich eine Einstellung &amp;quot;COUNTRY_ID&amp;quot; - nach vier kleinen Werten befindet sich (hier Offset 0x32) eine ASCII-Zahl, z.B. 1 (0x31) für Deutschland(?). In meinem Fall brachte eine Änderung auf 2 (0x32) mit anschließendem Neustart den gewünschten Effekt für die Zeiteinstellung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Kann jemand mit Methode 1 bestätigen, dass 2==Finnland ist?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Die CPU wird pauschal von Linux unterstützt.&lt;br /&gt;
&lt;br /&gt;
Der Kernel ist hier erhältlich:&lt;br /&gt;
*Einstiegsseite: http://www.linux-mips.org/wiki/Main_Page &lt;br /&gt;
*Download: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/&lt;br /&gt;
&lt;br /&gt;
== Interessant zum weiteren Testen ==&lt;br /&gt;
&lt;br /&gt;
*elecard firmware&lt;br /&gt;
*MontaVista Linux Professional Edition&lt;br /&gt;
&lt;br /&gt;
= Unterstützte Codecs =&lt;br /&gt;
&lt;br /&gt;
Quelle: [http://www.synnex.com.tw/oem/mic_link/seminar%20download/y70303.pdf]&lt;br /&gt;
&lt;br /&gt;
*dual: SD MPEG-1/2&lt;br /&gt;
*single: SD MPEG-4, WM9, H264,DivX; HD MPEG-2 (1080i), WM9(720p)&lt;br /&gt;
*Audio: dual stereo (2.0 + 2.0),MPEG-1, Dolby AC-3&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen = &lt;br /&gt;
&lt;br /&gt;
===Platinen===&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NzQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_T_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-T Tuner (390 052, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NjQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_C_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-C Tuner (390 053, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/MzQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/RS232_Einbaubuchse.html Pollin : RS232-Einbaubuchse (721 856, 0,25€)], zur Befestigung werden noch zwei passende Sechskant-Schraubbolzen benötigt&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NDQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/USB_2_0_Einbaubuchse.html Pollin : USB 2.0-Einbaubuchse (721 855, 0,25€)]&lt;br /&gt;
&lt;br /&gt;
===Zubehör===&lt;br /&gt;
:Netzteil, Gehäuse, Fernbedienung:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NjUwOTQ2OTk-/Stromversorgung/Netzgeraete/Festspannungs_Netzgeraete/Schaltnetzteil_DELTA_EADP_50DF_12_V_4_16_A.html Pollin : Schaltnetzteil DELTA EADP-50DF, 12 V-/4,16 A (350 943 , 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDg4OTM1OTk-/Bauelemente_Bauteile/Gehaeuse/Stahlblech_Gehaeuse_mit_Frontblende.html Pollin : Stahlblech-Gehäuse mit Frontblende (460 119, 2,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/Nzc5OTczOTk-/SAT_Antennentechnik/Satelliten_Technik/Fernbedienungen/Infrarot_Fernbedienung_RCX155.html Pollin : Infrarot-Fernbedienung RCX155 (620 022, 1,95€)]&lt;br /&gt;
:SATA:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NTQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Kabel.html Pollin : SATA-Kabel, 2x SATA-Stecker, 0,35m (721 854, 0,50€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDM0OTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/HDD_Stromversorgungskabel.html Pollin : PC-Stromversorgungskabel, 2x 5,25&amp;quot;- Stecker, 2x HDD-Stecker, 70mm (720 569, 0,20€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDI1ODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter (721 475, 0,85)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTUwOTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter, mit Rastnase! (720 948, 0,55)]&lt;br /&gt;
:WLAN:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDY5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_miniPCI_Karte_XG_603.html Pollin : WLAN miniPCI-Karte XG-603 (711 035, 3,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MjUwOTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antennen_Adapterkabel.html Pollin : WLAN-Antennen-Adapterkabel (710 947, 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTM5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne 4 dBi. Länge 140 mm Reverse-SMA (710 068, 1,95€)] oder alternativ &lt;br /&gt;
*[http://www.pollin.de/shop/dt/NzY3ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_Antenne_FSC_5_dBi_RP_SMA.html Pollin : WLAN-Antenne, mit Standfuß, Reverse-SMA, 5 dBi (711 232, 3,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDE0OTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne, Reverse-SMA, 5 dBi (710 585, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/ODI5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antenne.html Pollin : WLAN-Antenne, mit magnetischem Standfuß, Reverse-SMA, 7 dBi (711 071, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.reichelt.de/?ACTION=3;ARTICLE=61136;PROVID=2402 Reichelt: LAN DN-70100, WLAN-Antenne, Reverse-SMA, 5 dBi (LAN DN-70100, 3,65€)]&lt;br /&gt;
 &lt;br /&gt;
:DVB-T und DVB-C:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MzQ3ODI0OTk-/SAT_Antennentechnik/Kabel/Antennen_Anschlusskabel_75_150_mm.html Pollin : Antennen-Anschlusskabel 75 Ω, 150 mm (571 256, 0,15€)] zum Durchschleifen des DVB-Signals&lt;br /&gt;
:DVB-T:&lt;br /&gt;
*Bitte beachten: Passive antennen sind grundsätzlich nicht zu empfehlen. Zumindest nicht im Zimmer. Ausser man wohnt am Sender :D&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTc4ODI0OTk-/SAT_Antennentechnik/DVB_T_DVB_C/Antennen/DVB_T_Antenne_QOSMIO.html Pollin : DVB-T Antenne QOSMIO, passiv (571 128, 2,95€)]&lt;br /&gt;
:DVB-S:&lt;br /&gt;
*[http://www.elsner-computer.de/product_info.php?info=p430032_Dream-Multimedia-Tuner-7020S---7020Si---DVB-S.html Tuner 7020S Elsner Shop 39€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!!]&lt;br /&gt;
*[http://www.hm-sat-shop.de/receiver-digital-dreambox/sat-tuner-fuer-dreambox-7020-philips.html HM Sat Shop:DVB-S Tuner zum Sat-Umbau, 49€.] &lt;br /&gt;
*[http://www.devilcards.de/Ersatzteile-Dreambox/Dream-Multimedia-Tuner-7020S-7020Si-DVB-S::225.html DevilCards Dream Multimedia Tuner 7020S DVB-S 37€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!! ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Entweder zwei bestücken oder exklusiv einen. Mischbetrieb scheinbar nicht möglich!&lt;br /&gt;
&lt;br /&gt;
*...außerdem Plexiglas/Kunststoff-Zuschnitt (13cm x 15cm) als HD-Träger sowie diverse Schrauben aus der PC-Grabbelkiste (7* Gehäuse, 1* Front-USB, 4* Schaltnetzteil, 6* Mainboard, 4* HD-Träger, 4* HD, 3* Frontpanel)&lt;br /&gt;
*zu guter letzt wäre ein passender [http://www.mikrocontroller.net/attachment/106125/box.jpg Berührungsschutz für das Schaltnetzteil] noch eine sinnvolle Maßnahme zur Vermeidung von Personenschäden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== technische Daten ==&lt;br /&gt;
:Hauptprozessor PNX-8950 CPU&lt;br /&gt;
:Flash-ROM 64 MB&lt;br /&gt;
:RAM-Speicher 256 MB&lt;br /&gt;
:Festplatte 250 GB (bei original Medion-Gerät) &lt;br /&gt;
*Conditional Access Interface&lt;br /&gt;
:1 Steckplatz (PCMCIA, DVB Common Interface Standard)&lt;br /&gt;
:1 Steckplatz (CONAX und andere)&lt;br /&gt;
*A/V &amp;amp; Data In/Out-Anschlüsse extern&lt;br /&gt;
:Video CVBS/S-VIDEO-Ausgang (PAL)&lt;br /&gt;
:TV-SCART (PAL/RGB-Ausgang)&lt;br /&gt;
:VCR-SCART&lt;br /&gt;
:Audio L/R-Ausgang&lt;br /&gt;
:Optical S/PDIF Digital Audio- oder Dolby AC-3 Bitstream-Ausgang&lt;br /&gt;
:serielle Schnittstelle (9-poliger D-Sub Type)&lt;br /&gt;
:RJ 45 (LAN 10/100MBit)&lt;br /&gt;
:WLAN-Antennensockel (Reverse-SMA Buchse)&lt;br /&gt;
:2x USB (1 Vorder-/Rückseite)&lt;br /&gt;
:2x Tuner (Philips DVB-T Tuner TU1216L/IVP über Input/Loop-Through-Connector F-Type, IEC 169-2, Buchse/Stecker)&lt;br /&gt;
*Ports/Anschlüsse intern&lt;br /&gt;
:3x USB 2.0 (einer davon über Kabel mit Front-USB verbunden)&lt;br /&gt;
:2x SATA-150&lt;br /&gt;
:RS232 (Console)&lt;br /&gt;
:miniPCI für WLAN-Karte XG-603 (über Verbindungskabel mit U.FL-Stecker an rückwärtige Reverse-SMA Buchse)&lt;br /&gt;
*Tuner &amp;amp; Service Decoder&lt;br /&gt;
:2 Philips DVB-T Tuner TU1216L/IVP&lt;br /&gt;
:RF-Anschlussimpedanz 75 Ohm&lt;br /&gt;
:Input/Loop-through-Connector F-Type, IEC 600169-2/24 (IEC-F-Anschluss)&lt;br /&gt;
:Frequenzbereich 45 ~ 860 MHz&lt;br /&gt;
:Signalpegel Eingang min. 74 dBm&lt;br /&gt;
:Modulation QPSK, 16 und 64 QAM&lt;br /&gt;
*MPEG Transport-Stream A/V Decoding&lt;br /&gt;
:Transport-Stream ISO/IEC 13818-1 MPEG-2&lt;br /&gt;
:Profile-Level 2x MPEG-2 MP@ML (PIP)&lt;br /&gt;
:Aspect Ratio 4:3, 16:9, Pan &amp;amp; Scan, Letterbox&lt;br /&gt;
:Videoauflösung 720x576&lt;br /&gt;
:Audio-Decoding MPEG-1 Layer 1, 2, 3&lt;br /&gt;
*Stromversorgung&lt;br /&gt;
:Eingangsspannung 100~240V AC, 1,5 A, 50/60 Hz&lt;br /&gt;
:Stromaufnahme ohne HDD max. 2 A&lt;br /&gt;
:Energieverbrauch im Betrieb Max. 50 W, Standby: 12 W&lt;br /&gt;
:Schutz durch Interne Sicherung (auf Schaltnetzteil eingelötet)&lt;br /&gt;
:HDD-Stromversorgung on Board&lt;br /&gt;
*Physische Spezifikationen&lt;br /&gt;
:Größe/Abmessungen (BxHxT) 440 x 265 x 70 mm&lt;br /&gt;
:Betriebstemperatur +5°C - +40°C&lt;br /&gt;
&lt;br /&gt;
== Jumper ==&lt;br /&gt;
* J1: JTAG (Header 2x5, nicht bestückt)&lt;br /&gt;
* J2: RS-232 Console (3:RX=RS232.3, 5:TX=RS232.2, 9:GND=RS232.5, Header 2x5)&lt;br /&gt;
* J4: (Header 2*10)&lt;br /&gt;
* J6: (Header 2x1, neben HD-Power)&lt;br /&gt;
* J8: (Header 2x3 nicht bestückt)&lt;br /&gt;
* J27: Massepunkt(1:GND, 2:GND, Header 2*1, zwischen SCART und Audio-Buchse)&lt;br /&gt;
* J30: USB Port 4 (über 4 pol Kabel verbunden mit Front USB, Header 1x4) &lt;br /&gt;
* J31: USB Port 3 (Header 1x4)&lt;br /&gt;
* J32: (Header 2x1, nicht bestückt, neben SW1)&lt;br /&gt;
* J34: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 1, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J35: (Header 2x1, nicht bestückt, neben Tuner 1)&lt;br /&gt;
* J36: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 2, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J37: (Header 2x1, nicht bestückt, neben Tuner 2)&lt;br /&gt;
* J41: Anschluß Bedien-PCB, Infrarot-Receiver (5 pol)&lt;br /&gt;
* J42: Anschluß Bedien-PCB, Tastatur + Display (10 pol)&lt;br /&gt;
* J43: 12V von Schaltnetzteil&lt;br /&gt;
* J45: nicht bestückt, Hohlbuchse, 12V Spannungsversorgung&lt;br /&gt;
* J46: USB Port 2 (Header 1x4)&lt;br /&gt;
* J47: SPDIF-Ausgang&lt;br /&gt;
&lt;br /&gt;
== LEDs ==&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED1: grün&amp;lt;/span&amp;gt;, blinkt, wenn am rückwärtigen USB-Anschluss beispielsweise eine Maus angeschlossen ist (zwischen U1 und nicht bestücktem HDMI-Chip U42)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED2: blau&amp;lt;/span&amp;gt; (neben Befestigungsloch H3)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED3: rot&amp;lt;/span&amp;gt;, wahrscheinlich Netzkontroll-LED (Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED4: grün&amp;lt;/span&amp;gt;, leuchtet nur ganz schwach (neben LED3, Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED5: grün&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED6: blau&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED7: rot&amp;lt;/span&amp;gt; (neben LED5)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED8: grün&amp;lt;/span&amp;gt;, zeigt HD-Schreibzugriff bei einer Aufnahme an (neben J6, USB Port 2)&lt;br /&gt;
&lt;br /&gt;
==Varianten==&lt;br /&gt;
===DVB-T===&lt;br /&gt;
===DVB-C===&lt;br /&gt;
Die Box kann mit großer Sicherheit keine QAM256 modulierten Programme wiedergeben.&lt;br /&gt;
Programme, die QAM64 moduliert sind werden problemlos und sicher wiedergegeben&lt;br /&gt;
:Einwand: Zwar bekomme auch ich keine QAM256-Kanäle rein, aber laut den Datenblättern können sowohl Decoder als auch Tuner QAM256. Eventuell mal mit Verstärkern/Dämpfern testen... (adlerweb, 7.Apr 2011)&lt;br /&gt;
&lt;br /&gt;
== Bilder/Innenleben ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;225&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Bild:moretv_1.jpg|Gesamtansicht&lt;br /&gt;
Bild:moretv_2.jpg|JTAG-Anschluss für LPC921F (unter anderem) und Platz zur Montage einer 3,5&amp;quot; Festplatte&lt;br /&gt;
Bild:moretv_3.jpg|Board komplett&lt;br /&gt;
Bild:moretv_4.jpg|DVI – nicht bestückt&lt;br /&gt;
Bild:moretv_5.jpg|DVB-T Tuner&lt;br /&gt;
Bild:moretv_6.jpg|CPU RAM etc.&lt;br /&gt;
Bild:moretv_7.jpg|mini PCI, Sata, CI-Slot, Smartcard&lt;br /&gt;
Bild:moretv_8.jpg|Rückseite komplett&lt;br /&gt;
Bild:moretv_9.jpg|CI-Controller&lt;br /&gt;
Bild:moretv_10.jpg|Sata-Controller&lt;br /&gt;
Bild:moretv_11.jpg|RAM und TDA8024T SmartCard-Interface&lt;br /&gt;
Bild:moretv_12.jpg|LAN DP83816 (fast identisch zu SiS 900)&lt;br /&gt;
Bild:moretv_13.jpg|SW1 auf ON = SW-Update&amp;lt;br/&amp;gt;SW2 auf ON = JTAG Enable&lt;br /&gt;
Bild:moretv_14.jpg|Stromversorgung&lt;br /&gt;
Bild:moretv_15.jpg|Anschluss J4&lt;br /&gt;
Bild:EJTAG.jpg|CON1: EJTAG für den PNX8950&lt;br /&gt;
Bild:Tuner_Jumper1.JPG|Wie man sieht, müssen keinerlei Jumper gesetzt sein, um DVB-T empfangen zu können.&lt;br /&gt;
Bild:Console.png|RS-232 Console auf J2&lt;br /&gt;
Bild:lpc_8051_power.png|3,3Volt auf J4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schnittstellen ==&lt;br /&gt;
&lt;br /&gt;
* 4x USB (bei Verwendung von moreTV werden die USB-Ports nicht mehr unterstützt)&lt;br /&gt;
** 3x intern: J31 USB Port3, J46 USB Port2&lt;br /&gt;
** 2x extern: J30 USB Port4 (Frontpanel), CON9&lt;br /&gt;
** Pinout: PIN4:GND/Schwarz, PIN3:D+/Grün, PIN2:D-/Weiss, Pin1:+5V/Rot&lt;br /&gt;
&lt;br /&gt;
* 2x RS-232&lt;br /&gt;
:* 1x intern, Pinbelegung (J2)&lt;br /&gt;
::* &#039;&#039;&#039;hier einfügen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:*1x extern, Pinbelegung (J33):&lt;br /&gt;
::* 6 gnd&lt;br /&gt;
::* 5 rx1 r2in MAX2333 (U10)&lt;br /&gt;
::* 4 rx2 r1in MAX2333 (U10)&lt;br /&gt;
::* 3 tx1 T2out MAX2333 (U10)&lt;br /&gt;
::* 2 tx2 T1out MAX2333 (U10)&lt;br /&gt;
::* 1 gnd  0&lt;br /&gt;
::* das O ist die Markierung auf der Platine&lt;br /&gt;
&lt;br /&gt;
== Chips ==&lt;br /&gt;
Übersicht über die verwendeten Bausteine mit Links auf ensprechende Datenblätter, Quellen etc.&lt;br /&gt;
&lt;br /&gt;
* Multimedia-CPU Philips PNX8950EH/M2/S1&lt;br /&gt;
**[http://datasheet.octopart.com/PNX8950EH/M2/S1%2C55-NXP-datasheet-8325175.pdf Datasheet PNX8950EH/M2/S1]&lt;br /&gt;
**[http://www.brightsign.biz/documents/HD2000HardwareGuide.pdf Brightsign Hardwareguide]&lt;br /&gt;
**[http://www.kanecomputing.co.uk/pdfs/mds_mds810.pdf MDS-810]&lt;br /&gt;
*[http://www.alldatasheet.com/datasheet-pdf/pdf/98585/SAMSUNG/K4H511638C-UCCC.html 4x 512 MBit DDR SDRAM SAMSUNG K4H511638C-UCCC]&lt;br /&gt;
* [http://www.hynix.com/datasheet/pdf/flash/HY27(U_S)S(08_16)121A%20Series(Rev1.3).pdf HYNIX HY27US08121A 512 Mbit NAND Flash]&lt;br /&gt;
* [http://www.siliconimage.com/docs/SiI-DS-0102-D.pdf SiI3512 SATA150 Controller]&lt;br /&gt;
*[http://www.national.com/ds/DP/DP83816.pdf 10/100 Mbps PCI Ethernet-Controller NATIONAL DP83816]&lt;br /&gt;
* High Speed USB PCI Host Controller Philips ISP1561BM [http://www.nxp.com/acrobat_download2/expired_datasheets/ISP1561_2.pdf Datasheet]&lt;br /&gt;
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1068 MAX3222]&lt;br /&gt;
* PNX8510HW [http://www.datasheetcatalog.org/datasheet/philips/PNX8510_PNX8511_4.pdf Datasheet]&lt;br /&gt;
* Bedienteil mit LED-Display, Infrarotempfänger usw.&lt;br /&gt;
* In der DVB-C-Version: Philips CU1216 DVB-C Tuner [http://read.pudn.com/downloads138/sourcecode/others/589797/CU1216L-3-datasheet.pdf Datasheet]&lt;br /&gt;
** Philips TDA10023 (DVB-C Channel Decoder) [http://www.datasheetdownload.com/download.php?id=677273 Datasheet]&lt;br /&gt;
* In der DVB-T-Version: Philips TU1216 DVB-T Tuner&lt;br /&gt;
** Philips TDA10046 (DVB-T Channel Decoder) [http://www.nxp.com/acrobat/literature/9397/75009522.pdf Spec Sheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda1004x.c - linuxtv.org Frontend Treiber]&lt;br /&gt;
** Philips TDA6650 (5 V mixer/oscillator and low noise PLL synthesizer for hybrid terrestrial tuner) [http://www.nxp.com/documents/data_sheet/TDA6650TT_6651TT.pdf Datasheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda665x.c - linuxtv.org Tuner Treiber]&lt;br /&gt;
* Philips TDA8024T (IC Card Interface) [http://www.nxp.com/documents/data_sheet/TDA8024.pdf Datasheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nicht bestückte ICs:&lt;br /&gt;
* U42 DVI (wahrscheinlich [http://www.nxp.com/documents/data_sheet/TDA9983B.pdf Philips TDA9983])&lt;br /&gt;
* U40 ????&lt;br /&gt;
* U41 ????&lt;br /&gt;
* U44 ????&lt;br /&gt;
* U45 ????&lt;br /&gt;
* U48 ????&lt;br /&gt;
* U51 ????&lt;br /&gt;
* U59 ????&lt;br /&gt;
&lt;br /&gt;
== Fernbedienung ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP]] Codes:  &lt;br /&gt;
&lt;br /&gt;
Protokoll: NEC&amp;lt;br /&amp;gt;&lt;br /&gt;
Geräte ID: 0x6B44&amp;lt;br /&amp;gt;&lt;br /&gt;
Tastencodes:&amp;lt;br &amp;gt;&lt;br /&gt;
* 00	0&lt;br /&gt;
* 01	EXIT&lt;br /&gt;
* 02	8&lt;br /&gt;
* 03	INFO&lt;br /&gt;
* 04	4&lt;br /&gt;
* 05    Stumm&lt;br /&gt;
* 06	HELP&lt;br /&gt;
* 07	OK&lt;br /&gt;
* 08	2&lt;br /&gt;
* 09	REC&lt;br /&gt;
 &lt;br /&gt;
* 0B	Marker&lt;br /&gt;
* 0C	6&lt;br /&gt;
&lt;br /&gt;
* 0E	Down&lt;br /&gt;
* 0F	V-&lt;br /&gt;
* 10	1&lt;br /&gt;
* 11	AV&lt;br /&gt;
* 12	9&lt;br /&gt;
* 13	Right&lt;br /&gt;
* 14	5&lt;br /&gt;
* 15	Archiv&lt;br /&gt;
&lt;br /&gt;
* 17	P-&lt;br /&gt;
* 18	3&lt;br /&gt;
* 19	Up&lt;br /&gt;
* 1A	Yellow&lt;br /&gt;
* 1B	Left&lt;br /&gt;
* 1C	7&lt;br /&gt;
* 1D	Stop/LIVE&lt;br /&gt;
* 1E	RED&lt;br /&gt;
&lt;br /&gt;
* 40	MORE&lt;br /&gt;
* 41	LIST&lt;br /&gt;
* 42	FFWD&lt;br /&gt;
&lt;br /&gt;
* 44    Chap-&lt;br /&gt;
&lt;br /&gt;
* 46    Play&lt;br /&gt;
&lt;br /&gt;
* 48	TV&lt;br /&gt;
* 49	#&lt;br /&gt;
* 4A	GREEN&lt;br /&gt;
&lt;br /&gt;
* 4C	EPG&lt;br /&gt;
&lt;br /&gt;
* 4E	SLOW&lt;br /&gt;
&lt;br /&gt;
* 50	P+&lt;br /&gt;
* 51	*&lt;br /&gt;
* 52	POWER&lt;br /&gt;
&lt;br /&gt;
* 54	FREW&lt;br /&gt;
&lt;br /&gt;
* 56	PAUSE&lt;br /&gt;
&lt;br /&gt;
* 58	Setup&lt;br /&gt;
* 59	TEXT&lt;br /&gt;
* 5A	BLUE&lt;br /&gt;
&lt;br /&gt;
* 5C	Chap+&lt;br /&gt;
&lt;br /&gt;
* 5E	PiP&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
Übersicht über verwendete Software (Betriebssysteme, Compiler, Tools, etc)&lt;br /&gt;
&lt;br /&gt;
* Software Update: [http://www.mikrocontroller.net/attachment/105209/swu.zip swu.zip]&lt;br /&gt;
&lt;br /&gt;
* Bootloader&lt;br /&gt;
:Eventuell [http://www.denx.de/wiki/U-Boot/SourceCode U-Boot] support mit diesen 4 patches:&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachents/20061204/e9922ec2/attachment.obj pnx8550support.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061206/556029b0/attachment.obj nxp_i2c.diff.gz]&lt;br /&gt;
:#  [http://lists.denx.de/pipermail/u-boot/attachments/20061211/bff13619/attachment.obj nxp_pci.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061211/8d42666e/attachment.obj mips_timer2.diff]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overview&lt;br /&gt;
+The Silverbox is a development platform based on the NXP PNX8550&lt;br /&gt;
+(Nexperia) media processor.  It consists of a MIPS32 compatible PR4450&lt;br /&gt;
+core, accompanied by two TriMedia processors.  Typical use for the&lt;br /&gt;
+PNX8550 is in settop box and advanced analogue and digital TV sets.&lt;br /&gt;
+&lt;br /&gt;
+This first version of U-Boot for this platform supports a minimal set&lt;br /&gt;
+of commands and hardware.  Feature to be added in the near future are&lt;br /&gt;
+PCI bus, Ethernet, NAND flash and USB support.&lt;br /&gt;
+&lt;br /&gt;
+Boot Methods&lt;br /&gt;
+U-Boot for the Silverbox is typically loaded into SDRAM using an EJTAG&lt;br /&gt;
+probe.  The load address and entry point is 0xA0010000.&lt;br /&gt;
+&lt;br /&gt;
+As NAND flash support is not yet available a single page NAND flash&lt;br /&gt;
+loader is also not available.  This limits this U-Boot version, but&lt;br /&gt;
+a single page loader based on U-Boot 1.1.3 is available on request.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Screenshot der Windows CE 5.0 Oberfläche (über VNC mit der Box verbunden http://efonvnc.sourceforge.net/)&lt;br /&gt;
&lt;br /&gt;
[[Datei:CEscreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Anwendungen und Ideen =&lt;br /&gt;
==Realisierte Projekte/Anwendungen==&lt;br /&gt;
&lt;br /&gt;
=== FTP-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des ftp-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\ftpsvr.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den FTP-Server [http://www.mikrocontroller.net/attachment/104995/ftpsvr.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
* Als Login-Daten für den FTP-Server können beliebige Werte eingeben, z.B.&lt;br /&gt;
::   Benutzer: root&lt;br /&gt;
::   Passwort: root&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen:&#039;&#039;&#039;&lt;br /&gt;
* Die Exe-Dateien aus dem Windows-Verzeichnis können aber nicht bzw. nicht alle kopiert werden. Im Total-Commander werden die Attribute 555 angezeigt. Vielleicht hat ja noch jemand eine Idee, wie man das überwinden kann. Das sind Dateien, die im ROM angeordnet und bereits auf feste Adressen geladen sind, so daß sie direkt ausführbar sind - also nicht direkt kopier- und an anderer Stelle verwendbar. Idee: wahrscheinlich finden sich diese Dateien in einem Platform-Kit oder einer EVC-Version (EmbeddedVisualC..) von Microsoft.&lt;br /&gt;
* Der FTP-Server unterstützt nicht alle Befehle des FTP-Protokolls, so ist es mit einigen Clients z.B. nicht möglich eine Datei zu überschreiben - die aktuelle Datei löschen und dann die Neue in den Ordner kopieren funktioniert jedoch.&lt;br /&gt;
&lt;br /&gt;
=== VNC-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des vnc-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\winvnc.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;\Windows\explorer.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den VNC-Server [http://www.mikrocontroller.net/attachment/105859/winvnc.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
&lt;br /&gt;
Sofern More.TV läuft ist auf dem Client nur ein schwarzer Bildschirm zu sehen. Minimiert man es lässt sich die WinCE-Oberfläche normal nutzen.&lt;br /&gt;
&lt;br /&gt;
==Anwendungsideen==&lt;br /&gt;
&lt;br /&gt;
===Unter Linux===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* Asterisk Server&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Multimedia Client/Server&lt;br /&gt;
* Wetterstation logging Server&lt;br /&gt;
* Solar logging Server&lt;br /&gt;
&lt;br /&gt;
===Unter WinCE===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Media Portal Client/Server&lt;br /&gt;
* Kamera Server&lt;br /&gt;
* Spielekonsole für minigames&lt;br /&gt;
* Download Server&lt;br /&gt;
&lt;br /&gt;
==== ROM entpacken / erweitern ====&lt;br /&gt;
Über die Software [http://www.xs4all.nl/~itsme/projects/xda/dumprom.html dumprom] soll sich die Systempartition entpacken lassen, mit [http://www.xs4all.nl/~itsme/projects/xda/romtools.html romtools] wieder zusammenbauen. Über diesen Weg könnte es möglich sein eine bestehende CE-Installation um weitere Funktionen zu ergänzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hardware-Mods===&lt;br /&gt;
====SATA Power-Mod====&lt;br /&gt;
Der interne Molex für die SATA-Platte liefert an der +12V-Schiene nur ca. 11V welche unter Last bis auf ca. 10V einbrechen können. Für den Anlaufstrom vor allem älterer Festplatten kann dies ggf. zu wenig sein.&lt;br /&gt;
&lt;br /&gt;
Ich habe die +12V der Festplatte vom Molex getrennt und direkt mit der 12V-Schiene des Netzteils verbunden. Da die Kommandos zum Abschalten der Festplatte per SATA gegeben werden ist der Standby-Betrieb durch diese Änderung nicht beeinträchtigt.&lt;br /&gt;
&lt;br /&gt;
= weitergehende Infos im Netz =&lt;br /&gt;
Alles was noch weiterführende Infos bietet. Andere Wikis, Beiträge, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.oohito.com/wince/mips_o_j.htm MIPS FTP Server]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56545</id>
		<title>Receiver-Mainboard Plattform Philips PNX8950</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56545"/>
		<updated>2011-04-15T04:50:28Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: Fehlende Codes nachtragen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Links =&lt;br /&gt;
Hier nur die wichtigsten Links (Hauptdiskussionsthread und andere Wikis), den Rest unter &amp;quot;weitergehende Infos im Netz&amp;quot;&lt;br /&gt;
* Diskussionsthread [http://www.mikrocontroller.net/topic/210759 Pollin - Receiver-Mainboard mit Twin DVB-T/C Tuner, NXP PNX8950EH]&lt;br /&gt;
&lt;br /&gt;
* Bedienungsanleitung [http://www1.medion.de/downloads/download.pl?lang=de&amp;amp;filename=bda_md29052_de.pdf&amp;amp;id=7946&amp;amp;type=anleitungen MEDION LIFE S27200 - MD 29052]&lt;br /&gt;
&lt;br /&gt;
= Wichtiger Hinweis =&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:red;color:white;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vor dem Arbeiten an der Platine oder Öffnen des Gehäuses ist der Netzstecker (230V) zu ziehen. Denn: Der Kühlkörper (des Netzteils) führt eine Spannung von 115V!!!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Betriebssysteme =&lt;br /&gt;
&lt;br /&gt;
== Bestehenden Inhalt aus dem Flash auslesen ==&lt;br /&gt;
&lt;br /&gt;
Von User AgentData wird freundlicherweise die [http://www.mikrocontroller.net/attachment/106071/complete_nand_layout.rar Erklärung sowie der Source für den Dumper] zur Verfügung gestellt. Im Ergebnis bekommt man dafür die Original Firmware-Dateien und kann so den Lieferzustand jederzeit wieder herstellen. Der für den direkten Zugriff auf das NAND benötigte Code befindet sich übrigens in der Datei /Windows/TmToolbox.dll (read/write/erase). &lt;br /&gt;
&lt;br /&gt;
Damit dürfte der Grundstein für jegliche Weiterentwicklung gelegt sein.&lt;br /&gt;
&lt;br /&gt;
== Neues Firmware-Image installieren ==&lt;br /&gt;
&lt;br /&gt;
# Auf einen mit FAT32 formatierten USB-Stick folgende Datein kopieren: &lt;br /&gt;
:* flashing.txt&lt;br /&gt;
:* phStbRootApp_256M_0_t.mi&lt;br /&gt;
:* phStbRootApp_256M_1_t.mi&lt;br /&gt;
:* WinCe1.nb0 &lt;br /&gt;
:Die Dateien befinden sich z.B. im Ordner WCE1 der Datei swu.zip&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf ON (DIL Schalter auf Pollin Board)&lt;br /&gt;
# USB-Stick am USB-Port auf der Geräterückseite des Receivers anschließen&lt;br /&gt;
# Receiver einschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# Am Receiver auf Power drücken. Bei Fehlermeldung auf Bildschirm: Anderen USB Stick (oder per SD-Karte + Reader) probieren und/oder Receiver per Fernbedienung einschalten. Wenn alles funktioniert, erscheint eine Anzeige auf dem Bildschirm, daß das Update durchgeführt wird und man den Receiver nicht ausschalten soll, bis das Update eingespielt ist. Falls irgend etwas falsch läuft, startet das Windows CE und zeigt den Telegen-Desktop. Dann nochmal alles überprüfen.&lt;br /&gt;
# Auf dem roten, 4-stelligen Frontdisplay der Box wird nun für die insgesamt 4 Flash-Vorgänge jeweils der Fortschritt in Prozent angezeigt. Achtung: Es werden insgesamt 4 Dateien einzeln geflasht, die Prozentzahl klettert also vier Mal bis auf 100%.&lt;br /&gt;
# Nach kurzer Zeit (1 oder 2 Minuten) erscheint eine Meldung, dass das Software-Update erfolgreich war&lt;br /&gt;
# Receiver ausschalten (Wippschalter auf der Geräterückseite)&lt;br /&gt;
# SW1 auf OFF setzen. &lt;br /&gt;
&lt;br /&gt;
:Nun wird die Box beim Einschalten auf dem TV einen hin- und herwandernden roten Balken zeigen. Die weiteren Programmpunkte sind selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
== WindowsCE ==&lt;br /&gt;
&lt;br /&gt;
*Windows CE 5.0&lt;br /&gt;
*Windows CE Kernel for MIPS (Built on Mar 29 2005 at 14:00:54)&lt;br /&gt;
*Telegent Kernel V0.9.3.16 (Built on Sep  4 2006 at 22:23:55)&lt;br /&gt;
&lt;br /&gt;
User AgentData hat das im Auslieferungszustand auf dem Gerät befindliche WindowsCE ausgelesen (siehe hierzu [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Bestehenden_Inhalt_aus_dem_Flash_auslesen Inhalt aus dem Flash auslesen]). Dadurch kann beispielsweise eine [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#MoreTv_als_Medion_gelabelt mit MoreTV &amp;quot;aktualisierte&amp;quot;] Box nun auch wieder in den Auslieferungszustand zurückversetzt werden. Die [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Update-Prozedur] ist identisch.&lt;br /&gt;
&lt;br /&gt;
== MoreTv als Medion gelabelt ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ein großes Danke gilt den Benutzern Fritz und M. W.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete Soft- und Hardware&lt;br /&gt;
# Festplatte SATA-Anschluß, 160GB oder mehr (im Original 250GB), Formatierung s.u.&lt;br /&gt;
# USB-Stick, FAT32 formatiert&lt;br /&gt;
# Software: [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip dieses] ZIP-Archiv ([https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdate, SWU_Finland_V1.0.3.454)]&lt;br /&gt;
&lt;br /&gt;
Ein Hinweis&lt;br /&gt;
:Beim Start der Box ohne Modifikation wird WindowsCE gestartet und kann mittels USB-Maus und Tastatur bedient werden. Nach erfolgtem Flash-Vorgang ist dies nicht mehr möglich.&lt;br /&gt;
&lt;br /&gt;
Hier nun die Kurzanleitung zum &#039;Tuning&#039;&lt;br /&gt;
* USB-Stick vorbereiten&lt;br /&gt;
:Den Inhalt des Ordner WCE1, aus der Datei [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip swu.zip] (SWU_Finland_V1.0.3.454), auf einen formatierten USB-Stick (FAT32) kopieren und wie [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren hier] beschrieben installieren.&lt;br /&gt;
&lt;br /&gt;
* Festplatte vorbereiten&lt;br /&gt;
:# Auf der einzubauenden Festplatte eine erweiterte Partition mit zwei logischen Laufwerken mit FAT32-Dateisystem anlegen. Mit dem kostenlosen Windows Programm &amp;quot;[http://www.easeus.com/download.htm EASEUS Partition Master 8.0.1 Home Edition]&amp;quot; lassen sich die Partitionen leicht anlegen, unter Linux ist FAT32 im Programm fdisk übrigens der Typ &#039;b&#039;. &lt;br /&gt;
:# Auf das erste logische Laufwerk (minimum 2GB, im Original 19,53GB, das entspricht exakt 20000MB) den gesamten Inhalt des zuvor ausgepackten [https://www.more.tv/softwareupdate/SWU_Finland/SWU_Finland_V1.0.3.454/swu.zip SoftWareUpdates] kopieren.&lt;br /&gt;
:# Die Ordner moreTVn und moreTVn.INIT zu moreTV und moreTV.INIT umbenenen.&lt;br /&gt;
:# Das zweite logische Laufwerk (je größer desto besser, im Original 213,4GB) bleibt leer.&lt;br /&gt;
&lt;br /&gt;
: Die fehlenden Ordner auf der Festplatte werden beim ersten Starten der Box automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
: ACHTUNG: Die USB-Anschlüsse werden nach der Installation von der MoreTV-Software nicht mehr unterstützt. Eine Ausnahme bildet einzig und alleine das [http://www.mikrocontroller.net/articles/Receiver-Mainboard_Plattform_Philips_PNX8950#Neues_Firmwareimage_installieren Flash-Update].&lt;br /&gt;
:USB-Speichersticks und Externe-Festplatten werden zwar noch erkannt und als USBDisk in das Dateisystem eingebunden können aber über die MoreTV-Software nicht angesprochen werden. USB-Keyboard und -Maus werden unter MoreTV nicht mehr erkannt und können auch nicht benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zeitzonen-Einstellung ===&lt;br /&gt;
&lt;br /&gt;
Eigentlich sollte sich die Uhrzeit bei richtigem Empfang automatisch einstellen.&lt;br /&gt;
Dies ist nicht immer der Fall, der folgende Trick hat bei DVB-C geholfen.&lt;br /&gt;
&lt;br /&gt;
==== Methode 1: Werksreset/Ländereinstellung ====&lt;br /&gt;
Bei der Ländereinstellung muß Finnland ausgewählt und als PLZ 00100 (Helsinki) eingegeben werden. Dazu  Setup-&amp;gt;Sonstiges-&amp;gt;Werkseinstellung  aufrufen. Natürlich sind dann alle Einstellungen (Programme) neu einzustellen.&lt;br /&gt;
&lt;br /&gt;
Damit wird die Zeitzone auf Finnland umgestellt +1 Std. Die Finnen haben&lt;br /&gt;
zwar auch Sommerzeit, da die Sommerzeitumstellung aber ja nicht&lt;br /&gt;
funktioniert passt es dann. Das muß allerdings zum Ende der Sommerzeit&lt;br /&gt;
wieder zurückgestellt werden, mit den gleichen Unannehmlichkeiten.&lt;br /&gt;
&lt;br /&gt;
==== Methode 2: Datenbank ändern ====&lt;br /&gt;
&lt;br /&gt;
Alternativ lässt sich die Ländereinstellung auf Dateiebene ändern, hierbei handelt es sich jedoch leider um ein binäres Datenbankformat. Die Konfiguration befindet sich in der Datei /HardDisk/moreTV.persistent/tbConfigurations.xbc welche z.B. über FTP erreichbar ist. Die Datei lässt sich z.B. mit einem Hex-Editor wie GHex2 unter Linux öffnen, es sollte eine Struktur mit Wertenamen und deren Variabeln erkennbar sein. Recht im Anfang befindet sich eine Einstellung &amp;quot;COUNTRY_ID&amp;quot; - nach vier kleinen Werten befindet sich (hier Offset 0x32) eine ASCII-Zahl, z.B. 1 (0x31) für Deutschland(?). In meinem Fall brachte eine Änderung auf 2 (0x32) mit anschließendem Neustart den gewünschten Effekt für die Zeiteinstellung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Kann jemand mit Methode 1 bestätigen, dass 2==Finnland ist?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Die CPU wird pauschal von Linux unterstützt.&lt;br /&gt;
&lt;br /&gt;
Der Kernel ist hier erhältlich:&lt;br /&gt;
*Einstiegsseite: http://www.linux-mips.org/wiki/Main_Page &lt;br /&gt;
*Download: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/&lt;br /&gt;
&lt;br /&gt;
== Interessant zum weiteren Testen ==&lt;br /&gt;
&lt;br /&gt;
*elecard firmware&lt;br /&gt;
*MontaVista Linux Professional Edition&lt;br /&gt;
&lt;br /&gt;
= Unterstützte Codecs =&lt;br /&gt;
&lt;br /&gt;
Quelle: [http://www.synnex.com.tw/oem/mic_link/seminar%20download/y70303.pdf]&lt;br /&gt;
&lt;br /&gt;
*dual: SD MPEG-1/2&lt;br /&gt;
*single: SD MPEG-4, WM9, H264,DivX; HD MPEG-2 (1080i), WM9(720p)&lt;br /&gt;
*Audio: dual stereo (2.0 + 2.0),MPEG-1, Dolby AC-3&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen = &lt;br /&gt;
&lt;br /&gt;
===Platinen===&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NzQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_T_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-T Tuner (390 052, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NjQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_C_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-C Tuner (390 053, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/MzQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/RS232_Einbaubuchse.html Pollin : RS232-Einbaubuchse (721 856, 0,25€)], zur Befestigung werden noch zwei passende Sechskant-Schraubbolzen benötigt&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NDQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/USB_2_0_Einbaubuchse.html Pollin : USB 2.0-Einbaubuchse (721 855, 0,25€)]&lt;br /&gt;
&lt;br /&gt;
===Zubehör===&lt;br /&gt;
:Netzteil, Gehäuse, Fernbedienung:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NjUwOTQ2OTk-/Stromversorgung/Netzgeraete/Festspannungs_Netzgeraete/Schaltnetzteil_DELTA_EADP_50DF_12_V_4_16_A.html Pollin : Schaltnetzteil DELTA EADP-50DF, 12 V-/4,16 A (350 943 , 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDg4OTM1OTk-/Bauelemente_Bauteile/Gehaeuse/Stahlblech_Gehaeuse_mit_Frontblende.html Pollin : Stahlblech-Gehäuse mit Frontblende (460 119, 2,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/Nzc5OTczOTk-/SAT_Antennentechnik/Satelliten_Technik/Fernbedienungen/Infrarot_Fernbedienung_RCX155.html Pollin : Infrarot-Fernbedienung RCX155 (620 022, 1,95€)]&lt;br /&gt;
:SATA:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NTQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Kabel.html Pollin : SATA-Kabel, 2x SATA-Stecker, 0,35m (721 854, 0,50€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDM0OTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/HDD_Stromversorgungskabel.html Pollin : PC-Stromversorgungskabel, 2x 5,25&amp;quot;- Stecker, 2x HDD-Stecker, 70mm (720 569, 0,20€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDI1ODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter (721 475, 0,85)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTUwOTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter, mit Rastnase! (720 948, 0,55)]&lt;br /&gt;
:WLAN:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDY5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_miniPCI_Karte_XG_603.html Pollin : WLAN miniPCI-Karte XG-603 (711 035, 3,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MjUwOTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antennen_Adapterkabel.html Pollin : WLAN-Antennen-Adapterkabel (710 947, 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTM5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne 4 dBi. Länge 140 mm Reverse-SMA (710 068, 1,95€)] oder alternativ &lt;br /&gt;
*[http://www.pollin.de/shop/dt/NzY3ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_Antenne_FSC_5_dBi_RP_SMA.html Pollin : WLAN-Antenne, mit Standfuß, Reverse-SMA, 5 dBi (711 232, 3,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDE0OTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : WLAN-Antenne, Reverse-SMA, 5 dBi (710 585, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.pollin.de/shop/dt/ODI5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antenne.html Pollin : WLAN-Antenne, mit magnetischem Standfuß, Reverse-SMA, 7 dBi (711 071, 6,95€)] oder alternativ&lt;br /&gt;
*[http://www.reichelt.de/?ACTION=3;ARTICLE=61136;PROVID=2402 Reichelt: LAN DN-70100, WLAN-Antenne, Reverse-SMA, 5 dBi (LAN DN-70100, 3,65€)]&lt;br /&gt;
 &lt;br /&gt;
:DVB-T und DVB-C:&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MzQ3ODI0OTk-/SAT_Antennentechnik/Kabel/Antennen_Anschlusskabel_75_150_mm.html Pollin : Antennen-Anschlusskabel 75 Ω, 150 mm (571 256, 0,15€)] zum Durchschleifen des DVB-Signals&lt;br /&gt;
:DVB-T:&lt;br /&gt;
*Bitte beachten: Passive antennen sind grundsätzlich nicht zu empfehlen. Zumindest nicht im Zimmer. Ausser man wohnt am Sender :D&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MTc4ODI0OTk-/SAT_Antennentechnik/DVB_T_DVB_C/Antennen/DVB_T_Antenne_QOSMIO.html Pollin : DVB-T Antenne QOSMIO, passiv (571 128, 2,95€)]&lt;br /&gt;
:DVB-S:&lt;br /&gt;
*[http://www.elsner-computer.de/product_info.php?info=p430032_Dream-Multimedia-Tuner-7020S---7020Si---DVB-S.html Tuner 7020S Elsner Shop 39€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!!]&lt;br /&gt;
*[http://www.hm-sat-shop.de/receiver-digital-dreambox/sat-tuner-fuer-dreambox-7020-philips.html HM Sat Shop:DVB-S Tuner zum Sat-Umbau, 49€.] &lt;br /&gt;
*[http://www.devilcards.de/Ersatzteile-Dreambox/Dream-Multimedia-Tuner-7020S-7020Si-DVB-S::225.html DevilCards Dream Multimedia Tuner 7020S DVB-S 37€ mit Alps Tuner, läuft (noch?) nicht unter WIN CE !!! ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Entweder zwei bestücken oder exklusiv einen. Mischbetrieb scheinbar nicht möglich!&lt;br /&gt;
&lt;br /&gt;
*...außerdem Plexiglas/Kunststoff-Zuschnitt (13cm x 15cm) als HD-Träger sowie diverse Schrauben aus der PC-Grabbelkiste (7* Gehäuse, 1* Front-USB, 4* Schaltnetzteil, 6* Mainboard, 4* HD-Träger, 4* HD, 3* Frontpanel)&lt;br /&gt;
*zu guter letzt wäre ein passender [http://www.mikrocontroller.net/attachment/106125/box.jpg Berührungsschutz für das Schaltnetzteil] noch eine sinnvolle Maßnahme zur Vermeidung von Personenschäden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== technische Daten ==&lt;br /&gt;
:Hauptprozessor PNX-8950 CPU&lt;br /&gt;
:Flash-ROM 64 MB&lt;br /&gt;
:RAM-Speicher 256 MB&lt;br /&gt;
:Festplatte 250 GB (bei original Medion-Gerät) &lt;br /&gt;
*Conditional Access Interface&lt;br /&gt;
:1 Steckplatz (PCMCIA, DVB Common Interface Standard)&lt;br /&gt;
:1 Steckplatz (CONAX und andere)&lt;br /&gt;
*A/V &amp;amp; Data In/Out-Anschlüsse extern&lt;br /&gt;
:Video CVBS/S-VIDEO-Ausgang (PAL)&lt;br /&gt;
:TV-SCART (PAL/RGB-Ausgang)&lt;br /&gt;
:VCR-SCART&lt;br /&gt;
:Audio L/R-Ausgang&lt;br /&gt;
:Optical S/PDIF Digital Audio- oder Dolby AC-3 Bitstream-Ausgang&lt;br /&gt;
:serielle Schnittstelle (9-poliger D-Sub Type)&lt;br /&gt;
:RJ 45 (LAN 10/100MBit)&lt;br /&gt;
:WLAN-Antennensockel (Reverse-SMA Buchse)&lt;br /&gt;
:2x USB (1 Vorder-/Rückseite)&lt;br /&gt;
:2x Tuner (Philips DVB-T Tuner TU1216L/IVP über Input/Loop-Through-Connector F-Type, IEC 169-2, Buchse/Stecker)&lt;br /&gt;
*Ports/Anschlüsse intern&lt;br /&gt;
:3x USB 2.0 (einer davon über Kabel mit Front-USB verbunden)&lt;br /&gt;
:2x SATA-150&lt;br /&gt;
:RS232 (Console)&lt;br /&gt;
:miniPCI für WLAN-Karte XG-603 (über Verbindungskabel mit U.FL-Stecker an rückwärtige Reverse-SMA Buchse)&lt;br /&gt;
*Tuner &amp;amp; Service Decoder&lt;br /&gt;
:2 Philips DVB-T Tuner TU1216L/IVP&lt;br /&gt;
:RF-Anschlussimpedanz 75 Ohm&lt;br /&gt;
:Input/Loop-through-Connector F-Type, IEC 600169-2/24 (IEC-F-Anschluss)&lt;br /&gt;
:Frequenzbereich 45 ~ 860 MHz&lt;br /&gt;
:Signalpegel Eingang min. 74 dBm&lt;br /&gt;
:Modulation QPSK, 16 und 64 QAM&lt;br /&gt;
*MPEG Transport-Stream A/V Decoding&lt;br /&gt;
:Transport-Stream ISO/IEC 13818-1 MPEG-2&lt;br /&gt;
:Profile-Level 2x MPEG-2 MP@ML (PIP)&lt;br /&gt;
:Aspect Ratio 4:3, 16:9, Pan &amp;amp; Scan, Letterbox&lt;br /&gt;
:Videoauflösung 720x576&lt;br /&gt;
:Audio-Decoding MPEG-1 Layer 1, 2, 3&lt;br /&gt;
*Stromversorgung&lt;br /&gt;
:Eingangsspannung 100~240V AC, 1,5 A, 50/60 Hz&lt;br /&gt;
:Stromaufnahme ohne HDD max. 2 A&lt;br /&gt;
:Energieverbrauch im Betrieb Max. 50 W, Standby: 12 W&lt;br /&gt;
:Schutz durch Interne Sicherung (auf Schaltnetzteil eingelötet)&lt;br /&gt;
:HDD-Stromversorgung on Board&lt;br /&gt;
*Physische Spezifikationen&lt;br /&gt;
:Größe/Abmessungen (BxHxT) 440 x 265 x 70 mm&lt;br /&gt;
:Betriebstemperatur +5°C - +40°C&lt;br /&gt;
&lt;br /&gt;
== Jumper ==&lt;br /&gt;
* J1: JTAG (Header 2x5, nicht bestückt)&lt;br /&gt;
* J2: RS-232 Console (3:RX=RS232.3, 5:TX=RS232.2, 9:GND=RS232.5, Header 2x5)&lt;br /&gt;
* J4: (Header 2*10)&lt;br /&gt;
* J6: (Header 2x1, neben HD-Power)&lt;br /&gt;
* J8: (Header 2x3 nicht bestückt)&lt;br /&gt;
* J27: Massepunkt(1:GND, 2:GND, Header 2*1, zwischen SCART und Audio-Buchse)&lt;br /&gt;
* J30: USB Port 4 (über 4 pol Kabel verbunden mit Front USB, Header 1x4) &lt;br /&gt;
* J31: USB Port 3 (Header 1x4)&lt;br /&gt;
* J32: (Header 2x1, nicht bestückt, neben SW1)&lt;br /&gt;
* J34: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 1, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J35: (Header 2x1, nicht bestückt, neben Tuner 1)&lt;br /&gt;
* J36: an PIN 32 DVB-T-Tuner (Header 2x1, neben Tuner 2, bei DVB-C-Tuner nicht benutzt)&lt;br /&gt;
* J37: (Header 2x1, nicht bestückt, neben Tuner 2)&lt;br /&gt;
* J41: Anschluß Bedien-PCB, Infrarot-Receiver (5 pol)&lt;br /&gt;
* J42: Anschluß Bedien-PCB, Tastatur + Display (10 pol)&lt;br /&gt;
* J43: 12V von Schaltnetzteil&lt;br /&gt;
* J45: nicht bestückt, Hohlbuchse, 12V Spannungsversorgung&lt;br /&gt;
* J46: USB Port 2 (Header 1x4)&lt;br /&gt;
* J47: SPDIF-Ausgang&lt;br /&gt;
&lt;br /&gt;
== LEDs ==&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED1: grün&amp;lt;/span&amp;gt;, blinkt, wenn am rückwärtigen USB-Anschluss beispielsweise eine Maus angeschlossen ist (zwischen U1 und nicht bestücktem HDMI-Chip U42)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED2: blau&amp;lt;/span&amp;gt; (neben Befestigungsloch H3)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED3: rot&amp;lt;/span&amp;gt;, wahrscheinlich Netzkontroll-LED (Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED4: grün&amp;lt;/span&amp;gt;, leuchtet nur ganz schwach (neben LED3, Nähe J4)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED5: grün&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:blue;color:white&amp;quot;&amp;gt;LED6: blau&amp;lt;/span&amp;gt; (neben Prozessor)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:red;color:white&amp;quot;&amp;gt;LED7: rot&amp;lt;/span&amp;gt; (neben LED5)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;background-color:lightgreen;color:black&amp;quot;&amp;gt;LED8: grün&amp;lt;/span&amp;gt;, zeigt HD-Schreibzugriff bei einer Aufnahme an (neben J6, USB Port 2)&lt;br /&gt;
&lt;br /&gt;
==Varianten==&lt;br /&gt;
===DVB-T===&lt;br /&gt;
===DVB-C===&lt;br /&gt;
Die Box kann mit großer Sicherheit keine QAM256 modulierten Programme wiedergeben.&lt;br /&gt;
Programme, die QAM64 moduliert sind werden problemlos und sicher wiedergegeben&lt;br /&gt;
:Einwand: Zwar bekomme auch ich keine QAM256-Kanäle rein, aber laut den Datenblättern können sowohl Decoder als auch Tuner QAM256. Eventuell mal mit Verstärkern/Dämpfern testen... (adlerweb, 7.Apr 2011)&lt;br /&gt;
&lt;br /&gt;
== Bilder/Innenleben ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;225&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Bild:moretv_1.jpg|Gesamtansicht&lt;br /&gt;
Bild:moretv_2.jpg|JTAG-Anschluss für LPC921F (unter anderem) und Platz zur Montage einer 3,5&amp;quot; Festplatte&lt;br /&gt;
Bild:moretv_3.jpg|Board komplett&lt;br /&gt;
Bild:moretv_4.jpg|DVI – nicht bestückt&lt;br /&gt;
Bild:moretv_5.jpg|DVB-T Tuner&lt;br /&gt;
Bild:moretv_6.jpg|CPU RAM etc.&lt;br /&gt;
Bild:moretv_7.jpg|mini PCI, Sata, CI-Slot, Smartcard&lt;br /&gt;
Bild:moretv_8.jpg|Rückseite komplett&lt;br /&gt;
Bild:moretv_9.jpg|CI-Controller&lt;br /&gt;
Bild:moretv_10.jpg|Sata-Controller&lt;br /&gt;
Bild:moretv_11.jpg|RAM und TDA8024T SmartCard-Interface&lt;br /&gt;
Bild:moretv_12.jpg|LAN DP83816 (fast identisch zu SiS 900)&lt;br /&gt;
Bild:moretv_13.jpg|SW1 auf ON = SW-Update&amp;lt;br/&amp;gt;SW2 auf ON = JTAG Enable&lt;br /&gt;
Bild:moretv_14.jpg|Stromversorgung&lt;br /&gt;
Bild:moretv_15.jpg|Anschluss J4&lt;br /&gt;
Bild:EJTAG.jpg|CON1: EJTAG für den PNX8950&lt;br /&gt;
Bild:Tuner_Jumper1.JPG|Wie man sieht, müssen keinerlei Jumper gesetzt sein, um DVB-T empfangen zu können.&lt;br /&gt;
Bild:Console.png|RS-232 Console auf J2&lt;br /&gt;
Bild:lpc_8051_power.png|3,3Volt auf J4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schnittstellen ==&lt;br /&gt;
&lt;br /&gt;
* 4x USB (bei Verwendung von moreTV werden die USB-Ports nicht mehr unterstützt)&lt;br /&gt;
** 3x intern: J31 USB Port3, J46 USB Port2&lt;br /&gt;
** 2x extern: J30 USB Port4 (Frontpanel), CON9&lt;br /&gt;
** Pinout: PIN4:GND/Schwarz, PIN3:D+/Grün, PIN2:D-/Weiss, Pin1:+5V/Rot&lt;br /&gt;
&lt;br /&gt;
* 2x RS-232&lt;br /&gt;
:* 1x intern, Pinbelegung (J2)&lt;br /&gt;
::* &#039;&#039;&#039;hier einfügen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:*1x extern, Pinbelegung (J33):&lt;br /&gt;
::* 6 gnd&lt;br /&gt;
::* 5 rx1 r2in MAX2333 (U10)&lt;br /&gt;
::* 4 rx2 r1in MAX2333 (U10)&lt;br /&gt;
::* 3 tx1 T2out MAX2333 (U10)&lt;br /&gt;
::* 2 tx2 T1out MAX2333 (U10)&lt;br /&gt;
::* 1 gnd  0&lt;br /&gt;
::* das O ist die Markierung auf der Platine&lt;br /&gt;
&lt;br /&gt;
== Chips ==&lt;br /&gt;
Übersicht über die verwendeten Bausteine mit Links auf ensprechende Datenblätter, Quellen etc.&lt;br /&gt;
&lt;br /&gt;
* Multimedia-CPU Philips PNX8950EH/M2/S1&lt;br /&gt;
**[http://datasheet.octopart.com/PNX8950EH/M2/S1%2C55-NXP-datasheet-8325175.pdf Datasheet PNX8950EH/M2/S1]&lt;br /&gt;
**[http://www.brightsign.biz/documents/HD2000HardwareGuide.pdf Brightsign Hardwareguide]&lt;br /&gt;
**[http://www.kanecomputing.co.uk/pdfs/mds_mds810.pdf MDS-810]&lt;br /&gt;
*[http://www.alldatasheet.com/datasheet-pdf/pdf/98585/SAMSUNG/K4H511638C-UCCC.html 4x 512 MBit DDR SDRAM SAMSUNG K4H511638C-UCCC]&lt;br /&gt;
* [http://www.hynix.com/datasheet/pdf/flash/HY27(U_S)S(08_16)121A%20Series(Rev1.3).pdf HYNIX HY27US08121A 512 Mbit NAND Flash]&lt;br /&gt;
* [http://www.siliconimage.com/docs/SiI-DS-0102-D.pdf SiI3512 SATA150 Controller]&lt;br /&gt;
*[http://www.national.com/ds/DP/DP83816.pdf 10/100 Mbps PCI Ethernet-Controller NATIONAL DP83816]&lt;br /&gt;
* High Speed USB PCI Host Controller Philips ISP1561BM [http://www.nxp.com/acrobat_download2/expired_datasheets/ISP1561_2.pdf Datasheet]&lt;br /&gt;
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1068 MAX3222]&lt;br /&gt;
* PNX8510HW [http://www.datasheetcatalog.org/datasheet/philips/PNX8510_PNX8511_4.pdf Datasheet]&lt;br /&gt;
* Bedienteil mit LED-Display, Infrarotempfänger usw.&lt;br /&gt;
* In der DVB-C-Version: Philips CU1216 DVB-C Tuner [http://read.pudn.com/downloads138/sourcecode/others/589797/CU1216L-3-datasheet.pdf Datasheet]&lt;br /&gt;
** Philips TDA10023 (DVB-C Channel Decoder) [http://www.datasheetdownload.com/download.php?id=677273 Datasheet]&lt;br /&gt;
* In der DVB-T-Version: Philips TU1216 DVB-T Tuner&lt;br /&gt;
** Philips TDA10046 (DVB-T Channel Decoder) [http://www.nxp.com/acrobat/literature/9397/75009522.pdf Spec Sheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda1004x.c - linuxtv.org Frontend Treiber]&lt;br /&gt;
** Philips TDA6650 (5 V mixer/oscillator and low noise PLL synthesizer for hybrid terrestrial tuner) [http://www.nxp.com/documents/data_sheet/TDA6650TT_6651TT.pdf Datasheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda665x.c - linuxtv.org Tuner Treiber]&lt;br /&gt;
* Philips TDA8024T (IC Card Interface) [http://www.nxp.com/documents/data_sheet/TDA8024.pdf Datasheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nicht bestückte ICs:&lt;br /&gt;
* U42 DVI (wahrscheinlich [http://www.nxp.com/documents/data_sheet/TDA9983B.pdf Philips TDA9983])&lt;br /&gt;
* U40 ????&lt;br /&gt;
* U41 ????&lt;br /&gt;
* U44 ????&lt;br /&gt;
* U45 ????&lt;br /&gt;
* U48 ????&lt;br /&gt;
* U51 ????&lt;br /&gt;
* U59 ????&lt;br /&gt;
&lt;br /&gt;
== Fernbedienung ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP]] Codes:  &lt;br /&gt;
&lt;br /&gt;
Protokoll: NEC&amp;lt;br /&amp;gt;&lt;br /&gt;
Geräte ID: 0x6B44&amp;lt;br /&amp;gt;&lt;br /&gt;
Tastencodes:&amp;lt;br &amp;gt;&lt;br /&gt;
* 00	0&lt;br /&gt;
* 01	EXIT&lt;br /&gt;
* 02	8&lt;br /&gt;
* 03	INFO&lt;br /&gt;
* 04	4&lt;br /&gt;
* 05    Stumm&lt;br /&gt;
* 06	HELP&lt;br /&gt;
* 07	OK&lt;br /&gt;
* 08	2&lt;br /&gt;
* 09	REC&lt;br /&gt;
 &lt;br /&gt;
* 0B	Marker&lt;br /&gt;
* 0C	6&lt;br /&gt;
&lt;br /&gt;
* 0E	Down&lt;br /&gt;
* 0F	V-&lt;br /&gt;
* 10	1&lt;br /&gt;
* 11	AV&lt;br /&gt;
* 12	9&lt;br /&gt;
* 13	Right&lt;br /&gt;
* 14	5&lt;br /&gt;
* 15	Archiv&lt;br /&gt;
&lt;br /&gt;
* 17	P-&lt;br /&gt;
* 18	3&lt;br /&gt;
* 19	Up&lt;br /&gt;
* 1A	Yellow&lt;br /&gt;
* 1B	Left&lt;br /&gt;
* 1C	7&lt;br /&gt;
* 1D	Stop/LIVE&lt;br /&gt;
* 1E	RED&lt;br /&gt;
&lt;br /&gt;
* 40	MORE&lt;br /&gt;
* 41	LIST&lt;br /&gt;
* 42	FFWD&lt;br /&gt;
&lt;br /&gt;
* 46    Play&lt;br /&gt;
&lt;br /&gt;
* 48	TV&lt;br /&gt;
* 49	#&lt;br /&gt;
* 4A	GREEN&lt;br /&gt;
&lt;br /&gt;
* 4C	EPG&lt;br /&gt;
&lt;br /&gt;
* 4E	SLOW&lt;br /&gt;
&lt;br /&gt;
* 50	P+&lt;br /&gt;
* 51	*&lt;br /&gt;
* 52	POWER&lt;br /&gt;
&lt;br /&gt;
* 54	FREW&lt;br /&gt;
&lt;br /&gt;
* 56	PAUSE&lt;br /&gt;
&lt;br /&gt;
* 58	Setup&lt;br /&gt;
* 59	TEXT&lt;br /&gt;
* 5A	BLUE&lt;br /&gt;
&lt;br /&gt;
* 5C	Chap+&lt;br /&gt;
&lt;br /&gt;
* 5E	PiP&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
Übersicht über verwendete Software (Betriebssysteme, Compiler, Tools, etc)&lt;br /&gt;
&lt;br /&gt;
* Software Update: [http://www.mikrocontroller.net/attachment/105209/swu.zip swu.zip]&lt;br /&gt;
&lt;br /&gt;
* Bootloader&lt;br /&gt;
:Eventuell [http://www.denx.de/wiki/U-Boot/SourceCode U-Boot] support mit diesen 4 patches:&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachents/20061204/e9922ec2/attachment.obj pnx8550support.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061206/556029b0/attachment.obj nxp_i2c.diff.gz]&lt;br /&gt;
:#  [http://lists.denx.de/pipermail/u-boot/attachments/20061211/bff13619/attachment.obj nxp_pci.diff.gz]&lt;br /&gt;
:# [http://lists.denx.de/pipermail/u-boot/attachments/20061211/8d42666e/attachment.obj mips_timer2.diff]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overview&lt;br /&gt;
+The Silverbox is a development platform based on the NXP PNX8550&lt;br /&gt;
+(Nexperia) media processor.  It consists of a MIPS32 compatible PR4450&lt;br /&gt;
+core, accompanied by two TriMedia processors.  Typical use for the&lt;br /&gt;
+PNX8550 is in settop box and advanced analogue and digital TV sets.&lt;br /&gt;
+&lt;br /&gt;
+This first version of U-Boot for this platform supports a minimal set&lt;br /&gt;
+of commands and hardware.  Feature to be added in the near future are&lt;br /&gt;
+PCI bus, Ethernet, NAND flash and USB support.&lt;br /&gt;
+&lt;br /&gt;
+Boot Methods&lt;br /&gt;
+U-Boot for the Silverbox is typically loaded into SDRAM using an EJTAG&lt;br /&gt;
+probe.  The load address and entry point is 0xA0010000.&lt;br /&gt;
+&lt;br /&gt;
+As NAND flash support is not yet available a single page NAND flash&lt;br /&gt;
+loader is also not available.  This limits this U-Boot version, but&lt;br /&gt;
+a single page loader based on U-Boot 1.1.3 is available on request.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Screenshot der Windows CE 5.0 Oberfläche (über VNC mit der Box verbunden http://efonvnc.sourceforge.net/)&lt;br /&gt;
&lt;br /&gt;
[[Datei:CEscreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Anwendungen und Ideen =&lt;br /&gt;
==Realisierte Projekte/Anwendungen==&lt;br /&gt;
&lt;br /&gt;
=== FTP-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des ftp-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\ftpsvr.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den FTP-Server [http://www.mikrocontroller.net/attachment/104995/ftpsvr.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
* Als Login-Daten für den FTP-Server können beliebige Werte eingeben, z.B.&lt;br /&gt;
::   Benutzer: root&lt;br /&gt;
::   Passwort: root&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen:&#039;&#039;&#039;&lt;br /&gt;
* Die Exe-Dateien aus dem Windows-Verzeichnis können aber nicht bzw. nicht alle kopiert werden. Im Total-Commander werden die Attribute 555 angezeigt. Vielleicht hat ja noch jemand eine Idee, wie man das überwinden kann. Das sind Dateien, die im ROM angeordnet und bereits auf feste Adressen geladen sind, so daß sie direkt ausführbar sind - also nicht direkt kopier- und an anderer Stelle verwendbar. Idee: wahrscheinlich finden sich diese Dateien in einem Platform-Kit oder einer EVC-Version (EmbeddedVisualC..) von Microsoft.&lt;br /&gt;
* Der FTP-Server unterstützt nicht alle Befehle des FTP-Protokolls, so ist es mit einigen Clients z.B. nicht möglich eine Datei zu überschreiben - die aktuelle Datei löschen und dann die Neue in den Ordner kopieren funktioniert jedoch.&lt;br /&gt;
&lt;br /&gt;
=== VNC-Server installieren  ===&lt;br /&gt;
* Auf der Festplatte in der Datei &amp;quot;moreTV.cfg&amp;quot; im Abschnitt &amp;quot;Shell_startup&amp;quot; die Zeile für den Start des vnc-Servers einfügen&lt;br /&gt;
::  &amp;lt;Shell_startup&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\winvnc.exe&amp;quot;/&amp;gt;  &amp;lt;!-- diese Zeile einfügen --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;\Windows\explorer.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\DC.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;!--  &amp;lt;run cmd=&amp;quot;$H\moreTV\Ivon.exe&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
::  &amp;lt;run cmd=&amp;quot;$H\moreTV\MaxAktiv.exe&amp;quot;/&amp;gt;&lt;br /&gt;
::  &amp;lt;/Shell_startup&amp;gt;&lt;br /&gt;
* Den VNC-Server [http://www.mikrocontroller.net/attachment/105859/winvnc.exe hier] downloaden und nach $H:\ kopieren, also in das Hauptveryeichnis des ersten logischen Laufwerkes der Festplatte.&lt;br /&gt;
&lt;br /&gt;
Sofern More.TV läuft ist auf dem Client nur ein schwarzer Bildschirm zu sehen. Minimiert man es lässt sich die WinCE-Oberfläche normal nutzen.&lt;br /&gt;
&lt;br /&gt;
==Anwendungsideen==&lt;br /&gt;
&lt;br /&gt;
===Unter Linux===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* Asterisk Server&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Multimedia Client/Server&lt;br /&gt;
* Wetterstation logging Server&lt;br /&gt;
* Solar logging Server&lt;br /&gt;
&lt;br /&gt;
===Unter WinCE===&lt;br /&gt;
* Festplattenreceiver&lt;br /&gt;
* NAS&lt;br /&gt;
* Car-PC&lt;br /&gt;
* Media Portal Client/Server&lt;br /&gt;
* Kamera Server&lt;br /&gt;
* Spielekonsole für minigames&lt;br /&gt;
* Download Server&lt;br /&gt;
&lt;br /&gt;
==== ROM entpacken / erweitern ====&lt;br /&gt;
Über die Software [http://www.xs4all.nl/~itsme/projects/xda/dumprom.html dumprom] soll sich die Systempartition entpacken lassen, mit [http://www.xs4all.nl/~itsme/projects/xda/romtools.html romtools] wieder zusammenbauen. Über diesen Weg könnte es möglich sein eine bestehende CE-Installation um weitere Funktionen zu ergänzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Hardware-Mods===&lt;br /&gt;
====SATA Power-Mod====&lt;br /&gt;
Der interne Molex für die SATA-Platte liefert an der +12V-Schiene nur ca. 11V welche unter Last bis auf ca. 10V einbrechen können. Für den Anlaufstrom vor allem älterer Festplatten kann dies ggf. zu wenig sein.&lt;br /&gt;
&lt;br /&gt;
Ich habe die +12V der Festplatte vom Molex getrennt und direkt mit der 12V-Schiene des Netzteils verbunden. Da die Kommandos zum Abschalten der Festplatte per SATA gegeben werden ist der Standby-Betrieb durch diese Änderung nicht beeinträchtigt.&lt;br /&gt;
&lt;br /&gt;
= weitergehende Infos im Netz =&lt;br /&gt;
Alles was noch weiterführende Infos bietet. Andere Wikis, Beiträge, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.oohito.com/wince/mips_o_j.htm MIPS FTP Server]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56117</id>
		<title>Receiver-Mainboard Plattform Philips PNX8950</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Receiver-Mainboard_Plattform_Philips_PNX8950&amp;diff=56117"/>
		<updated>2011-03-29T19:21:01Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Chips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Links =&lt;br /&gt;
Hier nur die wichtigsten Links (Hauptdiskussionsthread und andere Wikis), den Rest unter &amp;quot;weitergehende Infos im Netz&amp;quot;&lt;br /&gt;
* Disskussionsthread [http://www.mikrocontroller.net/topic/210759 Pollin - Receiver-Mainboard mit Twin DVB-T/C Tuner, NXP PNX8950EH]&lt;br /&gt;
&lt;br /&gt;
* Bedienungsanleitung [http://www1.medion.de/downloads/download.pl?lang=de&amp;amp;filename=bda_md29052_de.pdf&amp;amp;id=7946&amp;amp;type=anleitungen]&lt;br /&gt;
&lt;br /&gt;
= Übersicht Features =&lt;br /&gt;
===Betriebssysteme===&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Windows CE 5.0&amp;quot;&lt;br /&gt;
**Windows CE Kernel for MIPS Built on Mar 29 2005 at 14:00:54&lt;br /&gt;
**Telegent Kernel V0.9.3.16, Built on Sep  4 2006 at 22:23:55&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;MoreTv! Als Medion gelabelt&amp;quot; - Danke an die User M. W. und Fritz.&lt;br /&gt;
** Erst mal die neue Firmware flashen&lt;br /&gt;
**1. SW1 auf ON (DIL Schalter auf Pollin Board)&lt;br /&gt;
**2. Inhalt von [http://www.mikrocontroller.net/attachment/105209/swu.zip] auf USB-Stick (Fat32) kopieren und HINTEN an den Receiver stecken.&lt;br /&gt;
**3. Receiver hinten am Netzteil einschalten&lt;br /&gt;
**4. Am Receiver vorne auf Power drücken. Bei Fehlermeldung auf Bildschirm: Anderen USB Stick probieren und/oder Receiver per Fernbedienung einschalten. Wenn alles funktioniert, erscheint eine Anzeige auf dem Bildschirm, daß das Update durchgeführt wird und man den Receiver nicht ausschalten soll, bis das Update eingespielt ist. Falls irgend etwas falsch läuft, startet das Windows CE und zeigt den Telegen-Desktop. Dann nochmal alles überprüfen.&lt;br /&gt;
**5. Nach kurzer Zeit (1 Minute oder 2) erscheint eine Meldung, dass das Software Update erfolgreich war&lt;br /&gt;
**6. Receiver am Netzteil ausschalten.&lt;br /&gt;
**7. SW1 auf OFF setzen.&lt;br /&gt;
*&lt;br /&gt;
**Nun wird die Box beim Einschalten einen hin- und herwandernden roten Balken zeigen. Für den eigentlichen Betrieb sind folgende Schritte notwendig:&lt;br /&gt;
** Extended Partition mit zwei Laufwerken anlegen. (Fat32)&lt;br /&gt;
&lt;br /&gt;
** Bei einer 250GB Platte:&lt;br /&gt;
** Auf das erste Laufwerk (19,53GB) den Inhalt der Datei SWU.zip [http://www.mikrocontroller.net/attachment/105209/swu.zip] kopieren.&lt;br /&gt;
** Auf das zweite Laufwerk (213,4GB) den Ordner timeshift_0.ts anlegen.&lt;br /&gt;
&lt;br /&gt;
** Die Ordner moreTVn und moreTVn.INIT zusätzlich noch einmal einfügen und zu moreTV und moreTV.INIT umbenenen.&lt;br /&gt;
** Leeren Ordner moreTV.persistent anlegen und leeren Ordner IE6 Files anlegen.&lt;br /&gt;
** Ordner WCE1 und die Datei swu.xml löschen, sonst startet die Box nicht.&lt;br /&gt;
** Einen Ordner DC auf dem zweiten Laufwerk anlegen und die Datei dlc_persistency.txt [http://www.mikrocontroller.net/attachment/105212/dlc_persistency.txt] einfügen. Anschließend diese Datei in dlc_persistency.dat umbenennen sonst startet die Box nicht.&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Linux&amp;quot;&lt;br /&gt;
:Der uC wird pauschal von Linux unterstützt.&lt;br /&gt;
:Interessante Versionen zum weiteren Testen sind:&lt;br /&gt;
**Dreambox Image&lt;br /&gt;
**elecard firmware&lt;br /&gt;
**MontaVista Linux Professional Edition&lt;br /&gt;
&lt;br /&gt;
===Unterstützte Codecs===&lt;br /&gt;
&lt;br /&gt;
*dual: &lt;br /&gt;
:SD MPEG-1/2&lt;br /&gt;
*single:&lt;br /&gt;
:SD MPEG-4, WM9, H264,DivX; HD MPEG-2 (1080i), WM9(720p)&lt;br /&gt;
&lt;br /&gt;
*Audio: &lt;br /&gt;
:dual stereo (2.0 + 2.0),MPEG-1, Dolby AC-3&lt;br /&gt;
&lt;br /&gt;
[http://www.synnex.com.tw/oem/mic_link/seminar%20download/y70303.pdf Quelle Codecs]&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen = &lt;br /&gt;
&lt;br /&gt;
===Platinen:===&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NzQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_T_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-T Tuner (390 052, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NjQ5OTA2OTk-/Bausaetze_Module/Module/Receiver_Mainboard_mit_Twin_DVB_C_Tuner.html Pollin : Receiver-Mainboard mit Twin DVB-C Tuner (390 053, 7,95€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/MzQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/RS232_Einbaubuchse.html Pollin : RS232-Einbaubuchse (721 856, 0,25€)]&lt;br /&gt;
* [http://www.pollin.de/shop/dt/NDQxODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/USB_2_0_Einbaubuchse.html Pollin : USB 2.0-Einbaubuchse (721 855, 0,25€)]&lt;br /&gt;
&lt;br /&gt;
===Zubehör:===&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NjUwOTQ2OTk-/Stromversorgung/Netzgeraete/Festspannungs_Netzgeraete/Schaltnetzteil_DELTA_EADP_50DF_12_V_4_16_A.html Pollin : Schaltnetzteil DELTA EADP-50DF, 12 V-/4,16 A (350 943 , 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDg4OTM1OTk-/Bauelemente_Bauteile/Gehaeuse/Stahlblech_Gehaeuse_mit_Frontblende.html Pollin : Stahlblech-Gehäuse mit Frontblende (460 119, 2,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/Nzc5OTczOTk-/SAT_Antennentechnik/Satelliten_Technik/Fernbedienungen/Infrarot_Fernbedienung_RCX155.html Pollin : Infrarot-Fernbedienung RCX155 (620 022, 1,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDY5ODgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/WLAN_miniPCI_Karte_XG_603.html Pollin : WLAN miniPCI-Karte XG-603 (711 035, 3,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MzQ3ODI0OTk-/SAT_Antennentechnik/Kabel/Antennen_Anschlusskabel_75_150_mm.html Pollin : Antennen-Anschlusskabel 75 Ω, 150 mm (571 256, 0,15€)]&lt;br /&gt;
*Pollin : SATA-Kabel, 2x SATA-Stecker, 0,35m (721 854, 0,50€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDI1ODcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/SATA_Stromversorgungsadapter.html Pollin : SATA-Stromversorgungsadapter (721 475, 0,85)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MDM0OTcyOTk-/Computer_und_Zubehoer/Hardware/Kabel_Stecker_Adapter/HDD_Stromversorgungskabel.html Pollin : PC-Stromversorgungskabel, 2x 5,25&amp;quot;- Stecker, 70mm (720 569, 0,20€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/MjUwOTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Antennen_Adapterkabel.html Pollin : Wireless LAN Antennen-Adapterkabel (710 947, 4,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NjAwOTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahl_Antenne.html Pollin : Wireless LAN Rundstrahl-Antenne (710 993, 1,95€)]&lt;br /&gt;
*[http://www.pollin.de/shop/dt/NDE0OTgyOTk-/Computer_und_Zubehoer/Netzwerktechnik/Wireless_LAN/Wireless_LAN_Rundstrahlantenne.html Pollin : Wireless LAN Rundstrahlantenne (710 585, 6,95€)] &amp;lt;span style=&amp;quot;background-color:yellow&amp;quot;&amp;gt; &amp;lt;- die einzig passende !&amp;lt;/span&amp;gt;&lt;br /&gt;
*[http://www.reichelt.de/?ACTION=3;ARTICLE=61136;PROVID=2402 Reichelt: LAN DN-70100, Wireless Lan Antenne, 5DB, SMA-Reverse, 3,65€]&lt;br /&gt;
*[http://www.hm-sat-shop.de/receiver-digital-dreambox/sat-tuner-fuer-dreambox-7020-philips.html HM Sat Shop:DVB-S Tuner zum Sat-Umbau, 49€.] Entweder zwei bestücken oder exklusiv einen. Mischbetrieb scheinbar nicht möglich!&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== Daten ==&lt;br /&gt;
* Betriebsspannung 12 V-&lt;br /&gt;
* Stromaufnahme ohne HDD max. 2 A&lt;br /&gt;
* 2x Philips DVB-T Tuner TU1216L/IVP&lt;br /&gt;
* HDD-Stromversorgung on Board&lt;br /&gt;
* Anschlüsse extern: 2x Tuner In, 2x Tuner Out, LAN 10/100 Mbps, USB 2.0, optischer Audioausgang, AV-Out (Cinch), S-Video, 2x Scart&lt;br /&gt;
* interne Ports/Anschlüsse: 3x USB 2.0, 2x SATA, RS232, miniPCI für WLAN-Karte (XG-603), Smartcard-Reader, CI-Slot&lt;br /&gt;
&lt;br /&gt;
* Flash Hynix HY27US08121A 8bit 64MByte 2.7V - 3.6 Volt&lt;br /&gt;
&lt;br /&gt;
==Varianten==&lt;br /&gt;
===DVB-T===&lt;br /&gt;
===DVB-C===&lt;br /&gt;
&lt;br /&gt;
== Bilder/Innenleben ==&lt;br /&gt;
&#039;&#039;&#039;Gesamtansicht&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:moretv_1.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JTAG Anschluss für LPC921F (unter anderem) + Platz zur Montage einer 3,5&amp;quot; Festplatte&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:moretv_2.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Board komplett&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
[[Bild:moretv_3.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DVI - nicht bestückt&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
[[Bild:moretv_4.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DVB-T Tuner&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_5.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU RAM etc.&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_6.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mini PCI, Sata, CI-Slot, Smartcard&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_7.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückseite komplett&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_8.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CI Controller&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:moretv_9.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sata Controller&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_10.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAM und TDA8024T SmartCard Interface&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_11.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN DP83816&#039;&#039;&#039; (fast identisch zu SiS 900)&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_12.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SW1 auf ON = SW-Update / SW2 auf ON = JTAG Enable&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_13.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stromversorgung&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_14.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anschluss J4&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:moretv_15.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CON1: EJTAG für den PNX8950&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:EJTAG.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie man sieht, müssen keinerlei Jumper gesetzt sein, um DVB-T&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;empfangen zu können.&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:Tuner_Jumper1.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RS-232 Console auf J2&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:Console.png|268px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3,3Volt auf J4&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
[[Bild:lpc_8051_power.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Schnittstellen ==&lt;br /&gt;
&lt;br /&gt;
3x USB intern: (J30 USB Port4, J31 USB Port3, J46 USB Port2)&lt;br /&gt;
Pinout:&lt;br /&gt;
   &lt;br /&gt;
PIN4:GND/Schwarz, PIN3:D+/Grün, PIN2:D-/Weiss, Pin1:+5V/Rot&lt;br /&gt;
&lt;br /&gt;
== Chips ==&lt;br /&gt;
Übersicht über die verwendeten Bausteine mit Links auf ensprechende Datenblätter, Quellen etc.&lt;br /&gt;
&lt;br /&gt;
* Multimedia-CPU Philips PNX8950EH/M2/S1&lt;br /&gt;
**[http://datasheet.octopart.com/PNX8950EH/M2/S1%2C55-NXP-datasheet-8325175.pdf Datasheet PNX8950EH/M2/S1]&lt;br /&gt;
**[http://www.brightsign.biz/documents/HD2000HardwareGuide.pdf Brightsign Hardwareguide]&lt;br /&gt;
**[http://www.kanecomputing.co.uk/pdfs/mds_mds810.pdf MDS-810]&lt;br /&gt;
*[http://www.alldatasheet.com/datasheet-pdf/pdf/98585/SAMSUNG/K4H511638C-UCCC.html 4x 512 MBit DDR SDRAM SAMSUNG K4H511638C-UCCC]&lt;br /&gt;
* [http://www.hynix.com/datasheet/pdf/flash/HY27(U_S)S(08_16)121A%20Series(Rev1.3).pdf HYNIX HY27US08121A 512 Mbit NAND Flash]&lt;br /&gt;
* [http://www.siliconimage.com/docs/SiI-DS-0102-D.pdf SiI3512 SATA150 Controller]&lt;br /&gt;
*[http://www.national.com/ds/DP/DP83816.pdf 10/100 Mbps PCI Ethernet-Controller NATIONAL DP83816]&lt;br /&gt;
* High Speed USB PCI Host Controller Philips ISP1561BM [http://www.nxp.com/acrobat_download2/expired_datasheets/ISP1561_2.pdf Datasheet]&lt;br /&gt;
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1068 MAX3222]&lt;br /&gt;
* PNX8510HW [http://www.datasheetcatalog.org/datasheet/philips/PNX8510_PNX8511_4.pdf Datasheet]&lt;br /&gt;
* Bedienteil mit LED-Display, Infrarotempfänger usw.&lt;br /&gt;
* In der DVB-C-Version: Philips CU1216 DVB-C Tuner [http://read.pudn.com/downloads138/sourcecode/others/589797/CU1216L-3-datasheet.pdf Datasheet]&lt;br /&gt;
** Philips TDA10023 (DVB-C Channel Decoder) [http://www.datasheetdownload.com/download.php?id=677273 Datasheet]&lt;br /&gt;
* In der DVB-T-Version: Philips TU1216 DVB-T Tuner&lt;br /&gt;
** Philips TDA10046 (DVB-T Channel Decoder) [http://www.nxp.com/acrobat/literature/9397/75009522.pdf Spec Sheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda1004x.c - linuxtv.org Frontend Treiber]&lt;br /&gt;
** Philips TDA6650 (5 V mixer/oscillator and low noise PLL synthesizer for hybrid terrestrial tuner) [http://www.nxp.com/documents/data_sheet/TDA6650TT_6651TT.pdf Datasheet] [http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/media/dvb/frontends/tda665x.c - linuxtv.org Tuner Treiber]&lt;br /&gt;
* Philips TDA8024T (IC Card Interface) [http://www.nxp.com/documents/data_sheet/TDA8024.pdf Datasheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nicht bestückte ICs:&lt;br /&gt;
* U42 DVI (wahrscheinlich [http://www.alldatasheet.com/datasheet-pdf/pdf/347886/NXP/TDA9983A.html Philips TDA9983])&lt;br /&gt;
* U40 ????&lt;br /&gt;
* U41 ????&lt;br /&gt;
* U44 ????&lt;br /&gt;
* U45 ????&lt;br /&gt;
* U48 ????&lt;br /&gt;
* U51 ????&lt;br /&gt;
* U59 ????&lt;br /&gt;
&lt;br /&gt;
== Fernbedienung ==&lt;br /&gt;
&lt;br /&gt;
[[IRMP]] Codes:  &lt;br /&gt;
&lt;br /&gt;
Protokoll: NEC&amp;lt;br /&amp;gt;&lt;br /&gt;
Geräte ID: 0x6B44&amp;lt;br /&amp;gt;&lt;br /&gt;
Tastencodes:&amp;lt;br &amp;gt;&lt;br /&gt;
* 00	0&lt;br /&gt;
* 01	EXIT&lt;br /&gt;
* 02	8&lt;br /&gt;
* 03	INFO&lt;br /&gt;
* 04	4&lt;br /&gt;
&lt;br /&gt;
* 06	HELP&lt;br /&gt;
* 07	OK&lt;br /&gt;
* 08	2&lt;br /&gt;
* 09	REC&lt;br /&gt;
 &lt;br /&gt;
* 0B	Marker&lt;br /&gt;
* 0C	6&lt;br /&gt;
&lt;br /&gt;
* 0E	Down&lt;br /&gt;
* 0F	V-&lt;br /&gt;
* 10	1&lt;br /&gt;
* 11	AV&lt;br /&gt;
* 12	9&lt;br /&gt;
* 13	Right&lt;br /&gt;
* 14	5&lt;br /&gt;
* 15	Archiv&lt;br /&gt;
&lt;br /&gt;
* 17	P-&lt;br /&gt;
* 18	3&lt;br /&gt;
* 19	Up&lt;br /&gt;
* 1A	Yellow&lt;br /&gt;
* 1B	Left&lt;br /&gt;
* 1C	7&lt;br /&gt;
* 1D	Stop/LIVE&lt;br /&gt;
* 1E	RED&lt;br /&gt;
&lt;br /&gt;
* 40	MORE&lt;br /&gt;
* 41	LIST&lt;br /&gt;
* 42	FFWD&lt;br /&gt;
&lt;br /&gt;
* 48	TV&lt;br /&gt;
* 49	#&lt;br /&gt;
* 4A	GREEN&lt;br /&gt;
&lt;br /&gt;
* 4C	EPG&lt;br /&gt;
&lt;br /&gt;
* 4E	SLOW&lt;br /&gt;
&lt;br /&gt;
* 50	P+&lt;br /&gt;
* 51	*&lt;br /&gt;
* 52	POWER&lt;br /&gt;
&lt;br /&gt;
* 54	FREW&lt;br /&gt;
&lt;br /&gt;
* 56	PAUSE&lt;br /&gt;
&lt;br /&gt;
* 58	Setup&lt;br /&gt;
* 59	TEXT&lt;br /&gt;
* 5A	BLUE&lt;br /&gt;
&lt;br /&gt;
* 5C	Chap+&lt;br /&gt;
&lt;br /&gt;
* 5E	PiP&lt;br /&gt;
&lt;br /&gt;
Die Tasten Stumm, Chapter+ und Play funktionieren bei meiner FB nicht.&lt;br /&gt;
Die hatte einen Dauerkontakt auf einer dieser Tasten. Darum musste ich eine Leiterbahn durchtrennen.&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
Übersicht über verwendete Software (Betriebssysteme, Compiler, Tools, etc)&lt;br /&gt;
&lt;br /&gt;
* Software Update&lt;br /&gt;
# [http://www.mikrocontroller.net/attachment/105209/swu.zip swu.zip]&lt;br /&gt;
&lt;br /&gt;
* Bootloader&lt;br /&gt;
**Eventuell [http://www.denx.de/wiki/U-Boot/SourceCode U-Boot] support mit diesen 4 patches:&lt;br /&gt;
# [http://lists.denx.de/pipermail/u-boot/attachments/20061204/e9922ec2/attachment.obj pnx8550support.diff.gz]&lt;br /&gt;
# [http://lists.denx.de/pipermail/u-boot/attachments/20061206/556029b0/attachment.obj nxp_i2c.diff.gz]&lt;br /&gt;
#  [http://lists.denx.de/pipermail/u-boot/attachments/20061211/bff13619/attachment.obj nxp_pci.diff.gz]&lt;br /&gt;
# [http://lists.denx.de/pipermail/u-boot/attachments/20061211/8d42666e/attachment.obj mips_timer2.diff]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overview&lt;br /&gt;
+The Silverbox is a development platform based on the NXP PNX8550&lt;br /&gt;
+(Nexperia) media processor.  It consists of a MIPS32 compatible PR4450&lt;br /&gt;
+core, accompanied by two TriMedia processors.  Typical use for the&lt;br /&gt;
+PNX8550 is in settop box and advanced analogue and digital TV sets.&lt;br /&gt;
+&lt;br /&gt;
+This first version of U-Boot for this platform supports a minimal set&lt;br /&gt;
+of commands and hardware.  Feature to be added in the near future are&lt;br /&gt;
+PCI bus, Ethernet, NAND flash and USB support.&lt;br /&gt;
+&lt;br /&gt;
+Boot Methods&lt;br /&gt;
+U-Boot for the Silverbox is typically loaded into SDRAM using an EJTAG&lt;br /&gt;
+probe.  The load address and entry point is 0xA0010000.&lt;br /&gt;
+&lt;br /&gt;
+As NAND flash support is not yet available a single page NAND flash&lt;br /&gt;
+loader is also not available.  This limits this U-Boot version, but&lt;br /&gt;
+a single page loader based on U-Boot 1.1.3 is available on request.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Screenshot der Windows CE 5.0 Oberfläche (über VNC mit der Box verbunden http://efonvnc.sourceforge.net/)&lt;br /&gt;
&lt;br /&gt;
[[Datei:CEscreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Anwendungen und Ideen =&lt;br /&gt;
==Realisierte Projekte/Anwendungen==&lt;br /&gt;
==Anwendungsideen==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unter Linux:&#039;&#039;&#039;&lt;br /&gt;
Festplattenreceiver,&lt;br /&gt;
Asterisk Server,&lt;br /&gt;
NAS,&lt;br /&gt;
Car-PC,&lt;br /&gt;
Multimedia Client/Server,&lt;br /&gt;
Wetterstation logging Server,&lt;br /&gt;
Solar logging Server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unter WinCE&#039;&#039;&#039;:&lt;br /&gt;
Festplattenreceiver,&lt;br /&gt;
NAS,&lt;br /&gt;
Car-PC,&lt;br /&gt;
Media Portal Client/Server,&lt;br /&gt;
Kamera Server,&lt;br /&gt;
Spielekonsole für minigames,&lt;br /&gt;
Download Server&lt;br /&gt;
&lt;br /&gt;
= weitergehende Infos im Netz =&lt;br /&gt;
Alles was noch weiterführende Infos bietet. Andere Wikis, Beiträge, etc.&lt;br /&gt;
&lt;br /&gt;
* [http://www.oohito.com/wince/mips_o_j.htm MIPS FTP Server]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=DockstarDebianSqueeze&amp;diff=52818</id>
		<title>DockstarDebianSqueeze</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=DockstarDebianSqueeze&amp;diff=52818"/>
		<updated>2010-11-18T13:12:56Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* vdr installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Artikel beschreibt die Installation eines debian Betriebssystems  in der Version: &#039;&#039;squeeze&#039;&#039; auf einem seagate [[Dockstar]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Debian Squeeze installieren =&lt;br /&gt;
== IP herausfinden ==&lt;br /&gt;
&#039;&#039;&#039;Die Dockstar direkt mit einem PC verbinden OHNE DHCP!&#039;&#039;&#039;&lt;br /&gt;
Ganz einfach per&lt;br /&gt;
  host     $ ifconfig eth0 169.254.1.0 &lt;br /&gt;
  host     $ nmap -e eth0 -sP $(printf &amp;quot;169.254.%d.%d&amp;quot; 0xbe 0xef) &lt;br /&gt;
wobei &#039;&#039;0xbe 0xef&#039;&#039; die letzten beiden stellen der MAC (siehe Aufkleber Gehaeuseunterseite) sind.&lt;br /&gt;
&lt;br /&gt;
Alternativ das ganze Subnetz scannen:&lt;br /&gt;
  host     $ nmap -e eth0 -sP 169.254.1.0/24&lt;br /&gt;
&lt;br /&gt;
== Login und Firmware sichern ==&lt;br /&gt;
Auf der Dockstar mittels SSH einloggen.&lt;br /&gt;
  $ ssh root@169.254.x.y&lt;br /&gt;
  User:    root&lt;br /&gt;
  Password:stxadmin&lt;br /&gt;
&lt;br /&gt;
Sollte die Dockstar nicht per SSH erreichbar sein muss man mittels RS232 eine Verbindung aufbauen. &lt;br /&gt;
&lt;br /&gt;
Einen formatierten USB-Stick einstecken. Dieser wird unter &#039;&#039;/tmp/.cemnt&#039;&#039; gemountet. Falls nicht, muss man den Stick manuell mounten, also z.B. ein Verzeichnis /tmp/bak anlegen, dorthin mounten und die erste Zeile im folgenden Script anpassen.&lt;br /&gt;
&lt;br /&gt;
  dockstar $ cd /tmp/.cemnt/mnt_sda1&lt;br /&gt;
  dockstar $ dd if=/dev/mtd0 of=mtd0.img&lt;br /&gt;
  dockstar $ sha1sum mtd0.img &amp;gt; mtd0.img.sha&lt;br /&gt;
  dockstar $ dd if=/dev/mtd1 of=mtd1.img&lt;br /&gt;
  dockstar $ sha1sum mtd1.img &amp;gt; mtd1.img.sha&lt;br /&gt;
  dockstar $ dd if=/dev/mtd2 of=mtd2.img&lt;br /&gt;
  dockstar $ sha1sum mtd2.img &amp;gt; mtd2.img.sha&lt;br /&gt;
  dockstar $ dd if=/dev/mtd3 of=mtd3.img&lt;br /&gt;
  dockstar $ sha1sum mtd3.img &amp;gt; mtd3.img.sha&lt;br /&gt;
  dockstar $ cd /tmp&lt;br /&gt;
  dockstar $ sync&lt;br /&gt;
&lt;br /&gt;
== Debian installieren ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung des automatischen Installers von Jeff Dozan für Debian Squeeze==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dockstar mit einem Netzwerk mit Internetverbindung und DHCP verbinden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einen USB-Stick formatieren, hier &#039;&#039;sdx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  host     $ fdisk /dev/sdx&lt;br /&gt;
&lt;br /&gt;
    Partition 1, primaer, Typ Linux, min. 280MB, Typisch 512MB &lt;br /&gt;
&lt;br /&gt;
    Partition 2, primaer, Typ Swap,  ~100-500MB (je groesser, desto besser fuer das Wear Leveling des Sticks) &lt;br /&gt;
&lt;br /&gt;
  host     $ mkfs.ext2 /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
  host     $ mkswap /dev/sdx2&lt;br /&gt;
&lt;br /&gt;
dann das Skript von jeff.doozan.com ausfuehren.&lt;br /&gt;
&lt;br /&gt;
  dockstar $ cd /tmp &lt;br /&gt;
&lt;br /&gt;
  dockstar $ wget http://jeff.doozan.com/debian/dockstar.debian-squeeze.sh &lt;br /&gt;
&lt;br /&gt;
  dockstar $ chmod +x dockstar.debian-squeeze.sh &lt;br /&gt;
&lt;br /&gt;
  dockstar $ export PATH=$PATH:/usr/sbin:/sbin &lt;br /&gt;
&lt;br /&gt;
  dockstar $ ./dockstar.debian-squeeze.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauert ein wenig 8-).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Dockstar startet nun neu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Manuelle Installation==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dieses Vorgehen benötigt den Zugriff auf die serielle Schnittstelle der Dockstar&#039;&#039;&#039;&lt;br /&gt;
* Zunächst muss der Bootloader in mtd0 aktualisiert werden, um später von einem USB-Medium booten zu können. Hierfür kann der Bootloader und das Skript von Jeff Doozan verwendet werden. Das Vorgehen ist unter http://jeff.doozan.com/debian/uboot/ beschrieben, alternativ finden sich unter http://jeff.doozan.com/debian/uboot/build_uboot.htm auch Informationen um den Bootloader uBoot neu zu übersetzen sowie weiteres Hintergrundwissen.&lt;br /&gt;
* Nach dem Update des Bootloaders kann Debian (armel) unter Verwendung des normalen Debian-Installers für diese Architektur installiert werden. Eine entsprechende Anleitung findet sich unter http://www.plugcomputer.org/plugwiki/index.php/Installing_Debian_To_Flash . Die Installation des Bootloader entfällt natürlich. Folgende Anpassungen waren für meine Installation notwendig:&lt;br /&gt;
* Schritt &#039;Burn a New Kernel&#039; übersprungen.&lt;br /&gt;
* Schritt &#039;Run the Debian Installer&#039; angepasst (beim Laden des uImage an Speicheradresse 0x0400000 kam es reproduzierbar zu einem Absturz):&lt;br /&gt;
   setenv ipaddr 169.254.1.1&lt;br /&gt;
   setenv serverip 169.254.78.185&lt;br /&gt;
   tftpboot 0x2000000 uImage&lt;br /&gt;
   tftpboot 0x0800000 uInitrd&lt;br /&gt;
   setenv bootargs console=ttyS0,115200 base-installer/initramfs-tools/driver-policy=most&lt;br /&gt;
   bootm 0x2000000 0x0800000&lt;br /&gt;
* Nach dem Reboot fehlt der Kernel zum Booten, abhilfe schafft der Download eines fertig kompilierten Kernels von http://sheeva.with-linux.com/sheeva/ . Es wird nur das uImage benötigt. Im Uboot genügt folgende Anweisung im Uboot um in die neue Installation zu booten:&lt;br /&gt;
   setenv ipaddr 169.254.1.1&lt;br /&gt;
   setenv serverip 169.254.78.185&lt;br /&gt;
   tftpboot 0x0800000 uImage&lt;br /&gt;
   setenv bootargs console=ttyS0,115200 root=/dev/sda2 rootwait rw&lt;br /&gt;
   bootm 0x0800000&lt;br /&gt;
* Jetzt muss der Kernel installiert weden. Hierfür kann wie unter &#039;Updating the Kernel&#039; in [http://www.plugcomputer.org/plugwiki/index.php/Installing_Debian_To_Flash] beschrieben vorgegangen werden. Zuvor sind noch die mtd-utils zu installieren (apt-get install mtd-utils). Das README-Skript des jeweiligen Kernels lädt nur die Module und das uImage des Kernels von [http://sheeva.with-linux.com/sheeva/] herunter, und installiert diese durch kopieren der Module bzw. schreibt den Kernel in den Flash durch Aufruf von nandwrite -pm /dev/mtd0 uImage (!!!Sollte das nicht /dev/mtd1 sein? In mtd0 liegt doch der Bootloader!!!)&lt;br /&gt;
* Anpassung uBoot für den Boot von dem USB-Stick:&lt;br /&gt;
  setenv bootargs &#039;console=ttyS0,115200 mtdparts=nand_mtd:0xa0000@0x0(u-boot),0x400000@0x10000(uImage),0x1fb00000@0x500000(rootfs) root=/dev/sda2 rootwait rw&#039;&lt;br /&gt;
  setenv bootcmd &#039;nand read 0x800000 uImage; bootm 0x800000&#039;&lt;br /&gt;
  saveenv&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Installation in den Flash der DockStar habe ich nicht getestet, da mein Image zu groß ist.&lt;br /&gt;
&lt;br /&gt;
=Linux einrichten=&lt;br /&gt;
==Erste Anmeldung==&lt;br /&gt;
Warten bis Debian gestartet ist. Dann per &#039;&#039;SSH&#039;&#039; einloggen (User: &#039;&#039;root&#039;&#039; Passwort: &#039;&#039;root&#039;&#039;).&lt;br /&gt;
  host     $ ssh root@debian&lt;br /&gt;
  dockstar $ passwd&lt;br /&gt;
&lt;br /&gt;
Sollte kein DHCP-Server im Netz laufen bzw. die Dockstar schon Verbindung ins Internet hatte, muss man via RS232 zugreifen und die Konfiguration per Hand einrichten (nur Temporär. ):&lt;br /&gt;
 ifconfig eth0 &amp;lt;ipadresse&amp;gt;&lt;br /&gt;
 route add default gw &amp;lt;adresse des routers&amp;gt;&lt;br /&gt;
 echo &amp;quot;nameserver &amp;lt;adresse des routers/nameservers&amp;gt;&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Dauerhafte einstellung (Beispieladressen) : /etc/network/interfaces&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
 address 192.168.0.111&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 network 192.168.0.0&lt;br /&gt;
 broadcast 192.168.0.255&lt;br /&gt;
 gateway 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einen einfachen kleinen Texteditor installieren:&lt;br /&gt;
 dockstar $ apt-get install nano&lt;br /&gt;
&lt;br /&gt;
Nur für USB-Sticks:  Nun die Verzeichnisse &#039;&#039;/tmp&#039;&#039;, &#039;&#039;/var/log&#039;&#039;, &#039;&#039;/var/lock&#039;&#039; &amp;amp; &#039;&#039;/var/run&#039;&#039; als &#039;&#039;tmpfs&#039;&#039;&#039; einrichten. &lt;br /&gt;
  dockstar $ nano /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/etc/fstab:&#039;&#039;&#039;&lt;br /&gt;
  /dev/root / ext2 noatime 0 1&lt;br /&gt;
  /dev/sda5 none swap sw 0 0&lt;br /&gt;
  none /tmp tmpfs rw,nosuid,nodev,size=26M 0 0&lt;br /&gt;
  none /var/log tmpfs rw,nosuid,nodev,noexec,size=4M 0 0&lt;br /&gt;
  none /var/lock tmpfs rw,nosuid,nodev,noexec,size=1M 0 0&lt;br /&gt;
  none /var/run tmpfs rw,nosuid,nodev,noexec,size=1M 0 0&lt;br /&gt;
&lt;br /&gt;
==Zeitzone einstellen==&lt;br /&gt;
&lt;br /&gt;
  dockstar $ dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
... und der Benutzerführung folgen.&lt;br /&gt;
&lt;br /&gt;
==syslog==&lt;br /&gt;
&lt;br /&gt;
Debian Squeeze minimal installiert keinen syslog Dienst. Es ist nur dmesg vorhanden.&lt;br /&gt;
&lt;br /&gt;
Normalerweise könnte man &#039;&#039;&#039;rsyslogd&#039;&#039;&#039; installieren. Aber um einen USB-Stick zu schonen, kann man besser &#039;&#039;&#039;busybox-syslogd&#039;&#039;&#039; nutzten. Dieser schreibt die syslog Ausgaben ins RAM (Genutzt wird ein Buffer von: 128KB).&lt;br /&gt;
&lt;br /&gt;
Einrichtung:&lt;br /&gt;
&lt;br /&gt;
  dockstar $ apt-get install busybox-syslogd&lt;br /&gt;
&lt;br /&gt;
Natürlich hat man nun keine Datei &#039;&#039;/var/log/syslog&#039;&#039; die man sich ansehen kann. Stattdessen erhält man den Inhalt mit: &lt;br /&gt;
  dockstar $ logread&lt;br /&gt;
&lt;br /&gt;
Kontinuierlich die Ausgaben ansehen, kann man mit:&lt;br /&gt;
  dockstar $ logread -f &lt;br /&gt;
&lt;br /&gt;
siehe auch: http://www.rudiswiki.de/wiki/DockStarDebian#Adding_syslog_support&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Automounter&amp;quot; einrichten==&lt;br /&gt;
===Autofs/Automount einrichten===&lt;br /&gt;
Zunaechst &#039;&#039;autofs&#039;&#039; installieren&lt;br /&gt;
  dockstar $ apt-get install autofs&lt;br /&gt;
Zur Datei &#039;&#039;/etc/auto.master&#039;&#039; folgendes hinzufuegen.&lt;br /&gt;
  dockstar $ nano /etc/auto.master&lt;br /&gt;
&#039;&#039;&#039;/etc/auto.master:&#039;&#039;&#039;&lt;br /&gt;
  /media	/etc/auto.media --timeout=60 --ghost&lt;br /&gt;
&lt;br /&gt;
Nun die Datei &#039;&#039;/etc/auto.media&#039;&#039; erstellen und darin die UUID der USB-Devices eintragen.&lt;br /&gt;
  dockstar $ blkid&lt;br /&gt;
  /dev/sda1: UUID=&amp;quot;99a0bf9c-2310-4167-a4e3-e6e571aeb91d&amp;quot; TYPE=&amp;quot;ext2&amp;quot; &lt;br /&gt;
  /dev/sda2: TYPE=&amp;quot;swap&amp;quot;&lt;br /&gt;
  /dev/sdb1: UUID=&amp;quot;99a0bf9c-2310-4167-a4e3-e6e571aeb91e&amp;quot; TYPE=&amp;quot;ext4&amp;quot; &lt;br /&gt;
  dockstar $ nano /etc/auto.media&lt;br /&gt;
&#039;&#039;&#039;/etc/auto.media:&#039;&#039;&#039;&lt;br /&gt;
  disk	-fstype=ext4,users	UUID=&amp;quot;99a0bf9c-2310-4167-a4e3-e6e571aeb91e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Geraet sollte nun automatisch beim Betreten des im Beispiel verwendeten Verzeichnisses &#039;&#039;/media/disk&#039;&#039; gemoutet werden.&lt;br /&gt;
  dockstar $ cd /media/disk&lt;br /&gt;
  dockstar $ mount&lt;br /&gt;
  ...&lt;br /&gt;
  /dev/sdb1 /media/disk ext4 ...&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
===usbmount===&lt;br /&gt;
Alternativ macht sich auch usbmount ganz gut. Hier wird das USB-Medium automatisch beim Einstecken in das Dateisystem eingebunden.&lt;br /&gt;
&lt;br /&gt;
usbmount installieren:&lt;br /&gt;
  apt-get install usbmount&lt;br /&gt;
&lt;br /&gt;
Die Einstellungen in der Konfigurationsdatei &#039;&#039;&#039;/etc/usbmount/usbmount.conf&#039;&#039;&#039; können soweit übernommen werden. Die Option FS_MOUNTOPTIONS sollte etwas erweitert werden:&lt;br /&gt;
  FS_MOUNTOPTIONS=&amp;quot;-fstype=vfat,gid=floppy,dmask=0007,fmask=0117&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Damit stellt man ein, dass alle User der Gruppe floppy Lese- und Schreibzugriff auf das Wechselmedium haben, wenn das Dateisystem vom Typ vfat ist. Also müssen noch die entsprechenden User in diese Gruppe integriert werden:&lt;br /&gt;
  usermod -a -G floppy ein_user&lt;br /&gt;
&lt;br /&gt;
Die Wechselmedien werden unter dem Verzeichnis /media eingebunden:&lt;br /&gt;
  root@dockstar:/# ls -l /media&lt;br /&gt;
  total 72&lt;br /&gt;
  lrwxrwxrwx  1 root root       4 Sep 10 18:49 usb -&amp;gt; usb0&lt;br /&gt;
  drwxrwx--- 70 root floppy 32768 Jan  1  1970 usb0&lt;br /&gt;
  drwxrwx---  3 root floppy 16384 Sep 10 19:16 usb1&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb2&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb3&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb4&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb5&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb6&lt;br /&gt;
  drwxr-xr-x  2 root root    4096 Sep 10 18:49 usb7&lt;br /&gt;
&lt;br /&gt;
(Hier sind gerade 2 USB-Sticks im System; usb/ verweist auf usb0/.)&lt;br /&gt;
&lt;br /&gt;
==apt-get: Pakete können nicht authentifiziert werden ==&lt;br /&gt;
&lt;br /&gt;
Wenn die Fehlermeldung &amp;quot;The following packages cannot be authenticated!&amp;quot; erscheint hilft ein:&lt;br /&gt;
&lt;br /&gt;
apt-get update; apt-key update&lt;br /&gt;
&lt;br /&gt;
==Samba einrichten==&lt;br /&gt;
  dockstar $ apt-get install samba samba-common-bin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ohne das Paket **samba-common-bin** fehlt smbpasswd :-O.&lt;br /&gt;
 TODO: anlegen eines Shares &amp;amp; Users&lt;br /&gt;
&lt;br /&gt;
User anlegen:&lt;br /&gt;
 - adduser username #User im normalen System anlegen&lt;br /&gt;
 - smbpasswd -a username #User in Samba anlegen&lt;br /&gt;
 - vi /etc/samba/smb.conf # Im Abschnitt [homes]: read &amp;quot;only = yes&amp;quot; zu &amp;quot;read only = no&amp;quot; ändern.&lt;br /&gt;
&lt;br /&gt;
Share für alle User ohne Anmeldung anlegen (Vorsicht wg. Datensicherheit)&lt;br /&gt;
&lt;br /&gt;
 - mkdir /home/public #passenden Ordner erstellen&lt;br /&gt;
 - chmod 777 /home/public #passende Rechte vergeben&lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/samba/smb.conf folgenen Eintrag hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 [public]&lt;br /&gt;
 comment = Public Folder&lt;br /&gt;
 path = /home/public&lt;br /&gt;
 available = yes&lt;br /&gt;
 browsable = yes&lt;br /&gt;
 public = yes&lt;br /&gt;
 writable = yes&lt;br /&gt;
 create mask = 0777&lt;br /&gt;
 directory mask = 0777&lt;br /&gt;
 force user = nobody&lt;br /&gt;
 force group = nogroup&lt;br /&gt;
&lt;br /&gt;
==Lighttpd, Php, Webdav==&lt;br /&gt;
Folgende Pakete sind zu installieren.&lt;br /&gt;
  dockstar $ apt-get install lighttpd lighttpd-mod-webdav php5-cgi&lt;br /&gt;
  dockstar $ cd /var&lt;br /&gt;
  dockstar $ chown -R www-data:www-data www&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BUG:&#039;&#039;&#039; In /etc/lighttpd/lighttpd.conf die Zeile &#039;&#039;include_shell &amp;quot;/usr/share/lighttpd/use-ipv6.pl&amp;quot;&#039;&#039; auskommentieren und &#039;&#039;apt-get install -f&#039;&#039; ausfuehren.&lt;br /&gt;
&lt;br /&gt;
Aenderungen an &#039;&#039;&#039;/etc/lighttpd/lighttpd.conf&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  server.modules = (&lt;br /&gt;
            &amp;quot;mod_alias&amp;quot;,&lt;br /&gt;
            &amp;quot;mod_compress&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_rewrite&amp;quot;,&lt;br /&gt;
            &amp;quot;mod_webdav&amp;quot;,&lt;br /&gt;
            &amp;quot;mod_fastcgi&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_redirect&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_usertrack&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_expire&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_flv_streaming&amp;quot;,&lt;br /&gt;
  #         &amp;quot;mod_evasive&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
&#039;&#039;&#039;&amp;amp;&#039;&#039;&#039; &lt;br /&gt;
  fastcgi.server		   =    ( &amp;quot;.php&amp;quot; =&amp;gt;&lt;br /&gt;
  				  ( &amp;quot;localhost&amp;quot; =&amp;gt;&lt;br /&gt;
  				    (&lt;br /&gt;
  				      &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/var/run/php-fastcgi.socket&amp;quot;,&lt;br /&gt;
  				      &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;&lt;br /&gt;
  				    )&lt;br /&gt;
  				  )&lt;br /&gt;
  				)&lt;br /&gt;
&lt;br /&gt;
- Alternativer Eintrag für fastcgi/php. (Der Obrige geht bei mir nicht.)&lt;br /&gt;
 fastcgi.server = ( &amp;quot;.php&amp;quot; =&amp;gt; ((&lt;br /&gt;
                     &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                     &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php.socket&amp;quot;&lt;br /&gt;
                 )))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Todo: Subversion ;)&lt;br /&gt;
&lt;br /&gt;
==Zeitsynchronisation einrichten==&lt;br /&gt;
Die Ganggenauigkeit der Uhr im Dockstar ist nicht besonders gut. Aus diesem Grund empfiehlt es sich, diese zyklisch mit einem Zeitnormal abzugleichen. Wenn der Minirechner im Netzwerk hängt, macht man das am besten mittels eines NTP-Servers. Das gängige Kommando dazu ist z.B. (als root):&lt;br /&gt;
&lt;br /&gt;
 ntpdate ntp1.ptb.de&lt;br /&gt;
&lt;br /&gt;
Als Rückmeldung erhält man:&lt;br /&gt;
&lt;br /&gt;
 13 Sep 17:10:10 ntpdate[13387]: adjust time server 192.53.103.108 offset 0.133584 sec&lt;br /&gt;
&lt;br /&gt;
... und gleichzeitig wird die Systemzeit entsprechend gesetzt.&lt;br /&gt;
&lt;br /&gt;
Um das Ganze zu automatisieren und z.B. jede 1/2 Stunde die Systemzeit abzugleichen, richtet man sich einen zyklisch startenden Job via Cron ein (den man sicherlich noch für weitere Dinge gut gebrauchen kann):&lt;br /&gt;
&lt;br /&gt;
Cron installieren:&lt;br /&gt;
&lt;br /&gt;
 apt-get install cron&lt;br /&gt;
&lt;br /&gt;
Cronjob eintragen:&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
&lt;br /&gt;
und folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 */30 * * * * /usr/sbin/ntpdate ntp1.ptb.de &amp;gt;&amp;gt; /var/log/ntpdate.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
Es wird also jede 30 min das Kommando &#039;&#039;/usr/sbin/ntpdate ntp1.ptb.de&#039;&#039; ausgeführt und die Ausgaben landen in der Log-Datei &#039;&#039;/var/log/ntpdate.log&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Es sei anzumerken, dass es weitere Alternativen für Job-Scheduler gibt, man muss nicht unbedingt Cron nehmen. &lt;br /&gt;
Ausführliche Listen mit öffentlichen NTP-Servern findet man im Internet. Hat man mehrere Clients in seinem Netzwerk zu versorgen, macht es sich auch ganz gut, wenn man selbst einen NTP-Server betreibt, der sich seinerseits wiederum über das Internet synchronisiert.&lt;br /&gt;
&lt;br /&gt;
==Bunte Fenster==&lt;br /&gt;
Ob es nun sinnvoll ist X (plus einem Windows-Manager) auf der Dockstar laufen zu lassen, muss jeder für sich selbst entscheiden. Möglich ist es und sieht auch ganz lustig aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dockstar x.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Hier wurde sich für den Windowsmanager IceWM entschieden (weil ressourcenschonend), LXDE oder XFCE sind natürlich auch denkbar, aber nicht ganz so schlank.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Schritte:&lt;br /&gt;
&lt;br /&gt;
 apt-get install xvfb icewm x11vnc&lt;br /&gt;
&lt;br /&gt;
* xvfb - X-Server (wenn man keine Grafikkarte hat)&lt;br /&gt;
* icewm - der Windows-Manager&lt;br /&gt;
* x11vnc - VNC-Server, um sich remote mit dem X auf dem Dockstar verbinden zu können&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
xvfb, IceWM und VNC-Server starten (am besten in jeweils eigenen screen-Sessions; screen eventuell ebenfalls installieren):&lt;br /&gt;
&lt;br /&gt;
 screen -R xvfb&lt;br /&gt;
 Xvfb :0 -screen 0 1024x768x16&lt;br /&gt;
&lt;br /&gt;
Als der &amp;quot;normale&amp;quot; User:&lt;br /&gt;
&lt;br /&gt;
 screen -R icewm&lt;br /&gt;
 export DISPLAY=:0&lt;br /&gt;
 icewm&lt;br /&gt;
&lt;br /&gt;
 screen -R vnc&lt;br /&gt;
 x11vnc --forever -noxdamage&lt;br /&gt;
&lt;br /&gt;
Screen-Sessions jeweils mit STRG+A+D verlassen.&lt;br /&gt;
&lt;br /&gt;
Die Verbindung zum X-Server erfolgt über jeden beliebigen PC im Netzwerk mittels VNC. Auf dem Dockstar sollte man natürlich auch ein paar X-Programme installieren (z.B. xterm).&lt;br /&gt;
&lt;br /&gt;
==USB-Sound==&lt;br /&gt;
 wget 193.16.217.9/files/dockstarheavy.deb #Kernel mit Soundtreibern laden&lt;br /&gt;
 dpkg -i --force-overwrite dockstarheavy.deb #Kernel mit Soundtreibern installieren&lt;br /&gt;
 apt-get install alsa-base alsa-oss alsa-utils; #Pakete installieren&lt;br /&gt;
 vi /etc/asound.conf; #Konfigurieren. Folgenden Inhalt eintragen&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
    type hw&lt;br /&gt;
    card 1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 ctl.!default {&lt;br /&gt;
    type hw&lt;br /&gt;
    card 1&lt;br /&gt;
 }&lt;br /&gt;
Zum Testen eine MP3-Datei (z.b. test.mp3) hochladen&lt;br /&gt;
 Test: mplayer test.mp3&lt;br /&gt;
Einige billige USB-Soundkarten können nur 48000Hz Stream wiedergeben (Wie meine 5€ Digitus USB-Soundkarte (Kopfhörerausgang und Mikrofoneingang))&lt;br /&gt;
 Test: mplayer resample=48000 test.mp3&lt;br /&gt;
&lt;br /&gt;
==mpd als Audio-Server==&lt;br /&gt;
&lt;br /&gt;
 apt-get install mpd mpc&lt;br /&gt;
 adduser mpd audio;      #User mpd der Gruppe Audio hinzufügen&lt;br /&gt;
 vi /etc/mpd.conf;       #Audiodevice setzen, hierfür folgendes eintragen:&lt;br /&gt;
 audio_output {&lt;br /&gt;
        type            &amp;quot;alsa&amp;quot;&lt;br /&gt;
        name            &amp;quot;Deflaut&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Wenn die Soundkarte nur 48000Hz unterstützt:&lt;br /&gt;
 vi /etc/mpd.conf; # Folgende Zeilen entsprechent anpassen:&lt;br /&gt;
 audio_output_format             &amp;quot;48000:16:2&amp;quot;&lt;br /&gt;
 samplerate_converter            &amp;quot;Linear Interpolator&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erster Test. Eine Datei (z.B: test.mp3) in das Verzeichnis /var/lib/mpd/music kopieren.&lt;br /&gt;
 mpc update       #Musik-Verzeichnis aktualisieren&lt;br /&gt;
 mpc save play0   #Playlist erstellen&lt;br /&gt;
 mpc load play0   #Playlist verwenden&lt;br /&gt;
 mpc add test.mp3 #Eine MP3 der Playlist hinzufügen&lt;br /&gt;
 mpc play         #Playlist abspielen&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselte Partition mit dm crypt==&lt;br /&gt;
Testen ob die Module geladen werden:&lt;br /&gt;
 modprobe dm-crypt&lt;br /&gt;
 modprobe dm_mod&lt;br /&gt;
 lsmod&lt;br /&gt;
&lt;br /&gt;
Erster Durchlauf. Erstellen,einbinden und formatieren:&lt;br /&gt;
&lt;br /&gt;
 fdisk # ... Partition erstellen.&lt;br /&gt;
 dd if=/dev/urandom of=/dev/sda3 bs=1M #Partition mit zufallsdaten füllen, dauert etwas&lt;br /&gt;
 apt-get install cryptsetup hashalot #Packete holen &lt;br /&gt;
 cryptsetup luksFormat /dev/sda3 #Crypt Partition Formatieren&lt;br /&gt;
 cryptsetup luksOpen /dev/sda3 data #Crypt Partition mappen&lt;br /&gt;
 mkfs -t ext2 /dev/mapper/data #Dateisystem erstellen&lt;br /&gt;
 mkdir /mnt/data #locales Verzeichnis einrichten&lt;br /&gt;
 mount /dev/mapper/data /mnt/data #Einbinden&lt;br /&gt;
&lt;br /&gt;
Danach nur noch kennworteingabe und einbinden:&lt;br /&gt;
 cryptsetup luksOpen /dev/sda3 data&lt;br /&gt;
 mount /dev/mapper/data /mnt/data&lt;br /&gt;
&lt;br /&gt;
== Fernbedienung (am Beispiel X10 / Medion,Pollin) ==&lt;br /&gt;
&lt;br /&gt;
 apt-get install lirc usbutils dialog libusb-dev&lt;br /&gt;
 /etc/init.d/lirc stop&lt;br /&gt;
vi /etc/lirc/lircd.conf #Config Datei einfügen, es gibt für fast alle welche im Internet, z.b. hier: http://lirc.sourceforge.net/remotes/atiusb/lircd.conf.atiusb&lt;br /&gt;
 vi /etc/lirc/hardware.conf #folgendes eintragen: &lt;br /&gt;
DRIVER=&amp;quot;atilibusb&amp;quot; und START_IREXEC=&amp;quot;true&amp;quot;&lt;br /&gt;
 /etc/init.d/lirc start #Starten&lt;br /&gt;
 irw #testen&lt;br /&gt;
Beispielhaft Konfiguration von lirc für eine Steuerung des mpd&#039;s über mpc. &lt;br /&gt;
vi /etc/lirc/lircrc #erstellen mit folgendem Inhalt:&lt;br /&gt;
 ## irexec&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = PLAY_PAUSE&lt;br /&gt;
     config = mpc toggle&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = STOP&lt;br /&gt;
     config = mpc stop&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = PREV&lt;br /&gt;
     config = mpc prev&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = NEXT&lt;br /&gt;
     config = mpc next&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = VOL+&lt;br /&gt;
     config = mpc volume +2&lt;br /&gt;
     repeat = 1&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = VOL-&lt;br /&gt;
     config = mpc volume -2&lt;br /&gt;
     repeat = 1&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = RECORD&lt;br /&gt;
     config = mpc random&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = RC&lt;br /&gt;
     config = mpc update&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = FFWD&lt;br /&gt;
     config = mpc seek +00:00:05&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
 begin&lt;br /&gt;
     prog = irexec&lt;br /&gt;
     button = FRWND&lt;br /&gt;
     config = mpc seek -00:00:05&lt;br /&gt;
     repeat = 0&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
lirc wieder neustarten&lt;br /&gt;
/etc/init.d/lirc restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== vdr installieren ==&lt;br /&gt;
&lt;br /&gt;
vdr installieren und Einrichten:&lt;br /&gt;
* http://barahir.twoday.net/stories/mini-vdr-auf-seagate-dockstar-teil-3/&lt;br /&gt;
&lt;br /&gt;
Anmerkungen:&lt;br /&gt;
&lt;br /&gt;
* Teil 1 der Blog-Reihe beschreibt nur das installieren von Debian.&lt;br /&gt;
* Teil 2 klärt wie man eine NFS Freigabe einbindet.&lt;br /&gt;
&lt;br /&gt;
Ich installiere, anders als im Blog, lieber das &amp;quot;offizielle&amp;quot; Firmware Paket: Dazu muß &amp;quot;non-free&amp;quot; Sektion in /etc/apt/sources.list eingetragen sein, z.B.:&lt;br /&gt;
  deb http://ftp.de.debian.org/debian squeeze main non-free&lt;br /&gt;
&lt;br /&gt;
Installieren der firmware Daten:&lt;br /&gt;
  dockstar $ apt-get install firmware-linux-nonfree&lt;br /&gt;
&lt;br /&gt;
(Nach einem reboot kann in dmesg gesehen werden, ob der Stick richtig eingerichtet ist.)&lt;br /&gt;
&lt;br /&gt;
Beim Sender-Suchlauf mußte ich mit &#039;&#039;&#039;-a /dev/dvb/adapter0/&#039;&#039;&#039; explizit den Pfad zum DVB-T Adapter angeben, bsp:&lt;br /&gt;
  dockstar $ w_scan -a /dev/dvb/adapter0/ -c DE &amp;gt; /var/lib/vdr/channels.conf&lt;br /&gt;
&lt;br /&gt;
btw. Beim Streamen dreht die Dockstar CPU mit ca. 7% Däumchen ;)&lt;br /&gt;
&lt;br /&gt;
== Kernel (2.6.35.6) laden, einbinden, bauen, installieren ==&lt;br /&gt;
Benötigte Packete installieren&lt;br /&gt;
apt-get install ncurses-base ncurses-bin libncurses5-dev #ncurses für  menuconfig&lt;br /&gt;
Kernel Quellen holen&lt;br /&gt;
 cd /usr/src&lt;br /&gt;
 wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.6.tar.bz2&lt;br /&gt;
 tar -xjvf linux-2.6.35.6.tar.bz2&lt;br /&gt;
Symlink setzen&lt;br /&gt;
 rm linux&lt;br /&gt;
 ln -s linux-2.6.35.6 linux&lt;br /&gt;
 cd linux&lt;br /&gt;
Config-Datei holen (Vorher den Multimedia - Kernel installieren)&lt;br /&gt;
 cp /boot/config-2.6.35.6-dockstar .config&lt;br /&gt;
Dockstar Patch laden und einplegen&lt;br /&gt;
 wget http://jeff.doozan.com/debian/dockstar-kernel.patch&lt;br /&gt;
 patch -p1 &amp;lt; dockstar-kernel.patch&lt;br /&gt;
Setzen der Konfiguration &lt;br /&gt;
 make oldconfig&lt;br /&gt;
Kernel bauen (Dauert sehr lange, mehr als 4 Stunden)&lt;br /&gt;
 make all&lt;br /&gt;
Kernel installieren&lt;br /&gt;
 make all install&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
  * http://jeff.doozan.com/debian/&lt;br /&gt;
  * http://ahsoftware.de/dockstar/&lt;br /&gt;
  * http://www.howtoforge.de/howto/wie-man-webdav-mit-lighttpd-auf-debian-etch-konfiguriert/&lt;br /&gt;
  * https://wiki.ubuntu.com/Lighttpd%2BPHP&lt;br /&gt;
  * http://www.howtoforge.de/howto/installation-von-lighttpd-mit-php5-und-mysql-unterstutzung-auf-mandriva-20080/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM-Boards]]&lt;br /&gt;
[[Kategorie:Linux-Boards]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=DCF77-Funkwecker_mit_AVR&amp;diff=50647</id>
		<title>DCF77-Funkwecker mit AVR</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=DCF77-Funkwecker_mit_AVR&amp;diff=50647"/>
		<updated>2010-09-16T14:56:48Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* DCF77-Empfänger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Autor: Alexander Starke&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Inspiriert durch meinen Onkel entstand nun dieses &lt;br /&gt;
Projekt :-)&lt;br /&gt;
&lt;br /&gt;
Als Aufgabenstellung standen folgende Punkte:&lt;br /&gt;
* Realisierung einer Funkuhr mittels DCF77-Empfänger&lt;br /&gt;
* ständige Synchronisation der Uhr über das Langwellensignal&lt;br /&gt;
* bei Empfangsstörungen soll Zeit über internen Timer weiter laufen&lt;br /&gt;
* Visualisierung der Zeit über 7-Segment-Anzeigen&lt;br /&gt;
* Einrichten einer Weckfunktion&lt;br /&gt;
* Einfaches Bedienkonzept über möglichst wenige Taster&lt;br /&gt;
&lt;br /&gt;
Nach einer kurzen Überschlagsrechnung betreffend der benötigten Portpins fiel die Wahl auf einen ATmega8 zur Steuerung der ganzen Sache. Getaktet wird dieser durch einen 8 MHz Quarzoszillator. Die restlichen benötigten Bauteile waren die folgenden:&lt;br /&gt;
&lt;br /&gt;
== Hauptkomponenten ==&lt;br /&gt;
=== DCF77-Empfänger ===&lt;br /&gt;
Hier habe ich einen Bausatz von [http://www.conrad.de Conrad] verwendet. Dieser wird komplett mit Antenne ausgeliefert. Bei einem Preis von gut 10&amp;amp;#8364; ist es allerdings fast überlegenswert gewesen, die Schaltung selbst aufzubauen. Für die Variante von Conrad spricht die beigelegte Antenne sowie die Kompaktheit (SMD).&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich aber auch eine Funkuhr (zirka 5€) statt eines einzelnen Empfängers zukaufen. Das ist oftmals günstiger und die Verdrahtung unterscheidet sich normalerweise nicht von den Einzelmodulen.&lt;br /&gt;
Die Signalpolarität lässt sich normalerweise mit einem Multimeter herausfinden, da das Signal sehr langsam ist.&lt;br /&gt;
5V-fähig waren die von mir getesteten (5stk./ verschiedene Uhren) auch alle.&lt;br /&gt;
&lt;br /&gt;
=== 7-Segment-Anzeigen ===&lt;br /&gt;
Hier habe ich handelsübliche Anzeigen mit einer Zifferhöhe von 2cm, erhältlich &lt;br /&gt;
unter anderem bei [http://www.reichelt.de Reichelt], verwendet. Wie man sich leicht ausrechnen kann, werden mindestens vier solcher Anzeigen benötigt. Dadurch müsste man theoretisch 4*7=28 Pins zur Verfügung haben, um diese getrennt ansteuern zu können. Eine einfachere Variante wird weiter unten vorgestellt. Diese waren vom Stromhunger her gerade noch so gewählt, dass ein direktes Ansteuern mittels des AVRs möglich ist. Bei der Auswahl größerer Anzeigen müssen entsprechende Treibertransistoren angefügt werden. Auch muss der Spannungsregler entsprechend ausgelegt und gekühlt werden.&lt;br /&gt;
&lt;br /&gt;
=== Sonstige Bauteile ===&lt;br /&gt;
Ansonsten brauchte man nur noch die üblichen Standardbauteile, beispielsweise &lt;br /&gt;
Dioden, Widerstände, Taster, Kondensatoren und eine Stiftleiste als Programmierstecker. Zusätzlich musste noch eine entsprechende Spannungsstabilisierung angefügt werden. Zuletzt benötigt wurde noch als &amp;quot;Gehirn&amp;quot; der Sache ein ATmega8.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Hier nun der grobe Schaltplan:&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/uhr.GIF&lt;br /&gt;
&lt;br /&gt;
Die übliche Peripherie (Quarz, Spannungsstabilisierung, Reset, ...) habe ich im Schaltplan der Übersichtlichkeit halber mit Absicht entfallen lassen. Zwischen den MC-Ausgängen und den LEDs der Anzeige müssen natürlich noch Widerstände eingefügt werden. In meinem Fall waren diese mit 220&amp;amp;#937; zu &lt;br /&gt;
dimensionieren.&lt;br /&gt;
&lt;br /&gt;
Da dieser DCF77-Empfänger mit einem Open-Kollektor-Ausgang daher kommt, ist noch eine geringfügige Beschaltung notwendig. Alternativ kann man auch die internen Pull-Up Widerstände des AVR nutzen.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/dcf77.GIF&lt;br /&gt;
&lt;br /&gt;
=== DCF77 Modul von Reichelt===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorsicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das DCF-Modul von [http://www.reichelt.de/?;ARTICLE=57772; Reichelt] hat einen sehr schwachen [[Ausgangsstufen_Logik-ICs#Push-Pull | Push-Pull Ausgang]]. Der liefert nur +/-5µA (MIKRO Ampere) und ist damit sogar zu schwach, einen Pull-Up vom AVR sauber auf GND zu ziehen (typ. 50 k&amp;amp;Omega;). Dieses Modul muss direkt an einen CMOS Eingang &#039;&#039;&#039;ohne&#039;&#039;&#039; Pull-Ups und sonstige Beschaltung angeschlossen werden. Weiterhin ist zu beachten, dass das Modul relativ empfindlich auf Störfelder von PCs, Laptopnetzteilen oder anderen Quellen starker Pulsströme, z.&amp;amp;nbsp;B. [[LED-Matrix | LED-Matritzen]], [[Multiplexen | gemultiplexten]] Nixies und anderes reagiert. Ein Abstand von 1m und mehr ist hier nötig, um ein sauberes Signal zu bekommen. Ausserdem sollte man die Versorgungsspannung ALLER ICs sauber mit 100nF Keramikkondensatoren sowie Elkos (10..100µF) puffern.&lt;br /&gt;
&lt;br /&gt;
Eine Minimalschaltung sieht etwa so aus.&lt;br /&gt;
&lt;br /&gt;
[[bild:DCF77_Reichelt.png| 800px]]&lt;br /&gt;
&lt;br /&gt;
Das DCF-Modul braucht nur sehr wenig Strom (100µA), das kann man bequem per IO-Pin schalten (PB4, Ausgang). PB3 wird als Eingang &#039;&#039;&#039;ohne&#039;&#039;&#039; internen Pull-Up Widerstand konfiguriert, PB2 als Ausgang. Nun muss man nur noch in einer Endlosschleife oder per [[Timer]] das Bit PB3 auf PB2 kopieren und erhält das demodulierte DCF77 Signal auf der [[LED]]. In schwierigen Fällen kann man R2 auf 2..10k&amp;amp;Omega; erhöhen sowie einen Elektrolytkondensator von 10..220µF parallel zu C1 schalten. Leider gibt es auch hier wieder verschiedene Module. Einige müssen PON auf HIGH schalten oder offen lassen, damit das Modul aktiviert wird. Genau im Datenblatt nachlesen!&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Da wie bereits oben erwähnt eine Ansteuerung aller vier 7-Segment-Anzeigen aus Pin-Mangel nicht direkt möglich ist, bin ich den Umweg über eine Art Multiplexer gegangen. Hierbei wird im wesentlichen die Trägheit des menschlichen Auges ausgenutzt. Es wird immer nur eine Anzeige angesteuert und dann ständig durchgewechselt. Da dies extrem schnell erfolgt, sieht es aus, als ob ständig alle leuchten würden. Im Beispiel wurde für diese Aufgabe Timer2 verwendet. Bei einem Prescaler von 64 ergibt sich eine Durchlauffrequenz von 8 MHz/64/256=488 Hz. Dadurch &amp;quot;flackert&amp;quot; jede Anzeige mit 488 Hz/4=122 Hz, was vom menschlichen Auge nicht mehr wahr genommen wird.&lt;br /&gt;
&lt;br /&gt;
Für die normale Zeitgewinnung habe ich den Timer1 verwendet. Dieser verursacht im Sekundentakt einen Interrupt. In der ISR wird dann entsprechend die Zeit um eine Sekunde inkrementiert. Es wurde ein Prescaler von 256 genutzt und der Timer mit 34286 vorgeladen. Durch die folgende einfache Rechnung ergibt sich die Interrupt-Frequenz: 8 MHz/256/(2^16-34286) = 1 s. Durch einen Dauertest kann man noch die Genauigkeit der Uhr erhöhen, denn es ist davon auszugehen, dass der Quarz selten mit exakt 8 MHz schwingen wird. Seinen wenn auch geringen Gangunterschied kann man dann per Software ausmerzen (Siehe Artikel [[AVR - Die genaue Sekunde / RTC]].&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des User-Interface mittels der Taster ist im Prinzip frei &lt;br /&gt;
wählbar. Ich habe es so ausgelegt, dass bei Drücken des Tasters an PB0 (gedrückt halten) mittels der beiden anderen Taster an PB1 und PB2 die Stunden und Minuten der Weckzeit eingestellt werden können. Hält man nur die Stunden- und Minutentaste (PB1, PB2) gedrückt, so kann man den Alarm aktivieren bzw. &lt;br /&gt;
deaktivieren. Um einen aktivierten Alarm zu signalisieren dient die LED an PC4.&lt;br /&gt;
&lt;br /&gt;
Stimmen aktuelle Uhrzeit und Alarmzeit überein, wird der Summer an PC5 durch &lt;br /&gt;
eine Art PWM-Signal angesteuert. Prinzipiell hätte auch einfach ein H-Pegel am &lt;br /&gt;
Port gereicht, allerdings ist der Pfeifton dann doch nicht als Wecksignal &lt;br /&gt;
geeignet. Deshalb wurde eine Art [[Soft-PWM | Software-PWM]] implementiert, die das Signal auf ein erträgliches Maß dämpft.&lt;br /&gt;
&lt;br /&gt;
=== Das DCF77-Signal ===&lt;br /&gt;
&lt;br /&gt;
Die meiner Meinung nach anspruchsvollste Sache an diesem Projekt war die Auswertung des DCF77-Signals. Dieses Signal wird jede Minute einmal gesendet. Nun ist zu beachten, wie lang der zur jeweiligen Sekunde gesendete Impuls ist. Bei einer Länge von 0,1s handelt es sich um eine &#039;0&#039;, bei einer Impulsdauer von 0,2s um eine &#039;1&#039;. Um den Beginn einer Sendung zu erkennen, entfällt das 59. Bit. Dies dient als Synchronisationsgrundlage. Insgesamt sieht das Bitmuster dann also folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; id=&amp;quot;table1&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Sekunde&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Bedeutung&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;0.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Minutenbeginn --&amp;amp;gt; immer &#039;0&#039;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;1.-14.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;keine Bedeutung, normal &#039;0&#039; &#039;&#039;&#039;[[DCF77 Wetterinformationen | NEU Wetterdaten(verschlüsselt)]]&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;15.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Reserveantenne aktiv&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;16.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Umstellung zwischen Sommer- bzw. Winterzeit&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;17.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Sommerzeit&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;18.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Winterzeit&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;19.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Schaltsekunde&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;20.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Zeitbeginn&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;21.-27.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Minute 1, 2, 4, 8, 10, 20, 40&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;28.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Prüfbit Minute&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;29.-34.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Stunde 1, 2, 4, 8, 10, 20&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;35.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Prüfbit Stunde&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;36.-41.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Tag 1, 2, 4, 8, 10, 20&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;42.-44.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Wochentag 1, 2, 4&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;45.-49.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Monat 1, 2, 4, 8, 10&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;50.-57.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Jahr 1, 2, 4, 8, 10, 20, 40, 80&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;58.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Prüfbit Datum (36. - 57.)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;59.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&amp;lt;font face=&amp;quot;Verdana&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;wird nicht gesendet (siehe oben)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst hatte ich mir die eingehenden Signale nur über den USART an meinen PC ausgeben lassen, um erst einmal ein Gefühl für das Signal zu bekommen. Dabei ergab sich beispielsweise die folgende Reihe (die unteren Reihen dienen lediglich der Bitnummerierung):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:#0000FF; font-size:medium&amp;quot;&amp;gt;&lt;br /&gt;
00000000000000000100100000101110010101000111100010001000001&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:#000000; font-size:medium&amp;quot;&amp;gt;&lt;br /&gt;
01234567890123456789012345678901234567890123456789012345678&amp;lt;br&amp;gt;&lt;br /&gt;
0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wie man sieht, ist das 17. Bit gesetzt, wir haben also Sommerzeit.&lt;br /&gt;
* Dann ist Bit 20 wieder gesetzt --&amp;amp;gt; Zeitbeginn.&lt;br /&gt;
* Bei den Minuten ist lediglich Bit 26 gesetzt, es waren also 20 Minuten.&lt;br /&gt;
* Da die Anzahl der gesetzten Bits bei den Minuten ungerade war, ist das Prüfbit (28.) gesetzt.&lt;br /&gt;
* Da Bit 29, 30 und 33 gesetzt sind, ergibt sich die Stundenzahl zu 13.&lt;br /&gt;
* Bei einer Zahl von 3 gesetzten Bits (ungerade) muss das Prüfbit (35.) wieder gesetzt sein.&lt;br /&gt;
* Hiermit wäre bereits die Uhrzeit zu 13:20 Uhr bestimmt.&lt;br /&gt;
* Analog kann man sich auch das Datum ausrechnen.&lt;br /&gt;
&lt;br /&gt;
Ausgewertet wird das Signal bei mir mittels eines Timers sowie des externen Interrupts INT0. Wird am Pin eine steigende Flanke erkannt, wird der Interrupt ausgelöst und vermerkt in einer Variablen den Signalbeginn. Ein kontinuierlich laufenden Timerinterrupt beobachtet nun den Pin und zählt die Signaldauer mittels einer Variablen hoch. Detektiert der Timerinterrupt, dass am &lt;br /&gt;
Pin L-Pegel herrscht, wertet er die Signaldauer aus und setzt die Variablen &lt;br /&gt;
zurück. Wird gerade kein Signal empfangen, zählt der Timerinterrupt die &lt;br /&gt;
Pausenzeiten aus, um eine Synchronisation (siehe 59. Bit) zu erreichen. Alle &lt;br /&gt;
Werte werden in ein Array geschrieben. Ist dieses voll, wurde ein komplettes &lt;br /&gt;
Zeitsignal empfangen. Nun kann dieses ausgewertet und die Uhrzeit entsprechend &lt;br /&gt;
aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Programmstruktur hat folgendes Aussehen:&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/struktur.png&lt;br /&gt;
&lt;br /&gt;
Das komplette Projekt (Sourcecode) findet sich [http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/Funkuhr.zip hier].&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
Der Vollständigkeit halber hier noch zwei Bilder der aufgebauten Uhr. Ich habe sie erst einmal nur auf Lochraster aufgebaut, da es mir mehr um die Demonstration der Funktionsweise als um das Schaffen einer schicken Funkuhr ging. Diese bekommt man ja heutzutage nahezu geschenkt.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/funkuhr_nacht.jpg&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/funkuhr_tag.jpg&lt;br /&gt;
&lt;br /&gt;
Da nach diesem ersten Prototypen die Problemstellung erweitert wurde, musste ein neues Layout entwickelt werden. Die neuen Anforderungen ergaben sich im wesentlichen aus der gewählten Anzeigenfarbe &amp;quot;Blau&amp;quot; sowie deren Größe von 38 mm. Bei der Wahl solcher Anzeigen muss man mit einer Flussspannung von etwa 6,6 V je Segment zurecht kommen. Das diese Anforderung nicht mehr allein mit der 5 V Logik des AVRs zu meistern ist, sollte klar sein, man braucht einen [[Pegelwandler]]. Das nächste Problem stellt auch die Helligkeit der Anzeige dar. Diese ist zwar bei Tageslicht durchaus ausreichend, erleuchtet bei Dunkelheit allerdings ein ganzes Zimmer :-)&lt;br /&gt;
&lt;br /&gt;
Also muss eine Möglichkeit gefunden werden, die Helligkeit der Anzeige in &lt;br /&gt;
Abhängigkeit von der Umgebungshelligkeit zu regeln. Hierzu muss ein [[Lichtsensor / Helligkeitssensor |Fotoelement ]] verwendet werden. Als erste Variante habe ich einen Fototransistor (BP103) verwendet. Dieser ist aber im eigentlichen Helligkeitsbereich (also von gedämpftem Licht bis Dunkelheit) überhaupt nicht zu gebrauchen. Andere Fotoelemente befinden sich bereits in der Testphase.&lt;br /&gt;
&lt;br /&gt;
Zuletzt sollte es noch möglich sein, die Alarmzeit und dessen Aktivierung auch &lt;br /&gt;
bei Stromausfällen zu speichern.&lt;br /&gt;
&lt;br /&gt;
Zudem habe ich mit diesem Projekt begonnen, meine ersten Schritt im Layout-Programm Eagle zu machen. Deshalb wird hier erstmalig ein Schaltplan als Schematic zur Verfügung gestellt. Kleinere Formfehler (auch Schönheitsfehler) bitte ich zu entschuldigen.&lt;br /&gt;
&lt;br /&gt;
* Schaltplan: [http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/Funkuhr.pdf Funkuhr.pdf]&lt;br /&gt;
* Software: [http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/funkuhr2.zip funkuhr2.zip]&lt;br /&gt;
&lt;br /&gt;
Aus Ladezeitgründen habe ich auf ein Bild davon hier verzichtet. Dafür gibt&#039;s noch ein Bild der Funkuhr im Betrieb.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/mc-project/Pages/Projekte/Funkuhr/funkuhr2_board.jpg&lt;br /&gt;
&lt;br /&gt;
Aufgebaut wurde sie auf einer fotobeschichteten Platine der Größe 200x150 mm. Durch deren Verwendung war ein einfaches Entwickeln und Ätzen zu Hause möglich. Das Layout wurde per Laserdrucker auf eine Folie übertragen, um ein Belichten unter einer Höhensonne zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/4?filter=dcf%2A DCF77-Projekte im Forum]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/1?filter=dcf* Sonstige Beiträge zum Thema DCF77]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;br /&gt;
[[Category:mc-project.de]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46055</id>
		<title>PHILIPS VP5500 VoIP Telefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46055"/>
		<updated>2010-04-09T16:09:59Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Dateien bearbeiten mit vi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Verwandte Artikel =&lt;br /&gt;
* Konfiguration: http://www.mikrocontroller.net/topic/170483#new&lt;br /&gt;
* Kernel/GUI Entwicklung: http://www.mikrocontroller.net/topic/172616#new&lt;br /&gt;
* http://das-labor.org/wiki/VP5500&lt;br /&gt;
* (Hack) http://spritesmods.com/?art=vpx500&lt;br /&gt;
* http://vp6500.bd8.nl/&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Kamera-Auflösung 640x480 Pixel&lt;br /&gt;
* 30 Bilder pro Sekunde&lt;br /&gt;
* Kamera um 240° drehbar&lt;br /&gt;
* 5,6 cm (2,2&amp;quot;) TFT-Display, 176x220 Pixel, 65000 Farben&lt;br /&gt;
* Audio-/Video-Ausgang (4fach Klinke-Cinch, beim VP5500 2,5mm Klinke und beim VP6500 3,5mm Klinke)&lt;br /&gt;
* integrierter Li-Ion Akku, 3,7 V-/1100 mAh&lt;br /&gt;
* englische und niederländische Menüsprache&lt;br /&gt;
* Software Qtopia Version 2.1.0&lt;br /&gt;
* Maße (LxBxH): 134x49x24 mm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Philips_VP5500.jpg]]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
* MCU: Freescale MC9328MX21 (ARM9) @ 266MHz ([http://en.wikipedia.org/wiki/I.MX21 Wikipedia_englisch])&lt;br /&gt;
** gehoert zur ARM9E-Familie: ARMv5TEJ -&amp;quot;IntructionSet&amp;quot; (ARM926EJ-S)&lt;br /&gt;
* PC-to-TV-Konverter-Chip: FS455LF&lt;br /&gt;
* WLAN: Marvell 88w8385, als Modul von WM-G-MR-01 (VP5500) / Philips BGW211, on-board (VP6500)&lt;br /&gt;
* SDRAM: 2 x K4S56163LF - 4M x 16Bit x 4 Banks&lt;br /&gt;
* Flash: 2 x ws128j0pbfw00 S29WS128J/064J 128/64 Megabit (8/4 M x 16-Bit) CMOS 1.8 Volt-only Simultaneous Read/Write, Burst Mode Flash Memory&lt;br /&gt;
* Kamera: dc-4626.a5 by chicony&lt;br /&gt;
* Display: Samsung LTS220QC (HD66772 Controller)&lt;br /&gt;
&lt;br /&gt;
== System-Takte ==&lt;br /&gt;
 # cat /proc/systclk&lt;br /&gt;
 System clocks state:&lt;br /&gt;
     Ref clock :      32768Hz  (int, premult by 512)&lt;br /&gt;
     MPLL clock:  263999905Hz  (computed: 264000000Hz)&lt;br /&gt;
     SPLL clock:  163840000Hz  (computed: 163840000Hz)&lt;br /&gt;
     CPU clock :  263999905Hz  (PERSC   = 0)&lt;br /&gt;
     Bus clock :  132000000Hz  (BCLKDIV = 1, computed: 131999952Hz)&lt;br /&gt;
     CSI clock :  unknown      (cannot read register CSICR1)&lt;br /&gt;
     USB clock :   20480000Hz  (USB_DIV = 7)&lt;br /&gt;
     Wait State:  CS0U[WSC] = 10, CS0U[WSC] = 48&lt;br /&gt;
     loops_per_jiffy = 665058&lt;br /&gt;
&lt;br /&gt;
= Innenleben =&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei:Oberseite.jpg | Ansicht der Oberseite&lt;br /&gt;
Datei:Oberseite_beschriftet.jpg | Oberseite mit Beschriftung der Bauteile&lt;br /&gt;
Datei:Drumherum.jpg | Übersicht über die Komponenten&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
Datei:Kontakte_Oberseite.jpg | UART-Schnittstelle Oberseite&lt;br /&gt;
Datei:Kontakte_Unterseite.jpg | JTAG-Schnittstelle Unterseite&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP5500 ==&lt;br /&gt;
Original Liste von [http://www.mikrocontroller.net/topic/170483#1646514 Tino] [[Media:Philips vp5500 Liste Testpins.pdf|herrunterladen]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:Philips vp5500 testpins 1.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
[[Bild:Philips vp5500 testpins 2.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-&lt;br /&gt;
|   1       ||                  LED || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    2     ||            Kamera Pin 8 an CN1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    3     ||                  Pin 4 an IC1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    4    ||                z.B. IC5 Pin V 18 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|    5    ||                       GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|    6     ||                       NC || NC&lt;br /&gt;
|-&lt;br /&gt;
|    7     ||                Pin E 16 an IC5 || SAP_CLK&lt;br /&gt;
|-&lt;br /&gt;
|    8     ||                 Pin 1 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    9     ||                 Pin 2 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    10    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    11     ||                 Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    12    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    13    ||                Pin L 16 an IC5 || UART2_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    14     ||               Pin C 12 an IC5 || USBH1_RXDM&lt;br /&gt;
|-&lt;br /&gt;
|    15   ||                 Pin H 12 an IC5 || USBH1_TXDP&lt;br /&gt;
|-&lt;br /&gt;
|    16     ||               Pin B 19 an IC5 || CSPI2_SS2&lt;br /&gt;
|-&lt;br /&gt;
|    17   ||                 Pin B16 an IC5 || SSI2_FS&lt;br /&gt;
|-&lt;br /&gt;
|    18     ||               Pin F 18 an IC5 || KP_ROW0&lt;br /&gt;
|-&lt;br /&gt;
|    19    ||                Pin K 18 an IC5 || KP_COL4&lt;br /&gt;
|-&lt;br /&gt;
|    20    ||                Pin L 19 an IC5 || UART3_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    21     ||               Pin T 14 an IC5 || RESET_IN&lt;br /&gt;
|-&lt;br /&gt;
|    22    ||    geht an + des Kondensators neben IC6 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    23   ||                Pin D 13 an IC 9 || CLKOUT&lt;br /&gt;
|-&lt;br /&gt;
|    24      ||             Pin E 13 an IC 9 || CLKIN_P&lt;br /&gt;
|-&lt;br /&gt;
|    25    ||                Pin A 9 an IC 9 || DAC_D&lt;br /&gt;
|-&lt;br /&gt;
|    26    ||                Pin A 8 an IC 9 || DAC_A&lt;br /&gt;
|-&lt;br /&gt;
|    27    ||                Pin A 7 an IC 9 || DAC_B&lt;br /&gt;
|-&lt;br /&gt;
|    28     ||               Pin A 6 an IC 9 || DAC_C&lt;br /&gt;
|-&lt;br /&gt;
|    29      ||             Pin L 13 an IC 5 || UART1_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    30     ||              Pin T 16 an IC 5 || BOOT1&lt;br /&gt;
|-&lt;br /&gt;
|    31  ||                 Pin K 10 an IC 5 || UART1_RXD&lt;br /&gt;
|-&lt;br /&gt;
|    32    ||               Pin U 17 an IC 5 || BOOT2&lt;br /&gt;
|-&lt;br /&gt;
|    33    ||                 Pin 9 an IC 23 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    34    ||                Pin D 19 an IC5 || CSPI2_SCLK&lt;br /&gt;
|-&lt;br /&gt;
|    35     ||              Pin C 14 an IC5 || TIN&lt;br /&gt;
|-&lt;br /&gt;
|    36    ||                Pin C 19 an IC5 || CSPI2_SS1&lt;br /&gt;
|-&lt;br /&gt;
|    37   ||                 Pin D 18 an IC5 || CSPI2_SS0&lt;br /&gt;
|-&lt;br /&gt;
|    38     ||               Pin E 19 an IC5 || CSPI2_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|    39     ||               Pin H 19 an IC5 || PWMO&lt;br /&gt;
|-&lt;br /&gt;
|    40   ||            Pin J 9 an IC 7 und IC 8 || VDD&lt;br /&gt;
|-&lt;br /&gt;
|    41   ||                 Pin J 19 an IC 5 || KP_COL2&lt;br /&gt;
|-&lt;br /&gt;
|    42   ||                Pin K 16 an IC 5 || KP_COL3&lt;br /&gt;
|-&lt;br /&gt;
|    43   ||                 Pin J 11 an IC 5 || KP_ROW2&lt;br /&gt;
|-&lt;br /&gt;
|44      ||     Pin J 17 an IC 5 || KP_COL1&lt;br /&gt;
|-&lt;br /&gt;
|45  ||         Pin G 19 an IC 5 || KP_ROW4&lt;br /&gt;
|-&lt;br /&gt;
|46  ||         Pin G 17 an IC 5 || KP_ROW3&lt;br /&gt;
|-&lt;br /&gt;
|47  ||    Pin D 5 an IC 10 und IC 11 || ACC&lt;br /&gt;
|-&lt;br /&gt;
|48 ||          Pin G 16 an IC 5 || KP_ROW1&lt;br /&gt;
|-&lt;br /&gt;
|49   ||        Pin J 18 an IC 5 || KP_COL0&lt;br /&gt;
|-&lt;br /&gt;
|50  ||         Pin V 18 an IC 5 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|51 ||      Pin 2 an CN KB-Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|52 ||           Pin 2 an IC 15 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|53  ||      Pin 4 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|54  ||         Pin E 17 an IC 5 || CSPI2_MISO&lt;br /&gt;
|-&lt;br /&gt;
|55 ||  Pin 1,2,3,10,13 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|56  ||          Pin 3 an IC 16 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|57  ||         Pin U 10 an IC 5 || PC_PWRON&lt;br /&gt;
|-&lt;br /&gt;
|58  ||            Pin 1 IC 18 || ?&lt;br /&gt;
|-&lt;br /&gt;
|59  ||       an Diode über IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|60  ||          Pin 3 an IC 25 || ?&lt;br /&gt;
|-&lt;br /&gt;
|61 ||         Ladekontakt positiv || Ladegerät +&lt;br /&gt;
|-&lt;br /&gt;
|62  ||               GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|63  ||        Akku Mittelkontakt || Akkustand? Temperatur?&lt;br /&gt;
|-&lt;br /&gt;
|64 ||       Transistor unter IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|65  ||          Pin 2 an IC 22 || ?&lt;br /&gt;
|-&lt;br /&gt;
|66   ||      Pin 1,12,30 an IC 24 || VSS&lt;br /&gt;
|-&lt;br /&gt;
|67  ||    Kondensator + unter IC 20 || ?&lt;br /&gt;
|-&lt;br /&gt;
|68   ||         Pin 5 an IC 21 || ?&lt;br /&gt;
|-&lt;br /&gt;
|69  ||           Pin 2 an IC 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|70    ||        Pin 25 an IC24 || MCLK&lt;br /&gt;
|-&lt;br /&gt;
|71  ||       Prozessor Pin W 14 || QVDD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP6500 ==&lt;br /&gt;
Original Listen von [http://www.mikrocontroller.net/topic/170483#1658720 Tino] herunterladen. [[Media:V6500_Back.xls|Rückseite]], [[Media:V6500_Front.xls|Vorderseite]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Back.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || Pin 21 an BGW211EG || POR_N&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || Pin A 14 an i.MX21 || TOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || Pin 46 an BGW211EG || JTAG_TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || Pin 44 an BGW211EG || JTAG_TCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || Pin 42 an BGW211EG || JTAG_TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || Pin 47 an BGW211EG || JTAG_TRST_N&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || PIN 45 an BGW211EG || JTAG_TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || Pin 43 an BGW211EG || JTAG_RTCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || VDD || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || Pin K 10 an i.MX21 || UART1_RXD&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Front.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || 	Pin 29 von BGW211EG &amp;amp; F 16 an i.MX21 || RESET_N / CSPI1_SS1&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || 	Pin 28 an BGW211EG &amp;amp; J 12 an i.MX21 || SPI_DAT_MOSI / CSPI1_MOSI&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || 	Pin 27 an BGW211EG &amp;amp; F 19 an i.MX21 || SPI_SS_N / CSPI1_SS0&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || 	Pin 26 an BGW21EG &amp;amp; F 17 an i.MX21 || SPI_DAT_MISO / CSPI1_MISO&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || 	Pin 25 an BGW211EG &amp;amp; H 10 an i.MX21 || SPI_CLK / CSPI1_SCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || 	Pin 24 an BGW211EG &amp;amp; H 11 an i.MX21 || SPI_EXT_INT / CSPI1_RDY&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || 	Pin 41 an BGW211EG || UART_TX&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || 	Pin 40 an BGW211EG || UART_RX&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || 	Transistor unter Testpunkt || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || 	LED || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || 	Pin 8 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || 	Pin 18 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || 	Pin E 13 &amp;amp; H12 an FS455 || CLKIN / PREF&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || 	Pin D 13 an FS455 || CLKOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 16 || 	Pin A 11 an FS455 || XTAL_OUT&lt;br /&gt;
|-		&lt;br /&gt;
| 17 || 	VDD von FS455 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 18 || 	Pin 15 &amp;amp; 16 am Displayconnector || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 19 || 	geht an 2 Dioden links daneben || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 20 || 	Pin M 19 an i.MX21 || UART1_CTS&lt;br /&gt;
|-		&lt;br /&gt;
| 21 || 	Pin M 18 an i.MX21 || UART1_RTS &amp;amp; GND ??&lt;br /&gt;
|-		&lt;br /&gt;
| 22 || 	VDDan i,MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 23 || 	Pin G 10 an i.MX21 || USB_BYP&lt;br /&gt;
|-		&lt;br /&gt;
| 24 || 	Pin A 19 an i.MX21 || SSI3_FS&lt;br /&gt;
|-		&lt;br /&gt;
| 25 || 	Pin D 17 an i.MX21 || SSI2_CLK&lt;br /&gt;
|-		&lt;br /&gt;
| 26 || 	VDD an i.MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 27 || 	Pin T 17 an i.MX21 || SD1_D3&lt;br /&gt;
|-		&lt;br /&gt;
| 28 || 	Pin A 15 an i.MX21 || SAP_TXDAT&lt;br /&gt;
|-		&lt;br /&gt;
| 29 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 30 || 	Pin T 14 an i.MX21 || RESET_IN&lt;br /&gt;
|-		&lt;br /&gt;
| 31 || 	Pin R 19 an i.MX21 || TRST&lt;br /&gt;
|-		&lt;br /&gt;
| 32 || 	Pin P 19 an i.MX21 || TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 33 || 	Pin N 17 an i.MX21 || TCK&lt;br /&gt;
|-		&lt;br /&gt;
| 34 || 	Pin K 11 an i.MX21 || TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 35 || 	Pin P 18 an i.MX21 || TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 36 || 	Pin 13 an TLV320 || OUTP2&lt;br /&gt;
|-		&lt;br /&gt;
| 37 || 	Pin 14 an TLV320 || OUTMV&lt;br /&gt;
|-		&lt;br /&gt;
| 38 || 	Pin 15 an BGW211EG || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 39 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 40 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 41 || 	? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 42 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 43 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 44 || 	Pin 1,8 an 20XN2512 &amp;amp; Key ON || PowerON&lt;br /&gt;
|-		&lt;br /&gt;
| 45 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 46 || 	Pin 2 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 47 || 	Pin 6 an MRRBGB3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 48 || 	LED Tastatur ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 49 || 	Pin 10 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 50 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 51 || 	geht an Widerstand auf Rückseite ? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 52 || 	Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 53 || 	geht an Diode und Kondensator auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 54 || 	Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 55 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 56 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 57 || 	Pin K 10 an i.MX21 || UART1_RDX&lt;br /&gt;
|-		&lt;br /&gt;
| 58 || 	Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 59 || 	Pin T 16 an i.MX21 || BOOT1&lt;br /&gt;
|-		&lt;br /&gt;
| 60 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 61 || 	Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|-		&lt;br /&gt;
| 62 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 63 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 64 || 	Pin 25 an TLV320 || MLCK&lt;br /&gt;
|-		&lt;br /&gt;
| 65 || 	Pin4 an 69W2440D || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 66 || 	VDD von TLV320 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 67 || 	geht an Widerstand auf der Rückseite ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 68 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 69 || 	Pin 65 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 70 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 71 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 72 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 73 || 	Akku positiv || Plus Akku&lt;br /&gt;
|-		&lt;br /&gt;
| 74 || 	Ladekontakt positiv || Ladekontakt positiv&lt;br /&gt;
|-		&lt;br /&gt;
| 75 || 	Akku positiv || Plus Akku&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
TIN muss auf low gezogen werden, um die Schnittstelle zu aktivieren.&lt;br /&gt;
Jedoch startet dann das Telefon nicht vollständig (Fix siehe [[#Betrieb mit aktiverter serieller Schnittstelle]])&lt;br /&gt;
&lt;br /&gt;
* Spannungs-Pegel: 3.3V&lt;br /&gt;
* Baudrate: 115200kbps&lt;br /&gt;
* Stopbits: 1&lt;br /&gt;
* Flussteuerung: keine&lt;br /&gt;
=== VP5500 ===&lt;br /&gt;
[[Bild:VP5500_seriell_highlight.svg|100px|UART-Pins VP5500(Frontseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unten vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&lt;br /&gt;
&lt;br /&gt;
=== VP6500 ===&lt;br /&gt;
[[Bild:VP5600-Serialport-Preliminary.jpg|100px|UART-Pins VP6500]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unter vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&amp;lt;br&amp;gt;&lt;br /&gt;
VCC liefert anscheinend die ungeregelte Akkuspannung, Boot-Pins nicht verifiziert.&lt;br /&gt;
&lt;br /&gt;
== JTAG ==&lt;br /&gt;
[[Bild:jtag.jpg Belegung der JTAG-Pins (Rückseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
= Hardware Modifikationen =&lt;br /&gt;
== Zerlegen des Telefons ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:01_offen_von_Hinten.JPG|1. Geöffnetes Akkufach&lt;br /&gt;
Datei:02_Blende_entfernt.JPG|2. hintere Schwarze Blende entfernt&lt;br /&gt;
Datei:03_Rückseite_entfernt.JPG|3. Schalenrückteil entfernt&lt;br /&gt;
Datei:04_aufhebeln_Vorderteil.JPG|4. Druck nach außen&lt;br /&gt;
Datei:05_vorderteil_entfernt.JPG|5. entferntes Vorderteil&lt;br /&gt;
Datei:06_Elektronik_entfernt.JPG|6. entfernte Elektronik&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# das Akkufach muss geöffnet und die Schrauben entfernt werden&lt;br /&gt;
# hinter der rückseitigen schwarzen Blende befinden sich zwei Schrauben, die entfernt werden müssen&lt;br /&gt;
#* Hierzu am besten mit einem schmalen kleinen Schraubendreher von der Stirnseite aus zwischen die Plastikteile fahren und vorsichtig aufhebeln und den Schraubendreher dabei weiter unter die Blende bewegen.&lt;br /&gt;
# Nun kann einfach das rückseitige Schalenteil abgeschaubt werden&lt;br /&gt;
# das Entfernen des Frontschalenteils ist etwas tricky:&lt;br /&gt;
#* von oben und unten lässt sich ganz gut ein Spalt zur Seite aufweiten&lt;br /&gt;
#* etwas unter der Mitte hängt es aber auf beiden Seiten. Dort befinden sich kleine Plastikbügel, die recht leicht zerbrechen.&lt;br /&gt;
#* Mit einem sehr schmalen Schraubendreher in eine der Lücken fahren (anfange auf der Seite ohne Tasten) und den Schraubendreher nach innen drücken, so das der Druck in der Seite nach außen wirkt.&lt;br /&gt;
#* Mit etwas Geschick bekommt man das so ohne Bruch ab, es ist aber auch nicht kritisch, wenn der Bügel ein wenig anbricht)&lt;br /&gt;
# Die Platine zu entfernen ist nicht ganz so schwierig.&lt;br /&gt;
#* Zuerst die Seite auf der keine Knöpfe sind:&lt;br /&gt;
#* vorichtig diese Seite leicht anheben. Am unteren Ende ist auf die Kontakte zu achten &lt;br /&gt;
#* dann versuchen die Paltine seitlich nach oben aus dem Gehäuse zu ziehen&lt;br /&gt;
#* dabei auf das Lautsprecherkabel und den Kamerakonnektor achten&lt;br /&gt;
# Zusammenbau genauso, nur umgedreht ;)&lt;br /&gt;
#* nicht die Lautsprecher- und Kamera-Stecker vergessen&lt;br /&gt;
&lt;br /&gt;
== Buchse für Uart einbauen ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:10_Pins.JPG|1. unbearbeitete Pinreihe&lt;br /&gt;
Datei:11_Pins_bearbeitet.JPG|2. präperierte Pinreihe&lt;br /&gt;
Datei:09_Pads.JPG|3. präperierte Pads&lt;br /&gt;
Datei:12_Pins_ausrichten.JPG|4. Pinreiheausrichten&lt;br /&gt;
Datei:13_Pins_angelötet_1.JPG|5. angelötete Pinreihe&lt;br /&gt;
Datei:14_Pins_angelötet_2.JPG|6. angelötete Pinreihen&lt;br /&gt;
Datei:08_Mittelteil.JPG|7. Mittelteil mit ausgefeiltem Loch&lt;br /&gt;
Datei:15_Mittelteil_zusammengebaut.JPG|8. wieder zusammengesteckt&lt;br /&gt;
Datei:16_in_Aktion.JPG|9.verbundene serielle Schnittstelle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zunächst muss das Telefon zerlegt werden ([[#Zerlegen des Telefons]])&lt;br /&gt;
Um das Gehäuse nicht zu beeinträchtigen, habe ich mich dazu entschieden, alles so zu lassen wie es ist und nur kleine Buchsen einzubauen. &lt;br /&gt;
&lt;br /&gt;
# Hierfür habe ich einreihige gedrehte IC-Sockel genutzt &lt;br /&gt;
# deren Beine abgezwickt, und etwas Lötzinn aufgetragen (mit der langen Reihe kann man die kurzen, schmalen Teile super handhaben)&lt;br /&gt;
# ebendso auf die Pads ein wenig eingezinnt&lt;br /&gt;
# ausrichten und festlöten&lt;br /&gt;
# eine Reihe&lt;br /&gt;
# die zweite Reihe&lt;br /&gt;
# bei der Gehäuseöffnung über den Pins habe ich mit einer feinen Schlüsselfeile den Rand wenig aufgeweitet. An der Gummimatte hab ich nix geändert.&lt;br /&gt;
# fertig&lt;br /&gt;
# und im Einsatz&lt;br /&gt;
&lt;br /&gt;
= Das VPx500 &#039;rooten&#039; =&lt;br /&gt;
&lt;br /&gt;
Um vollen Zugang zum System auf dem Gerät zu erhalten gibt es mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== per serieller Schnittstelle ==&lt;br /&gt;
Dazu muß der [[#UART]] angeschlossen werden. Während des Bootvorgangs drückt man immer wieder ziellos irgendwelche Tasten bis man am Prompt des [http://www.lartmaker.nl/lartware/blob/ blob-Bootloaders] ist.&lt;br /&gt;
Dann kann man &lt;br /&gt;
 boot root=/dev/mtdblock2 init=/bin/sh&lt;br /&gt;
eingeben, um an eine minimale Shell zu kommen.&lt;br /&gt;
&lt;br /&gt;
In dieser setzt man dann mit &lt;br /&gt;
 passwd&lt;br /&gt;
man dann das Passwort für &#039;&#039;root&#039;&#039;. Danach kann man sich als &#039;&#039;root&#039;&#039; mit dem gesetzten Passwort einloggen.&lt;br /&gt;
&lt;br /&gt;
== per DNS-Hack ==&lt;br /&gt;
Um den Rootzugriff zu aktivieren, wird dem Telefon ein Softwareupdate vorgegaukelt. Es versucht, auf den Updateserver von KPN zuzugreifen (den es nicht mehr gibt). Glücklicherweise geschieht dies nicht über eine feste IP, sondern über einen Hostnamen, so dass man an dieser Stelle sich durch einen eigenen DNS den Domainname auf einen eigenen Server umleiten kann. Daher ist im eigenen Netzwerk eine Umleitung des DNS erforderlich (oder ein DHCP-Server, der die Adresse des DNS bekanntgibt. Stichworte &#039;Static DNS&#039;, ..).&lt;br /&gt;
Das Gerät holt sich dann ein Updatepaket, das den Telnet-Zugang aktiviert.&lt;br /&gt;
&lt;br /&gt;
Dann lässt sich per Terminal (Linux. Windows: ....) die Kommandozeile des Geräts aufrufen:&lt;br /&gt;
&lt;br /&gt;
 telnet 123.456.789.012&lt;br /&gt;
&lt;br /&gt;
Passwort ist &amp;quot;toor&amp;quot;.&lt;br /&gt;
Das Ändern des root-Passwortes erfolgt mit dem Befehl passwd.&lt;br /&gt;
&lt;br /&gt;
Unter Applications&amp;gt;Registration sind Netzwerk- und VoIP-Einstellungen zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für Fritz-Box-Benutzer ===&lt;br /&gt;
Die Fritzboxen bieten bisher leider keine Möglichkeit, den verwendeten DNS&lt;br /&gt;
direkt im Webinterface zu ändern, über Umwege geht es aber doch:&lt;br /&gt;
* Über das Webinterface der Fritzbox die Einstellungen sichern&lt;br /&gt;
* Exportdatei im Texteditor öffnen (am besten nicht Notepad, da der die Unix-Zeilenumbrüche nicht versteht - zur Not geht auch Wordpad)&lt;br /&gt;
* nach overwrite_dns1 suchen (gibt es zwei mal) und da den DNS 84.38.68.30 oder 188.40.123.50 eintragen&lt;br /&gt;
* am Anfang der Exportdatei VOR &amp;quot;**** CFGFILE:ar7.cfg&amp;quot; eine Zeile &#039;NoChecks = yes&#039; einfügen, damit die Fritzbox die nun nicht mehr passende Checksumme ignoriert.&lt;br /&gt;
* Einstellungen zurück in die Fritzbox übertragen.&lt;br /&gt;
&lt;br /&gt;
Wenn die Telefone entsperrt sind, den DNS wieder entfernen (Es ist&lt;br /&gt;
vielleicht eine ganz gute Idee, wenn man da zwei unabhängige DNS-Server&lt;br /&gt;
einträgt, so umgeht man auch gleich providerseitige DNS-Sperren)&lt;br /&gt;
&lt;br /&gt;
= Voice over IP (VoIP, SIP) =&lt;br /&gt;
&lt;br /&gt;
*http://de.wikipedia.org/wiki/IP-Telefonie&lt;br /&gt;
*http://de.wikipedia.org/wiki/Session_Initiation_Protocol&lt;br /&gt;
*http://de.wikipedia.org/wiki/H.323&lt;br /&gt;
*http://de.wikipedia.org/wiki/Softphone&lt;br /&gt;
&lt;br /&gt;
Benutzer ist 103&lt;br /&gt;
&lt;br /&gt;
Mit Ekiga konnte so per 103@xxx.xxx.xxx.xxx eine Sprachverbindung zum Telefon aufgebaut werden.&lt;br /&gt;
=== Eigener VoIP Server mit Asterisk ===&lt;br /&gt;
*http://www.das-asterisk-buch.de&lt;br /&gt;
&lt;br /&gt;
= Software Modifikationen =&lt;br /&gt;
== Vorsicht Fallen ==&lt;br /&gt;
Es ist nicht schwer, sich den Zugang zum Telefon abzuschneiden, wenn man nicht aufpasst.&lt;br /&gt;
=== Startscripten ===&lt;br /&gt;
Die Scripten in /etc/rc.d/&amp;quot; müssen im Hintergrund laufen. Tut ein Script das nicht, ist an dieser Stelle Schluß mit dem Bootvorgang.&lt;br /&gt;
&lt;br /&gt;
Dann darf man als nächstes den Lötkolben anheizen und die serielle Schnittstelle ([[#UART]]) zugänglich machen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
Bestimmte Aktionen werden immer wieder benötigt.&lt;br /&gt;
Diese sollen hier kurz beschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Es werden dennoch grundlegende Kenntnisse von Kommandozeilen vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Dateien bearbeiten mit vi===&lt;br /&gt;
Auf dem Telefon ist der minimalistische Editor vi installiert mit dem Dateien über Telnet bearbeitet werden können.&lt;br /&gt;
Für eine genaue Bedienung bitte Google benutzen.&lt;br /&gt;
Die wichtigsten Bedienelemente werden hier kurz erläutert.&lt;br /&gt;
&lt;br /&gt;
Datei Öffnen mit &#039;vi Dateipfad&#039;&lt;br /&gt;
vi kennt zwei Modi: Kommando- und Einfüge-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;i&#039;&#039;&#039; - wechselt in den Einfüge-Modus, in dem geschrieben werden kann&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;a&#039;&#039;&#039; - anhängen (hinter dem aktuellem Zeichen in den Einfüge-Modus)&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[Esc]&#039;&#039;&#039; wechselt zurück in den Kommandomodus. &lt;br /&gt;
In diesem kann mittels Pfeil- und Bildlauftasten navigiert werden.&lt;br /&gt;
:x - löscht das Zeichen an Cursor position&lt;br /&gt;
:d&#039;&#039;n&#039;&#039;d - löscht &#039;&#039;n&#039;&#039; Zeile(n) in den Zeilenbuffer (ohne &#039;&#039;n&#039;&#039; = eine Zeile)&lt;br /&gt;
:y&#039;&#039;n&#039;&#039;y - kopiert &#039;&#039;n&#039;&#039; Zeile(n) in den Zeilenbuffer (ohne &#039;&#039;n&#039;&#039; = eine Zeile)&lt;br /&gt;
:p - fügt Inhalt des Zeilenbuffer &#039;&#039;&#039;unter&#039;&#039;&#039; der aktuellen Zeile ein&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;q! - schließt ohne zu speichern&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;w - speichert&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;wq - speichert und beenden&lt;br /&gt;
&lt;br /&gt;
=== Dateien auf das Telefon laden ===&lt;br /&gt;
Um Daten von einem http-Server zu laden, benutzt man &lt;br /&gt;
 wget url&lt;br /&gt;
Die Datei wird dann in das aktuelle Verzeichnis geladen, weswegen vorher in das Zielverzeichnis wechseln.&lt;br /&gt;
&lt;br /&gt;
Um Daten von einem ftp-Server zu laden, benutzt man ftp.&lt;br /&gt;
Auch hier muss vorher in das zielverzeichnis gewechselt werden.&lt;br /&gt;
 ftp hostname&lt;br /&gt;
dann gegebenenfalls die Zugangsdaten eingeben und mittels &#039;cd&#039; und &#039;ls&#039; in das Entsprechende Verzeichnis auf dem FTP-Server wechseln&lt;br /&gt;
und anschließend mittels &lt;br /&gt;
 get dateiname&lt;br /&gt;
die Datei herunterladen.&lt;br /&gt;
 &lt;br /&gt;
=== Dateien vom Telefon herunterladen ===&lt;br /&gt;
Auch hier bietet sich ein FTP an.&lt;br /&gt;
Mittels &#039;ftp hostname&#039; verbinden, Benutzerdaten eingeben, in das entsprechende FTP-Server-Verzeischnis wechseln und mittels&lt;br /&gt;
 put localeDatei&lt;br /&gt;
eine Lokale Datei hochladen.&lt;br /&gt;
&lt;br /&gt;
=== Alternative Dropbear ===&lt;br /&gt;
&lt;br /&gt;
Wurde der dropbear-ssh server installiert [[#Dropbear (SSH-Server) installieren]] können mittels eines Programms mit SCP-Unterstützung (zB. [http://winscp.net/eng/docs/lang:de WinSCP] für Windows) sehr komfortabel Dateien ausgetauscht werden.&lt;br /&gt;
&lt;br /&gt;
Mit WinSCP können auch Dateien direkt bearbeitet werden.&lt;br /&gt;
Der Client lädt die Datei herunter, öffnet einen Editor und lädt die Datei wieder herauf, wenn diese geändert wurde.&lt;br /&gt;
&lt;br /&gt;
== Backup ==&lt;br /&gt;
=== Backup des Flash ===&lt;br /&gt;
If you want to make a backup of your root partition, you can do as&lt;br /&gt;
follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#!/bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cat /dev/mtdb2 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
micro_inetd 31337 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This&#039;ll make your device listen for incoming connections on port 31337.&lt;br /&gt;
On your host system you may then simply run &lt;br /&gt;
 nc ip.of.your.phone 31337 &amp;gt; fon_rootfs&lt;br /&gt;
et voilà, you got your rootfs packed into a file.&lt;br /&gt;
&lt;br /&gt;
Note that the backed up file is not ext2, but a jffs2 formatted&lt;br /&gt;
filesystem. These can&#039;t be handled by a simple &amp;quot;mount -o loop&amp;quot; as you&#039;d&lt;br /&gt;
have thought... so here&#039;s how you mount it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
modprobe jffs2&lt;br /&gt;
modprobe mtdram total_size=32768 erase_size=128&lt;br /&gt;
modprobe mtdblock&lt;br /&gt;
mkdir /tmp/phone-root&lt;br /&gt;
mknod /tmp/phone-mtdb2 b 31 0&lt;br /&gt;
dd if=/your/backup/file of=/tmp/phone-mtdb2&lt;br /&gt;
mount -t jffs2 /tmp/phone-mtdb2 /tmp/phone-root&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#Dateisystem herunterladen]] describes another way to dump the filesystem for closer examination.&lt;br /&gt;
&lt;br /&gt;
=== Komplettes Backup ===&lt;br /&gt;
Die Datei http://www.mikrocontroller.net/attachment/73323/S91backup_pipe auf das Gerät laden und als ausführbar markieren.&lt;br /&gt;
&lt;br /&gt;
 cd /etc/rc.d/init.d&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/73323/S91backup_pipe&lt;br /&gt;
 chmod +x /etc/rc.d/init.d/S91backup_pipe&lt;br /&gt;
&lt;br /&gt;
Damit wird eine Art Backup-Server mit dem Boot gestartet.&lt;br /&gt;
wenn man dies nicht möchte kann man das Skript natürlich auch an jeden beliebigen anderen Ort legen und per Hand starten.&lt;br /&gt;
&lt;br /&gt;
Nun kann man von einem Rechner aus mittels nc (netcat) die Bereiche sichern:&lt;br /&gt;
&lt;br /&gt;
 nc 192.168.1.3 31337 &amp;gt; fon_rootfs&lt;br /&gt;
 nc 192.168.1.3 31338 &amp;gt; fon_udata&lt;br /&gt;
 nc 192.168.1.3 31339 &amp;gt; fon_usettings&lt;br /&gt;
 nc 192.168.1.3 31340 &amp;gt; fon_bootld&lt;br /&gt;
 nc 192.168.1.3 31341 &amp;gt; fon_kernel&lt;br /&gt;
&lt;br /&gt;
Die 192.168.1.3 natürlich mit der IP des Gerätes austauschen, die fon_*&lt;br /&gt;
Dateinamen könnt ihr natürlich auch frei vergeben.&lt;br /&gt;
&lt;br /&gt;
fon_udata ist die /user_data Partition, fon_usertings dementsprechend&lt;br /&gt;
die /user_settings Partition.&lt;br /&gt;
&lt;br /&gt;
Der bootld Bereich enthält auch die Parameter. Um das später (falls&lt;br /&gt;
überhaupt nötig) mittels blob zu restaurieren müsste die Datei noch in&lt;br /&gt;
zwei Teile aufgeteilt werden. Der erste enthält dann den reinen&lt;br /&gt;
Bootloader-Bereich, der zweite die Parameter. Wer&#039;s wirklich braucht für&lt;br /&gt;
den kann ich noch ne Anleitung zum Aufteilen geben. Wirklich Sinnvoll&lt;br /&gt;
ist das aber nicht, hat man den Bootloader erstmal mit was anderem&lt;br /&gt;
überschrieben kann man ihn ja auch nicht mehr zum Wiederherstellen&lt;br /&gt;
benutzen....&lt;br /&gt;
&lt;br /&gt;
=== Zurückspielen der Backups ===&lt;br /&gt;
&lt;br /&gt;
1) Man braucht ein (die) Backup-Image(s).&lt;br /&gt;
&lt;br /&gt;
2) Serielle Verbindung zum Telefon&lt;br /&gt;
&lt;br /&gt;
3) Akku abstecken, wieder anstecken.&lt;br /&gt;
&lt;br /&gt;
4) Telefon einschalten und im Terminalprogram auf die Tasten kloppen, so&lt;br /&gt;
das man im Bootloader landet. Dabei muss man recht schnell sein. Es&lt;br /&gt;
sollte dann ein Prompt kommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
blob&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Nun gibt man ein &lt;br /&gt;
   xdownload param&lt;br /&gt;
Wobei &#039;param&#039; der Teil ist, den man wiederherstellen will:&lt;br /&gt;
* blob - Bootloader (fon_bootld)&lt;br /&gt;
* param - Parameter Bereich (Bootloader oder Kernel?) (fon_bootld)&lt;br /&gt;
* kernel - Der Kernel (fon_kernel)&lt;br /&gt;
* ramdisk - Das Root-Filesystem / (fon_rootfs)&lt;br /&gt;
* ramdisk2 - Das /user_data Filesystem (fon_udata)&lt;br /&gt;
* ramdisk3 - Das /user_settings Filesystem (fon_usettings)&lt;br /&gt;
&lt;br /&gt;
Beim Backup ist blob + param in einer Datei, müsste man also ggf.&lt;br /&gt;
erstmal aufsplitten.&lt;br /&gt;
&lt;br /&gt;
6) Er wartet dann auf den Upload. Nun startet man im Terminalprogram den&lt;br /&gt;
Upload des Backup-Images, dazu verwendet man das X-Modem Protokoll.&lt;br /&gt;
&lt;br /&gt;
7) Kaffee trinken, auf&#039;s Klo gehen, mit Frau/Freundin/Mutter ein Gespräch&lt;br /&gt;
anfangen.&lt;br /&gt;
&lt;br /&gt;
8) Irgendwann ist der Upload fertig. Dauert halt lange. Man landet&lt;br /&gt;
wieder am &amp;quot;blob&amp;gt;&amp;quot; prompt. Nun gibt man&lt;br /&gt;
 flash param&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
9) Er schreibt nun das, was man hochgeladen hat, in das Flash.&lt;br /&gt;
&lt;br /&gt;
10) &amp;quot;boot&amp;quot; eingeben. Da Telefon bootet nun normal.&lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn im Backup nicht die Änderung gemacht wurde damit das&lt;br /&gt;
Telefon auch bei angeschlossener serieller Schnittstelle startet, kommt&lt;br /&gt;
man nicht weiter als wie bis zur Sanduhr. Dann einfach die serielle&lt;br /&gt;
abstecken (Also den TIN pin wieder freigeben) und das Telefon neustarten&lt;br /&gt;
(Akku kurz ab- und wieder anstöpseln)&lt;br /&gt;
&lt;br /&gt;
=== Dateisystem herunterladen ===&lt;br /&gt;
Zum unkomplizierten Durchsuchen des Dateisystems kann es nützlich sein, dieses vom Gerät zu kopieren.&lt;br /&gt;
&lt;br /&gt;
Folgende Befehle erzeugen wie beim Backup des Flash einen kleinen Server, dessen Output auf anderer Seite mittels mittels nc abgeholt werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#! /bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cd /&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
echo &#039;tar cf - bin boot dev etc home lib mnt opt root sbin tmp trace upgrade user_data user_settings usr var 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
micro_inetd 31340 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die lange Liste mit Unterverzeichnissen ist notwendig um /proc zu überspringen, was Probleme mit tar verursachen würde.&lt;br /&gt;
&lt;br /&gt;
Auf einem anderen Linux system (oder cygwin) kann mittels&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  nc telefon-Ip 31340 &amp;gt; file.tar&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
die Datei abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Der Vorgang dauert aber ein ganz paar Minuten.&lt;br /&gt;
&lt;br /&gt;
Heraus kommt ein Tar-Archiv, was alle Dateien des Gerätes enthält - inclusive der temporären Dateien der Ram-Disks.&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit aktivierter serieller Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Das 5500 scheint nicht komplett zu starten wenn man TIN auf low hat&lt;br /&gt;
und die serielle Schnittstelle benutzt. Man kann das Gerät dann nicht normal bedienen. Dies lässt sich ändern indem man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /usr/local/startup/daemon.sh&lt;br /&gt;
&lt;br /&gt;
ziemlich am Anfang das TINDETECT=&amp;quot;TRUE&amp;quot; ändert auf TINDETECT=&amp;quot;FALSE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Danach startet er auch mit aktiver serieller Verbindung komplett durch&lt;br /&gt;
und das Gerät ist ganz normal bedienbar.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
6&amp;gt;NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Freeing init memory: 68K&lt;br /&gt;
PCB version: ind3 v2&lt;br /&gt;
Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
****p_gpio_init_low_bat****&lt;br /&gt;
GPIO: p_gpio_it_init at 762&lt;br /&gt;
Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Reset from Software Reset.&lt;br /&gt;
Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
pp: hw ver = 2&lt;br /&gt;
prp_dbg=0&lt;br /&gt;
Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
hmp4d: module inserted&lt;br /&gt;
hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
hmp4e: module inserted. Major = 249&lt;br /&gt;
SPI2:: drv_Init :PID of driver: 134&lt;br /&gt;
SPI2:: drv_Init :ScanList not provided. Will use the default scan list.&lt;br /&gt;
SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10&lt;br /&gt;
SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
SPI2:: drvRegEtherDev :Interface Name is: eth%d&lt;br /&gt;
SPI2:: drv_Init :HEOCSIWPOWON: Powering on...&lt;br /&gt;
SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Divider : 8&lt;br /&gt;
&lt;br /&gt;
 OCR2 : e4015308 (12582912)&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!!&lt;br /&gt;
GPIO: CHARGE_IN at init&lt;br /&gt;
GPIO: LOW_BAT_OUT at init&lt;br /&gt;
GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
GPIO: camera to front at init&lt;br /&gt;
**ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1&lt;br /&gt;
SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() ..&lt;br /&gt;
SPI2:: drvPhase2Init :Success&lt;br /&gt;
SPI2:: drvPhase2Init : registering callbacks with HHAL..&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1&lt;br /&gt;
SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
requested reg.domain code setting = 3&lt;br /&gt;
SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
SPI2:: drvInitConnect :step5&lt;br /&gt;
SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Motorola CSI Linux driver ver 0.1&lt;br /&gt;
 - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
&lt;br /&gt;
Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
i2c-client version : 1.9&lt;br /&gt;
Initialize i2c-client-aic14 module&lt;br /&gt;
Module i2c-client-aic14 initialized&lt;br /&gt;
Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Sensor driver: initialize device OV7660&lt;br /&gt;
Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;logread&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Jan  1 00:00:00 imx21 syslog.info syslogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.emerg klogd: klogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Linux version 2.4.20-celf3 (root@wbul04) (gcc version 3.3.2) #1 Wed Feb 28 13:30:26 UTC 2007&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: ARM926EJ-Sid(wb) [41069264] revision 4 (ARMv?(8))&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D undefined 14 cache&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Machine: Freescale i.MX2 ADS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: FCLK=266000 kHz   HCLK=133000 kHz  IPGCLK=66500 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PERCLKs: 1=44333 KHz  2=33250 kHz  3=44333 kHz  4=88666 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: On node 0 totalpages: 16384&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(0): 16384 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(1): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(2): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Kernel command line: root=/dev/mtdblock2 noinitrd ip=none mtdparts=s29gl512n:256k@0x00000000&lt;br /&gt;
(bootloader)ro,896k@0x00040000(kernel)ro,50432k@0x00120000(fs#1),12800k@0x03260000(fs#2),1152k@0x03EE0000(fs#3)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.debug klogd: Relocating machine vectors to 0xffff0000&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Console: colour dummy device 80x30&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Calibrating delay loop (skipped)... 132.71 BogoMIPS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Memory: 64MB = 64MB total&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Memory: 63052KB available (1366K code, 299K data, 68K init)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Inode cache hash table entries: 4096 (order: 3, 32768 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Page-cache hash table entries: 16384 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: POSIX conformance testing by UNIFIX&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Linux NET4.0 for Linux 2.4&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Based upon Swansea University Computer Society NET3.039&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Initializing RT netlink socket&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: apm: Simulating APM BIOS version 1.2 (Driver version 1.0)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: i.MX21 Dynamic Power Management&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Starting kswapd&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Disabling the Out Of Memory Killer&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc., designed by Axis Communications AB.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: i2c-core.o: i2c core module version 2.6.2 (20011118)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pty: 256 Unix98 ptys configured&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Serial driver version 5.05c (2001-07-08) with no serial options enabled&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: UART driver version 0.3.6&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: I2C driver Feb 28 2007 / 13:31:04&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Initialize i2c-client-dbmx-codec module&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: s29gl512n: probing 16-bit flash bus&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd:  Amd/Fujitsu Extended Query Table v1.3 at 0x0040&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: number of CFI chips: 1&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Using Write Buffer method.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: buffer_Write_Time = 128&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Disabling fast programming due to code brokenness.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Using static partition definition&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Creating 5 MTD partitions on &amp;quot;s29gl512n&amp;quot;:&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00000000-0x00040000 : &amp;quot;bootloader&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00040000-0x00120000 : &amp;quot;kernel&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00120000-0x03260000 : &amp;quot;fs #1&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03260000-0x03ee0000 : &amp;quot;fs #2&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03ee0000-0x04000000 : &amp;quot;fs #3&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Linux TCP/IP 1.0 for NET4.0&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP Protocols: ICMP, UDP, TCP&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP: routing cache hash table of 512 buckets, 4Kbytes&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: TCP: Hash tables configured (established 4096 bind 8192)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Freeing init memory: 68K&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PCB version: ind3 v2&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: ****p_gpio_init_low_bat****&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: GPIO: p_gpio_it_init at 762&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Reset from Software Reset.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pp: hw ver = 2&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: prp_dbg=0&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: module inserted&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: module inserted. Major = 249&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :PID of driver: 134 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanList not provided. Will use the default scan list. &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvRegEtherDev :Interface Name is: eth%d &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :HEOCSIWPOWON: Powering on... &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Divider : 8&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd:  OCR2 : e4015308 (12582912)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!! &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: CHARGE_IN at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: LOW_BAT_OUT at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: camera to front at init&lt;br /&gt;
Jan  1 00:00:04 imx21 daemon.warn klogd: **ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() .. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Success&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init : registering callbacks with HHAL.. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.warn klogd: requested reg.domain code setting = 3&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step5&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Motorola CSI Linux driver ver 0.1&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd:  - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: i2c-client version : 1.9&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Initialize i2c-client-aic14 module&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Module i2c-client-aic14 initialized&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.alert klogd: Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:13 imx21 daemon.info klogd: Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:14 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_NETSYNC_HMON_NAME... &lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_HMON_NETSYNC_NAME... &lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-slot-0&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-service-0-0&lt;br /&gt;
Jan  1 00:00:20 imx21 local0.debug dhcpcd[337]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.err netsyncd[314]: father received(10) eth0 up! &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.info netsyncd[314]: Dhcp_start 337 return : 0  &lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:28 imx21 daemon.info netsyncd[314]: Dhcp_stop 359 return : 0  &lt;br /&gt;
Jan  1 00:00:28 imx21 local0.debug dhcpcd[347]: sending DHCP_RELEASE for 10.63.17.5 to 10.63.17.1 &lt;br /&gt;
Jan  1 00:00:29 imx21 local0.err dhcpcd[347]: terminating on signal 1 &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err netsyncd[314]: father received(12) eth0 down! &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err klogd: SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:42 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:54 imx21 local0.debug dhcpcd[386]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: Dhcp_start 386 return : 0  &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: NTP server request on : ntp.xs4all.nl &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Sensor driver: initialize device OV7660&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
Apr  7 09:58:16 imx21 daemon.info netsyncd[314]: NTP process return code : 0  &lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info upgraded[312]: K_SW0_DWNLD_ACK &lt;br /&gt;
Apr  7 09:58:27 imx21 auth.info login[393]: root login  on `ttyp0&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Apr  7 10:14:53 imx21 auth.info login[408]: root login  on `ttyp1&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 10:17:18 imx21 syslog.info -- MARK --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/proc/cpuinfo&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /proc/cpuinfo &lt;br /&gt;
Processor       : ARM926EJ-Sid(wb) rev 4 (v5EJl)&lt;br /&gt;
BogoMIPS        : 133.01&lt;br /&gt;
Features        : swp half thumb fastmult &lt;br /&gt;
CPU implementer : 0x41&lt;br /&gt;
CPU architecture: ?(8)&lt;br /&gt;
CPU variant     : 0x0&lt;br /&gt;
CPU part        : 0x926&lt;br /&gt;
CPU revision    : 4&lt;br /&gt;
Cache type      : undefined 14&lt;br /&gt;
Cache clean     : undefined 14&lt;br /&gt;
Cache lockdown  : undefined 14&lt;br /&gt;
Cache unified   : Harvard&lt;br /&gt;
I size          : 16384&lt;br /&gt;
I assoc         : 4&lt;br /&gt;
I line length   : 32&lt;br /&gt;
I sets          : 128&lt;br /&gt;
D size          : 16384&lt;br /&gt;
D assoc         : 4&lt;br /&gt;
D line length   : 32&lt;br /&gt;
D sets          : 128&lt;br /&gt;
&lt;br /&gt;
Hardware        : Freescale i.MX2 ADS&lt;br /&gt;
Revision        : 0000&lt;br /&gt;
Serial          : 0000000000000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aktivierung WPA2 Unterstützung ==&lt;br /&gt;
&amp;lt;p&amp;gt;Standardmäßig kann das Telefon nur WPA, dabei unterstützt es allerdings auch &amp;lt;b&amp;gt;WPA mit AES&amp;lt;/b&amp;gt; Verschlüsselung.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Es gibt zwei verschiedene Tricks mit denen auch WPA2 aktiviert werden kann.&lt;br /&gt;
Allerdings wurde von einigen ein Einbruch der Verbindungsgeschwindigkeit festgestellt (scheint jedoch nur bei geringem Akkuladestand aufzutreten).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trick1 ===&lt;br /&gt;
Mittels&lt;br /&gt;
 vi /etc/marvell/wpa_supplicant.conf&lt;br /&gt;
den Texteditor starten.&lt;br /&gt;
Mit PageDown (Bild runter) bis zum Ende des Files gehen.&lt;br /&gt;
Die Zeilen &lt;br /&gt;
 proto=WPA&lt;br /&gt;
 pairwise=TKIP&lt;br /&gt;
 group=TKIP&lt;br /&gt;
auskommentieren, indem ein # vorangestellt wird:&lt;br /&gt;
* cursor auf Beginn einer Zeile &lt;br /&gt;
* i drücken zum Einfügen&lt;br /&gt;
* # eintippen&lt;br /&gt;
* [Esc]&lt;br /&gt;
Sind alle Zeilen auskommentiert, dann mittels&lt;br /&gt;
 :wq[enter]&lt;br /&gt;
abspeichern und Editor verlassen.&lt;br /&gt;
&lt;br /&gt;
Danach neu booten.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man sich mit dieser Änderung in einem reinen WPA2 Netz anmelden (registrieren), kann man als Verschlüsselung nur noch WEP auswählen - der Verbindungsversuch scheitert natürlich! (Hardware: Fritz!Box 7270, PHILIPS VP5500)&lt;br /&gt;
&lt;br /&gt;
Also am Accesspoint WPA2 + WPA einstellen, Telefon registrieren, dann Accesspoint auf WPA2 konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Wichtige Info von airmack via IRC:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um sich eine Wiederbelebung per serieller Konsole zu ersparen, ist es günstig, immer nur Einträge an die wpa_supplicant.conf &amp;lt;u&amp;gt;hinten anzuhängen&amp;lt;/u&amp;gt;, niemals aber vorne einzufügen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt noch eine Variante wieder auf das Telefon zu kommen, wenn man sich den Weg per wireless abgeschnitten hat: der Demo-Modus: Dieser Modus war dazu gedacht die Funktionalitaet ohne SIP-Server auszuprobieren. 2 Geraete starten dazu im WLAN-AdHoc-Modus mit unterschiedlichen IP&#039;s (192.168.10.1 + 192.168.10.2 , jeweils /24 = 255.255.255.0) und machen ein IBSS-Netzwerk mit WEP-Verschluesselung auf (Key: VP6500 = 5648751265 beim VP5500 = 7295569793). Ergo kann man das Telefon in den Demo-Modus zwingen, gibt sich eine passende WLAN und IP-Einstellungen und schon ist man wieder drauf und kann fehleinstellungen wieder beheben). Dummerweise wird eine zufaellige IBSS-Cell-ID verwendet. Neuere Betriebssysteme koennen der Zelle trotzdem beitreten. Als ESSID kann man &#039;&#039;demo_mode_obiwan&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Trick2 ===&lt;br /&gt;
Dieser Trick funktioniert mit Accesspoints, bei denen man auch WPA Verbindungen mit AES verschlüsseln kann. Vorteil dieses Tricks ist, dass man die wpa_supplicant.conf nicht manuell editieren muss. Allerdings unterstützt nicht jeder Accesspoint WPA mit AES (aber dd-wrt kann das).&lt;br /&gt;
&lt;br /&gt;
Man konfiguriert den Accesspoint zunächst mit WPA PSK und wählt AES als Verschlüsselungsalgorithmus. Jetzt meldet man das Telefon an, das Telefon erkennt richtig, dass eine WPA Verbindung vorliegt und verbindet sich per WPA und AES mit dem Accesspoint. Anschliessend konfiguriert man den Accesspoint von WPA PSK AES nach WPA2 PSK AES. Jetzt schaltet man das VP5500/6500 aus und wieder ein. Nachdem es fertig gebootet hat, verbindet es sich automisch per WPA2 PSK und mit AES Verschlüsselung. Fertig.&lt;br /&gt;
&lt;br /&gt;
== Menüs ==&lt;br /&gt;
=== Hauptmenu ===&lt;br /&gt;
&lt;br /&gt;
Das File &lt;br /&gt;
 /usr/local/etc/defaultbuttons.conf&lt;br /&gt;
enthält unter anderm die definition des Hauptmenus.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist der Abschnitt Menu besonders interessant.&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/camera.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications&lt;br /&gt;
  4 = Settings&lt;br /&gt;
  5 = Applications/addressbook.desktop&lt;br /&gt;
  6 = Settings/RingProfiles.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 2&lt;br /&gt;
&lt;br /&gt;
&#039;Rows&#039; und &#039;Columns&#039; geben an, wieviel Reihen und Spalten das Hauptmenu hat.&lt;br /&gt;
Über die Zuweisungen 1 bis (Columns * Rows) kann man dann den Menüpositionen die Menüpunkte zuweisen.&lt;br /&gt;
Die Menupunkte sind definiert in den Verzeichnissen unter &lt;br /&gt;
 /usr/local/apps&lt;br /&gt;
gibt man nur ein Verzeichnis an, dann erscheint ein Submenü, dessen Icon und Name in der .directory -Datei des entsprechenden Ordner definiert ist.&lt;br /&gt;
direkte Menupunkte haben Dateinamen mit der Endung .desktop&lt;br /&gt;
&#039;Default&#039; bestimmten vorselektierten Eintrag.&lt;br /&gt;
&lt;br /&gt;
Hier ein weiteres Beispiel für ein angepasstes Menu:&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/addressbook.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications/sysinfo.desktop&lt;br /&gt;
  4 = Applications&lt;br /&gt;
  5 = Settings&lt;br /&gt;
  6 = Games&lt;br /&gt;
  7 = Applications/camera.desktop&lt;br /&gt;
  8 = Applications/photoedit.desktop&lt;br /&gt;
  9 = Applications/manualsub.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 3&lt;br /&gt;
&lt;br /&gt;
Der Ordner Games ist (momentan ;) leer.&lt;br /&gt;
&lt;br /&gt;
=== Genereller Aufbau Menü-Einträge===&lt;br /&gt;
Die Einträge für die Menüs sind im Filesystem abgelegt:&lt;br /&gt;
&lt;br /&gt;
* Settings: /usr/local/apps/Settings&lt;br /&gt;
* Applications: /usr/local/apps/Applications&lt;br /&gt;
* Klingeltöne: /usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Die Dateien haben die Endung &amp;quot;.desktop&amp;quot; und sind normale Textdateien, die die relevanten Infos enthalten.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel aus dem Settingsordner:&lt;br /&gt;
  [Translation]&lt;br /&gt;
  File=QtopiaSettings&lt;br /&gt;
  Context=Sound&lt;br /&gt;
  [Desktop Entry]&lt;br /&gt;
  Type=Application&lt;br /&gt;
  Exec=sound&lt;br /&gt;
  Icon=Sound&lt;br /&gt;
  Name[]=Sound&lt;br /&gt;
  CanFastload=0&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Translation&#039; gibt an in welchem File, die Lokalisationsdaten stehen.&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Desktop Entry&#039;:&lt;br /&gt;
* Type: Typ des Eintrages &lt;br /&gt;
** Application für Anwendungen&lt;br /&gt;
** audio/x-wav für Klingeltöne&lt;br /&gt;
* Exec: Anwendung, die ausgeführt werden soll&lt;br /&gt;
* Icon: Icon, das im Menü benutzt wird. &lt;br /&gt;
** Pfad ist meist: /usr/local/pics/[Exex]/[Icon].png&lt;br /&gt;
** manchmal aber auch: /usr/local/pics/icons/[14x14|16x16|22x22]/[Icon].png&lt;br /&gt;
* Name[]: Name im Menü, wird über das in Translation angegebe File und Context aufgelöst. Dies wird verhindert, wenn die Klammern wegelassen werden, was das Einfügen eigener Einträge ermöglicht&lt;br /&gt;
&lt;br /&gt;
Hier ein Textfile mit allen desktop-Files als Referenz: [[File:alleDesktopFiles.txt]]&lt;br /&gt;
&lt;br /&gt;
=== Versteckte Menüeinträge ===&lt;br /&gt;
in den oben genannten Ordnern existieren ein paar Dateien mit der Endung &#039;.desktopMASK&#039;.&lt;br /&gt;
Benennt man diese um, werden die Einträge nach einem Neustart im Menü freigeschalten.&lt;br /&gt;
&lt;br /&gt;
folgendes an der Kommandozeile eingeben:&lt;br /&gt;
 cd /usr/local/apps/Settings&lt;br /&gt;
 mv datetime.desktopMASK datetime.desktop&lt;br /&gt;
 mv callforward.desktopMASK callforward.desktop&lt;br /&gt;
 mv calloptions.desktopMASK calloptions.desktop&lt;br /&gt;
 mv resetparam.desktopMASK resetparam.desktop&lt;br /&gt;
 mv subkpncode.desktopMASK subkpncode.desktop&lt;br /&gt;
&lt;br /&gt;
Dies aktiviert folgende Optionen:&lt;br /&gt;
* Datums/Zeit-Einstellung&lt;br /&gt;
* Anrufweiterleitung&lt;br /&gt;
* Anrufoptionen&lt;br /&gt;
* Parameter zurücksetzen&lt;br /&gt;
* Number Switch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nützlichsten sind wohl die ersten Einträge.&lt;br /&gt;
Bei dem &amp;quot;Number Switch&amp;quot; ist unklar, was er bewirken soll. Beim Start wird ein Code abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterhin kann im Verzeichnis /usr/local/apps/Applications eine [[File:demomode.desktop]] anlegen.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist folgende Prozedur nötig:&lt;br /&gt;
* im Terminal&lt;br /&gt;
                 cd /usr/local/apps/Applications&lt;br /&gt;
                 vi demomode.desktop&lt;br /&gt;
&lt;br /&gt;
* i drücken &lt;br /&gt;
* folgendes Textfragment einfügen &lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaApplications&lt;br /&gt;
                 Context=DemoMode&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Exec=demomode&lt;br /&gt;
                 Icon=Camera&lt;br /&gt;
                 Type=Application&lt;br /&gt;
                 Name[]=DemoMode&lt;br /&gt;
* [Esc] &lt;br /&gt;
* :wq [Enter] &lt;br /&gt;
&lt;br /&gt;
Dies schaltet einen Demo-Modus frei.&lt;br /&gt;
&lt;br /&gt;
=== Französisch ===&lt;br /&gt;
Es gab die Geräte wohl auch in Frankreich von der France Telekom.&lt;br /&gt;
Zumindest sind entsprechende monitor und upgrade Referenz-Dateien&lt;br /&gt;
vorhanden in denen das steht. Daher wohl auch die Französischen&lt;br /&gt;
Sprachdateien, die zwar auf dem Gerät sind, allerdings in einem&lt;br /&gt;
Unterverzeichnis, so das sie nicht auswählbar sind.&lt;br /&gt;
&lt;br /&gt;
Um diese Dateien zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/local/i18n&lt;br /&gt;
 mv NOTUSED/fr .&lt;br /&gt;
&lt;br /&gt;
Nun ist auch noch französisch als Sprache verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Grafische Anpassungen ==&lt;br /&gt;
So gut wie alle Grafiken liegen im Verzeichnis /usr/local/pics und können beliebig ausgetauscht werden (gleicher Dateityp, gleiche Größe).&lt;br /&gt;
&lt;br /&gt;
Einige besonders interessante werden hier aufgeführt:&lt;br /&gt;
&lt;br /&gt;
=== Eigene Startup/Shutdown-Animation ===&lt;br /&gt;
&lt;br /&gt;
Die Animation beim Starten oder Herunterfahren sind normale (animierte) GIFs. Diese findet man in&lt;br /&gt;
&lt;br /&gt;
 /usr/local/pics/qpe&lt;br /&gt;
&lt;br /&gt;
Die Links &amp;quot;splash.gif&amp;quot; und &amp;quot;goodbye.gif&amp;quot; zeigen auf die tasächlich zu verwendenen Dateien (&amp;quot;splash-chuck.gif&amp;quot;, &amp;quot;goodby-chuck.gif&amp;quot;).&lt;br /&gt;
Man kann sein eigenes animiertes GIF im Format 176x220 Pixel raufladen und die&lt;br /&gt;
splash.gif entsprechend neu verlinken. Dazu löscht man zuerst die alte&lt;br /&gt;
mit:&lt;br /&gt;
&lt;br /&gt;
 rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Anschliessend erzeugt man den Link neu, dabei zeigt er dann auf die&lt;br /&gt;
eigene Datei:&lt;br /&gt;
&lt;br /&gt;
 ln -s /pfad/zur/eigenedatei.gif /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Danach wird dann bei jedem Neustart die eigene Animation angezeigt.&lt;br /&gt;
Analog hierzu mit der goodbye.gif.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, man packe das Bild auf einen Webserver. Dann am Gerät über telnet&lt;br /&gt;
anmelden und:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd /usr/local/pics/qpe/&lt;br /&gt;
wget http://dein.server/woauchimmer/Matrix5.gif&lt;br /&gt;
rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
ln -s Matrix5.gif splash.gif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die GIF Animation kann bis zu 176x220 Pixel groß sein.&lt;br /&gt;
Kleinere (möglicherweise auch größere) Bilder werden zentriert.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:walking_baby_tux.gif&lt;br /&gt;
Bild:custwakeup2.gif&lt;br /&gt;
Bild:custgoodbye2.gif&lt;br /&gt;
Bild:94vw4.gif&lt;br /&gt;
Bild:1_Matrix--16984.gif&lt;br /&gt;
Bild:1_Matrix--16985.gif&lt;br /&gt;
Bild:3.gif&lt;br /&gt;
Bild:ClanSpider2.gif&lt;br /&gt;
Bild:TS12.gif&lt;br /&gt;
Bild:Matrix5.gif&lt;br /&gt;
Bild:qtopia3.gif&lt;br /&gt;
Bild:qtopia0.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigener Boot/Update-Screen ===&lt;br /&gt;
&lt;br /&gt;
Der Boot-Screen, oder der Update-Screen liegen als Rohdaten vor.&lt;br /&gt;
 /user_data/data/welcome.rgb565&lt;br /&gt;
 /usr/local/startup_V4.20/update.bin&lt;br /&gt;
&lt;br /&gt;
Weitere Beispielbilder:&lt;br /&gt;
 /user_data/prod/data/lcd_test_card1.bin&lt;br /&gt;
 /user_data/prod/data/lcd_test_card2.bin&lt;br /&gt;
&lt;br /&gt;
Diese werden direkt in den Framebuffer geschrieben.&lt;br /&gt;
Daher müssen sich diese genau ein bestimmtes Format halten: &lt;br /&gt;
* Größe 240 x 220 (Das Display ist 176 x 220, der Rest ist also nicht zu sehen)&lt;br /&gt;
* 16bit pro Pixel RGB565&lt;br /&gt;
&lt;br /&gt;
Um solch ein Bild zu erstellen sind folgende Schritte notwendig:&lt;br /&gt;
# Ein Bild in Gimp mit 176x220 erstellen&lt;br /&gt;
# das Bild vertikal spiegeln&lt;br /&gt;
# Bild-&amp;gt;Leinwandgröße auf 240x220 erweitern (Bilddaten ganz nach links)&lt;br /&gt;
# Datei-&amp;gt;Kopie speichern...&lt;br /&gt;
# Als Windowsbitmap -&amp;gt; erweiterete Optionen -&amp;gt; 16bit R5G6B5&lt;br /&gt;
# BMP-Header entfernen (dies kann auch auf dem Telefon gemacht werden)&lt;br /&gt;
         tail -c 105600 input.bmp &amp;gt; output.raw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Von der Kommandozeile kann auch manuell das Bild in den Framebuffer geschrieben werden.&lt;br /&gt;
 cat /user_data/prod/data/lcd_test_card1.bin &amp;gt; /dev/fb0&lt;br /&gt;
&lt;br /&gt;
== Wichtige Verzeichnisse ==&lt;br /&gt;
&lt;br /&gt;
=== Adressdaten ===&lt;br /&gt;
&lt;br /&gt;
# cat /user_data/home/Applications/addressbook/addressbook.xml &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE Addressbook &amp;gt;&amp;lt;AddressBook&amp;gt;&lt;br /&gt;
  &amp;lt;Groups&amp;gt;&lt;br /&gt;
  &amp;lt;/Groups&amp;gt;&lt;br /&gt;
  &amp;lt;Contacts&amp;gt;&lt;br /&gt;
    &amp;lt;Contact&lt;br /&gt;
                                Uid=&amp;quot;-1269720893&amp;quot; &lt;br /&gt;
                         Categories=&amp;quot;-1269431263;-1266109093;-1266109094&amp;quot; &lt;br /&gt;
                          FirstName=&amp;quot;ich&amp;quot; &lt;br /&gt;
                             FileAs=&amp;quot;ich&amp;quot; &lt;br /&gt;
                           JobTitle=&amp;quot;cc&amp;quot; &lt;br /&gt;
                         Department=&amp;quot;dep&amp;quot;&lt;br /&gt;
                            Company=&amp;quot;aa&amp;quot; &lt;br /&gt;
                      BusinessPhone=&amp;quot;55&amp;quot; &lt;br /&gt;
                        BusinessFax=&amp;quot;77&amp;quot; &lt;br /&gt;
                     BusinessMobile=&amp;quot;66&amp;quot; &lt;br /&gt;
                          HomePhone=&amp;quot;55&amp;quot;&lt;br /&gt;
                         HomeMobile=&amp;quot;11&amp;quot; &lt;br /&gt;
                             HomePc=&amp;quot;12&amp;quot;&lt;br /&gt;
                           HomeData=&amp;quot;13&amp;quot;&lt;br /&gt;
                            HomeFax=&amp;quot;14&amp;quot;&lt;br /&gt;
                     BusinessStreet=&amp;quot;street&amp;quot;&lt;br /&gt;
                       BusinessCity=&amp;quot;city&amp;quot;&lt;br /&gt;
                      BusinessState=&amp;quot;state&amp;quot;&lt;br /&gt;
                        BusinessZip=&amp;quot;zip&amp;quot;&lt;br /&gt;
                    BusinessCountry=&amp;quot;country&amp;quot;&lt;br /&gt;
                      BusinessPager=&amp;quot;88&amp;quot;&lt;br /&gt;
                             Office=&amp;quot;office&amp;quot;&lt;br /&gt;
                         Profession=&amp;quot;prof&amp;quot;&lt;br /&gt;
                          Assistant=&amp;quot;ass&amp;quot;&lt;br /&gt;
                            Manager=&amp;quot;man&amp;quot;&lt;br /&gt;
                         HomeStreet=&amp;quot;ptjml&amp;quot;&lt;br /&gt;
                           HomeCity=&amp;quot;cit&amp;quot;&lt;br /&gt;
                          HomeState=&amp;quot;stat&amp;quot;&lt;br /&gt;
                            HomeZip=&amp;quot;zi&amp;quot;&lt;br /&gt;
                        HomeCountry=&amp;quot;coun&amp;quot;&lt;br /&gt;
                             Spouse=&amp;quot;spouse&amp;quot;&lt;br /&gt;
                             Gender=&amp;quot;1&amp;quot;&lt;br /&gt;
                           Birthday=&amp;quot;20100322&amp;quot;&lt;br /&gt;
                        Anniversary=&amp;quot;20100429&amp;quot;&lt;br /&gt;
                           Children=&amp;quot;child&amp;quot;&lt;br /&gt;
                              Notes=&amp;quot;gakm&amp;quot;&lt;br /&gt;
               CompanyPronunciation=&amp;quot;bb&amp;quot;&lt;br /&gt;
                   BUSINESS_CONTACT=&amp;quot;&amp;quot;&lt;br /&gt;
                          photofile=&amp;quot;ci-1269721575-0.jpg&amp;quot;&lt;br /&gt;
                   qdl-private-data=&amp;quot;&amp;quot;&lt;br /&gt;
                               tone=&amp;quot;/usr/local/etc/SystemRingTones/16-Tetris.desktop&amp;quot;&lt;br /&gt;
         /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554029&amp;quot; &lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone1&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone1&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**621&amp;quot;  &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/15-Techno2.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554032&amp;quot; &lt;br /&gt;
             Categories=&amp;quot;-1269431263&amp;quot;&lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone3&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone3&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**623&amp;quot;  &lt;br /&gt;
             BUSINESS_CONTACT=&amp;quot;&amp;quot; &lt;br /&gt;
             qdl-private-data=&amp;quot;&amp;quot; &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/08-Celtrelax.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
  &amp;lt;/Contacts&amp;gt;&lt;br /&gt;
  &amp;lt;/AddressBook&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UID ist wohl egal, solange sie nicht zweimal vorkommen.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf 500 Adressbucheinträge kann man auch aufheben&lt;br /&gt;
&amp;quot;maxEntries = 500&amp;quot; in der &amp;quot;Contacts.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die Kategorien stehen in /user_settings/Categories.xml:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE CategoryList&amp;gt;&lt;br /&gt;
  &amp;lt;Categories&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431263&amp;quot; name=&amp;quot;_Personal&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431262&amp;quot; name=&amp;quot;_Business&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/Categories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einem Kontakt eine bestimmte Kategorie zuordnet, dann wird die ID dieser Kategorie im Attribut &amp;quot;Categories&amp;quot; des Kontakts eingetragen (s.o.). Wenn die Kategorie BUSINESS gewählt wird, steht im Attribut &amp;quot;BUSINESS_CONTACT&amp;quot; eine &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Einrücken der Attribute mit TABs in den Dateien ist übrigens nicht erlaubt!&lt;br /&gt;
&lt;br /&gt;
Die Software des Telefons wertet die XML Datei bei jedem Zugriff neu aus. Es ist also möglich, die Datei im laufendem Betrieb zu ändern (z.B. per Script).&lt;br /&gt;
&lt;br /&gt;
=== Fotos &amp;amp; Videoschnappschüsse ===&lt;br /&gt;
&lt;br /&gt;
Alle Bilder die mit der Kamera aufgenommen werden, sowie Schnappschüsse die während eines Videocalls aufgenommen wurden, befinden sich in folgendem Verzeichnis:&lt;br /&gt;
       /user_data/home/Documents&lt;br /&gt;
&lt;br /&gt;
Die Bilder sind dabei nach folgendem Namensschema benannt:&lt;br /&gt;
&lt;br /&gt;
       DD-MM-YYYY-hh:mm:ss.jpg&lt;br /&gt;
&lt;br /&gt;
Tag (DD) und Monat (MM) können auch einstellig sein.&lt;br /&gt;
&lt;br /&gt;
== Klingeltöne ==&lt;br /&gt;
&lt;br /&gt;
Die Klingeltöne liegen, wie oben beschrieben unter:&lt;br /&gt;
&lt;br /&gt;
/usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Es sind .wav Dateien mit (16Khz, 16Bit, Mono), welche sich, z.B. mit MhWaveEdit (Linux/GTK) recht komfortabel erzeugen lassen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den Audio Dateien müssen noch im selben Verzeichnis entsprechende *.desktop dateien angelegt werden, damit alles korrekt ins Menü integriert wird.&lt;br /&gt;
Eine für den fiktiven 16. Klingelton erzeugte Datei &amp;quot;16-Tetris.desktop&amp;quot; könnte den folgenden Inhalt haben:&lt;br /&gt;
&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Categories =&lt;br /&gt;
                 File =16-Tetris.wav&lt;br /&gt;
                 Name[] =16-Tetris&lt;br /&gt;
                 Type = audio/x-wav&lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaRingTones&lt;br /&gt;
                 Context=16-Tetris&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlegen der Dateien sollte sie dann im Menü auftauchen und auswählbar sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timeserver ==&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/170483#1645101&lt;br /&gt;
Unter /usr/local/data steht in der monitor.cfg und monitor_ref_KPN.cfg&lt;br /&gt;
die Adressen der Zeitserver &amp;quot;ntp.xs4all.nl&amp;quot; und &amp;quot;130.142.110.71&amp;quot;. Diese&lt;br /&gt;
könnte man z.B. auf &amp;quot;ptbtime1.ptb.de&amp;quot; und &amp;quot;ptbtime2.ptb.de&amp;quot; ändern.&lt;br /&gt;
&lt;br /&gt;
(http://www.mikrocontroller.net/topic/170483#1649594)&lt;br /&gt;
das telefon benutzt *nicht ntp* sondern das time-protokoll auf port 37 -&lt;br /&gt;
chronos.zedat.fu-berlin.de kann man als server nehmen.&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Software ==&lt;br /&gt;
=== Dropbear (SSH-Server) installieren ===&lt;br /&gt;
&lt;br /&gt;
# Mit telnet auf dem Gerät einloggen&lt;br /&gt;
# folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://vp6500.bd8.nl/bin/dropbear.tgz&lt;br /&gt;
       tar -xzf dropbear.tgz&lt;br /&gt;
       rm dropbear.tgz&lt;br /&gt;
       cd /etc/rc.d/init.d&lt;br /&gt;
       mv dropbear S90dropbear&lt;br /&gt;
       ./S90dropbear start&lt;br /&gt;
Kommando 6 (mv ...) ist notwendig damit dropbear bei jedem Reboot automatisch&lt;br /&gt;
gestartet wird.&lt;br /&gt;
&lt;br /&gt;
hier ein Alternativlink falls Telnet Probleme macht:&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/74656/dropbear.tgz&lt;br /&gt;
&lt;br /&gt;
=== Nano 2.2.3 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /usr/bin&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74023/nano&lt;br /&gt;
* Mit folgendem Befehl den Editor ausführbar machen:&lt;br /&gt;
       chmod +x /usr/bin/nano&lt;br /&gt;
* Nun ist vi Geschichte ;-)&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.0.9 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74380/openvpn.tar.gz&lt;br /&gt;
       tar -xzf openvpn.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.1.1 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74395/openvpn-2.1.1.tar.gz&lt;br /&gt;
       tar -xzf openvpn-2.1.1.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== Tinc 1.0.12 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74396/tinc-1.0.12.tar.gz&lt;br /&gt;
       tar -xzf tinc-1.0.12.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
= SIP Einstellungen =&lt;br /&gt;
&lt;br /&gt;
== Einstellung für 1und1 ==&lt;br /&gt;
&lt;br /&gt;
* SIP1:&lt;br /&gt;
** Display Name: ...&lt;br /&gt;
** Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Telephone Number: 0#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
* Auth:&lt;br /&gt;
** Auth Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Password: *********&lt;br /&gt;
* Server:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* Proxy:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* RTP:&lt;br /&gt;
** 30000 und 30019&lt;br /&gt;
* STUN:&lt;br /&gt;
** stun.1und1.de&lt;br /&gt;
* STUN Server Port:&lt;br /&gt;
** 3478&lt;br /&gt;
* SIP2:&lt;br /&gt;
** UDP: 5060&lt;br /&gt;
** TCP: 5060&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Sipgate ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Sipgate Username&lt;br /&gt;
**User Name: your SIPgate-ID&lt;br /&gt;
**Telephone Number:  Sipgate-Telefonnummer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentification UserName: your SIPgate-ID&lt;br /&gt;
**Password: Sipgate Passwort&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register address:port: sipgate.de:5060&lt;br /&gt;
*Proxy&lt;br /&gt;
**SIP proxy1 address:port: sipgate.de:5060&lt;br /&gt;
*SIP2&lt;br /&gt;
**SIP Port Listen&lt;br /&gt;
**for UDP: 5062&lt;br /&gt;
**for TCP: 5062&lt;br /&gt;
**for TCP TLS: 5053&lt;br /&gt;
*STUN: [X] use rport&lt;br /&gt;
&lt;br /&gt;
SIP Outbound muss leer sein.&lt;br /&gt;
&lt;br /&gt;
Ein Videotelefonat von Sipgate zu Sipgate zwischen zwei VP6500 wurde erfolgreich getestet. Gegebenenfalls muss die eigene Videoübertragung noch durch Drücken der Taste &#039;&#039;&#039;Video&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Ekiga.net ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Irgendwas&lt;br /&gt;
**User Name: username&lt;br /&gt;
**Telephone Number: leer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentication User Name: username&lt;br /&gt;
**Password: password&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register: ekiga.net:5060&lt;br /&gt;
**Protocol: ( ) TCP (*) UDP&lt;br /&gt;
**Expire Timer: 3600&lt;br /&gt;
**Keep Alive: 0&lt;br /&gt;
*Proxy&lt;br /&gt;
**alle leer&lt;br /&gt;
*STUN&lt;br /&gt;
**( ) use rport&lt;br /&gt;
**STUN Server IP address: stun.ekiga.net&lt;br /&gt;
**STUN Server port: 3478&lt;br /&gt;
*SIP2&lt;br /&gt;
**(*) Symmetric Mode&lt;br /&gt;
**UDP: 5060&lt;br /&gt;
**TCP: 5060&lt;br /&gt;
**TCP TLS: 5061&lt;br /&gt;
*OBproxy&lt;br /&gt;
**alle leer&lt;br /&gt;
&lt;br /&gt;
Nach der (kostenlosen) Registrierung bei ekiga.net und der Anmeldung des Telefons kann man unter der 500 einen Audio und Video(!) Test machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere features: https://www.ekiga.net/index.php?page=services&amp;lt;br&amp;gt;&lt;br /&gt;
Ekiga teilt keine Festnetz Rufnummern zu, daher ist ein Anruf von/zu Festnetz Telefonen nicht möglich.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Bei Ekiga.net angemeldete Geräte können aber problemlos untereinander telefonieren, sogar mit Video. Da man vom Mainscreen des VP5500/6500 aus direkt nur numerische Kontakte (herkömmliche Telefonnumern) wählen kann, Ekiga.net Telefonnummern aber aus [Benutzername]@ekiga.net bestehen, legt man über das Menü des VP5500/6500 einfach &amp;lt;b&amp;gt;einen neuen Kontakt&amp;lt;/b&amp;gt; (Telefonbuch) an. Als Video-Rufnummer trägt man einfach [Benutzername]@ekiga.net ein, wobei [Benutzername] der Name des Ekiga-Accounts ist, den man erreichen will. Zwischen der Eingabe von Buchstaben, Zahlen und Sonderzeichen kann man dabei mit der &amp;lt;b&amp;gt;[#]&amp;lt;/b&amp;gt;-Taste des VP5500/6500 umschalten.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sollte bei einem Telefonat über Ekiga Video einmal nicht funktionieren, hilft eventuell die manuelle Aktivierung der Videofunktion mittels der &amp;lt;b&amp;gt;Video-Taste&amp;lt;/b&amp;gt; auf der Tastatur des VP6500&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Fritzbox 7170/7270 und andere mit SIP-Registrar ==&lt;br /&gt;
Die Anmeldung eines Telefons auf der Fritzbox starten (System/Ansicht/&amp;quot;Expertenansicht aktivieren&amp;quot;, dann Telefonie/Telefoniegeräte/&amp;quot;Neues Gerät einrichten&amp;quot;, &amp;quot;Telefon&amp;quot;, &amp;quot;Bitte auswählen&amp;quot;/&amp;quot;LAN/WLAN (IP-Telefon)&amp;quot;) und sich eine Nummer geben lassen,&amp;lt;br&amp;gt; dann in Registration auf dem VPx500 wechseln und die Einstellungen wie unten vornehmen.&amp;lt;br&amp;gt; Anschließend will das Telefon diese Einstellungen aktivieren, vorher noch auf der FB die Anmeldung starten.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Im Beispiel will die FB die Nummer 621 vergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP1&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Display Name: &amp;lt;leer lassen&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
User Name: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Telephone Number: 621&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Auth&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Authentication UserName: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Password: [hier das gleiche, wie auf der FB eingeben]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Server&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
SIP register address:port&amp;lt;br&amp;gt;&lt;br /&gt;
192.168.2.1:5060 (IP Bitte auf Euer Netz anpassen) oder alternativ: fritz.box:5060&amp;lt;br&amp;gt;&lt;br /&gt;
Protocol: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
ExpireTime: 3600&amp;lt;br&amp;gt;&lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP2&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[ ] Symmetric Mode&amp;lt;br&amp;gt;&lt;br /&gt;
SIP Port Listen&amp;lt;br&amp;gt;&lt;br /&gt;
for UDP: 5060&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen dazu:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Protokoll: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
Bei TCP hat das VP6500 nach Minuten oder Stunden immer wieder die Verbindung zur FB verloren.&amp;lt;br&amp;gt; &lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
Die Keep Alive Time habe ich eingestellt, weil ich die TCP Probleme umgehen &amp;lt;br&amp;gt;wollte. Ich denke nicht, dass es zu Problemen bzgl. Akku kommt. Da es so &amp;lt;br&amp;gt;aber perfekt funktioniert, habe ich es gelassen. Das UDP Protokoll kommt zudem mit weniger Netzwerk-Traffic aus.&amp;lt;br&amp;gt;&lt;br /&gt;
Anmeldung:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anmeldung wurde von der Fritz!Box nicht immer erfolgreich bestätigt. Einfach Weiter klicken und die restlichen Einstellungen vornehmen.&amp;lt;br&amp;gt; Spätestens nach einem Reboot des VPx500 funktioniert alles einwandfrei.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls eure Fritz!Box keine Möglichkeit bietet, ein IP-Telefon anzumelden, empfehle ich euch mal in das http://wiki.ip-phone-forum.de/skript:speedport2fritz einzulesen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bzw. mal im IP-Phone-Forum nach SIP-Registrar suchen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SIP Listen Port 5060 hat mich viel Zeit gekostet - stand noch von sipgate direkt auf 5062 und das VP5500 hat sich dann zwar an der fritzbox registriert aber keine eingehenden Anrufe empfangen...&lt;br /&gt;
&lt;br /&gt;
= Buildumgebung erstellen =&lt;br /&gt;
&lt;br /&gt;
Bislang ist die Erstellung von GUI-Applikationen (QTopia) noch nicht auf einfache Weise möglich. Das größte Problem ist, dass der Quellcode der Video-Telefon-Anwendung zum größten Teil zur Verfügung steht. Das Erstellen von Kommandozeilen-Anwendungen geht aber schon problemlos.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
Die verwendete ARM-Entwicklungsumgebung basiert auf gcc. Mittels cygwin kann diese zwar auch als Win32-Anwendungen gebaut werden, dies ist aber in hohem Maß unüblich.&lt;br /&gt;
&lt;br /&gt;
Am besten eine aktuelle Version von Debian oder Ubuntu in &amp;quot;vmware player&amp;quot; oder &amp;quot;virtual box&amp;quot; installieren. Wenn man die virtuelle Maschine nur zum Compilieren verwendet, reicht eine kompakte Kommandozeilen-Version (z.B. Ubuntu Server 9.10). Fertige virtuelle Machinen, im vmware-Marketing-Sprech gerne auch &amp;quot;virtual appliances&amp;quot; genannt, sind reichlich verfügbar (z.B. http://www.vmware.com/appliances/directory/70918).&lt;br /&gt;
&lt;br /&gt;
=== Freetz-Linux ===&lt;br /&gt;
Für Fritzbox-Besitzer besonders geeignet ist das Freetz-linux, welches man im IP-Phone-Forum finden kann (-&amp;gt; http://www.ip-phone-forum.de/showpost.php?p=1400234&amp;amp;postcount=1).&lt;br /&gt;
Dieses kann zum Erstellen von Freetz-Images einerseits und andererseits als Buildumgebung benutzt werden. So spart man sich eine zweite VM.&lt;br /&gt;
&lt;br /&gt;
Die VM selbst braucht nur gestartet werden, den Rest macht man am Besten von seiner gewohnten Umgebung aus.&lt;br /&gt;
Mittels Samba kann einfach per Windowsnetzwerk auf das Home-Verzeichnis zugriffen werden und per SSH kann einfach eine Shell (UTF als Codierung einstellen, dann stimmen auch die Sonderrzeichen) geöffnet werden.&lt;br /&gt;
Es muss sichergestellt werden sein, dass die VM zugriff auf das lokale Netzwerk, sowie das Internet hat (am besten mit einem &#039;ping google.com&#039; überprüfen). Bei mir ging es eigenartiger weise erst, als ich die virtuelle Netzwerkkarte in den VM-Settings auf NAT gestellt habe.&lt;br /&gt;
&lt;br /&gt;
Benutzername und alle Kennwörter sind &#039;freetz&#039;&lt;br /&gt;
&lt;br /&gt;
==== Installation und Test der VP5500 Toolchain ====&lt;br /&gt;
Installation der Buildumgebung:&lt;br /&gt;
  sudo mkdir /opt/VP5500&lt;br /&gt;
  sudo mkdir /opt/VP5500/toolchain&lt;br /&gt;
  cd /opt/VP5500/toolchain&lt;br /&gt;
  sudo wget http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo bunzip2 arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo tar -xf arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo rm arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo ln -s /opt/VP5500/toolchain/usr/local/arm /usr/local/arm&lt;br /&gt;
&lt;br /&gt;
Nach einem sudo-Kommando muss eventuell das Passwort eingegeben werden, weswegen die Befehle einzeln eingegeben werden sollten (oder man öffnet am Anfang eine sudo shell, dann kann man das auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Test der Buildumgebung:&lt;br /&gt;
  cd ~&lt;br /&gt;
  wget http://www.mikrocontroller.net/attachment/73161/helloworld.tgz&lt;br /&gt;
  tar -xzf helloworld.tgz&lt;br /&gt;
  rm helloworld.tgz&lt;br /&gt;
  cd helloworld&lt;br /&gt;
  make&lt;br /&gt;
Dannach sollte im ~/helloworld verzeichnis ein neues executable liegen, was vom Hostrechner einfach via Netzwerkfreigabe (\\freetz-linux\helloworld) und via WinSCP auf das Telefon kopiert werden kann.&lt;br /&gt;
&lt;br /&gt;
==== Freetz-Linux eigentlicher Anwendungszweck ====&lt;br /&gt;
wer das Ding auch zum Bauen von Freetz-Images zum Erweitern seiner Fritz-box benutzen will muss sich zuerst ein Freetz runterladen.&lt;br /&gt;
Folgende Schritte machen dies:&lt;br /&gt;
 cd ~&lt;br /&gt;
 svn checkout  http://svn.freetz.org/trunk  freetz-trunk &lt;br /&gt;
Dannach gibts im Home-Verzeichnis das aktuelle Freetz im Verzeichnis &#039;freetz-trunk&#039;.&lt;br /&gt;
Konfigurieren mit &#039;make menuconfig&#039; und Image erstellen mit &#039;make&#039;.&lt;br /&gt;
Wenn alles gut geht kann man das image dann vom Hostrechner aus der Windowsfreigabe &#039;\\freetz-linux\freetz-trunk\images&#039; rausholen und auf die Box spielen.&lt;br /&gt;
&lt;br /&gt;
Für detailiertere Infos bitte direkt bei Freetz nachschlagen:&lt;br /&gt;
http://trac.freetz.org/&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
Die bisher bekannten, mit VP5500 und VP6500 ausgelieferten Software-Versionen, basieren auf einer etwas älteren &amp;quot;gcc 3.3.2-ARM-Toolchain&amp;quot;. Eine passende Toolchain für ein x86-basiertes Entwicklungssystem ist unter http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2 zu finden.&lt;br /&gt;
&lt;br /&gt;
Unter Debian-basierten Linux-Distros kann dieses Archiv z.B. nach /opt/VP5500/toolchain entpackt werden (einige der Makefiles im Forum setzen diesen Speicherort vorraus). Es ist jedoch zu beachten, dass diese Version der Toolchain auch über den Pfad /usr/local zugänglich sein sollte. Dazu kann mittels &amp;quot;ln -s /opt/VP5500/toolchain/usr/local/arm arm&amp;quot; in /usr/local ein Symlink auf den eigentlichen Speicherort gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Hello World ===&lt;br /&gt;
Christian Klippel (ChrisK) hat unter http://www.mikrocontroller.net/attachment/73161/helloworld.tgz ein &amp;quot;Hello World&amp;quot; bereitgestellt, mit dem sich die Toolchain testen lässt und dessen &amp;quot;Makefile&amp;quot; und &amp;quot;Makefile.local&amp;quot; als Grundlage für eigene Versuche dienen kann.&lt;br /&gt;
&lt;br /&gt;
Das Archiv wird in ein lokals Verzeichnis (z.b. ~/helloworld) entpackt und dort durch Eingabe von &amp;quot;make&amp;quot; compiliert.&lt;br /&gt;
     &lt;br /&gt;
Zum Testen muss das Binary natürlich auf das Zielsystem übertragen werden. Wenn auf dem Entwicklungssystem ein http-Server oder ein ssh-Server läuft, kann man das Binary einfach in ein darüber zugängliches Verzeichnis kopieren es anschließend in einer telnet-Sitzung vom Verzeichnis /tmp aus mittels wget oder scp laden. Zum Test muss die Datei mittels &amp;quot;chmod +x helloworld&amp;quot; ausführbar gemacht werden, bevor sie mit &amp;quot;./helloworld&amp;quot; ausgeführt werden kann.&lt;br /&gt;
&lt;br /&gt;
Mittels eines ftpd (z.B. http://www.mikrocontroller.net/attachment/73780/troll-ftpd_1.28-cg2_arm.tgz) oder sshd (z.B. Dropbear von http://vp6500.bd8.nl/) auf dem Zielsystem, kann man das Kopieren auch vom Entwicklungssystem aus durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Anpassen kleinerer Konsolen-Tools auf Cross-Compilierung ===&lt;br /&gt;
Die Makefiles von kleineren Projekten sind häufig nicht so sauber aufgebaut wie das helloworld-Beispiel, so dass man sie leichter ersetzt, als ändert. Am Beispiel von micro_httpd (http://www.acme.com/software/micro_httpd/ , http://www.mikrocontroller.net/attachment/73175/micro_httpd.tar.gz) kann leicht nachvollzogen werden, wie man den modularen Ansatz vom &amp;quot;Hello World&amp;quot;-Beispiel übernehmen kann (Makefile -&amp;gt; Makefile + Makefile.local).&lt;br /&gt;
&lt;br /&gt;
= Hardware  + Software Versionen =&lt;br /&gt;
&lt;br /&gt;
Listet mal eure Hardware- und Softwareversion aus dem &#039;&#039;&#039;Applications&#039;&#039;&#039; =&amp;gt; &#039;&#039;&#039;System Info&#039;&#039;&#039; Menü auf, wenn sie hier noch nicht stehen!&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0645      || 4.20&lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0647      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0648      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0649      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0702      || 4.20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0711     || 3.22&lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0713     || 3.22&lt;br /&gt;
|- &lt;br /&gt;
| ind3-v2                      || 0716     || 3.22&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Stromaufnahme =&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
FIXME &lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
 &lt;br /&gt;
Konfiguration: VP6500 mit aktivierter serieller Konsole an Labornetzteil, Spannung 3.67V (Bei weniger bootet es anscheinend aufgrund von Stromspitzen nicht richtig und vermeldet auf der seriellen Konsole ein &#039;battery low&#039; und schaltet sich danach selbst ab. Diese Spannung sollte noch so gerade &#039;safe&#039; sein, geht man davon aus, daß da ein Step-Up im Innern am werkeln ist und noch ein geringer Abfall über die Schottky-Diode einzurechnen ist). &lt;br /&gt;
&lt;br /&gt;
=== Messungen ===&lt;br /&gt;
* Booten: bis zu 420mA&lt;br /&gt;
* Einbuchen: ca. 400mA&lt;br /&gt;
* mit abgeschaltetem Display, aber eingebucht und laufend (idle): ca. 80mA&lt;br /&gt;
* mit angeschaltetem Display, eingebucht und idle: ca. 190mA&lt;br /&gt;
* mit 100% Prozessor-Last (von serieller Konsole ausgeführt: &amp;quot;while true; do true; done&amp;quot;): ca. 60mA mehr als idle (Scheint aber auch größere Sprünge für andere CPU-Last zu geben)&lt;br /&gt;
* im &#039;Deep Sleep&#039; (wird ein paar Minuten nach Einschalten erreicht): &amp;lt;10mA (!), mit kurzen Wachphasen mit erheblichem Stromverbrauch (&amp;gt;100mA). Beachte: Die serielle Konsole ist in diesem Modus auch nicht mehr aktiv, das Telefon ist aber nicht abgestürzt (Tastendruck aktiviert die Konsole wieder).&lt;br /&gt;
* Telefonieren ca 500mA&lt;br /&gt;
* Telefonieren mit Webcam ca 550mA&lt;br /&gt;
&lt;br /&gt;
=== Ladegerät ===&lt;br /&gt;
* Phone nicht in der Ladeschale: &amp;lt; 0.2W&lt;br /&gt;
* Phone wird geladen: ca 4W&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46054</id>
		<title>PHILIPS VP5500 VoIP Telefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46054"/>
		<updated>2010-04-09T16:04:09Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Dateien bearbeiten mit vi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Verwandte Artikel =&lt;br /&gt;
* Konfiguration: http://www.mikrocontroller.net/topic/170483#new&lt;br /&gt;
* Kernel/GUI Entwicklung: http://www.mikrocontroller.net/topic/172616#new&lt;br /&gt;
* http://das-labor.org/wiki/VP5500&lt;br /&gt;
* (Hack) http://spritesmods.com/?art=vpx500&lt;br /&gt;
* http://vp6500.bd8.nl/&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Kamera-Auflösung 640x480 Pixel&lt;br /&gt;
* 30 Bilder pro Sekunde&lt;br /&gt;
* Kamera um 240° drehbar&lt;br /&gt;
* 5,6 cm (2,2&amp;quot;) TFT-Display, 176x220 Pixel, 65000 Farben&lt;br /&gt;
* Audio-/Video-Ausgang (4fach Klinke-Cinch, beim VP5500 2,5mm Klinke und beim VP6500 3,5mm Klinke)&lt;br /&gt;
* integrierter Li-Ion Akku, 3,7 V-/1100 mAh&lt;br /&gt;
* englische und niederländische Menüsprache&lt;br /&gt;
* Software Qtopia Version 2.1.0&lt;br /&gt;
* Maße (LxBxH): 134x49x24 mm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Philips_VP5500.jpg]]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
* MCU: Freescale MC9328MX21 (ARM9) @ 266MHz ([http://en.wikipedia.org/wiki/I.MX21 Wikipedia_englisch])&lt;br /&gt;
** gehoert zur ARM9E-Familie: ARMv5TEJ -&amp;quot;IntructionSet&amp;quot; (ARM926EJ-S)&lt;br /&gt;
* PC-to-TV-Konverter-Chip: FS455LF&lt;br /&gt;
* WLAN: Marvell 88w8385, als Modul von WM-G-MR-01 (VP5500) / Philips BGW211, on-board (VP6500)&lt;br /&gt;
* SDRAM: 2 x K4S56163LF - 4M x 16Bit x 4 Banks&lt;br /&gt;
* Flash: 2 x ws128j0pbfw00 S29WS128J/064J 128/64 Megabit (8/4 M x 16-Bit) CMOS 1.8 Volt-only Simultaneous Read/Write, Burst Mode Flash Memory&lt;br /&gt;
* Kamera: dc-4626.a5 by chicony&lt;br /&gt;
* Display: Samsung LTS220QC (HD66772 Controller)&lt;br /&gt;
&lt;br /&gt;
== System-Takte ==&lt;br /&gt;
 # cat /proc/systclk&lt;br /&gt;
 System clocks state:&lt;br /&gt;
     Ref clock :      32768Hz  (int, premult by 512)&lt;br /&gt;
     MPLL clock:  263999905Hz  (computed: 264000000Hz)&lt;br /&gt;
     SPLL clock:  163840000Hz  (computed: 163840000Hz)&lt;br /&gt;
     CPU clock :  263999905Hz  (PERSC   = 0)&lt;br /&gt;
     Bus clock :  132000000Hz  (BCLKDIV = 1, computed: 131999952Hz)&lt;br /&gt;
     CSI clock :  unknown      (cannot read register CSICR1)&lt;br /&gt;
     USB clock :   20480000Hz  (USB_DIV = 7)&lt;br /&gt;
     Wait State:  CS0U[WSC] = 10, CS0U[WSC] = 48&lt;br /&gt;
     loops_per_jiffy = 665058&lt;br /&gt;
&lt;br /&gt;
= Innenleben =&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei:Oberseite.jpg | Ansicht der Oberseite&lt;br /&gt;
Datei:Oberseite_beschriftet.jpg | Oberseite mit Beschriftung der Bauteile&lt;br /&gt;
Datei:Drumherum.jpg | Übersicht über die Komponenten&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
Datei:Kontakte_Oberseite.jpg | UART-Schnittstelle Oberseite&lt;br /&gt;
Datei:Kontakte_Unterseite.jpg | JTAG-Schnittstelle Unterseite&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP5500 ==&lt;br /&gt;
Original Liste von [http://www.mikrocontroller.net/topic/170483#1646514 Tino] [[Media:Philips vp5500 Liste Testpins.pdf|herrunterladen]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:Philips vp5500 testpins 1.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
[[Bild:Philips vp5500 testpins 2.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-&lt;br /&gt;
|   1       ||                  LED || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    2     ||            Kamera Pin 8 an CN1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    3     ||                  Pin 4 an IC1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    4    ||                z.B. IC5 Pin V 18 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|    5    ||                       GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|    6     ||                       NC || NC&lt;br /&gt;
|-&lt;br /&gt;
|    7     ||                Pin E 16 an IC5 || SAP_CLK&lt;br /&gt;
|-&lt;br /&gt;
|    8     ||                 Pin 1 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    9     ||                 Pin 2 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    10    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    11     ||                 Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    12    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    13    ||                Pin L 16 an IC5 || UART2_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    14     ||               Pin C 12 an IC5 || USBH1_RXDM&lt;br /&gt;
|-&lt;br /&gt;
|    15   ||                 Pin H 12 an IC5 || USBH1_TXDP&lt;br /&gt;
|-&lt;br /&gt;
|    16     ||               Pin B 19 an IC5 || CSPI2_SS2&lt;br /&gt;
|-&lt;br /&gt;
|    17   ||                 Pin B16 an IC5 || SSI2_FS&lt;br /&gt;
|-&lt;br /&gt;
|    18     ||               Pin F 18 an IC5 || KP_ROW0&lt;br /&gt;
|-&lt;br /&gt;
|    19    ||                Pin K 18 an IC5 || KP_COL4&lt;br /&gt;
|-&lt;br /&gt;
|    20    ||                Pin L 19 an IC5 || UART3_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    21     ||               Pin T 14 an IC5 || RESET_IN&lt;br /&gt;
|-&lt;br /&gt;
|    22    ||    geht an + des Kondensators neben IC6 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    23   ||                Pin D 13 an IC 9 || CLKOUT&lt;br /&gt;
|-&lt;br /&gt;
|    24      ||             Pin E 13 an IC 9 || CLKIN_P&lt;br /&gt;
|-&lt;br /&gt;
|    25    ||                Pin A 9 an IC 9 || DAC_D&lt;br /&gt;
|-&lt;br /&gt;
|    26    ||                Pin A 8 an IC 9 || DAC_A&lt;br /&gt;
|-&lt;br /&gt;
|    27    ||                Pin A 7 an IC 9 || DAC_B&lt;br /&gt;
|-&lt;br /&gt;
|    28     ||               Pin A 6 an IC 9 || DAC_C&lt;br /&gt;
|-&lt;br /&gt;
|    29      ||             Pin L 13 an IC 5 || UART1_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    30     ||              Pin T 16 an IC 5 || BOOT1&lt;br /&gt;
|-&lt;br /&gt;
|    31  ||                 Pin K 10 an IC 5 || UART1_RXD&lt;br /&gt;
|-&lt;br /&gt;
|    32    ||               Pin U 17 an IC 5 || BOOT2&lt;br /&gt;
|-&lt;br /&gt;
|    33    ||                 Pin 9 an IC 23 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    34    ||                Pin D 19 an IC5 || CSPI2_SCLK&lt;br /&gt;
|-&lt;br /&gt;
|    35     ||              Pin C 14 an IC5 || TIN&lt;br /&gt;
|-&lt;br /&gt;
|    36    ||                Pin C 19 an IC5 || CSPI2_SS1&lt;br /&gt;
|-&lt;br /&gt;
|    37   ||                 Pin D 18 an IC5 || CSPI2_SS0&lt;br /&gt;
|-&lt;br /&gt;
|    38     ||               Pin E 19 an IC5 || CSPI2_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|    39     ||               Pin H 19 an IC5 || PWMO&lt;br /&gt;
|-&lt;br /&gt;
|    40   ||            Pin J 9 an IC 7 und IC 8 || VDD&lt;br /&gt;
|-&lt;br /&gt;
|    41   ||                 Pin J 19 an IC 5 || KP_COL2&lt;br /&gt;
|-&lt;br /&gt;
|    42   ||                Pin K 16 an IC 5 || KP_COL3&lt;br /&gt;
|-&lt;br /&gt;
|    43   ||                 Pin J 11 an IC 5 || KP_ROW2&lt;br /&gt;
|-&lt;br /&gt;
|44      ||     Pin J 17 an IC 5 || KP_COL1&lt;br /&gt;
|-&lt;br /&gt;
|45  ||         Pin G 19 an IC 5 || KP_ROW4&lt;br /&gt;
|-&lt;br /&gt;
|46  ||         Pin G 17 an IC 5 || KP_ROW3&lt;br /&gt;
|-&lt;br /&gt;
|47  ||    Pin D 5 an IC 10 und IC 11 || ACC&lt;br /&gt;
|-&lt;br /&gt;
|48 ||          Pin G 16 an IC 5 || KP_ROW1&lt;br /&gt;
|-&lt;br /&gt;
|49   ||        Pin J 18 an IC 5 || KP_COL0&lt;br /&gt;
|-&lt;br /&gt;
|50  ||         Pin V 18 an IC 5 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|51 ||      Pin 2 an CN KB-Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|52 ||           Pin 2 an IC 15 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|53  ||      Pin 4 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|54  ||         Pin E 17 an IC 5 || CSPI2_MISO&lt;br /&gt;
|-&lt;br /&gt;
|55 ||  Pin 1,2,3,10,13 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|56  ||          Pin 3 an IC 16 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|57  ||         Pin U 10 an IC 5 || PC_PWRON&lt;br /&gt;
|-&lt;br /&gt;
|58  ||            Pin 1 IC 18 || ?&lt;br /&gt;
|-&lt;br /&gt;
|59  ||       an Diode über IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|60  ||          Pin 3 an IC 25 || ?&lt;br /&gt;
|-&lt;br /&gt;
|61 ||         Ladekontakt positiv || Ladegerät +&lt;br /&gt;
|-&lt;br /&gt;
|62  ||               GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|63  ||        Akku Mittelkontakt || Akkustand? Temperatur?&lt;br /&gt;
|-&lt;br /&gt;
|64 ||       Transistor unter IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|65  ||          Pin 2 an IC 22 || ?&lt;br /&gt;
|-&lt;br /&gt;
|66   ||      Pin 1,12,30 an IC 24 || VSS&lt;br /&gt;
|-&lt;br /&gt;
|67  ||    Kondensator + unter IC 20 || ?&lt;br /&gt;
|-&lt;br /&gt;
|68   ||         Pin 5 an IC 21 || ?&lt;br /&gt;
|-&lt;br /&gt;
|69  ||           Pin 2 an IC 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|70    ||        Pin 25 an IC24 || MCLK&lt;br /&gt;
|-&lt;br /&gt;
|71  ||       Prozessor Pin W 14 || QVDD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP6500 ==&lt;br /&gt;
Original Listen von [http://www.mikrocontroller.net/topic/170483#1658720 Tino] herunterladen. [[Media:V6500_Back.xls|Rückseite]], [[Media:V6500_Front.xls|Vorderseite]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Back.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || Pin 21 an BGW211EG || POR_N&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || Pin A 14 an i.MX21 || TOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || Pin 46 an BGW211EG || JTAG_TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || Pin 44 an BGW211EG || JTAG_TCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || Pin 42 an BGW211EG || JTAG_TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || Pin 47 an BGW211EG || JTAG_TRST_N&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || PIN 45 an BGW211EG || JTAG_TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || Pin 43 an BGW211EG || JTAG_RTCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || VDD || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || Pin K 10 an i.MX21 || UART1_RXD&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Front.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || 	Pin 29 von BGW211EG &amp;amp; F 16 an i.MX21 || RESET_N / CSPI1_SS1&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || 	Pin 28 an BGW211EG &amp;amp; J 12 an i.MX21 || SPI_DAT_MOSI / CSPI1_MOSI&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || 	Pin 27 an BGW211EG &amp;amp; F 19 an i.MX21 || SPI_SS_N / CSPI1_SS0&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || 	Pin 26 an BGW21EG &amp;amp; F 17 an i.MX21 || SPI_DAT_MISO / CSPI1_MISO&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || 	Pin 25 an BGW211EG &amp;amp; H 10 an i.MX21 || SPI_CLK / CSPI1_SCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || 	Pin 24 an BGW211EG &amp;amp; H 11 an i.MX21 || SPI_EXT_INT / CSPI1_RDY&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || 	Pin 41 an BGW211EG || UART_TX&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || 	Pin 40 an BGW211EG || UART_RX&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || 	Transistor unter Testpunkt || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || 	LED || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || 	Pin 8 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || 	Pin 18 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || 	Pin E 13 &amp;amp; H12 an FS455 || CLKIN / PREF&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || 	Pin D 13 an FS455 || CLKOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 16 || 	Pin A 11 an FS455 || XTAL_OUT&lt;br /&gt;
|-		&lt;br /&gt;
| 17 || 	VDD von FS455 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 18 || 	Pin 15 &amp;amp; 16 am Displayconnector || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 19 || 	geht an 2 Dioden links daneben || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 20 || 	Pin M 19 an i.MX21 || UART1_CTS&lt;br /&gt;
|-		&lt;br /&gt;
| 21 || 	Pin M 18 an i.MX21 || UART1_RTS &amp;amp; GND ??&lt;br /&gt;
|-		&lt;br /&gt;
| 22 || 	VDDan i,MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 23 || 	Pin G 10 an i.MX21 || USB_BYP&lt;br /&gt;
|-		&lt;br /&gt;
| 24 || 	Pin A 19 an i.MX21 || SSI3_FS&lt;br /&gt;
|-		&lt;br /&gt;
| 25 || 	Pin D 17 an i.MX21 || SSI2_CLK&lt;br /&gt;
|-		&lt;br /&gt;
| 26 || 	VDD an i.MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 27 || 	Pin T 17 an i.MX21 || SD1_D3&lt;br /&gt;
|-		&lt;br /&gt;
| 28 || 	Pin A 15 an i.MX21 || SAP_TXDAT&lt;br /&gt;
|-		&lt;br /&gt;
| 29 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 30 || 	Pin T 14 an i.MX21 || RESET_IN&lt;br /&gt;
|-		&lt;br /&gt;
| 31 || 	Pin R 19 an i.MX21 || TRST&lt;br /&gt;
|-		&lt;br /&gt;
| 32 || 	Pin P 19 an i.MX21 || TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 33 || 	Pin N 17 an i.MX21 || TCK&lt;br /&gt;
|-		&lt;br /&gt;
| 34 || 	Pin K 11 an i.MX21 || TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 35 || 	Pin P 18 an i.MX21 || TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 36 || 	Pin 13 an TLV320 || OUTP2&lt;br /&gt;
|-		&lt;br /&gt;
| 37 || 	Pin 14 an TLV320 || OUTMV&lt;br /&gt;
|-		&lt;br /&gt;
| 38 || 	Pin 15 an BGW211EG || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 39 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 40 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 41 || 	? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 42 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 43 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 44 || 	Pin 1,8 an 20XN2512 &amp;amp; Key ON || PowerON&lt;br /&gt;
|-		&lt;br /&gt;
| 45 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 46 || 	Pin 2 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 47 || 	Pin 6 an MRRBGB3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 48 || 	LED Tastatur ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 49 || 	Pin 10 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 50 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 51 || 	geht an Widerstand auf Rückseite ? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 52 || 	Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 53 || 	geht an Diode und Kondensator auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 54 || 	Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 55 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 56 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 57 || 	Pin K 10 an i.MX21 || UART1_RDX&lt;br /&gt;
|-		&lt;br /&gt;
| 58 || 	Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 59 || 	Pin T 16 an i.MX21 || BOOT1&lt;br /&gt;
|-		&lt;br /&gt;
| 60 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 61 || 	Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|-		&lt;br /&gt;
| 62 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 63 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 64 || 	Pin 25 an TLV320 || MLCK&lt;br /&gt;
|-		&lt;br /&gt;
| 65 || 	Pin4 an 69W2440D || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 66 || 	VDD von TLV320 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 67 || 	geht an Widerstand auf der Rückseite ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 68 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 69 || 	Pin 65 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 70 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 71 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 72 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 73 || 	Akku positiv || Plus Akku&lt;br /&gt;
|-		&lt;br /&gt;
| 74 || 	Ladekontakt positiv || Ladekontakt positiv&lt;br /&gt;
|-		&lt;br /&gt;
| 75 || 	Akku positiv || Plus Akku&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
TIN muss auf low gezogen werden, um die Schnittstelle zu aktivieren.&lt;br /&gt;
Jedoch startet dann das Telefon nicht vollständig (Fix siehe [[#Betrieb mit aktiverter serieller Schnittstelle]])&lt;br /&gt;
&lt;br /&gt;
* Spannungs-Pegel: 3.3V&lt;br /&gt;
* Baudrate: 115200kbps&lt;br /&gt;
* Stopbits: 1&lt;br /&gt;
* Flussteuerung: keine&lt;br /&gt;
=== VP5500 ===&lt;br /&gt;
[[Bild:VP5500_seriell_highlight.svg|100px|UART-Pins VP5500(Frontseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unten vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&lt;br /&gt;
&lt;br /&gt;
=== VP6500 ===&lt;br /&gt;
[[Bild:VP5600-Serialport-Preliminary.jpg|100px|UART-Pins VP6500]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unter vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&amp;lt;br&amp;gt;&lt;br /&gt;
VCC liefert anscheinend die ungeregelte Akkuspannung, Boot-Pins nicht verifiziert.&lt;br /&gt;
&lt;br /&gt;
== JTAG ==&lt;br /&gt;
[[Bild:jtag.jpg Belegung der JTAG-Pins (Rückseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
= Hardware Modifikationen =&lt;br /&gt;
== Zerlegen des Telefons ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:01_offen_von_Hinten.JPG|1. Geöffnetes Akkufach&lt;br /&gt;
Datei:02_Blende_entfernt.JPG|2. hintere Schwarze Blende entfernt&lt;br /&gt;
Datei:03_Rückseite_entfernt.JPG|3. Schalenrückteil entfernt&lt;br /&gt;
Datei:04_aufhebeln_Vorderteil.JPG|4. Druck nach außen&lt;br /&gt;
Datei:05_vorderteil_entfernt.JPG|5. entferntes Vorderteil&lt;br /&gt;
Datei:06_Elektronik_entfernt.JPG|6. entfernte Elektronik&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# das Akkufach muss geöffnet und die Schrauben entfernt werden&lt;br /&gt;
# hinter der rückseitigen schwarzen Blende befinden sich zwei Schrauben, die entfernt werden müssen&lt;br /&gt;
#* Hierzu am besten mit einem schmalen kleinen Schraubendreher von der Stirnseite aus zwischen die Plastikteile fahren und vorsichtig aufhebeln und den Schraubendreher dabei weiter unter die Blende bewegen.&lt;br /&gt;
# Nun kann einfach das rückseitige Schalenteil abgeschaubt werden&lt;br /&gt;
# das Entfernen des Frontschalenteils ist etwas tricky:&lt;br /&gt;
#* von oben und unten lässt sich ganz gut ein Spalt zur Seite aufweiten&lt;br /&gt;
#* etwas unter der Mitte hängt es aber auf beiden Seiten. Dort befinden sich kleine Plastikbügel, die recht leicht zerbrechen.&lt;br /&gt;
#* Mit einem sehr schmalen Schraubendreher in eine der Lücken fahren (anfange auf der Seite ohne Tasten) und den Schraubendreher nach innen drücken, so das der Druck in der Seite nach außen wirkt.&lt;br /&gt;
#* Mit etwas Geschick bekommt man das so ohne Bruch ab, es ist aber auch nicht kritisch, wenn der Bügel ein wenig anbricht)&lt;br /&gt;
# Die Platine zu entfernen ist nicht ganz so schwierig.&lt;br /&gt;
#* Zuerst die Seite auf der keine Knöpfe sind:&lt;br /&gt;
#* vorichtig diese Seite leicht anheben. Am unteren Ende ist auf die Kontakte zu achten &lt;br /&gt;
#* dann versuchen die Paltine seitlich nach oben aus dem Gehäuse zu ziehen&lt;br /&gt;
#* dabei auf das Lautsprecherkabel und den Kamerakonnektor achten&lt;br /&gt;
# Zusammenbau genauso, nur umgedreht ;)&lt;br /&gt;
#* nicht die Lautsprecher- und Kamera-Stecker vergessen&lt;br /&gt;
&lt;br /&gt;
== Buchse für Uart einbauen ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:10_Pins.JPG|1. unbearbeitete Pinreihe&lt;br /&gt;
Datei:11_Pins_bearbeitet.JPG|2. präperierte Pinreihe&lt;br /&gt;
Datei:09_Pads.JPG|3. präperierte Pads&lt;br /&gt;
Datei:12_Pins_ausrichten.JPG|4. Pinreiheausrichten&lt;br /&gt;
Datei:13_Pins_angelötet_1.JPG|5. angelötete Pinreihe&lt;br /&gt;
Datei:14_Pins_angelötet_2.JPG|6. angelötete Pinreihen&lt;br /&gt;
Datei:08_Mittelteil.JPG|7. Mittelteil mit ausgefeiltem Loch&lt;br /&gt;
Datei:15_Mittelteil_zusammengebaut.JPG|8. wieder zusammengesteckt&lt;br /&gt;
Datei:16_in_Aktion.JPG|9.verbundene serielle Schnittstelle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zunächst muss das Telefon zerlegt werden ([[#Zerlegen des Telefons]])&lt;br /&gt;
Um das Gehäuse nicht zu beeinträchtigen, habe ich mich dazu entschieden, alles so zu lassen wie es ist und nur kleine Buchsen einzubauen. &lt;br /&gt;
&lt;br /&gt;
# Hierfür habe ich einreihige gedrehte IC-Sockel genutzt &lt;br /&gt;
# deren Beine abgezwickt, und etwas Lötzinn aufgetragen (mit der langen Reihe kann man die kurzen, schmalen Teile super handhaben)&lt;br /&gt;
# ebendso auf die Pads ein wenig eingezinnt&lt;br /&gt;
# ausrichten und festlöten&lt;br /&gt;
# eine Reihe&lt;br /&gt;
# die zweite Reihe&lt;br /&gt;
# bei der Gehäuseöffnung über den Pins habe ich mit einer feinen Schlüsselfeile den Rand wenig aufgeweitet. An der Gummimatte hab ich nix geändert.&lt;br /&gt;
# fertig&lt;br /&gt;
# und im Einsatz&lt;br /&gt;
&lt;br /&gt;
= Das VPx500 &#039;rooten&#039; =&lt;br /&gt;
&lt;br /&gt;
Um vollen Zugang zum System auf dem Gerät zu erhalten gibt es mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== per serieller Schnittstelle ==&lt;br /&gt;
Dazu muß der [[#UART]] angeschlossen werden. Während des Bootvorgangs drückt man immer wieder ziellos irgendwelche Tasten bis man am Prompt des [http://www.lartmaker.nl/lartware/blob/ blob-Bootloaders] ist.&lt;br /&gt;
Dann kann man &lt;br /&gt;
 boot root=/dev/mtdblock2 init=/bin/sh&lt;br /&gt;
eingeben, um an eine minimale Shell zu kommen.&lt;br /&gt;
&lt;br /&gt;
In dieser setzt man dann mit &lt;br /&gt;
 passwd&lt;br /&gt;
man dann das Passwort für &#039;&#039;root&#039;&#039;. Danach kann man sich als &#039;&#039;root&#039;&#039; mit dem gesetzten Passwort einloggen.&lt;br /&gt;
&lt;br /&gt;
== per DNS-Hack ==&lt;br /&gt;
Um den Rootzugriff zu aktivieren, wird dem Telefon ein Softwareupdate vorgegaukelt. Es versucht, auf den Updateserver von KPN zuzugreifen (den es nicht mehr gibt). Glücklicherweise geschieht dies nicht über eine feste IP, sondern über einen Hostnamen, so dass man an dieser Stelle sich durch einen eigenen DNS den Domainname auf einen eigenen Server umleiten kann. Daher ist im eigenen Netzwerk eine Umleitung des DNS erforderlich (oder ein DHCP-Server, der die Adresse des DNS bekanntgibt. Stichworte &#039;Static DNS&#039;, ..).&lt;br /&gt;
Das Gerät holt sich dann ein Updatepaket, das den Telnet-Zugang aktiviert.&lt;br /&gt;
&lt;br /&gt;
Dann lässt sich per Terminal (Linux. Windows: ....) die Kommandozeile des Geräts aufrufen:&lt;br /&gt;
&lt;br /&gt;
 telnet 123.456.789.012&lt;br /&gt;
&lt;br /&gt;
Passwort ist &amp;quot;toor&amp;quot;.&lt;br /&gt;
Das Ändern des root-Passwortes erfolgt mit dem Befehl passwd.&lt;br /&gt;
&lt;br /&gt;
Unter Applications&amp;gt;Registration sind Netzwerk- und VoIP-Einstellungen zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für Fritz-Box-Benutzer ===&lt;br /&gt;
Die Fritzboxen bieten bisher leider keine Möglichkeit, den verwendeten DNS&lt;br /&gt;
direkt im Webinterface zu ändern, über Umwege geht es aber doch:&lt;br /&gt;
* Über das Webinterface der Fritzbox die Einstellungen sichern&lt;br /&gt;
* Exportdatei im Texteditor öffnen (am besten nicht Notepad, da der die Unix-Zeilenumbrüche nicht versteht - zur Not geht auch Wordpad)&lt;br /&gt;
* nach overwrite_dns1 suchen (gibt es zwei mal) und da den DNS 84.38.68.30 oder 188.40.123.50 eintragen&lt;br /&gt;
* am Anfang der Exportdatei VOR &amp;quot;**** CFGFILE:ar7.cfg&amp;quot; eine Zeile &#039;NoChecks = yes&#039; einfügen, damit die Fritzbox die nun nicht mehr passende Checksumme ignoriert.&lt;br /&gt;
* Einstellungen zurück in die Fritzbox übertragen.&lt;br /&gt;
&lt;br /&gt;
Wenn die Telefone entsperrt sind, den DNS wieder entfernen (Es ist&lt;br /&gt;
vielleicht eine ganz gute Idee, wenn man da zwei unabhängige DNS-Server&lt;br /&gt;
einträgt, so umgeht man auch gleich providerseitige DNS-Sperren)&lt;br /&gt;
&lt;br /&gt;
= Voice over IP (VoIP, SIP) =&lt;br /&gt;
&lt;br /&gt;
*http://de.wikipedia.org/wiki/IP-Telefonie&lt;br /&gt;
*http://de.wikipedia.org/wiki/Session_Initiation_Protocol&lt;br /&gt;
*http://de.wikipedia.org/wiki/H.323&lt;br /&gt;
*http://de.wikipedia.org/wiki/Softphone&lt;br /&gt;
&lt;br /&gt;
Benutzer ist 103&lt;br /&gt;
&lt;br /&gt;
Mit Ekiga konnte so per 103@xxx.xxx.xxx.xxx eine Sprachverbindung zum Telefon aufgebaut werden.&lt;br /&gt;
=== Eigener VoIP Server mit Asterisk ===&lt;br /&gt;
*http://www.das-asterisk-buch.de&lt;br /&gt;
&lt;br /&gt;
= Software Modifikationen =&lt;br /&gt;
== Vorsicht Fallen ==&lt;br /&gt;
Es ist nicht schwer, sich den Zugang zum Telefon abzuschneiden, wenn man nicht aufpasst.&lt;br /&gt;
=== Startscripten ===&lt;br /&gt;
Die Scripten in /etc/rc.d/&amp;quot; müssen im Hintergrund laufen. Tut ein Script das nicht, ist an dieser Stelle Schluß mit dem Bootvorgang.&lt;br /&gt;
&lt;br /&gt;
Dann darf man als nächstes den Lötkolben anheizen und die serielle Schnittstelle ([[#UART]]) zugänglich machen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
Bestimmte Aktionen werden immer wieder benötigt.&lt;br /&gt;
Diese sollen hier kurz beschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Es werden dennoch grundlegende Kenntnisse von Kommandozeilen vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Dateien bearbeiten mit vi===&lt;br /&gt;
Auf dem Telefon ist der minimalistische Editor vi installiert mit dem Dateien über Telnet bearbeitet werden können.&lt;br /&gt;
Für eine genaue Bedienung bitte Google benutzen.&lt;br /&gt;
Die wichtigsten Bedienelemente werden hier kurz erläutert.&lt;br /&gt;
&lt;br /&gt;
Datei Öffnen mit &#039;vi Dateipfad&#039;&lt;br /&gt;
vi kennt zwei Modi: Kommando- und Einfüge-Modus.&lt;br /&gt;
i - wechselt in den Einfüge-Modus, in dem geschrieben werden kann&lt;br /&gt;
&lt;br /&gt;
[Esc] wechselt zurück in den Kommandomodus. &lt;br /&gt;
In diesem kann mittels Pfeil- und Bildlauftasten navigiert werden.&lt;br /&gt;
:x - löscht das Zeichen an Cursor position&lt;br /&gt;
:d&#039;&#039;n&#039;&#039;d - löscht &#039;&#039;n&#039;&#039; Zeile(n) in den Zeilenbuffer (ohne &#039;&#039;n&#039;&#039; eine Zeile)&lt;br /&gt;
:y&#039;&#039;n&#039;&#039;y - kopiert &#039;&#039;n&#039;&#039; Zeile(n) in Zeilenbuffer (ohne &#039;&#039;n&#039;&#039; eine Zeile)&lt;br /&gt;
:p - fügt Inhalt des Zeilenbuffer &#039;&#039;&#039;unter&#039;&#039;&#039; der aktuellen Zeile ein&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;q! - schließt ohne zu speichern&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;w - speichert&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;wq - speichert und beenden&lt;br /&gt;
&lt;br /&gt;
=== Dateien auf das Telefon laden ===&lt;br /&gt;
Um Daten von einem http-Server zu laden, benutzt man &lt;br /&gt;
 wget url&lt;br /&gt;
Die Datei wird dann in das aktuelle Verzeichnis geladen, weswegen vorher in das Zielverzeichnis wechseln.&lt;br /&gt;
&lt;br /&gt;
Um Daten von einem ftp-Server zu laden, benutzt man ftp.&lt;br /&gt;
Auch hier muss vorher in das zielverzeichnis gewechselt werden.&lt;br /&gt;
 ftp hostname&lt;br /&gt;
dann gegebenenfalls die Zugangsdaten eingeben und mittels &#039;cd&#039; und &#039;ls&#039; in das Entsprechende Verzeichnis auf dem FTP-Server wechseln&lt;br /&gt;
und anschließend mittels &lt;br /&gt;
 get dateiname&lt;br /&gt;
die Datei herunterladen.&lt;br /&gt;
 &lt;br /&gt;
=== Dateien vom Telefon herunterladen ===&lt;br /&gt;
Auch hier bietet sich ein FTP an.&lt;br /&gt;
Mittels &#039;ftp hostname&#039; verbinden, Benutzerdaten eingeben, in das entsprechende FTP-Server-Verzeischnis wechseln und mittels&lt;br /&gt;
 put localeDatei&lt;br /&gt;
eine Lokale Datei hochladen.&lt;br /&gt;
&lt;br /&gt;
=== Alternative Dropbear ===&lt;br /&gt;
&lt;br /&gt;
Wurde der dropbear-ssh server installiert [[#Dropbear (SSH-Server) installieren]] können mittels eines Programms mit SCP-Unterstützung (zB. [http://winscp.net/eng/docs/lang:de WinSCP] für Windows) sehr komfortabel Dateien ausgetauscht werden.&lt;br /&gt;
&lt;br /&gt;
Mit WinSCP können auch Dateien direkt bearbeitet werden.&lt;br /&gt;
Der Client lädt die Datei herunter, öffnet einen Editor und lädt die Datei wieder herauf, wenn diese geändert wurde.&lt;br /&gt;
&lt;br /&gt;
== Backup ==&lt;br /&gt;
=== Backup des Flash ===&lt;br /&gt;
If you want to make a backup of your root partition, you can do as&lt;br /&gt;
follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#!/bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cat /dev/mtdb2 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
micro_inetd 31337 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This&#039;ll make your device listen for incoming connections on port 31337.&lt;br /&gt;
On your host system you may then simply run &lt;br /&gt;
 nc ip.of.your.phone 31337 &amp;gt; fon_rootfs&lt;br /&gt;
et voilà, you got your rootfs packed into a file.&lt;br /&gt;
&lt;br /&gt;
Note that the backed up file is not ext2, but a jffs2 formatted&lt;br /&gt;
filesystem. These can&#039;t be handled by a simple &amp;quot;mount -o loop&amp;quot; as you&#039;d&lt;br /&gt;
have thought... so here&#039;s how you mount it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
modprobe jffs2&lt;br /&gt;
modprobe mtdram total_size=32768 erase_size=128&lt;br /&gt;
modprobe mtdblock&lt;br /&gt;
mkdir /tmp/phone-root&lt;br /&gt;
mknod /tmp/phone-mtdb2 b 31 0&lt;br /&gt;
dd if=/your/backup/file of=/tmp/phone-mtdb2&lt;br /&gt;
mount -t jffs2 /tmp/phone-mtdb2 /tmp/phone-root&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#Dateisystem herunterladen]] describes another way to dump the filesystem for closer examination.&lt;br /&gt;
&lt;br /&gt;
=== Komplettes Backup ===&lt;br /&gt;
Die Datei http://www.mikrocontroller.net/attachment/73323/S91backup_pipe auf das Gerät laden und als ausführbar markieren.&lt;br /&gt;
&lt;br /&gt;
 cd /etc/rc.d/init.d&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/73323/S91backup_pipe&lt;br /&gt;
 chmod +x /etc/rc.d/init.d/S91backup_pipe&lt;br /&gt;
&lt;br /&gt;
Damit wird eine Art Backup-Server mit dem Boot gestartet.&lt;br /&gt;
wenn man dies nicht möchte kann man das Skript natürlich auch an jeden beliebigen anderen Ort legen und per Hand starten.&lt;br /&gt;
&lt;br /&gt;
Nun kann man von einem Rechner aus mittels nc (netcat) die Bereiche sichern:&lt;br /&gt;
&lt;br /&gt;
 nc 192.168.1.3 31337 &amp;gt; fon_rootfs&lt;br /&gt;
 nc 192.168.1.3 31338 &amp;gt; fon_udata&lt;br /&gt;
 nc 192.168.1.3 31339 &amp;gt; fon_usettings&lt;br /&gt;
 nc 192.168.1.3 31340 &amp;gt; fon_bootld&lt;br /&gt;
 nc 192.168.1.3 31341 &amp;gt; fon_kernel&lt;br /&gt;
&lt;br /&gt;
Die 192.168.1.3 natürlich mit der IP des Gerätes austauschen, die fon_*&lt;br /&gt;
Dateinamen könnt ihr natürlich auch frei vergeben.&lt;br /&gt;
&lt;br /&gt;
fon_udata ist die /user_data Partition, fon_usertings dementsprechend&lt;br /&gt;
die /user_settings Partition.&lt;br /&gt;
&lt;br /&gt;
Der bootld Bereich enthält auch die Parameter. Um das später (falls&lt;br /&gt;
überhaupt nötig) mittels blob zu restaurieren müsste die Datei noch in&lt;br /&gt;
zwei Teile aufgeteilt werden. Der erste enthält dann den reinen&lt;br /&gt;
Bootloader-Bereich, der zweite die Parameter. Wer&#039;s wirklich braucht für&lt;br /&gt;
den kann ich noch ne Anleitung zum Aufteilen geben. Wirklich Sinnvoll&lt;br /&gt;
ist das aber nicht, hat man den Bootloader erstmal mit was anderem&lt;br /&gt;
überschrieben kann man ihn ja auch nicht mehr zum Wiederherstellen&lt;br /&gt;
benutzen....&lt;br /&gt;
&lt;br /&gt;
=== Zurückspielen der Backups ===&lt;br /&gt;
&lt;br /&gt;
1) Man braucht ein (die) Backup-Image(s).&lt;br /&gt;
&lt;br /&gt;
2) Serielle Verbindung zum Telefon&lt;br /&gt;
&lt;br /&gt;
3) Akku abstecken, wieder anstecken.&lt;br /&gt;
&lt;br /&gt;
4) Telefon einschalten und im Terminalprogram auf die Tasten kloppen, so&lt;br /&gt;
das man im Bootloader landet. Dabei muss man recht schnell sein. Es&lt;br /&gt;
sollte dann ein Prompt kommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
blob&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Nun gibt man ein &lt;br /&gt;
   xdownload param&lt;br /&gt;
Wobei &#039;param&#039; der Teil ist, den man wiederherstellen will:&lt;br /&gt;
* blob - Bootloader (fon_bootld)&lt;br /&gt;
* param - Parameter Bereich (Bootloader oder Kernel?) (fon_bootld)&lt;br /&gt;
* kernel - Der Kernel (fon_kernel)&lt;br /&gt;
* ramdisk - Das Root-Filesystem / (fon_rootfs)&lt;br /&gt;
* ramdisk2 - Das /user_data Filesystem (fon_udata)&lt;br /&gt;
* ramdisk3 - Das /user_settings Filesystem (fon_usettings)&lt;br /&gt;
&lt;br /&gt;
Beim Backup ist blob + param in einer Datei, müsste man also ggf.&lt;br /&gt;
erstmal aufsplitten.&lt;br /&gt;
&lt;br /&gt;
6) Er wartet dann auf den Upload. Nun startet man im Terminalprogram den&lt;br /&gt;
Upload des Backup-Images, dazu verwendet man das X-Modem Protokoll.&lt;br /&gt;
&lt;br /&gt;
7) Kaffee trinken, auf&#039;s Klo gehen, mit Frau/Freundin/Mutter ein Gespräch&lt;br /&gt;
anfangen.&lt;br /&gt;
&lt;br /&gt;
8) Irgendwann ist der Upload fertig. Dauert halt lange. Man landet&lt;br /&gt;
wieder am &amp;quot;blob&amp;gt;&amp;quot; prompt. Nun gibt man&lt;br /&gt;
 flash param&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
9) Er schreibt nun das, was man hochgeladen hat, in das Flash.&lt;br /&gt;
&lt;br /&gt;
10) &amp;quot;boot&amp;quot; eingeben. Da Telefon bootet nun normal.&lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn im Backup nicht die Änderung gemacht wurde damit das&lt;br /&gt;
Telefon auch bei angeschlossener serieller Schnittstelle startet, kommt&lt;br /&gt;
man nicht weiter als wie bis zur Sanduhr. Dann einfach die serielle&lt;br /&gt;
abstecken (Also den TIN pin wieder freigeben) und das Telefon neustarten&lt;br /&gt;
(Akku kurz ab- und wieder anstöpseln)&lt;br /&gt;
&lt;br /&gt;
=== Dateisystem herunterladen ===&lt;br /&gt;
Zum unkomplizierten Durchsuchen des Dateisystems kann es nützlich sein, dieses vom Gerät zu kopieren.&lt;br /&gt;
&lt;br /&gt;
Folgende Befehle erzeugen wie beim Backup des Flash einen kleinen Server, dessen Output auf anderer Seite mittels mittels nc abgeholt werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#! /bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cd /&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
echo &#039;tar cf - bin boot dev etc home lib mnt opt root sbin tmp trace upgrade user_data user_settings usr var 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
micro_inetd 31340 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die lange Liste mit Unterverzeichnissen ist notwendig um /proc zu überspringen, was Probleme mit tar verursachen würde.&lt;br /&gt;
&lt;br /&gt;
Auf einem anderen Linux system (oder cygwin) kann mittels&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  nc telefon-Ip 31340 &amp;gt; file.tar&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
die Datei abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Der Vorgang dauert aber ein ganz paar Minuten.&lt;br /&gt;
&lt;br /&gt;
Heraus kommt ein Tar-Archiv, was alle Dateien des Gerätes enthält - inclusive der temporären Dateien der Ram-Disks.&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit aktivierter serieller Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Das 5500 scheint nicht komplett zu starten wenn man TIN auf low hat&lt;br /&gt;
und die serielle Schnittstelle benutzt. Man kann das Gerät dann nicht normal bedienen. Dies lässt sich ändern indem man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /usr/local/startup/daemon.sh&lt;br /&gt;
&lt;br /&gt;
ziemlich am Anfang das TINDETECT=&amp;quot;TRUE&amp;quot; ändert auf TINDETECT=&amp;quot;FALSE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Danach startet er auch mit aktiver serieller Verbindung komplett durch&lt;br /&gt;
und das Gerät ist ganz normal bedienbar.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
6&amp;gt;NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Freeing init memory: 68K&lt;br /&gt;
PCB version: ind3 v2&lt;br /&gt;
Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
****p_gpio_init_low_bat****&lt;br /&gt;
GPIO: p_gpio_it_init at 762&lt;br /&gt;
Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Reset from Software Reset.&lt;br /&gt;
Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
pp: hw ver = 2&lt;br /&gt;
prp_dbg=0&lt;br /&gt;
Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
hmp4d: module inserted&lt;br /&gt;
hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
hmp4e: module inserted. Major = 249&lt;br /&gt;
SPI2:: drv_Init :PID of driver: 134&lt;br /&gt;
SPI2:: drv_Init :ScanList not provided. Will use the default scan list.&lt;br /&gt;
SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10&lt;br /&gt;
SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
SPI2:: drvRegEtherDev :Interface Name is: eth%d&lt;br /&gt;
SPI2:: drv_Init :HEOCSIWPOWON: Powering on...&lt;br /&gt;
SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Divider : 8&lt;br /&gt;
&lt;br /&gt;
 OCR2 : e4015308 (12582912)&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!!&lt;br /&gt;
GPIO: CHARGE_IN at init&lt;br /&gt;
GPIO: LOW_BAT_OUT at init&lt;br /&gt;
GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
GPIO: camera to front at init&lt;br /&gt;
**ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1&lt;br /&gt;
SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() ..&lt;br /&gt;
SPI2:: drvPhase2Init :Success&lt;br /&gt;
SPI2:: drvPhase2Init : registering callbacks with HHAL..&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1&lt;br /&gt;
SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
requested reg.domain code setting = 3&lt;br /&gt;
SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
SPI2:: drvInitConnect :step5&lt;br /&gt;
SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Motorola CSI Linux driver ver 0.1&lt;br /&gt;
 - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
&lt;br /&gt;
Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
i2c-client version : 1.9&lt;br /&gt;
Initialize i2c-client-aic14 module&lt;br /&gt;
Module i2c-client-aic14 initialized&lt;br /&gt;
Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Sensor driver: initialize device OV7660&lt;br /&gt;
Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;logread&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Jan  1 00:00:00 imx21 syslog.info syslogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.emerg klogd: klogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Linux version 2.4.20-celf3 (root@wbul04) (gcc version 3.3.2) #1 Wed Feb 28 13:30:26 UTC 2007&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: ARM926EJ-Sid(wb) [41069264] revision 4 (ARMv?(8))&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D undefined 14 cache&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Machine: Freescale i.MX2 ADS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: FCLK=266000 kHz   HCLK=133000 kHz  IPGCLK=66500 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PERCLKs: 1=44333 KHz  2=33250 kHz  3=44333 kHz  4=88666 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: On node 0 totalpages: 16384&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(0): 16384 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(1): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(2): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Kernel command line: root=/dev/mtdblock2 noinitrd ip=none mtdparts=s29gl512n:256k@0x00000000&lt;br /&gt;
(bootloader)ro,896k@0x00040000(kernel)ro,50432k@0x00120000(fs#1),12800k@0x03260000(fs#2),1152k@0x03EE0000(fs#3)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.debug klogd: Relocating machine vectors to 0xffff0000&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Console: colour dummy device 80x30&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Calibrating delay loop (skipped)... 132.71 BogoMIPS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Memory: 64MB = 64MB total&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Memory: 63052KB available (1366K code, 299K data, 68K init)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Inode cache hash table entries: 4096 (order: 3, 32768 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Page-cache hash table entries: 16384 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: POSIX conformance testing by UNIFIX&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Linux NET4.0 for Linux 2.4&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Based upon Swansea University Computer Society NET3.039&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Initializing RT netlink socket&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: apm: Simulating APM BIOS version 1.2 (Driver version 1.0)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: i.MX21 Dynamic Power Management&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Starting kswapd&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Disabling the Out Of Memory Killer&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc., designed by Axis Communications AB.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: i2c-core.o: i2c core module version 2.6.2 (20011118)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pty: 256 Unix98 ptys configured&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Serial driver version 5.05c (2001-07-08) with no serial options enabled&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: UART driver version 0.3.6&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: I2C driver Feb 28 2007 / 13:31:04&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Initialize i2c-client-dbmx-codec module&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: s29gl512n: probing 16-bit flash bus&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd:  Amd/Fujitsu Extended Query Table v1.3 at 0x0040&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: number of CFI chips: 1&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Using Write Buffer method.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: buffer_Write_Time = 128&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Disabling fast programming due to code brokenness.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Using static partition definition&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Creating 5 MTD partitions on &amp;quot;s29gl512n&amp;quot;:&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00000000-0x00040000 : &amp;quot;bootloader&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00040000-0x00120000 : &amp;quot;kernel&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00120000-0x03260000 : &amp;quot;fs #1&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03260000-0x03ee0000 : &amp;quot;fs #2&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03ee0000-0x04000000 : &amp;quot;fs #3&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Linux TCP/IP 1.0 for NET4.0&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP Protocols: ICMP, UDP, TCP&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP: routing cache hash table of 512 buckets, 4Kbytes&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: TCP: Hash tables configured (established 4096 bind 8192)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Freeing init memory: 68K&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PCB version: ind3 v2&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: ****p_gpio_init_low_bat****&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: GPIO: p_gpio_it_init at 762&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Reset from Software Reset.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pp: hw ver = 2&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: prp_dbg=0&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: module inserted&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: module inserted. Major = 249&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :PID of driver: 134 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanList not provided. Will use the default scan list. &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvRegEtherDev :Interface Name is: eth%d &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :HEOCSIWPOWON: Powering on... &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Divider : 8&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd:  OCR2 : e4015308 (12582912)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!! &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: CHARGE_IN at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: LOW_BAT_OUT at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: camera to front at init&lt;br /&gt;
Jan  1 00:00:04 imx21 daemon.warn klogd: **ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() .. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Success&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init : registering callbacks with HHAL.. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.warn klogd: requested reg.domain code setting = 3&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step5&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Motorola CSI Linux driver ver 0.1&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd:  - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: i2c-client version : 1.9&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Initialize i2c-client-aic14 module&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Module i2c-client-aic14 initialized&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.alert klogd: Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:13 imx21 daemon.info klogd: Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:14 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_NETSYNC_HMON_NAME... &lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_HMON_NETSYNC_NAME... &lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-slot-0&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-service-0-0&lt;br /&gt;
Jan  1 00:00:20 imx21 local0.debug dhcpcd[337]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.err netsyncd[314]: father received(10) eth0 up! &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.info netsyncd[314]: Dhcp_start 337 return : 0  &lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:28 imx21 daemon.info netsyncd[314]: Dhcp_stop 359 return : 0  &lt;br /&gt;
Jan  1 00:00:28 imx21 local0.debug dhcpcd[347]: sending DHCP_RELEASE for 10.63.17.5 to 10.63.17.1 &lt;br /&gt;
Jan  1 00:00:29 imx21 local0.err dhcpcd[347]: terminating on signal 1 &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err netsyncd[314]: father received(12) eth0 down! &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err klogd: SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:42 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:54 imx21 local0.debug dhcpcd[386]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: Dhcp_start 386 return : 0  &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: NTP server request on : ntp.xs4all.nl &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Sensor driver: initialize device OV7660&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
Apr  7 09:58:16 imx21 daemon.info netsyncd[314]: NTP process return code : 0  &lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info upgraded[312]: K_SW0_DWNLD_ACK &lt;br /&gt;
Apr  7 09:58:27 imx21 auth.info login[393]: root login  on `ttyp0&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Apr  7 10:14:53 imx21 auth.info login[408]: root login  on `ttyp1&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 10:17:18 imx21 syslog.info -- MARK --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/proc/cpuinfo&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /proc/cpuinfo &lt;br /&gt;
Processor       : ARM926EJ-Sid(wb) rev 4 (v5EJl)&lt;br /&gt;
BogoMIPS        : 133.01&lt;br /&gt;
Features        : swp half thumb fastmult &lt;br /&gt;
CPU implementer : 0x41&lt;br /&gt;
CPU architecture: ?(8)&lt;br /&gt;
CPU variant     : 0x0&lt;br /&gt;
CPU part        : 0x926&lt;br /&gt;
CPU revision    : 4&lt;br /&gt;
Cache type      : undefined 14&lt;br /&gt;
Cache clean     : undefined 14&lt;br /&gt;
Cache lockdown  : undefined 14&lt;br /&gt;
Cache unified   : Harvard&lt;br /&gt;
I size          : 16384&lt;br /&gt;
I assoc         : 4&lt;br /&gt;
I line length   : 32&lt;br /&gt;
I sets          : 128&lt;br /&gt;
D size          : 16384&lt;br /&gt;
D assoc         : 4&lt;br /&gt;
D line length   : 32&lt;br /&gt;
D sets          : 128&lt;br /&gt;
&lt;br /&gt;
Hardware        : Freescale i.MX2 ADS&lt;br /&gt;
Revision        : 0000&lt;br /&gt;
Serial          : 0000000000000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aktivierung WPA2 Unterstützung ==&lt;br /&gt;
&amp;lt;p&amp;gt;Standardmäßig kann das Telefon nur WPA, dabei unterstützt es allerdings auch &amp;lt;b&amp;gt;WPA mit AES&amp;lt;/b&amp;gt; Verschlüsselung.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Es gibt zwei verschiedene Tricks mit denen auch WPA2 aktiviert werden kann.&lt;br /&gt;
Allerdings wurde von einigen ein Einbruch der Verbindungsgeschwindigkeit festgestellt (scheint jedoch nur bei geringem Akkuladestand aufzutreten).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trick1 ===&lt;br /&gt;
Mittels&lt;br /&gt;
 vi /etc/marvell/wpa_supplicant.conf&lt;br /&gt;
den Texteditor starten.&lt;br /&gt;
Mit PageDown (Bild runter) bis zum Ende des Files gehen.&lt;br /&gt;
Die Zeilen &lt;br /&gt;
 proto=WPA&lt;br /&gt;
 pairwise=TKIP&lt;br /&gt;
 group=TKIP&lt;br /&gt;
auskommentieren, indem ein # vorangestellt wird:&lt;br /&gt;
* cursor auf Beginn einer Zeile &lt;br /&gt;
* i drücken zum Einfügen&lt;br /&gt;
* # eintippen&lt;br /&gt;
* [Esc]&lt;br /&gt;
Sind alle Zeilen auskommentiert, dann mittels&lt;br /&gt;
 :wq[enter]&lt;br /&gt;
abspeichern und Editor verlassen.&lt;br /&gt;
&lt;br /&gt;
Danach neu booten.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man sich mit dieser Änderung in einem reinen WPA2 Netz anmelden (registrieren), kann man als Verschlüsselung nur noch WEP auswählen - der Verbindungsversuch scheitert natürlich! (Hardware: Fritz!Box 7270, PHILIPS VP5500)&lt;br /&gt;
&lt;br /&gt;
Also am Accesspoint WPA2 + WPA einstellen, Telefon registrieren, dann Accesspoint auf WPA2 konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Wichtige Info von airmack via IRC:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um sich eine Wiederbelebung per serieller Konsole zu ersparen, ist es günstig, immer nur Einträge an die wpa_supplicant.conf &amp;lt;u&amp;gt;hinten anzuhängen&amp;lt;/u&amp;gt;, niemals aber vorne einzufügen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt noch eine Variante wieder auf das Telefon zu kommen, wenn man sich den Weg per wireless abgeschnitten hat: der Demo-Modus: Dieser Modus war dazu gedacht die Funktionalitaet ohne SIP-Server auszuprobieren. 2 Geraete starten dazu im WLAN-AdHoc-Modus mit unterschiedlichen IP&#039;s (192.168.10.1 + 192.168.10.2 , jeweils /24 = 255.255.255.0) und machen ein IBSS-Netzwerk mit WEP-Verschluesselung auf (Key: VP6500 = 5648751265 beim VP5500 = 7295569793). Ergo kann man das Telefon in den Demo-Modus zwingen, gibt sich eine passende WLAN und IP-Einstellungen und schon ist man wieder drauf und kann fehleinstellungen wieder beheben). Dummerweise wird eine zufaellige IBSS-Cell-ID verwendet. Neuere Betriebssysteme koennen der Zelle trotzdem beitreten. Als ESSID kann man &#039;&#039;demo_mode_obiwan&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Trick2 ===&lt;br /&gt;
Dieser Trick funktioniert mit Accesspoints, bei denen man auch WPA Verbindungen mit AES verschlüsseln kann. Vorteil dieses Tricks ist, dass man die wpa_supplicant.conf nicht manuell editieren muss. Allerdings unterstützt nicht jeder Accesspoint WPA mit AES (aber dd-wrt kann das).&lt;br /&gt;
&lt;br /&gt;
Man konfiguriert den Accesspoint zunächst mit WPA PSK und wählt AES als Verschlüsselungsalgorithmus. Jetzt meldet man das Telefon an, das Telefon erkennt richtig, dass eine WPA Verbindung vorliegt und verbindet sich per WPA und AES mit dem Accesspoint. Anschliessend konfiguriert man den Accesspoint von WPA PSK AES nach WPA2 PSK AES. Jetzt schaltet man das VP5500/6500 aus und wieder ein. Nachdem es fertig gebootet hat, verbindet es sich automisch per WPA2 PSK und mit AES Verschlüsselung. Fertig.&lt;br /&gt;
&lt;br /&gt;
== Menüs ==&lt;br /&gt;
=== Hauptmenu ===&lt;br /&gt;
&lt;br /&gt;
Das File &lt;br /&gt;
 /usr/local/etc/defaultbuttons.conf&lt;br /&gt;
enthält unter anderm die definition des Hauptmenus.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist der Abschnitt Menu besonders interessant.&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/camera.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications&lt;br /&gt;
  4 = Settings&lt;br /&gt;
  5 = Applications/addressbook.desktop&lt;br /&gt;
  6 = Settings/RingProfiles.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 2&lt;br /&gt;
&lt;br /&gt;
&#039;Rows&#039; und &#039;Columns&#039; geben an, wieviel Reihen und Spalten das Hauptmenu hat.&lt;br /&gt;
Über die Zuweisungen 1 bis (Columns * Rows) kann man dann den Menüpositionen die Menüpunkte zuweisen.&lt;br /&gt;
Die Menupunkte sind definiert in den Verzeichnissen unter &lt;br /&gt;
 /usr/local/apps&lt;br /&gt;
gibt man nur ein Verzeichnis an, dann erscheint ein Submenü, dessen Icon und Name in der .directory -Datei des entsprechenden Ordner definiert ist.&lt;br /&gt;
direkte Menupunkte haben Dateinamen mit der Endung .desktop&lt;br /&gt;
&#039;Default&#039; bestimmten vorselektierten Eintrag.&lt;br /&gt;
&lt;br /&gt;
Hier ein weiteres Beispiel für ein angepasstes Menu:&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/addressbook.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications/sysinfo.desktop&lt;br /&gt;
  4 = Applications&lt;br /&gt;
  5 = Settings&lt;br /&gt;
  6 = Games&lt;br /&gt;
  7 = Applications/camera.desktop&lt;br /&gt;
  8 = Applications/photoedit.desktop&lt;br /&gt;
  9 = Applications/manualsub.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 3&lt;br /&gt;
&lt;br /&gt;
Der Ordner Games ist (momentan ;) leer.&lt;br /&gt;
&lt;br /&gt;
=== Genereller Aufbau Menü-Einträge===&lt;br /&gt;
Die Einträge für die Menüs sind im Filesystem abgelegt:&lt;br /&gt;
&lt;br /&gt;
* Settings: /usr/local/apps/Settings&lt;br /&gt;
* Applications: /usr/local/apps/Applications&lt;br /&gt;
* Klingeltöne: /usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Die Dateien haben die Endung &amp;quot;.desktop&amp;quot; und sind normale Textdateien, die die relevanten Infos enthalten.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel aus dem Settingsordner:&lt;br /&gt;
  [Translation]&lt;br /&gt;
  File=QtopiaSettings&lt;br /&gt;
  Context=Sound&lt;br /&gt;
  [Desktop Entry]&lt;br /&gt;
  Type=Application&lt;br /&gt;
  Exec=sound&lt;br /&gt;
  Icon=Sound&lt;br /&gt;
  Name[]=Sound&lt;br /&gt;
  CanFastload=0&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Translation&#039; gibt an in welchem File, die Lokalisationsdaten stehen.&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Desktop Entry&#039;:&lt;br /&gt;
* Type: Typ des Eintrages &lt;br /&gt;
** Application für Anwendungen&lt;br /&gt;
** audio/x-wav für Klingeltöne&lt;br /&gt;
* Exec: Anwendung, die ausgeführt werden soll&lt;br /&gt;
* Icon: Icon, das im Menü benutzt wird. &lt;br /&gt;
** Pfad ist meist: /usr/local/pics/[Exex]/[Icon].png&lt;br /&gt;
** manchmal aber auch: /usr/local/pics/icons/[14x14|16x16|22x22]/[Icon].png&lt;br /&gt;
* Name[]: Name im Menü, wird über das in Translation angegebe File und Context aufgelöst. Dies wird verhindert, wenn die Klammern wegelassen werden, was das Einfügen eigener Einträge ermöglicht&lt;br /&gt;
&lt;br /&gt;
Hier ein Textfile mit allen desktop-Files als Referenz: [[File:alleDesktopFiles.txt]]&lt;br /&gt;
&lt;br /&gt;
=== Versteckte Menüeinträge ===&lt;br /&gt;
in den oben genannten Ordnern existieren ein paar Dateien mit der Endung &#039;.desktopMASK&#039;.&lt;br /&gt;
Benennt man diese um, werden die Einträge nach einem Neustart im Menü freigeschalten.&lt;br /&gt;
&lt;br /&gt;
folgendes an der Kommandozeile eingeben:&lt;br /&gt;
 cd /usr/local/apps/Settings&lt;br /&gt;
 mv datetime.desktopMASK datetime.desktop&lt;br /&gt;
 mv callforward.desktopMASK callforward.desktop&lt;br /&gt;
 mv calloptions.desktopMASK calloptions.desktop&lt;br /&gt;
 mv resetparam.desktopMASK resetparam.desktop&lt;br /&gt;
 mv subkpncode.desktopMASK subkpncode.desktop&lt;br /&gt;
&lt;br /&gt;
Dies aktiviert folgende Optionen:&lt;br /&gt;
* Datums/Zeit-Einstellung&lt;br /&gt;
* Anrufweiterleitung&lt;br /&gt;
* Anrufoptionen&lt;br /&gt;
* Parameter zurücksetzen&lt;br /&gt;
* Number Switch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nützlichsten sind wohl die ersten Einträge.&lt;br /&gt;
Bei dem &amp;quot;Number Switch&amp;quot; ist unklar, was er bewirken soll. Beim Start wird ein Code abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterhin kann im Verzeichnis /usr/local/apps/Applications eine [[File:demomode.desktop]] anlegen.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist folgende Prozedur nötig:&lt;br /&gt;
* im Terminal&lt;br /&gt;
                 cd /usr/local/apps/Applications&lt;br /&gt;
                 vi demomode.desktop&lt;br /&gt;
&lt;br /&gt;
* i drücken &lt;br /&gt;
* folgendes Textfragment einfügen &lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaApplications&lt;br /&gt;
                 Context=DemoMode&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Exec=demomode&lt;br /&gt;
                 Icon=Camera&lt;br /&gt;
                 Type=Application&lt;br /&gt;
                 Name[]=DemoMode&lt;br /&gt;
* [Esc] &lt;br /&gt;
* :wq [Enter] &lt;br /&gt;
&lt;br /&gt;
Dies schaltet einen Demo-Modus frei.&lt;br /&gt;
&lt;br /&gt;
=== Französisch ===&lt;br /&gt;
Es gab die Geräte wohl auch in Frankreich von der France Telekom.&lt;br /&gt;
Zumindest sind entsprechende monitor und upgrade Referenz-Dateien&lt;br /&gt;
vorhanden in denen das steht. Daher wohl auch die Französischen&lt;br /&gt;
Sprachdateien, die zwar auf dem Gerät sind, allerdings in einem&lt;br /&gt;
Unterverzeichnis, so das sie nicht auswählbar sind.&lt;br /&gt;
&lt;br /&gt;
Um diese Dateien zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/local/i18n&lt;br /&gt;
 mv NOTUSED/fr .&lt;br /&gt;
&lt;br /&gt;
Nun ist auch noch französisch als Sprache verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Grafische Anpassungen ==&lt;br /&gt;
So gut wie alle Grafiken liegen im Verzeichnis /usr/local/pics und können beliebig ausgetauscht werden (gleicher Dateityp, gleiche Größe).&lt;br /&gt;
&lt;br /&gt;
Einige besonders interessante werden hier aufgeführt:&lt;br /&gt;
&lt;br /&gt;
=== Eigene Startup/Shutdown-Animation ===&lt;br /&gt;
&lt;br /&gt;
Die Animation beim Starten oder Herunterfahren sind normale (animierte) GIFs. Diese findet man in&lt;br /&gt;
&lt;br /&gt;
 /usr/local/pics/qpe&lt;br /&gt;
&lt;br /&gt;
Die Links &amp;quot;splash.gif&amp;quot; und &amp;quot;goodbye.gif&amp;quot; zeigen auf die tasächlich zu verwendenen Dateien (&amp;quot;splash-chuck.gif&amp;quot;, &amp;quot;goodby-chuck.gif&amp;quot;).&lt;br /&gt;
Man kann sein eigenes animiertes GIF im Format 176x220 Pixel raufladen und die&lt;br /&gt;
splash.gif entsprechend neu verlinken. Dazu löscht man zuerst die alte&lt;br /&gt;
mit:&lt;br /&gt;
&lt;br /&gt;
 rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Anschliessend erzeugt man den Link neu, dabei zeigt er dann auf die&lt;br /&gt;
eigene Datei:&lt;br /&gt;
&lt;br /&gt;
 ln -s /pfad/zur/eigenedatei.gif /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Danach wird dann bei jedem Neustart die eigene Animation angezeigt.&lt;br /&gt;
Analog hierzu mit der goodbye.gif.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, man packe das Bild auf einen Webserver. Dann am Gerät über telnet&lt;br /&gt;
anmelden und:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd /usr/local/pics/qpe/&lt;br /&gt;
wget http://dein.server/woauchimmer/Matrix5.gif&lt;br /&gt;
rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
ln -s Matrix5.gif splash.gif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die GIF Animation kann bis zu 176x220 Pixel groß sein.&lt;br /&gt;
Kleinere (möglicherweise auch größere) Bilder werden zentriert.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:walking_baby_tux.gif&lt;br /&gt;
Bild:custwakeup2.gif&lt;br /&gt;
Bild:custgoodbye2.gif&lt;br /&gt;
Bild:94vw4.gif&lt;br /&gt;
Bild:1_Matrix--16984.gif&lt;br /&gt;
Bild:1_Matrix--16985.gif&lt;br /&gt;
Bild:3.gif&lt;br /&gt;
Bild:ClanSpider2.gif&lt;br /&gt;
Bild:TS12.gif&lt;br /&gt;
Bild:Matrix5.gif&lt;br /&gt;
Bild:qtopia3.gif&lt;br /&gt;
Bild:qtopia0.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigener Boot/Update-Screen ===&lt;br /&gt;
&lt;br /&gt;
Der Boot-Screen, oder der Update-Screen liegen als Rohdaten vor.&lt;br /&gt;
 /user_data/data/welcome.rgb565&lt;br /&gt;
 /usr/local/startup_V4.20/update.bin&lt;br /&gt;
&lt;br /&gt;
Weitere Beispielbilder:&lt;br /&gt;
 /user_data/prod/data/lcd_test_card1.bin&lt;br /&gt;
 /user_data/prod/data/lcd_test_card2.bin&lt;br /&gt;
&lt;br /&gt;
Diese werden direkt in den Framebuffer geschrieben.&lt;br /&gt;
Daher müssen sich diese genau ein bestimmtes Format halten: &lt;br /&gt;
* Größe 240 x 220 (Das Display ist 176 x 220, der Rest ist also nicht zu sehen)&lt;br /&gt;
* 16bit pro Pixel RGB565&lt;br /&gt;
&lt;br /&gt;
Um solch ein Bild zu erstellen sind folgende Schritte notwendig:&lt;br /&gt;
# Ein Bild in Gimp mit 176x220 erstellen&lt;br /&gt;
# das Bild vertikal spiegeln&lt;br /&gt;
# Bild-&amp;gt;Leinwandgröße auf 240x220 erweitern (Bilddaten ganz nach links)&lt;br /&gt;
# Datei-&amp;gt;Kopie speichern...&lt;br /&gt;
# Als Windowsbitmap -&amp;gt; erweiterete Optionen -&amp;gt; 16bit R5G6B5&lt;br /&gt;
# BMP-Header entfernen (dies kann auch auf dem Telefon gemacht werden)&lt;br /&gt;
         tail -c 105600 input.bmp &amp;gt; output.raw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Von der Kommandozeile kann auch manuell das Bild in den Framebuffer geschrieben werden.&lt;br /&gt;
 cat /user_data/prod/data/lcd_test_card1.bin &amp;gt; /dev/fb0&lt;br /&gt;
&lt;br /&gt;
== Wichtige Verzeichnisse ==&lt;br /&gt;
&lt;br /&gt;
=== Adressdaten ===&lt;br /&gt;
&lt;br /&gt;
# cat /user_data/home/Applications/addressbook/addressbook.xml &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE Addressbook &amp;gt;&amp;lt;AddressBook&amp;gt;&lt;br /&gt;
  &amp;lt;Groups&amp;gt;&lt;br /&gt;
  &amp;lt;/Groups&amp;gt;&lt;br /&gt;
  &amp;lt;Contacts&amp;gt;&lt;br /&gt;
    &amp;lt;Contact&lt;br /&gt;
                                Uid=&amp;quot;-1269720893&amp;quot; &lt;br /&gt;
                         Categories=&amp;quot;-1269431263;-1266109093;-1266109094&amp;quot; &lt;br /&gt;
                          FirstName=&amp;quot;ich&amp;quot; &lt;br /&gt;
                             FileAs=&amp;quot;ich&amp;quot; &lt;br /&gt;
                           JobTitle=&amp;quot;cc&amp;quot; &lt;br /&gt;
                         Department=&amp;quot;dep&amp;quot;&lt;br /&gt;
                            Company=&amp;quot;aa&amp;quot; &lt;br /&gt;
                      BusinessPhone=&amp;quot;55&amp;quot; &lt;br /&gt;
                        BusinessFax=&amp;quot;77&amp;quot; &lt;br /&gt;
                     BusinessMobile=&amp;quot;66&amp;quot; &lt;br /&gt;
                          HomePhone=&amp;quot;55&amp;quot;&lt;br /&gt;
                         HomeMobile=&amp;quot;11&amp;quot; &lt;br /&gt;
                             HomePc=&amp;quot;12&amp;quot;&lt;br /&gt;
                           HomeData=&amp;quot;13&amp;quot;&lt;br /&gt;
                            HomeFax=&amp;quot;14&amp;quot;&lt;br /&gt;
                     BusinessStreet=&amp;quot;street&amp;quot;&lt;br /&gt;
                       BusinessCity=&amp;quot;city&amp;quot;&lt;br /&gt;
                      BusinessState=&amp;quot;state&amp;quot;&lt;br /&gt;
                        BusinessZip=&amp;quot;zip&amp;quot;&lt;br /&gt;
                    BusinessCountry=&amp;quot;country&amp;quot;&lt;br /&gt;
                      BusinessPager=&amp;quot;88&amp;quot;&lt;br /&gt;
                             Office=&amp;quot;office&amp;quot;&lt;br /&gt;
                         Profession=&amp;quot;prof&amp;quot;&lt;br /&gt;
                          Assistant=&amp;quot;ass&amp;quot;&lt;br /&gt;
                            Manager=&amp;quot;man&amp;quot;&lt;br /&gt;
                         HomeStreet=&amp;quot;ptjml&amp;quot;&lt;br /&gt;
                           HomeCity=&amp;quot;cit&amp;quot;&lt;br /&gt;
                          HomeState=&amp;quot;stat&amp;quot;&lt;br /&gt;
                            HomeZip=&amp;quot;zi&amp;quot;&lt;br /&gt;
                        HomeCountry=&amp;quot;coun&amp;quot;&lt;br /&gt;
                             Spouse=&amp;quot;spouse&amp;quot;&lt;br /&gt;
                             Gender=&amp;quot;1&amp;quot;&lt;br /&gt;
                           Birthday=&amp;quot;20100322&amp;quot;&lt;br /&gt;
                        Anniversary=&amp;quot;20100429&amp;quot;&lt;br /&gt;
                           Children=&amp;quot;child&amp;quot;&lt;br /&gt;
                              Notes=&amp;quot;gakm&amp;quot;&lt;br /&gt;
               CompanyPronunciation=&amp;quot;bb&amp;quot;&lt;br /&gt;
                   BUSINESS_CONTACT=&amp;quot;&amp;quot;&lt;br /&gt;
                          photofile=&amp;quot;ci-1269721575-0.jpg&amp;quot;&lt;br /&gt;
                   qdl-private-data=&amp;quot;&amp;quot;&lt;br /&gt;
                               tone=&amp;quot;/usr/local/etc/SystemRingTones/16-Tetris.desktop&amp;quot;&lt;br /&gt;
         /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554029&amp;quot; &lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone1&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone1&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**621&amp;quot;  &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/15-Techno2.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554032&amp;quot; &lt;br /&gt;
             Categories=&amp;quot;-1269431263&amp;quot;&lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone3&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone3&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**623&amp;quot;  &lt;br /&gt;
             BUSINESS_CONTACT=&amp;quot;&amp;quot; &lt;br /&gt;
             qdl-private-data=&amp;quot;&amp;quot; &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/08-Celtrelax.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
  &amp;lt;/Contacts&amp;gt;&lt;br /&gt;
  &amp;lt;/AddressBook&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UID ist wohl egal, solange sie nicht zweimal vorkommen.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf 500 Adressbucheinträge kann man auch aufheben&lt;br /&gt;
&amp;quot;maxEntries = 500&amp;quot; in der &amp;quot;Contacts.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die Kategorien stehen in /user_settings/Categories.xml:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE CategoryList&amp;gt;&lt;br /&gt;
  &amp;lt;Categories&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431263&amp;quot; name=&amp;quot;_Personal&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431262&amp;quot; name=&amp;quot;_Business&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/Categories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einem Kontakt eine bestimmte Kategorie zuordnet, dann wird die ID dieser Kategorie im Attribut &amp;quot;Categories&amp;quot; des Kontakts eingetragen (s.o.). Wenn die Kategorie BUSINESS gewählt wird, steht im Attribut &amp;quot;BUSINESS_CONTACT&amp;quot; eine &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Einrücken der Attribute mit TABs in den Dateien ist übrigens nicht erlaubt!&lt;br /&gt;
&lt;br /&gt;
Die Software des Telefons wertet die XML Datei bei jedem Zugriff neu aus. Es ist also möglich, die Datei im laufendem Betrieb zu ändern (z.B. per Script).&lt;br /&gt;
&lt;br /&gt;
=== Fotos &amp;amp; Videoschnappschüsse ===&lt;br /&gt;
&lt;br /&gt;
Alle Bilder die mit der Kamera aufgenommen werden, sowie Schnappschüsse die während eines Videocalls aufgenommen wurden, befinden sich in folgendem Verzeichnis:&lt;br /&gt;
       /user_data/home/Documents&lt;br /&gt;
&lt;br /&gt;
Die Bilder sind dabei nach folgendem Namensschema benannt:&lt;br /&gt;
&lt;br /&gt;
       DD-MM-YYYY-hh:mm:ss.jpg&lt;br /&gt;
&lt;br /&gt;
Tag (DD) und Monat (MM) können auch einstellig sein.&lt;br /&gt;
&lt;br /&gt;
== Klingeltöne ==&lt;br /&gt;
&lt;br /&gt;
Die Klingeltöne liegen, wie oben beschrieben unter:&lt;br /&gt;
&lt;br /&gt;
/usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Es sind .wav Dateien mit (16Khz, 16Bit, Mono), welche sich, z.B. mit MhWaveEdit (Linux/GTK) recht komfortabel erzeugen lassen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den Audio Dateien müssen noch im selben Verzeichnis entsprechende *.desktop dateien angelegt werden, damit alles korrekt ins Menü integriert wird.&lt;br /&gt;
Eine für den fiktiven 16. Klingelton erzeugte Datei &amp;quot;16-Tetris.desktop&amp;quot; könnte den folgenden Inhalt haben:&lt;br /&gt;
&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Categories =&lt;br /&gt;
                 File =16-Tetris.wav&lt;br /&gt;
                 Name[] =16-Tetris&lt;br /&gt;
                 Type = audio/x-wav&lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaRingTones&lt;br /&gt;
                 Context=16-Tetris&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlegen der Dateien sollte sie dann im Menü auftauchen und auswählbar sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timeserver ==&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/170483#1645101&lt;br /&gt;
Unter /usr/local/data steht in der monitor.cfg und monitor_ref_KPN.cfg&lt;br /&gt;
die Adressen der Zeitserver &amp;quot;ntp.xs4all.nl&amp;quot; und &amp;quot;130.142.110.71&amp;quot;. Diese&lt;br /&gt;
könnte man z.B. auf &amp;quot;ptbtime1.ptb.de&amp;quot; und &amp;quot;ptbtime2.ptb.de&amp;quot; ändern.&lt;br /&gt;
&lt;br /&gt;
(http://www.mikrocontroller.net/topic/170483#1649594)&lt;br /&gt;
das telefon benutzt *nicht ntp* sondern das time-protokoll auf port 37 -&lt;br /&gt;
chronos.zedat.fu-berlin.de kann man als server nehmen.&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Software ==&lt;br /&gt;
=== Dropbear (SSH-Server) installieren ===&lt;br /&gt;
&lt;br /&gt;
# Mit telnet auf dem Gerät einloggen&lt;br /&gt;
# folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://vp6500.bd8.nl/bin/dropbear.tgz&lt;br /&gt;
       tar -xzf dropbear.tgz&lt;br /&gt;
       rm dropbear.tgz&lt;br /&gt;
       cd /etc/rc.d/init.d&lt;br /&gt;
       mv dropbear S90dropbear&lt;br /&gt;
       ./S90dropbear start&lt;br /&gt;
Kommando 6 (mv ...) ist notwendig damit dropbear bei jedem Reboot automatisch&lt;br /&gt;
gestartet wird.&lt;br /&gt;
&lt;br /&gt;
hier ein Alternativlink falls Telnet Probleme macht:&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/74656/dropbear.tgz&lt;br /&gt;
&lt;br /&gt;
=== Nano 2.2.3 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /usr/bin&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74023/nano&lt;br /&gt;
* Mit folgendem Befehl den Editor ausführbar machen:&lt;br /&gt;
       chmod +x /usr/bin/nano&lt;br /&gt;
* Nun ist vi Geschichte ;-)&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.0.9 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74380/openvpn.tar.gz&lt;br /&gt;
       tar -xzf openvpn.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.1.1 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74395/openvpn-2.1.1.tar.gz&lt;br /&gt;
       tar -xzf openvpn-2.1.1.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== Tinc 1.0.12 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74396/tinc-1.0.12.tar.gz&lt;br /&gt;
       tar -xzf tinc-1.0.12.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
= SIP Einstellungen =&lt;br /&gt;
&lt;br /&gt;
== Einstellung für 1und1 ==&lt;br /&gt;
&lt;br /&gt;
* SIP1:&lt;br /&gt;
** Display Name: ...&lt;br /&gt;
** Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Telephone Number: 0#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
* Auth:&lt;br /&gt;
** Auth Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Password: *********&lt;br /&gt;
* Server:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* Proxy:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* RTP:&lt;br /&gt;
** 30000 und 30019&lt;br /&gt;
* STUN:&lt;br /&gt;
** stun.1und1.de&lt;br /&gt;
* STUN Server Port:&lt;br /&gt;
** 3478&lt;br /&gt;
* SIP2:&lt;br /&gt;
** UDP: 5060&lt;br /&gt;
** TCP: 5060&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Sipgate ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Sipgate Username&lt;br /&gt;
**User Name: your SIPgate-ID&lt;br /&gt;
**Telephone Number:  Sipgate-Telefonnummer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentification UserName: your SIPgate-ID&lt;br /&gt;
**Password: Sipgate Passwort&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register address:port: sipgate.de:5060&lt;br /&gt;
*Proxy&lt;br /&gt;
**SIP proxy1 address:port: sipgate.de:5060&lt;br /&gt;
*SIP2&lt;br /&gt;
**SIP Port Listen&lt;br /&gt;
**for UDP: 5062&lt;br /&gt;
**for TCP: 5062&lt;br /&gt;
**for TCP TLS: 5053&lt;br /&gt;
*STUN: [X] use rport&lt;br /&gt;
&lt;br /&gt;
SIP Outbound muss leer sein.&lt;br /&gt;
&lt;br /&gt;
Ein Videotelefonat von Sipgate zu Sipgate zwischen zwei VP6500 wurde erfolgreich getestet. Gegebenenfalls muss die eigene Videoübertragung noch durch Drücken der Taste &#039;&#039;&#039;Video&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Ekiga.net ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Irgendwas&lt;br /&gt;
**User Name: username&lt;br /&gt;
**Telephone Number: leer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentication User Name: username&lt;br /&gt;
**Password: password&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register: ekiga.net:5060&lt;br /&gt;
**Protocol: ( ) TCP (*) UDP&lt;br /&gt;
**Expire Timer: 3600&lt;br /&gt;
**Keep Alive: 0&lt;br /&gt;
*Proxy&lt;br /&gt;
**alle leer&lt;br /&gt;
*STUN&lt;br /&gt;
**( ) use rport&lt;br /&gt;
**STUN Server IP address: stun.ekiga.net&lt;br /&gt;
**STUN Server port: 3478&lt;br /&gt;
*SIP2&lt;br /&gt;
**(*) Symmetric Mode&lt;br /&gt;
**UDP: 5060&lt;br /&gt;
**TCP: 5060&lt;br /&gt;
**TCP TLS: 5061&lt;br /&gt;
*OBproxy&lt;br /&gt;
**alle leer&lt;br /&gt;
&lt;br /&gt;
Nach der (kostenlosen) Registrierung bei ekiga.net und der Anmeldung des Telefons kann man unter der 500 einen Audio und Video(!) Test machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere features: https://www.ekiga.net/index.php?page=services&amp;lt;br&amp;gt;&lt;br /&gt;
Ekiga teilt keine Festnetz Rufnummern zu, daher ist ein Anruf von/zu Festnetz Telefonen nicht möglich.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Bei Ekiga.net angemeldete Geräte können aber problemlos untereinander telefonieren, sogar mit Video. Da man vom Mainscreen des VP5500/6500 aus direkt nur numerische Kontakte (herkömmliche Telefonnumern) wählen kann, Ekiga.net Telefonnummern aber aus [Benutzername]@ekiga.net bestehen, legt man über das Menü des VP5500/6500 einfach &amp;lt;b&amp;gt;einen neuen Kontakt&amp;lt;/b&amp;gt; (Telefonbuch) an. Als Video-Rufnummer trägt man einfach [Benutzername]@ekiga.net ein, wobei [Benutzername] der Name des Ekiga-Accounts ist, den man erreichen will. Zwischen der Eingabe von Buchstaben, Zahlen und Sonderzeichen kann man dabei mit der &amp;lt;b&amp;gt;[#]&amp;lt;/b&amp;gt;-Taste des VP5500/6500 umschalten.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sollte bei einem Telefonat über Ekiga Video einmal nicht funktionieren, hilft eventuell die manuelle Aktivierung der Videofunktion mittels der &amp;lt;b&amp;gt;Video-Taste&amp;lt;/b&amp;gt; auf der Tastatur des VP6500&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Fritzbox 7170/7270 und andere mit SIP-Registrar ==&lt;br /&gt;
Die Anmeldung eines Telefons auf der Fritzbox starten (System/Ansicht/&amp;quot;Expertenansicht aktivieren&amp;quot;, dann Telefonie/Telefoniegeräte/&amp;quot;Neues Gerät einrichten&amp;quot;, &amp;quot;Telefon&amp;quot;, &amp;quot;Bitte auswählen&amp;quot;/&amp;quot;LAN/WLAN (IP-Telefon)&amp;quot;) und sich eine Nummer geben lassen,&amp;lt;br&amp;gt; dann in Registration auf dem VPx500 wechseln und die Einstellungen wie unten vornehmen.&amp;lt;br&amp;gt; Anschließend will das Telefon diese Einstellungen aktivieren, vorher noch auf der FB die Anmeldung starten.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Im Beispiel will die FB die Nummer 621 vergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP1&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Display Name: &amp;lt;leer lassen&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
User Name: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Telephone Number: 621&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Auth&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Authentication UserName: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Password: [hier das gleiche, wie auf der FB eingeben]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Server&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
SIP register address:port&amp;lt;br&amp;gt;&lt;br /&gt;
192.168.2.1:5060 (IP Bitte auf Euer Netz anpassen) oder alternativ: fritz.box:5060&amp;lt;br&amp;gt;&lt;br /&gt;
Protocol: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
ExpireTime: 3600&amp;lt;br&amp;gt;&lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP2&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[ ] Symmetric Mode&amp;lt;br&amp;gt;&lt;br /&gt;
SIP Port Listen&amp;lt;br&amp;gt;&lt;br /&gt;
for UDP: 5060&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen dazu:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Protokoll: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
Bei TCP hat das VP6500 nach Minuten oder Stunden immer wieder die Verbindung zur FB verloren.&amp;lt;br&amp;gt; &lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
Die Keep Alive Time habe ich eingestellt, weil ich die TCP Probleme umgehen &amp;lt;br&amp;gt;wollte. Ich denke nicht, dass es zu Problemen bzgl. Akku kommt. Da es so &amp;lt;br&amp;gt;aber perfekt funktioniert, habe ich es gelassen. Das UDP Protokoll kommt zudem mit weniger Netzwerk-Traffic aus.&amp;lt;br&amp;gt;&lt;br /&gt;
Anmeldung:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anmeldung wurde von der Fritz!Box nicht immer erfolgreich bestätigt. Einfach Weiter klicken und die restlichen Einstellungen vornehmen.&amp;lt;br&amp;gt; Spätestens nach einem Reboot des VPx500 funktioniert alles einwandfrei.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls eure Fritz!Box keine Möglichkeit bietet, ein IP-Telefon anzumelden, empfehle ich euch mal in das http://wiki.ip-phone-forum.de/skript:speedport2fritz einzulesen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bzw. mal im IP-Phone-Forum nach SIP-Registrar suchen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SIP Listen Port 5060 hat mich viel Zeit gekostet - stand noch von sipgate direkt auf 5062 und das VP5500 hat sich dann zwar an der fritzbox registriert aber keine eingehenden Anrufe empfangen...&lt;br /&gt;
&lt;br /&gt;
= Buildumgebung erstellen =&lt;br /&gt;
&lt;br /&gt;
Bislang ist die Erstellung von GUI-Applikationen (QTopia) noch nicht auf einfache Weise möglich. Das größte Problem ist, dass der Quellcode der Video-Telefon-Anwendung zum größten Teil zur Verfügung steht. Das Erstellen von Kommandozeilen-Anwendungen geht aber schon problemlos.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
Die verwendete ARM-Entwicklungsumgebung basiert auf gcc. Mittels cygwin kann diese zwar auch als Win32-Anwendungen gebaut werden, dies ist aber in hohem Maß unüblich.&lt;br /&gt;
&lt;br /&gt;
Am besten eine aktuelle Version von Debian oder Ubuntu in &amp;quot;vmware player&amp;quot; oder &amp;quot;virtual box&amp;quot; installieren. Wenn man die virtuelle Maschine nur zum Compilieren verwendet, reicht eine kompakte Kommandozeilen-Version (z.B. Ubuntu Server 9.10). Fertige virtuelle Machinen, im vmware-Marketing-Sprech gerne auch &amp;quot;virtual appliances&amp;quot; genannt, sind reichlich verfügbar (z.B. http://www.vmware.com/appliances/directory/70918).&lt;br /&gt;
&lt;br /&gt;
=== Freetz-Linux ===&lt;br /&gt;
Für Fritzbox-Besitzer besonders geeignet ist das Freetz-linux, welches man im IP-Phone-Forum finden kann (-&amp;gt; http://www.ip-phone-forum.de/showpost.php?p=1400234&amp;amp;postcount=1).&lt;br /&gt;
Dieses kann zum Erstellen von Freetz-Images einerseits und andererseits als Buildumgebung benutzt werden. So spart man sich eine zweite VM.&lt;br /&gt;
&lt;br /&gt;
Die VM selbst braucht nur gestartet werden, den Rest macht man am Besten von seiner gewohnten Umgebung aus.&lt;br /&gt;
Mittels Samba kann einfach per Windowsnetzwerk auf das Home-Verzeichnis zugriffen werden und per SSH kann einfach eine Shell (UTF als Codierung einstellen, dann stimmen auch die Sonderrzeichen) geöffnet werden.&lt;br /&gt;
Es muss sichergestellt werden sein, dass die VM zugriff auf das lokale Netzwerk, sowie das Internet hat (am besten mit einem &#039;ping google.com&#039; überprüfen). Bei mir ging es eigenartiger weise erst, als ich die virtuelle Netzwerkkarte in den VM-Settings auf NAT gestellt habe.&lt;br /&gt;
&lt;br /&gt;
Benutzername und alle Kennwörter sind &#039;freetz&#039;&lt;br /&gt;
&lt;br /&gt;
==== Installation und Test der VP5500 Toolchain ====&lt;br /&gt;
Installation der Buildumgebung:&lt;br /&gt;
  sudo mkdir /opt/VP5500&lt;br /&gt;
  sudo mkdir /opt/VP5500/toolchain&lt;br /&gt;
  cd /opt/VP5500/toolchain&lt;br /&gt;
  sudo wget http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo bunzip2 arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo tar -xf arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo rm arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo ln -s /opt/VP5500/toolchain/usr/local/arm /usr/local/arm&lt;br /&gt;
&lt;br /&gt;
Nach einem sudo-Kommando muss eventuell das Passwort eingegeben werden, weswegen die Befehle einzeln eingegeben werden sollten (oder man öffnet am Anfang eine sudo shell, dann kann man das auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Test der Buildumgebung:&lt;br /&gt;
  cd ~&lt;br /&gt;
  wget http://www.mikrocontroller.net/attachment/73161/helloworld.tgz&lt;br /&gt;
  tar -xzf helloworld.tgz&lt;br /&gt;
  rm helloworld.tgz&lt;br /&gt;
  cd helloworld&lt;br /&gt;
  make&lt;br /&gt;
Dannach sollte im ~/helloworld verzeichnis ein neues executable liegen, was vom Hostrechner einfach via Netzwerkfreigabe (\\freetz-linux\helloworld) und via WinSCP auf das Telefon kopiert werden kann.&lt;br /&gt;
&lt;br /&gt;
==== Freetz-Linux eigentlicher Anwendungszweck ====&lt;br /&gt;
wer das Ding auch zum Bauen von Freetz-Images zum Erweitern seiner Fritz-box benutzen will muss sich zuerst ein Freetz runterladen.&lt;br /&gt;
Folgende Schritte machen dies:&lt;br /&gt;
 cd ~&lt;br /&gt;
 svn checkout  http://svn.freetz.org/trunk  freetz-trunk &lt;br /&gt;
Dannach gibts im Home-Verzeichnis das aktuelle Freetz im Verzeichnis &#039;freetz-trunk&#039;.&lt;br /&gt;
Konfigurieren mit &#039;make menuconfig&#039; und Image erstellen mit &#039;make&#039;.&lt;br /&gt;
Wenn alles gut geht kann man das image dann vom Hostrechner aus der Windowsfreigabe &#039;\\freetz-linux\freetz-trunk\images&#039; rausholen und auf die Box spielen.&lt;br /&gt;
&lt;br /&gt;
Für detailiertere Infos bitte direkt bei Freetz nachschlagen:&lt;br /&gt;
http://trac.freetz.org/&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
Die bisher bekannten, mit VP5500 und VP6500 ausgelieferten Software-Versionen, basieren auf einer etwas älteren &amp;quot;gcc 3.3.2-ARM-Toolchain&amp;quot;. Eine passende Toolchain für ein x86-basiertes Entwicklungssystem ist unter http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2 zu finden.&lt;br /&gt;
&lt;br /&gt;
Unter Debian-basierten Linux-Distros kann dieses Archiv z.B. nach /opt/VP5500/toolchain entpackt werden (einige der Makefiles im Forum setzen diesen Speicherort vorraus). Es ist jedoch zu beachten, dass diese Version der Toolchain auch über den Pfad /usr/local zugänglich sein sollte. Dazu kann mittels &amp;quot;ln -s /opt/VP5500/toolchain/usr/local/arm arm&amp;quot; in /usr/local ein Symlink auf den eigentlichen Speicherort gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Hello World ===&lt;br /&gt;
Christian Klippel (ChrisK) hat unter http://www.mikrocontroller.net/attachment/73161/helloworld.tgz ein &amp;quot;Hello World&amp;quot; bereitgestellt, mit dem sich die Toolchain testen lässt und dessen &amp;quot;Makefile&amp;quot; und &amp;quot;Makefile.local&amp;quot; als Grundlage für eigene Versuche dienen kann.&lt;br /&gt;
&lt;br /&gt;
Das Archiv wird in ein lokals Verzeichnis (z.b. ~/helloworld) entpackt und dort durch Eingabe von &amp;quot;make&amp;quot; compiliert.&lt;br /&gt;
     &lt;br /&gt;
Zum Testen muss das Binary natürlich auf das Zielsystem übertragen werden. Wenn auf dem Entwicklungssystem ein http-Server oder ein ssh-Server läuft, kann man das Binary einfach in ein darüber zugängliches Verzeichnis kopieren es anschließend in einer telnet-Sitzung vom Verzeichnis /tmp aus mittels wget oder scp laden. Zum Test muss die Datei mittels &amp;quot;chmod +x helloworld&amp;quot; ausführbar gemacht werden, bevor sie mit &amp;quot;./helloworld&amp;quot; ausgeführt werden kann.&lt;br /&gt;
&lt;br /&gt;
Mittels eines ftpd (z.B. http://www.mikrocontroller.net/attachment/73780/troll-ftpd_1.28-cg2_arm.tgz) oder sshd (z.B. Dropbear von http://vp6500.bd8.nl/) auf dem Zielsystem, kann man das Kopieren auch vom Entwicklungssystem aus durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Anpassen kleinerer Konsolen-Tools auf Cross-Compilierung ===&lt;br /&gt;
Die Makefiles von kleineren Projekten sind häufig nicht so sauber aufgebaut wie das helloworld-Beispiel, so dass man sie leichter ersetzt, als ändert. Am Beispiel von micro_httpd (http://www.acme.com/software/micro_httpd/ , http://www.mikrocontroller.net/attachment/73175/micro_httpd.tar.gz) kann leicht nachvollzogen werden, wie man den modularen Ansatz vom &amp;quot;Hello World&amp;quot;-Beispiel übernehmen kann (Makefile -&amp;gt; Makefile + Makefile.local).&lt;br /&gt;
&lt;br /&gt;
= Hardware  + Software Versionen =&lt;br /&gt;
&lt;br /&gt;
Listet mal eure Hardware- und Softwareversion aus dem &#039;&#039;&#039;Applications&#039;&#039;&#039; =&amp;gt; &#039;&#039;&#039;System Info&#039;&#039;&#039; Menü auf, wenn sie hier noch nicht stehen!&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0645      || 4.20&lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0647      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0648      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0649      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0702      || 4.20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0711     || 3.22&lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0713     || 3.22&lt;br /&gt;
|- &lt;br /&gt;
| ind3-v2                      || 0716     || 3.22&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Stromaufnahme =&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
FIXME &lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
 &lt;br /&gt;
Konfiguration: VP6500 mit aktivierter serieller Konsole an Labornetzteil, Spannung 3.67V (Bei weniger bootet es anscheinend aufgrund von Stromspitzen nicht richtig und vermeldet auf der seriellen Konsole ein &#039;battery low&#039; und schaltet sich danach selbst ab. Diese Spannung sollte noch so gerade &#039;safe&#039; sein, geht man davon aus, daß da ein Step-Up im Innern am werkeln ist und noch ein geringer Abfall über die Schottky-Diode einzurechnen ist). &lt;br /&gt;
&lt;br /&gt;
=== Messungen ===&lt;br /&gt;
* Booten: bis zu 420mA&lt;br /&gt;
* Einbuchen: ca. 400mA&lt;br /&gt;
* mit abgeschaltetem Display, aber eingebucht und laufend (idle): ca. 80mA&lt;br /&gt;
* mit angeschaltetem Display, eingebucht und idle: ca. 190mA&lt;br /&gt;
* mit 100% Prozessor-Last (von serieller Konsole ausgeführt: &amp;quot;while true; do true; done&amp;quot;): ca. 60mA mehr als idle (Scheint aber auch größere Sprünge für andere CPU-Last zu geben)&lt;br /&gt;
* im &#039;Deep Sleep&#039; (wird ein paar Minuten nach Einschalten erreicht): &amp;lt;10mA (!), mit kurzen Wachphasen mit erheblichem Stromverbrauch (&amp;gt;100mA). Beachte: Die serielle Konsole ist in diesem Modus auch nicht mehr aktiv, das Telefon ist aber nicht abgestürzt (Tastendruck aktiviert die Konsole wieder).&lt;br /&gt;
* Telefonieren ca 500mA&lt;br /&gt;
* Telefonieren mit Webcam ca 550mA&lt;br /&gt;
&lt;br /&gt;
=== Ladegerät ===&lt;br /&gt;
* Phone nicht in der Ladeschale: &amp;lt; 0.2W&lt;br /&gt;
* Phone wird geladen: ca 4W&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46052</id>
		<title>PHILIPS VP5500 VoIP Telefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=PHILIPS_VP5500_VoIP_Telefon&amp;diff=46052"/>
		<updated>2010-04-09T15:54:30Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Asterisk linkl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Verwandte Artikel =&lt;br /&gt;
* Konfiguration: http://www.mikrocontroller.net/topic/170483#new&lt;br /&gt;
* Kernel/GUI Entwicklung: http://www.mikrocontroller.net/topic/172616#new&lt;br /&gt;
* http://das-labor.org/wiki/VP5500&lt;br /&gt;
* (Hack) http://spritesmods.com/?art=vpx500&lt;br /&gt;
* http://vp6500.bd8.nl/&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Kamera-Auflösung 640x480 Pixel&lt;br /&gt;
* 30 Bilder pro Sekunde&lt;br /&gt;
* Kamera um 240° drehbar&lt;br /&gt;
* 5,6 cm (2,2&amp;quot;) TFT-Display, 176x220 Pixel, 65000 Farben&lt;br /&gt;
* Audio-/Video-Ausgang (4fach Klinke-Cinch, beim VP5500 2,5mm Klinke und beim VP6500 3,5mm Klinke)&lt;br /&gt;
* integrierter Li-Ion Akku, 3,7 V-/1100 mAh&lt;br /&gt;
* englische und niederländische Menüsprache&lt;br /&gt;
* Software Qtopia Version 2.1.0&lt;br /&gt;
* Maße (LxBxH): 134x49x24 mm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Philips_VP5500.jpg]]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
* MCU: Freescale MC9328MX21 (ARM9) @ 266MHz ([http://en.wikipedia.org/wiki/I.MX21 Wikipedia_englisch])&lt;br /&gt;
** gehoert zur ARM9E-Familie: ARMv5TEJ -&amp;quot;IntructionSet&amp;quot; (ARM926EJ-S)&lt;br /&gt;
* PC-to-TV-Konverter-Chip: FS455LF&lt;br /&gt;
* WLAN: Marvell 88w8385, als Modul von WM-G-MR-01 (VP5500) / Philips BGW211, on-board (VP6500)&lt;br /&gt;
* SDRAM: 2 x K4S56163LF - 4M x 16Bit x 4 Banks&lt;br /&gt;
* Flash: 2 x ws128j0pbfw00 S29WS128J/064J 128/64 Megabit (8/4 M x 16-Bit) CMOS 1.8 Volt-only Simultaneous Read/Write, Burst Mode Flash Memory&lt;br /&gt;
* Kamera: dc-4626.a5 by chicony&lt;br /&gt;
* Display: Samsung LTS220QC (HD66772 Controller)&lt;br /&gt;
&lt;br /&gt;
== System-Takte ==&lt;br /&gt;
 # cat /proc/systclk&lt;br /&gt;
 System clocks state:&lt;br /&gt;
     Ref clock :      32768Hz  (int, premult by 512)&lt;br /&gt;
     MPLL clock:  263999905Hz  (computed: 264000000Hz)&lt;br /&gt;
     SPLL clock:  163840000Hz  (computed: 163840000Hz)&lt;br /&gt;
     CPU clock :  263999905Hz  (PERSC   = 0)&lt;br /&gt;
     Bus clock :  132000000Hz  (BCLKDIV = 1, computed: 131999952Hz)&lt;br /&gt;
     CSI clock :  unknown      (cannot read register CSICR1)&lt;br /&gt;
     USB clock :   20480000Hz  (USB_DIV = 7)&lt;br /&gt;
     Wait State:  CS0U[WSC] = 10, CS0U[WSC] = 48&lt;br /&gt;
     loops_per_jiffy = 665058&lt;br /&gt;
&lt;br /&gt;
= Innenleben =&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei:Oberseite.jpg | Ansicht der Oberseite&lt;br /&gt;
Datei:Oberseite_beschriftet.jpg | Oberseite mit Beschriftung der Bauteile&lt;br /&gt;
Datei:Drumherum.jpg | Übersicht über die Komponenten&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;240&amp;quot; &amp;gt;&lt;br /&gt;
Datei:Kontakte_Oberseite.jpg | UART-Schnittstelle Oberseite&lt;br /&gt;
Datei:Kontakte_Unterseite.jpg | JTAG-Schnittstelle Unterseite&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP5500 ==&lt;br /&gt;
Original Liste von [http://www.mikrocontroller.net/topic/170483#1646514 Tino] [[Media:Philips vp5500 Liste Testpins.pdf|herrunterladen]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:Philips vp5500 testpins 1.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
[[Bild:Philips vp5500 testpins 2.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-&lt;br /&gt;
|   1       ||                  LED || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    2     ||            Kamera Pin 8 an CN1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    3     ||                  Pin 4 an IC1 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    4    ||                z.B. IC5 Pin V 18 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|    5    ||                       GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|    6     ||                       NC || NC&lt;br /&gt;
|-&lt;br /&gt;
|    7     ||                Pin E 16 an IC5 || SAP_CLK&lt;br /&gt;
|-&lt;br /&gt;
|    8     ||                 Pin 1 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    9     ||                 Pin 2 an CN 3 || Lautsprecher&lt;br /&gt;
|-&lt;br /&gt;
|    10    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    11     ||                 Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    12    ||                  Pin an CN 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|    13    ||                Pin L 16 an IC5 || UART2_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    14     ||               Pin C 12 an IC5 || USBH1_RXDM&lt;br /&gt;
|-&lt;br /&gt;
|    15   ||                 Pin H 12 an IC5 || USBH1_TXDP&lt;br /&gt;
|-&lt;br /&gt;
|    16     ||               Pin B 19 an IC5 || CSPI2_SS2&lt;br /&gt;
|-&lt;br /&gt;
|    17   ||                 Pin B16 an IC5 || SSI2_FS&lt;br /&gt;
|-&lt;br /&gt;
|    18     ||               Pin F 18 an IC5 || KP_ROW0&lt;br /&gt;
|-&lt;br /&gt;
|    19    ||                Pin K 18 an IC5 || KP_COL4&lt;br /&gt;
|-&lt;br /&gt;
|    20    ||                Pin L 19 an IC5 || UART3_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    21     ||               Pin T 14 an IC5 || RESET_IN&lt;br /&gt;
|-&lt;br /&gt;
|    22    ||    geht an + des Kondensators neben IC6 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    23   ||                Pin D 13 an IC 9 || CLKOUT&lt;br /&gt;
|-&lt;br /&gt;
|    24      ||             Pin E 13 an IC 9 || CLKIN_P&lt;br /&gt;
|-&lt;br /&gt;
|    25    ||                Pin A 9 an IC 9 || DAC_D&lt;br /&gt;
|-&lt;br /&gt;
|    26    ||                Pin A 8 an IC 9 || DAC_A&lt;br /&gt;
|-&lt;br /&gt;
|    27    ||                Pin A 7 an IC 9 || DAC_B&lt;br /&gt;
|-&lt;br /&gt;
|    28     ||               Pin A 6 an IC 9 || DAC_C&lt;br /&gt;
|-&lt;br /&gt;
|    29      ||             Pin L 13 an IC 5 || UART1_TXD&lt;br /&gt;
|-&lt;br /&gt;
|    30     ||              Pin T 16 an IC 5 || BOOT1&lt;br /&gt;
|-&lt;br /&gt;
|    31  ||                 Pin K 10 an IC 5 || UART1_RXD&lt;br /&gt;
|-&lt;br /&gt;
|    32    ||               Pin U 17 an IC 5 || BOOT2&lt;br /&gt;
|-&lt;br /&gt;
|    33    ||                 Pin 9 an IC 23 || unbekannt&lt;br /&gt;
|-&lt;br /&gt;
|    34    ||                Pin D 19 an IC5 || CSPI2_SCLK&lt;br /&gt;
|-&lt;br /&gt;
|    35     ||              Pin C 14 an IC5 || TIN&lt;br /&gt;
|-&lt;br /&gt;
|    36    ||                Pin C 19 an IC5 || CSPI2_SS1&lt;br /&gt;
|-&lt;br /&gt;
|    37   ||                 Pin D 18 an IC5 || CSPI2_SS0&lt;br /&gt;
|-&lt;br /&gt;
|    38     ||               Pin E 19 an IC5 || CSPI2_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|    39     ||               Pin H 19 an IC5 || PWMO&lt;br /&gt;
|-&lt;br /&gt;
|    40   ||            Pin J 9 an IC 7 und IC 8 || VDD&lt;br /&gt;
|-&lt;br /&gt;
|    41   ||                 Pin J 19 an IC 5 || KP_COL2&lt;br /&gt;
|-&lt;br /&gt;
|    42   ||                Pin K 16 an IC 5 || KP_COL3&lt;br /&gt;
|-&lt;br /&gt;
|    43   ||                 Pin J 11 an IC 5 || KP_ROW2&lt;br /&gt;
|-&lt;br /&gt;
|44      ||     Pin J 17 an IC 5 || KP_COL1&lt;br /&gt;
|-&lt;br /&gt;
|45  ||         Pin G 19 an IC 5 || KP_ROW4&lt;br /&gt;
|-&lt;br /&gt;
|46  ||         Pin G 17 an IC 5 || KP_ROW3&lt;br /&gt;
|-&lt;br /&gt;
|47  ||    Pin D 5 an IC 10 und IC 11 || ACC&lt;br /&gt;
|-&lt;br /&gt;
|48 ||          Pin G 16 an IC 5 || KP_ROW1&lt;br /&gt;
|-&lt;br /&gt;
|49   ||        Pin J 18 an IC 5 || KP_COL0&lt;br /&gt;
|-&lt;br /&gt;
|50  ||         Pin V 18 an IC 5 || VDDA&lt;br /&gt;
|-&lt;br /&gt;
|51 ||      Pin 2 an CN KB-Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|52 ||           Pin 2 an IC 15 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|53  ||      Pin 4 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|54  ||         Pin E 17 an IC 5 || CSPI2_MISO&lt;br /&gt;
|-&lt;br /&gt;
|55 ||  Pin 1,2,3,10,13 am LCD Stecker || ?&lt;br /&gt;
|-&lt;br /&gt;
|56  ||          Pin 3 an IC 16 ||  ?&lt;br /&gt;
|-&lt;br /&gt;
|57  ||         Pin U 10 an IC 5 || PC_PWRON&lt;br /&gt;
|-&lt;br /&gt;
|58  ||            Pin 1 IC 18 || ?&lt;br /&gt;
|-&lt;br /&gt;
|59  ||       an Diode über IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|60  ||          Pin 3 an IC 25 || ?&lt;br /&gt;
|-&lt;br /&gt;
|61 ||         Ladekontakt positiv || Ladegerät +&lt;br /&gt;
|-&lt;br /&gt;
|62  ||               GND || GND&lt;br /&gt;
|-&lt;br /&gt;
|63  ||        Akku Mittelkontakt || Akkustand? Temperatur?&lt;br /&gt;
|-&lt;br /&gt;
|64 ||       Transistor unter IC 16 || ?&lt;br /&gt;
|-&lt;br /&gt;
|65  ||          Pin 2 an IC 22 || ?&lt;br /&gt;
|-&lt;br /&gt;
|66   ||      Pin 1,12,30 an IC 24 || VSS&lt;br /&gt;
|-&lt;br /&gt;
|67  ||    Kondensator + unter IC 20 || ?&lt;br /&gt;
|-&lt;br /&gt;
|68   ||         Pin 5 an IC 21 || ?&lt;br /&gt;
|-&lt;br /&gt;
|69  ||           Pin 2 an IC 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
|70    ||        Pin 25 an IC24 || MCLK&lt;br /&gt;
|-&lt;br /&gt;
|71  ||       Prozessor Pin W 14 || QVDD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testpins am VP6500 ==&lt;br /&gt;
Original Listen von [http://www.mikrocontroller.net/topic/170483#1658720 Tino] herunterladen. [[Media:V6500_Back.xls|Rückseite]], [[Media:V6500_Front.xls|Vorderseite]].&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Back.jpg|thumb| Testpins auf der Rückseite]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || Pin 21 an BGW211EG || POR_N&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || Pin A 14 an i.MX21 || TOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || Pin 46 an BGW211EG || JTAG_TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || Pin 44 an BGW211EG || JTAG_TCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || Pin 42 an BGW211EG || JTAG_TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || Pin 47 an BGW211EG || JTAG_TRST_N&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || PIN 45 an BGW211EG || JTAG_TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || Pin 43 an BGW211EG || JTAG_RTCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || VDD || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || Pin K 10 an i.MX21 || UART1_RXD&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Bild:V6500_Front.jpg|thumb| Frontseite: Die ICs wurden zum Messen ausgelötet.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Testpin Nr.  !!    verbunden zu !! Funktion&lt;br /&gt;
|-		&lt;br /&gt;
| 1 || 	Pin 29 von BGW211EG &amp;amp; F 16 an i.MX21 || RESET_N / CSPI1_SS1&lt;br /&gt;
|-		&lt;br /&gt;
| 2 || 	Pin 28 an BGW211EG &amp;amp; J 12 an i.MX21 || SPI_DAT_MOSI / CSPI1_MOSI&lt;br /&gt;
|-		&lt;br /&gt;
| 3 || 	Pin 27 an BGW211EG &amp;amp; F 19 an i.MX21 || SPI_SS_N / CSPI1_SS0&lt;br /&gt;
|-		&lt;br /&gt;
| 4 || 	Pin 26 an BGW21EG &amp;amp; F 17 an i.MX21 || SPI_DAT_MISO / CSPI1_MISO&lt;br /&gt;
|-		&lt;br /&gt;
| 5 || 	Pin 25 an BGW211EG &amp;amp; H 10 an i.MX21 || SPI_CLK / CSPI1_SCLK&lt;br /&gt;
|-		&lt;br /&gt;
| 6 || 	Pin 24 an BGW211EG &amp;amp; H 11 an i.MX21 || SPI_EXT_INT / CSPI1_RDY&lt;br /&gt;
|-		&lt;br /&gt;
| 7 || 	Pin 41 an BGW211EG || UART_TX&lt;br /&gt;
|-		&lt;br /&gt;
| 8 || 	Pin 40 an BGW211EG || UART_RX&lt;br /&gt;
|-		&lt;br /&gt;
| 9 || 	Transistor unter Testpunkt || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 10 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 11 || 	LED || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 12 || 	Pin 8 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 13 || 	Pin 18 am Kamerastecker || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 14 || 	Pin E 13 &amp;amp; H12 an FS455 || CLKIN / PREF&lt;br /&gt;
|-		&lt;br /&gt;
| 15 || 	Pin D 13 an FS455 || CLKOUT&lt;br /&gt;
|-		&lt;br /&gt;
| 16 || 	Pin A 11 an FS455 || XTAL_OUT&lt;br /&gt;
|-		&lt;br /&gt;
| 17 || 	VDD von FS455 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 18 || 	Pin 15 &amp;amp; 16 am Displayconnector || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 19 || 	geht an 2 Dioden links daneben || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 20 || 	Pin M 19 an i.MX21 || UART1_CTS&lt;br /&gt;
|-		&lt;br /&gt;
| 21 || 	Pin M 18 an i.MX21 || UART1_RTS &amp;amp; GND ??&lt;br /&gt;
|-		&lt;br /&gt;
| 22 || 	VDDan i,MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 23 || 	Pin G 10 an i.MX21 || USB_BYP&lt;br /&gt;
|-		&lt;br /&gt;
| 24 || 	Pin A 19 an i.MX21 || SSI3_FS&lt;br /&gt;
|-		&lt;br /&gt;
| 25 || 	Pin D 17 an i.MX21 || SSI2_CLK&lt;br /&gt;
|-		&lt;br /&gt;
| 26 || 	VDD an i.MX21 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 27 || 	Pin T 17 an i.MX21 || SD1_D3&lt;br /&gt;
|-		&lt;br /&gt;
| 28 || 	Pin A 15 an i.MX21 || SAP_TXDAT&lt;br /&gt;
|-		&lt;br /&gt;
| 29 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 30 || 	Pin T 14 an i.MX21 || RESET_IN&lt;br /&gt;
|-		&lt;br /&gt;
| 31 || 	Pin R 19 an i.MX21 || TRST&lt;br /&gt;
|-		&lt;br /&gt;
| 32 || 	Pin P 19 an i.MX21 || TMS&lt;br /&gt;
|-		&lt;br /&gt;
| 33 || 	Pin N 17 an i.MX21 || TCK&lt;br /&gt;
|-		&lt;br /&gt;
| 34 || 	Pin K 11 an i.MX21 || TDO&lt;br /&gt;
|-		&lt;br /&gt;
| 35 || 	Pin P 18 an i.MX21 || TDI&lt;br /&gt;
|-		&lt;br /&gt;
| 36 || 	Pin 13 an TLV320 || OUTP2&lt;br /&gt;
|-		&lt;br /&gt;
| 37 || 	Pin 14 an TLV320 || OUTMV&lt;br /&gt;
|-		&lt;br /&gt;
| 38 || 	Pin 15 an BGW211EG || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 39 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 40 || 	Pin an Klinkenbuchse || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 41 || 	? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 42 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 43 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 44 || 	Pin 1,8 an 20XN2512 &amp;amp; Key ON || PowerON&lt;br /&gt;
|-		&lt;br /&gt;
| 45 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 46 || 	Pin 2 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 47 || 	Pin 6 an MRRBGB3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 48 || 	LED Tastatur ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 49 || 	Pin 10 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 50 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 51 || 	geht an Widerstand auf Rückseite ? || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 52 || 	Pin L 13 an i.MX21 || UART1_TXD&lt;br /&gt;
|-		&lt;br /&gt;
| 53 || 	geht an Diode und Kondensator auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 54 || 	Pin C 14 an i.MX21 || TIN&lt;br /&gt;
|-		&lt;br /&gt;
| 55 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 56 || 	Pin 7 an BDR72K || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 57 || 	Pin K 10 an i.MX21 || UART1_RDX&lt;br /&gt;
|-		&lt;br /&gt;
| 58 || 	Pin U 17 an i.MX21 || BOOT2&lt;br /&gt;
|-		&lt;br /&gt;
| 59 || 	Pin T 16 an i.MX21 || BOOT1&lt;br /&gt;
|-		&lt;br /&gt;
| 60 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 61 || 	Pin V 16 an i.MX21 || BOOT0&lt;br /&gt;
|-		&lt;br /&gt;
| 62 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 63 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 64 || 	Pin 25 an TLV320 || MLCK&lt;br /&gt;
|-		&lt;br /&gt;
| 65 || 	Pin4 an 69W2440D || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 66 || 	VDD von TLV320 || VDD&lt;br /&gt;
|-		&lt;br /&gt;
| 67 || 	geht an Widerstand auf der Rückseite ||  ?&lt;br /&gt;
|-		&lt;br /&gt;
| 68 || 	geht an Widerstand auf der Rückseite || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 69 || 	Pin 65 an MRRBG3 || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 70 || 	GND || GND&lt;br /&gt;
|-		&lt;br /&gt;
| 71 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 72 || 	LED Tastatur || ?&lt;br /&gt;
|-		&lt;br /&gt;
| 73 || 	Akku positiv || Plus Akku&lt;br /&gt;
|-		&lt;br /&gt;
| 74 || 	Ladekontakt positiv || Ladekontakt positiv&lt;br /&gt;
|-		&lt;br /&gt;
| 75 || 	Akku positiv || Plus Akku&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
TIN muss auf low gezogen werden, um die Schnittstelle zu aktivieren.&lt;br /&gt;
Jedoch startet dann das Telefon nicht vollständig (Fix siehe [[#Betrieb mit aktiverter serieller Schnittstelle]])&lt;br /&gt;
&lt;br /&gt;
* Spannungs-Pegel: 3.3V&lt;br /&gt;
* Baudrate: 115200kbps&lt;br /&gt;
* Stopbits: 1&lt;br /&gt;
* Flussteuerung: keine&lt;br /&gt;
=== VP5500 ===&lt;br /&gt;
[[Bild:VP5500_seriell_highlight.svg|100px|UART-Pins VP5500(Frontseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unten vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&lt;br /&gt;
&lt;br /&gt;
=== VP6500 ===&lt;br /&gt;
[[Bild:VP5600-Serialport-Preliminary.jpg|100px|UART-Pins VP6500]]&lt;br /&gt;
&lt;br /&gt;
Die serielle Schnittstelle ist unter vom Akkufach aus zugänglich.&lt;br /&gt;
Obiges Bild kennzeichnet die für die serielle Kommunikation benötigten Pins.&amp;lt;br&amp;gt;&lt;br /&gt;
VCC liefert anscheinend die ungeregelte Akkuspannung, Boot-Pins nicht verifiziert.&lt;br /&gt;
&lt;br /&gt;
== JTAG ==&lt;br /&gt;
[[Bild:jtag.jpg Belegung der JTAG-Pins (Rückseite der Platine)]]&lt;br /&gt;
&lt;br /&gt;
= Hardware Modifikationen =&lt;br /&gt;
== Zerlegen des Telefons ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:01_offen_von_Hinten.JPG|1. Geöffnetes Akkufach&lt;br /&gt;
Datei:02_Blende_entfernt.JPG|2. hintere Schwarze Blende entfernt&lt;br /&gt;
Datei:03_Rückseite_entfernt.JPG|3. Schalenrückteil entfernt&lt;br /&gt;
Datei:04_aufhebeln_Vorderteil.JPG|4. Druck nach außen&lt;br /&gt;
Datei:05_vorderteil_entfernt.JPG|5. entferntes Vorderteil&lt;br /&gt;
Datei:06_Elektronik_entfernt.JPG|6. entfernte Elektronik&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# das Akkufach muss geöffnet und die Schrauben entfernt werden&lt;br /&gt;
# hinter der rückseitigen schwarzen Blende befinden sich zwei Schrauben, die entfernt werden müssen&lt;br /&gt;
#* Hierzu am besten mit einem schmalen kleinen Schraubendreher von der Stirnseite aus zwischen die Plastikteile fahren und vorsichtig aufhebeln und den Schraubendreher dabei weiter unter die Blende bewegen.&lt;br /&gt;
# Nun kann einfach das rückseitige Schalenteil abgeschaubt werden&lt;br /&gt;
# das Entfernen des Frontschalenteils ist etwas tricky:&lt;br /&gt;
#* von oben und unten lässt sich ganz gut ein Spalt zur Seite aufweiten&lt;br /&gt;
#* etwas unter der Mitte hängt es aber auf beiden Seiten. Dort befinden sich kleine Plastikbügel, die recht leicht zerbrechen.&lt;br /&gt;
#* Mit einem sehr schmalen Schraubendreher in eine der Lücken fahren (anfange auf der Seite ohne Tasten) und den Schraubendreher nach innen drücken, so das der Druck in der Seite nach außen wirkt.&lt;br /&gt;
#* Mit etwas Geschick bekommt man das so ohne Bruch ab, es ist aber auch nicht kritisch, wenn der Bügel ein wenig anbricht)&lt;br /&gt;
# Die Platine zu entfernen ist nicht ganz so schwierig.&lt;br /&gt;
#* Zuerst die Seite auf der keine Knöpfe sind:&lt;br /&gt;
#* vorichtig diese Seite leicht anheben. Am unteren Ende ist auf die Kontakte zu achten &lt;br /&gt;
#* dann versuchen die Paltine seitlich nach oben aus dem Gehäuse zu ziehen&lt;br /&gt;
#* dabei auf das Lautsprecherkabel und den Kamerakonnektor achten&lt;br /&gt;
# Zusammenbau genauso, nur umgedreht ;)&lt;br /&gt;
#* nicht die Lautsprecher- und Kamera-Stecker vergessen&lt;br /&gt;
&lt;br /&gt;
== Buchse für Uart einbauen ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:10_Pins.JPG|1. unbearbeitete Pinreihe&lt;br /&gt;
Datei:11_Pins_bearbeitet.JPG|2. präperierte Pinreihe&lt;br /&gt;
Datei:09_Pads.JPG|3. präperierte Pads&lt;br /&gt;
Datei:12_Pins_ausrichten.JPG|4. Pinreiheausrichten&lt;br /&gt;
Datei:13_Pins_angelötet_1.JPG|5. angelötete Pinreihe&lt;br /&gt;
Datei:14_Pins_angelötet_2.JPG|6. angelötete Pinreihen&lt;br /&gt;
Datei:08_Mittelteil.JPG|7. Mittelteil mit ausgefeiltem Loch&lt;br /&gt;
Datei:15_Mittelteil_zusammengebaut.JPG|8. wieder zusammengesteckt&lt;br /&gt;
Datei:16_in_Aktion.JPG|9.verbundene serielle Schnittstelle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zunächst muss das Telefon zerlegt werden ([[#Zerlegen des Telefons]])&lt;br /&gt;
Um das Gehäuse nicht zu beeinträchtigen, habe ich mich dazu entschieden, alles so zu lassen wie es ist und nur kleine Buchsen einzubauen. &lt;br /&gt;
&lt;br /&gt;
# Hierfür habe ich einreihige gedrehte IC-Sockel genutzt &lt;br /&gt;
# deren Beine abgezwickt, und etwas Lötzinn aufgetragen (mit der langen Reihe kann man die kurzen, schmalen Teile super handhaben)&lt;br /&gt;
# ebendso auf die Pads ein wenig eingezinnt&lt;br /&gt;
# ausrichten und festlöten&lt;br /&gt;
# eine Reihe&lt;br /&gt;
# die zweite Reihe&lt;br /&gt;
# bei der Gehäuseöffnung über den Pins habe ich mit einer feinen Schlüsselfeile den Rand wenig aufgeweitet. An der Gummimatte hab ich nix geändert.&lt;br /&gt;
# fertig&lt;br /&gt;
# und im Einsatz&lt;br /&gt;
&lt;br /&gt;
= Das VPx500 &#039;rooten&#039; =&lt;br /&gt;
&lt;br /&gt;
Um vollen Zugang zum System auf dem Gerät zu erhalten gibt es mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== per serieller Schnittstelle ==&lt;br /&gt;
Dazu muß der [[#UART]] angeschlossen werden. Während des Bootvorgangs drückt man immer wieder ziellos irgendwelche Tasten bis man am Prompt des [http://www.lartmaker.nl/lartware/blob/ blob-Bootloaders] ist.&lt;br /&gt;
Dann kann man &lt;br /&gt;
 boot root=/dev/mtdblock2 init=/bin/sh&lt;br /&gt;
eingeben, um an eine minimale Shell zu kommen.&lt;br /&gt;
&lt;br /&gt;
In dieser setzt man dann mit &lt;br /&gt;
 passwd&lt;br /&gt;
man dann das Passwort für &#039;&#039;root&#039;&#039;. Danach kann man sich als &#039;&#039;root&#039;&#039; mit dem gesetzten Passwort einloggen.&lt;br /&gt;
&lt;br /&gt;
== per DNS-Hack ==&lt;br /&gt;
Um den Rootzugriff zu aktivieren, wird dem Telefon ein Softwareupdate vorgegaukelt. Es versucht, auf den Updateserver von KPN zuzugreifen (den es nicht mehr gibt). Glücklicherweise geschieht dies nicht über eine feste IP, sondern über einen Hostnamen, so dass man an dieser Stelle sich durch einen eigenen DNS den Domainname auf einen eigenen Server umleiten kann. Daher ist im eigenen Netzwerk eine Umleitung des DNS erforderlich (oder ein DHCP-Server, der die Adresse des DNS bekanntgibt. Stichworte &#039;Static DNS&#039;, ..).&lt;br /&gt;
Das Gerät holt sich dann ein Updatepaket, das den Telnet-Zugang aktiviert.&lt;br /&gt;
&lt;br /&gt;
Dann lässt sich per Terminal (Linux. Windows: ....) die Kommandozeile des Geräts aufrufen:&lt;br /&gt;
&lt;br /&gt;
 telnet 123.456.789.012&lt;br /&gt;
&lt;br /&gt;
Passwort ist &amp;quot;toor&amp;quot;.&lt;br /&gt;
Das Ändern des root-Passwortes erfolgt mit dem Befehl passwd.&lt;br /&gt;
&lt;br /&gt;
Unter Applications&amp;gt;Registration sind Netzwerk- und VoIP-Einstellungen zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für Fritz-Box-Benutzer ===&lt;br /&gt;
Die Fritzboxen bieten bisher leider keine Möglichkeit, den verwendeten DNS&lt;br /&gt;
direkt im Webinterface zu ändern, über Umwege geht es aber doch:&lt;br /&gt;
* Über das Webinterface der Fritzbox die Einstellungen sichern&lt;br /&gt;
* Exportdatei im Texteditor öffnen (am besten nicht Notepad, da der die Unix-Zeilenumbrüche nicht versteht - zur Not geht auch Wordpad)&lt;br /&gt;
* nach overwrite_dns1 suchen (gibt es zwei mal) und da den DNS 84.38.68.30 oder 188.40.123.50 eintragen&lt;br /&gt;
* am Anfang der Exportdatei VOR &amp;quot;**** CFGFILE:ar7.cfg&amp;quot; eine Zeile &#039;NoChecks = yes&#039; einfügen, damit die Fritzbox die nun nicht mehr passende Checksumme ignoriert.&lt;br /&gt;
* Einstellungen zurück in die Fritzbox übertragen.&lt;br /&gt;
&lt;br /&gt;
Wenn die Telefone entsperrt sind, den DNS wieder entfernen (Es ist&lt;br /&gt;
vielleicht eine ganz gute Idee, wenn man da zwei unabhängige DNS-Server&lt;br /&gt;
einträgt, so umgeht man auch gleich providerseitige DNS-Sperren)&lt;br /&gt;
&lt;br /&gt;
= Voice over IP (VoIP, SIP) =&lt;br /&gt;
&lt;br /&gt;
*http://de.wikipedia.org/wiki/IP-Telefonie&lt;br /&gt;
*http://de.wikipedia.org/wiki/Session_Initiation_Protocol&lt;br /&gt;
*http://de.wikipedia.org/wiki/H.323&lt;br /&gt;
*http://de.wikipedia.org/wiki/Softphone&lt;br /&gt;
&lt;br /&gt;
Benutzer ist 103&lt;br /&gt;
&lt;br /&gt;
Mit Ekiga konnte so per 103@xxx.xxx.xxx.xxx eine Sprachverbindung zum Telefon aufgebaut werden.&lt;br /&gt;
=== Eigener VoIP Server mit Asterisk ===&lt;br /&gt;
*http://www.das-asterisk-buch.de&lt;br /&gt;
&lt;br /&gt;
= Software Modifikationen =&lt;br /&gt;
== Vorsicht Fallen ==&lt;br /&gt;
Es ist nicht schwer, sich den Zugang zum Telefon abzuschneiden, wenn man nicht aufpasst.&lt;br /&gt;
=== Startscripten ===&lt;br /&gt;
Die Scripten in /etc/rc.d/&amp;quot; müssen im Hintergrund laufen. Tut ein Script das nicht, ist an dieser Stelle Schluß mit dem Bootvorgang.&lt;br /&gt;
&lt;br /&gt;
Dann darf man als nächstes den Lötkolben anheizen und die serielle Schnittstelle ([[#UART]]) zugänglich machen.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
Bestimmte Aktionen werden immer wieder benötigt.&lt;br /&gt;
Diese sollen hier kurz beschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Es werden dennoch grundlegende Kenntnisse von Kommandozeilen vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Dateien bearbeiten mit vi===&lt;br /&gt;
Auf dem Telefon ist der minimalistische Editor vi installiert mit dem Dateien über Telnet bearbeitet werden können.&lt;br /&gt;
Für eine genaue Bedienung bitte Google benutzen.&lt;br /&gt;
Die wichtigsten Bedienelemente werden hier kurz erläutert.&lt;br /&gt;
&lt;br /&gt;
Datei Öffnen mit &#039;vi Dateipfad&#039;&lt;br /&gt;
vi kennt zwei Modi: Kommando- und Einfüge-Modus.&lt;br /&gt;
i - wechselt in den Einfüge-Modus, in dem geschrieben werden kann&lt;br /&gt;
&lt;br /&gt;
[Esc] wechselt zurück in den Kommandomodus. &lt;br /&gt;
In diesem kann mittels Pfeil- und Bildlauftasten navigiert werden.&lt;br /&gt;
:x - löscht das Zeichen an Cursor position&lt;br /&gt;
:dd - löscht die ganze zeile&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;q! - schließt ohne zu speichern&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;w - speichert&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;wq - speichert und beenden&lt;br /&gt;
&lt;br /&gt;
=== Dateien auf das Telefon laden ===&lt;br /&gt;
Um Daten von einem http-Server zu laden, benutzt man &lt;br /&gt;
 wget url&lt;br /&gt;
Die Datei wird dann in das aktuelle Verzeichnis geladen, weswegen vorher in das Zielverzeichnis wechseln.&lt;br /&gt;
&lt;br /&gt;
Um Daten von einem ftp-Server zu laden, benutzt man ftp.&lt;br /&gt;
Auch hier muss vorher in das zielverzeichnis gewechselt werden.&lt;br /&gt;
 ftp hostname&lt;br /&gt;
dann gegebenenfalls die Zugangsdaten eingeben und mittels &#039;cd&#039; und &#039;ls&#039; in das Entsprechende Verzeichnis auf dem FTP-Server wechseln&lt;br /&gt;
und anschließend mittels &lt;br /&gt;
 get dateiname&lt;br /&gt;
die Datei herunterladen.&lt;br /&gt;
 &lt;br /&gt;
=== Dateien vom Telefon herunterladen ===&lt;br /&gt;
Auch hier bietet sich ein FTP an.&lt;br /&gt;
Mittels &#039;ftp hostname&#039; verbinden, Benutzerdaten eingeben, in das entsprechende FTP-Server-Verzeischnis wechseln und mittels&lt;br /&gt;
 put localeDatei&lt;br /&gt;
eine Lokale Datei hochladen.&lt;br /&gt;
&lt;br /&gt;
=== Alternative Dropbear ===&lt;br /&gt;
&lt;br /&gt;
Wurde der dropbear-ssh server installiert [[#Dropbear (SSH-Server) installieren]] können mittels eines Programms mit SCP-Unterstützung (zB. [http://winscp.net/eng/docs/lang:de WinSCP] für Windows) sehr komfortabel Dateien ausgetauscht werden.&lt;br /&gt;
&lt;br /&gt;
Mit WinSCP können auch Dateien direkt bearbeitet werden.&lt;br /&gt;
Der Client lädt die Datei herunter, öffnet einen Editor und lädt die Datei wieder herauf, wenn diese geändert wurde.&lt;br /&gt;
&lt;br /&gt;
== Backup ==&lt;br /&gt;
=== Backup des Flash ===&lt;br /&gt;
If you want to make a backup of your root partition, you can do as&lt;br /&gt;
follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#!/bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cat /dev/mtdb2 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
micro_inetd 31337 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This&#039;ll make your device listen for incoming connections on port 31337.&lt;br /&gt;
On your host system you may then simply run &lt;br /&gt;
 nc ip.of.your.phone 31337 &amp;gt; fon_rootfs&lt;br /&gt;
et voilà, you got your rootfs packed into a file.&lt;br /&gt;
&lt;br /&gt;
Note that the backed up file is not ext2, but a jffs2 formatted&lt;br /&gt;
filesystem. These can&#039;t be handled by a simple &amp;quot;mount -o loop&amp;quot; as you&#039;d&lt;br /&gt;
have thought... so here&#039;s how you mount it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
modprobe jffs2&lt;br /&gt;
modprobe mtdram total_size=32768 erase_size=128&lt;br /&gt;
modprobe mtdblock&lt;br /&gt;
mkdir /tmp/phone-root&lt;br /&gt;
mknod /tmp/phone-mtdb2 b 31 0&lt;br /&gt;
dd if=/your/backup/file of=/tmp/phone-mtdb2&lt;br /&gt;
mount -t jffs2 /tmp/phone-mtdb2 /tmp/phone-root&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#Dateisystem herunterladen]] describes another way to dump the filesystem for closer examination.&lt;br /&gt;
&lt;br /&gt;
=== Komplettes Backup ===&lt;br /&gt;
Die Datei http://www.mikrocontroller.net/attachment/73323/S91backup_pipe auf das Gerät laden und als ausführbar markieren.&lt;br /&gt;
&lt;br /&gt;
 cd /etc/rc.d/init.d&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/73323/S91backup_pipe&lt;br /&gt;
 chmod +x /etc/rc.d/init.d/S91backup_pipe&lt;br /&gt;
&lt;br /&gt;
Damit wird eine Art Backup-Server mit dem Boot gestartet.&lt;br /&gt;
wenn man dies nicht möchte kann man das Skript natürlich auch an jeden beliebigen anderen Ort legen und per Hand starten.&lt;br /&gt;
&lt;br /&gt;
Nun kann man von einem Rechner aus mittels nc (netcat) die Bereiche sichern:&lt;br /&gt;
&lt;br /&gt;
 nc 192.168.1.3 31337 &amp;gt; fon_rootfs&lt;br /&gt;
 nc 192.168.1.3 31338 &amp;gt; fon_udata&lt;br /&gt;
 nc 192.168.1.3 31339 &amp;gt; fon_usettings&lt;br /&gt;
 nc 192.168.1.3 31340 &amp;gt; fon_bootld&lt;br /&gt;
 nc 192.168.1.3 31341 &amp;gt; fon_kernel&lt;br /&gt;
&lt;br /&gt;
Die 192.168.1.3 natürlich mit der IP des Gerätes austauschen, die fon_*&lt;br /&gt;
Dateinamen könnt ihr natürlich auch frei vergeben.&lt;br /&gt;
&lt;br /&gt;
fon_udata ist die /user_data Partition, fon_usertings dementsprechend&lt;br /&gt;
die /user_settings Partition.&lt;br /&gt;
&lt;br /&gt;
Der bootld Bereich enthält auch die Parameter. Um das später (falls&lt;br /&gt;
überhaupt nötig) mittels blob zu restaurieren müsste die Datei noch in&lt;br /&gt;
zwei Teile aufgeteilt werden. Der erste enthält dann den reinen&lt;br /&gt;
Bootloader-Bereich, der zweite die Parameter. Wer&#039;s wirklich braucht für&lt;br /&gt;
den kann ich noch ne Anleitung zum Aufteilen geben. Wirklich Sinnvoll&lt;br /&gt;
ist das aber nicht, hat man den Bootloader erstmal mit was anderem&lt;br /&gt;
überschrieben kann man ihn ja auch nicht mehr zum Wiederherstellen&lt;br /&gt;
benutzen....&lt;br /&gt;
&lt;br /&gt;
=== Zurückspielen der Backups ===&lt;br /&gt;
&lt;br /&gt;
1) Man braucht ein (die) Backup-Image(s).&lt;br /&gt;
&lt;br /&gt;
2) Serielle Verbindung zum Telefon&lt;br /&gt;
&lt;br /&gt;
3) Akku abstecken, wieder anstecken.&lt;br /&gt;
&lt;br /&gt;
4) Telefon einschalten und im Terminalprogram auf die Tasten kloppen, so&lt;br /&gt;
das man im Bootloader landet. Dabei muss man recht schnell sein. Es&lt;br /&gt;
sollte dann ein Prompt kommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
blob&amp;gt;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Nun gibt man ein &lt;br /&gt;
   xdownload param&lt;br /&gt;
Wobei &#039;param&#039; der Teil ist, den man wiederherstellen will:&lt;br /&gt;
* blob - Bootloader (fon_bootld)&lt;br /&gt;
* param - Parameter Bereich (Bootloader oder Kernel?) (fon_bootld)&lt;br /&gt;
* kernel - Der Kernel (fon_kernel)&lt;br /&gt;
* ramdisk - Das Root-Filesystem / (fon_rootfs)&lt;br /&gt;
* ramdisk2 - Das /user_data Filesystem (fon_udata)&lt;br /&gt;
* ramdisk3 - Das /user_settings Filesystem (fon_usettings)&lt;br /&gt;
&lt;br /&gt;
Beim Backup ist blob + param in einer Datei, müsste man also ggf.&lt;br /&gt;
erstmal aufsplitten.&lt;br /&gt;
&lt;br /&gt;
6) Er wartet dann auf den Upload. Nun startet man im Terminalprogram den&lt;br /&gt;
Upload des Backup-Images, dazu verwendet man das X-Modem Protokoll.&lt;br /&gt;
&lt;br /&gt;
7) Kaffee trinken, auf&#039;s Klo gehen, mit Frau/Freundin/Mutter ein Gespräch&lt;br /&gt;
anfangen.&lt;br /&gt;
&lt;br /&gt;
8) Irgendwann ist der Upload fertig. Dauert halt lange. Man landet&lt;br /&gt;
wieder am &amp;quot;blob&amp;gt;&amp;quot; prompt. Nun gibt man&lt;br /&gt;
 flash param&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
9) Er schreibt nun das, was man hochgeladen hat, in das Flash.&lt;br /&gt;
&lt;br /&gt;
10) &amp;quot;boot&amp;quot; eingeben. Da Telefon bootet nun normal.&lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn im Backup nicht die Änderung gemacht wurde damit das&lt;br /&gt;
Telefon auch bei angeschlossener serieller Schnittstelle startet, kommt&lt;br /&gt;
man nicht weiter als wie bis zur Sanduhr. Dann einfach die serielle&lt;br /&gt;
abstecken (Also den TIN pin wieder freigeben) und das Telefon neustarten&lt;br /&gt;
(Akku kurz ab- und wieder anstöpseln)&lt;br /&gt;
&lt;br /&gt;
=== Dateisystem herunterladen ===&lt;br /&gt;
Zum unkomplizierten Durchsuchen des Dateisystems kann es nützlich sein, dieses vom Gerät zu kopieren.&lt;br /&gt;
&lt;br /&gt;
Folgende Befehle erzeugen wie beim Backup des Flash einen kleinen Server, dessen Output auf anderer Seite mittels mittels nc abgeholt werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
echo &#039;#! /bin/sh&#039; &amp;gt; /tmp/backup.sh&lt;br /&gt;
echo &#039;cd /&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
chmod 700 /tmp/backup.sh&lt;br /&gt;
echo &#039;tar cf - bin boot dev etc home lib mnt opt root sbin tmp trace upgrade user_data user_settings usr var 2&amp;gt;/dev/null&#039; &amp;gt;&amp;gt; /tmp/backup.sh&lt;br /&gt;
micro_inetd 31340 /tmp/backup.sh&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die lange Liste mit Unterverzeichnissen ist notwendig um /proc zu überspringen, was Probleme mit tar verursachen würde.&lt;br /&gt;
&lt;br /&gt;
Auf einem anderen Linux system (oder cygwin) kann mittels&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  nc telefon-Ip 31340 &amp;gt; file.tar&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
die Datei abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Der Vorgang dauert aber ein ganz paar Minuten.&lt;br /&gt;
&lt;br /&gt;
Heraus kommt ein Tar-Archiv, was alle Dateien des Gerätes enthält - inclusive der temporären Dateien der Ram-Disks.&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit aktivierter serieller Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Das 5500 scheint nicht komplett zu starten wenn man TIN auf low hat&lt;br /&gt;
und die serielle Schnittstelle benutzt. Man kann das Gerät dann nicht normal bedienen. Dies lässt sich ändern indem man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /usr/local/startup/daemon.sh&lt;br /&gt;
&lt;br /&gt;
ziemlich am Anfang das TINDETECT=&amp;quot;TRUE&amp;quot; ändert auf TINDETECT=&amp;quot;FALSE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Danach startet er auch mit aktiver serieller Verbindung komplett durch&lt;br /&gt;
und das Gerät ist ganz normal bedienbar.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
6&amp;gt;NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Freeing init memory: 68K&lt;br /&gt;
PCB version: ind3 v2&lt;br /&gt;
Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
****p_gpio_init_low_bat****&lt;br /&gt;
GPIO: p_gpio_it_init at 762&lt;br /&gt;
Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
&lt;br /&gt;
u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Reset from Software Reset.&lt;br /&gt;
Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
pp: hw ver = 2&lt;br /&gt;
prp_dbg=0&lt;br /&gt;
Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
hmp4d: module inserted&lt;br /&gt;
hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
hmp4e: module inserted. Major = 249&lt;br /&gt;
SPI2:: drv_Init :PID of driver: 134&lt;br /&gt;
SPI2:: drv_Init :ScanList not provided. Will use the default scan list.&lt;br /&gt;
SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10&lt;br /&gt;
SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
SPI2:: drvRegEtherDev :Interface Name is: eth%d&lt;br /&gt;
SPI2:: drv_Init :HEOCSIWPOWON: Powering on...&lt;br /&gt;
SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Divider : 8&lt;br /&gt;
&lt;br /&gt;
 OCR2 : e4015308 (12582912)&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
&lt;br /&gt;
Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!!&lt;br /&gt;
GPIO: CHARGE_IN at init&lt;br /&gt;
GPIO: LOW_BAT_OUT at init&lt;br /&gt;
GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
GPIO: camera to front at init&lt;br /&gt;
**ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1&lt;br /&gt;
SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() ..&lt;br /&gt;
SPI2:: drvPhase2Init :Success&lt;br /&gt;
SPI2:: drvPhase2Init : registering callbacks with HHAL..&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1&lt;br /&gt;
SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
requested reg.domain code setting = 3&lt;br /&gt;
SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
SPI2:: drvInitConnect :step5&lt;br /&gt;
SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Motorola CSI Linux driver ver 0.1&lt;br /&gt;
 - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
&lt;br /&gt;
Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
i2c-client version : 1.9&lt;br /&gt;
Initialize i2c-client-aic14 module&lt;br /&gt;
Module i2c-client-aic14 initialized&lt;br /&gt;
Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
SPI2:: drvOpen :opening net device&lt;br /&gt;
SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
SPI2:: drvInitConnect :step2&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
SPI2:: drvInitConnect :step4&lt;br /&gt;
SPI2:: drvInitConnect :Successful&lt;br /&gt;
SPI2:: drvInitConnect :step6&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
SPI2:: drvIoctl :No state change!&lt;br /&gt;
SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Sensor driver: initialize device OV7660&lt;br /&gt;
Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
SPI2:: drvIoctl :PA Request&lt;br /&gt;
PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;logread&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Jan  1 00:00:00 imx21 syslog.info syslogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.emerg klogd: klogd started: BusyBox v0.60.0 (2007.02.28-13:39+0000)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Linux version 2.4.20-celf3 (root@wbul04) (gcc version 3.3.2) #1 Wed Feb 28 13:30:26 UTC 2007&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: ARM926EJ-Sid(wb) [41069264] revision 4 (ARMv?(8))&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D undefined 14 cache&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: CPU: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Machine: Freescale i.MX2 ADS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: FCLK=266000 kHz   HCLK=133000 kHz  IPGCLK=66500 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PERCLKs: 1=44333 KHz  2=33250 kHz  3=44333 kHz  4=88666 kHz&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: On node 0 totalpages: 16384&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(0): 16384 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(1): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: zone(2): 0 pages.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Kernel command line: root=/dev/mtdblock2 noinitrd ip=none mtdparts=s29gl512n:256k@0x00000000&lt;br /&gt;
(bootloader)ro,896k@0x00040000(kernel)ro,50432k@0x00120000(fs#1),12800k@0x03260000(fs#2),1152k@0x03EE0000(fs#3)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.debug klogd: Relocating machine vectors to 0xffff0000&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Console: colour dummy device 80x30&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Calibrating delay loop (skipped)... 132.71 BogoMIPS&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Memory: 64MB = 64MB total&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Memory: 63052KB available (1366K code, 299K data, 68K init)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Inode cache hash table entries: 4096 (order: 3, 32768 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Page-cache hash table entries: 16384 (order: 4, 65536 bytes)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: POSIX conformance testing by UNIFIX&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Linux NET4.0 for Linux 2.4&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Based upon Swansea University Computer Society NET3.039&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Initializing RT netlink socket&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: apm: Simulating APM BIOS version 1.2 (Driver version 1.0)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: i.MX21 Dynamic Power Management&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Starting kswapd&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Disabling the Out Of Memory Killer&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc., designed by Axis Communications AB.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: i2c-core.o: i2c core module version 2.6.2 (20011118)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pty: 256 Unix98 ptys configured&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Serial driver version 5.05c (2001-07-08) with no serial options enabled&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: UART driver version 0.3.6&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: I2C driver Feb 28 2007 / 13:31:04&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Initialize i2c-client-dbmx-codec module&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: s29gl512n: probing 16-bit flash bus&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd:  Amd/Fujitsu Extended Query Table v1.3 at 0x0040&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: number of CFI chips: 1&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Using Write Buffer method.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: buffer_Write_Time = 128&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: cfi_cmdset_0002: Disabling fast programming due to code brokenness.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Using static partition definition&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: Creating 5 MTD partitions on &amp;quot;s29gl512n&amp;quot;:&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00000000-0x00040000 : &amp;quot;bootloader&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00040000-0x00120000 : &amp;quot;kernel&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x00120000-0x03260000 : &amp;quot;fs #1&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03260000-0x03ee0000 : &amp;quot;fs #2&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.notice klogd: 0x03ee0000-0x04000000 : &amp;quot;fs #3&amp;quot;&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Linux TCP/IP 1.0 for NET4.0&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP Protocols: ICMP, UDP, TCP&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: IP: routing cache hash table of 512 buckets, 4Kbytes&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: TCP: Hash tables configured (established 4096 bind 8192)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: VFS: Mounted root (jffs2 filesystem).&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Freeing init memory: 68K&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: PCB version: ind3 v2&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SYSTCLK: SYSTCLK-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver GPIO-1.59 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: ****p_gpio_init_low_bat****&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: GPIO: p_gpio_it_init at 762&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver FRAMEBUF-1.12 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver SPI-1.20 (REFERENCED) Debug level 3&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInTX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: u32_spi1_MinLenghtForDMAInRX set to 300&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver LCD-1.20 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.info klogd: Driver TVLINK-1.45 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Reset from Software Reset.&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: Motorola PostProcessor Linux driver ver 0.64 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:02 imx21 daemon.warn klogd: pp: hw ver = 2&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: prp_dbg=0&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Motorola PreProcessor Linux driver ver 0.0 - Copyright (C) 2003 Motorola Inc&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: base_port=0x10026800 irq=50&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4d: module inserted&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: base_port=0x10026c00 irq=49&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: Compatble HW found with ID: 0x004c1882&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.info klogd: hmp4e: module inserted. Major = 249&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :PID of driver: 134 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanList not provided. Will use the default scan list. &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :ScanChannelList :1 6 11 14 2 7 12 3 8 13 4 9 5 10 &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :setting PhyType to: Rf-to-Rf&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Ref.Clock parameter not provided&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :Configure target for a reference clock of &#039;default=40&#039; Mhz.&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvRegEtherDev :Interface Name is: eth%d &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drv_Init :HEOCSIWPOWON: Powering on... &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Protocol Firmware will be loaded by driver ...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Initializing HHAL (PhgHhalInitialize)...&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Divider : 8&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd:  OCR2 : e4015308 (12582912)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: Reset : 3 / 27 (c497cc00 / e401531c)&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: p_gpio_init_gpio_status at 1262&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: POWER_FAIL signal NOT detected at GPIO driver init carry on !!! &lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: CHARGE_IN at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: LOW_BAT_OUT at init&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: No accessory plugged at init.  - Set Video on jack&lt;br /&gt;
Jan  1 00:00:03 imx21 daemon.warn klogd: GPIO: camera to front at init&lt;br /&gt;
Jan  1 00:00:04 imx21 daemon.warn klogd: **ChargeStatusPmb=========gpio_Read_ChargeStatus_Ready=1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: PhgOsal_linux_init_thread :assigning thread name and deamonize() .. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :Success&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init : registering callbacks with HHAL.. &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_COMPLETE; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :calling PhgHhalQueueMgmtReq()!&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1172:HHAL got Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.info klogd: PhgHhalQueueMgmtReq:1217:HHAL done Init message&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvMgmtCfmHndler :Using MAC Address: 00:08:c6:86:8b:99&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvPhase2Init :init etherdev; stopping queue, setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drv_Init :Philips WLAN Drv - loaded - in state: 1 &lt;br /&gt;
Jan  1 00:00:06 imx21 daemon.err klogd: SPI2:: drvInit :Philips WLAN Drv - loaded&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Device is not associated!&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Carrier flag is already set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvOpen :Disabling again netqueue&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.warn klogd: requested reg.domain code setting = 3&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :set u8LinkAdaptation  : 1 Result=[0]&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvIoctl :changed HEOCSIWLNADPALLOWRATES: 8 allowed rate codes&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:07 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:10 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; stopping queue&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 255&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step5&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :TIMEDOUT&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:11 imx21 daemon.err klogd: SPI2:: drvInitParamsAndPowerOnAndConnect :Connect failed!&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Motorola CSI Linux driver ver 0.1&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd:  - Copyright (C) 2004 Motorola Inc&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: &lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver SENSOR-1.29 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: i2c-client version : 1.9&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Initialize i2c-client-aic14 module&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Module i2c-client-aic14 initialized&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.alert klogd: Insert module aic14 (AIC14-1.0)&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.warn klogd: Module AIC14 assumes CODEC MCLK already configured for 20480000Hz&lt;br /&gt;
Jan  1 00:00:12 imx21 daemon.info klogd: Driver KPP-1.36 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:13 imx21 daemon.info klogd: Driver DOZE-1.27 (REFERENCED)&lt;br /&gt;
Jan  1 00:00:14 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_NETSYNC_HMON_NAME... &lt;br /&gt;
Jan  1 00:00:15 imx21 daemon.info netsyncd[315]: creating FIFO_HMON_NETSYNC_NAME... &lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:18 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00001003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-slot-0&lt;br /&gt;
Jan  1 00:00:19 imx21 daemon.err modprobe: modprobe: Can&#039;t locate module sound-service-0-0&lt;br /&gt;
Jan  1 00:00:20 imx21 local0.debug dhcpcd[337]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 local0.debug dhcpcd[337]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.err netsyncd[314]: father received(10) eth0 up! &lt;br /&gt;
Jan  1 00:00:23 imx21 daemon.info netsyncd[314]: Dhcp_start 337 return : 0  &lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:26 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:28 imx21 daemon.info netsyncd[314]: Dhcp_stop 359 return : 0  &lt;br /&gt;
Jan  1 00:00:28 imx21 local0.debug dhcpcd[347]: sending DHCP_RELEASE for 10.63.17.5 to 10.63.17.1 &lt;br /&gt;
Jan  1 00:00:29 imx21 local0.err dhcpcd[347]: terminating on signal 1 &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err netsyncd[314]: father received(12) eth0 down! &lt;br /&gt;
Jan  1 00:00:29 imx21 daemon.err klogd: SPI2:: drvStop :Driver Stop: disable TX queue! (usage: 2)&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvIoctl :Deauth BSSID: 00:1d:7e:18:e3:89&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVENT_DISCONNECT; setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000002, IFF_UP=0&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already closed&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :opening net device&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvOpen :ERROR: Associated, but Carrier flag is set to CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:41 imx21 daemon.err klogd: SPI2:: drvDoScan :Buero (bittorf)&lt;br /&gt;
Jan  1 00:00:42 imx21 daemon.err klogd: SPI2:: drvProcessScanCfm :Scan Confirm: Success 1 APs&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Req to connect to new WLAN network&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Disabling TX queue and setting CARRIER_OFF&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :Connecting To AP...&lt;br /&gt;
Jan  1 00:00:45 imx21 daemon.err klogd: SPI2:: drvInitConnect :step2&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PHGHHAL_EVNT_INIT_CONNECT; setting CARRIER_ON&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :netdev-&amp;gt;flags=0x00000003, IFF_UP=1&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :device was already opened; enabling queue&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step3 : u8Status 8&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step4&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :Successful&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvInitConnect :step6&lt;br /&gt;
Jan  1 00:00:46 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:54 imx21 local0.debug dhcpcd[386]: broadcasting DHCP_DISCOVER &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_OFFER received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 local0.debug dhcpcd[386]: DHCP_ACK received from  (10.63.17.1) &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: Dhcp_start 386 return : 0  &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info netsyncd[314]: NTP server request on : ntp.xs4all.nl &lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: drvSetWOWFilter: Enable UNICAST: Disable ARP: Enable&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Ip addr = 10.63.17.5. LMP=2&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Sensor driver: initialize device OV7660&lt;br /&gt;
Jan  1 00:00:57 imx21 daemon.warn klogd: Warning: Remapping obsolete /dev/fb* minor 32 to 1&lt;br /&gt;
Apr  7 09:58:16 imx21 daemon.info netsyncd[314]: NTP process return code : 0  &lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 4&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P0&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS wake (0) in Drvmain&lt;br /&gt;
Apr  7 09:58:19 imx21 daemon.info upgraded[312]: K_SW0_DWNLD_ACK &lt;br /&gt;
Apr  7 09:58:27 imx21 auth.info login[393]: root login  on `ttyp0&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11LongRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC0 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC1 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC2 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :dot11ShortRetryLimitAC3 = 8&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :PA Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :No state change!&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvIoctl :Fast PS Request&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.info klogd: PhgHhalDoM2SDMA:1661:--&amp;gt;P1&lt;br /&gt;
Apr  7 09:59:50 imx21 daemon.err klogd: SPI2:: drvHhalEventIndicationHandler :PS Ind (1) in Drvmain&lt;br /&gt;
Apr  7 10:14:53 imx21 auth.info login[408]: root login  on `ttyp1&#039; from `bittorf-AP.olsr&#039; &lt;br /&gt;
Apr  7 10:17:18 imx21 syslog.info -- MARK --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe von &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/proc/cpuinfo&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; auf einem VP6500==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /proc/cpuinfo &lt;br /&gt;
Processor       : ARM926EJ-Sid(wb) rev 4 (v5EJl)&lt;br /&gt;
BogoMIPS        : 133.01&lt;br /&gt;
Features        : swp half thumb fastmult &lt;br /&gt;
CPU implementer : 0x41&lt;br /&gt;
CPU architecture: ?(8)&lt;br /&gt;
CPU variant     : 0x0&lt;br /&gt;
CPU part        : 0x926&lt;br /&gt;
CPU revision    : 4&lt;br /&gt;
Cache type      : undefined 14&lt;br /&gt;
Cache clean     : undefined 14&lt;br /&gt;
Cache lockdown  : undefined 14&lt;br /&gt;
Cache unified   : Harvard&lt;br /&gt;
I size          : 16384&lt;br /&gt;
I assoc         : 4&lt;br /&gt;
I line length   : 32&lt;br /&gt;
I sets          : 128&lt;br /&gt;
D size          : 16384&lt;br /&gt;
D assoc         : 4&lt;br /&gt;
D line length   : 32&lt;br /&gt;
D sets          : 128&lt;br /&gt;
&lt;br /&gt;
Hardware        : Freescale i.MX2 ADS&lt;br /&gt;
Revision        : 0000&lt;br /&gt;
Serial          : 0000000000000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aktivierung WPA2 Unterstützung ==&lt;br /&gt;
&amp;lt;p&amp;gt;Standardmäßig kann das Telefon nur WPA, dabei unterstützt es allerdings auch &amp;lt;b&amp;gt;WPA mit AES&amp;lt;/b&amp;gt; Verschlüsselung.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Es gibt zwei verschiedene Tricks mit denen auch WPA2 aktiviert werden kann.&lt;br /&gt;
Allerdings wurde von einigen ein Einbruch der Verbindungsgeschwindigkeit festgestellt (scheint jedoch nur bei geringem Akkuladestand aufzutreten).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trick1 ===&lt;br /&gt;
Mittels&lt;br /&gt;
 vi /etc/marvell/wpa_supplicant.conf&lt;br /&gt;
den Texteditor starten.&lt;br /&gt;
Mit PageDown (Bild runter) bis zum Ende des Files gehen.&lt;br /&gt;
Die Zeilen &lt;br /&gt;
 proto=WPA&lt;br /&gt;
 pairwise=TKIP&lt;br /&gt;
 group=TKIP&lt;br /&gt;
auskommentieren, indem ein # vorangestellt wird:&lt;br /&gt;
* cursor auf Beginn einer Zeile &lt;br /&gt;
* i drücken zum Einfügen&lt;br /&gt;
* # eintippen&lt;br /&gt;
* [Esc]&lt;br /&gt;
Sind alle Zeilen auskommentiert, dann mittels&lt;br /&gt;
 :wq[enter]&lt;br /&gt;
abspeichern und Editor verlassen.&lt;br /&gt;
&lt;br /&gt;
Danach neu booten.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man sich mit dieser Änderung in einem reinen WPA2 Netz anmelden (registrieren), kann man als Verschlüsselung nur noch WEP auswählen - der Verbindungsversuch scheitert natürlich! (Hardware: Fritz!Box 7270, PHILIPS VP5500)&lt;br /&gt;
&lt;br /&gt;
Also am Accesspoint WPA2 + WPA einstellen, Telefon registrieren, dann Accesspoint auf WPA2 konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Wichtige Info von airmack via IRC:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um sich eine Wiederbelebung per serieller Konsole zu ersparen, ist es günstig, immer nur Einträge an die wpa_supplicant.conf &amp;lt;u&amp;gt;hinten anzuhängen&amp;lt;/u&amp;gt;, niemals aber vorne einzufügen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt noch eine Variante wieder auf das Telefon zu kommen, wenn man sich den Weg per wireless abgeschnitten hat: der Demo-Modus: Dieser Modus war dazu gedacht die Funktionalitaet ohne SIP-Server auszuprobieren. 2 Geraete starten dazu im WLAN-AdHoc-Modus mit unterschiedlichen IP&#039;s (192.168.10.1 + 192.168.10.2 , jeweils /24 = 255.255.255.0) und machen ein IBSS-Netzwerk mit WEP-Verschluesselung auf (Key: VP6500 = 5648751265 beim VP5500 = 7295569793). Ergo kann man das Telefon in den Demo-Modus zwingen, gibt sich eine passende WLAN und IP-Einstellungen und schon ist man wieder drauf und kann fehleinstellungen wieder beheben). Dummerweise wird eine zufaellige IBSS-Cell-ID verwendet. Neuere Betriebssysteme koennen der Zelle trotzdem beitreten. Als ESSID kann man &#039;&#039;demo_mode_obiwan&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Trick2 ===&lt;br /&gt;
Dieser Trick funktioniert mit Accesspoints, bei denen man auch WPA Verbindungen mit AES verschlüsseln kann. Vorteil dieses Tricks ist, dass man die wpa_supplicant.conf nicht manuell editieren muss. Allerdings unterstützt nicht jeder Accesspoint WPA mit AES (aber dd-wrt kann das).&lt;br /&gt;
&lt;br /&gt;
Man konfiguriert den Accesspoint zunächst mit WPA PSK und wählt AES als Verschlüsselungsalgorithmus. Jetzt meldet man das Telefon an, das Telefon erkennt richtig, dass eine WPA Verbindung vorliegt und verbindet sich per WPA und AES mit dem Accesspoint. Anschliessend konfiguriert man den Accesspoint von WPA PSK AES nach WPA2 PSK AES. Jetzt schaltet man das VP5500/6500 aus und wieder ein. Nachdem es fertig gebootet hat, verbindet es sich automisch per WPA2 PSK und mit AES Verschlüsselung. Fertig.&lt;br /&gt;
&lt;br /&gt;
== Menüs ==&lt;br /&gt;
=== Hauptmenu ===&lt;br /&gt;
&lt;br /&gt;
Das File &lt;br /&gt;
 /usr/local/etc/defaultbuttons.conf&lt;br /&gt;
enthält unter anderm die definition des Hauptmenus.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist der Abschnitt Menu besonders interessant.&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/camera.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications&lt;br /&gt;
  4 = Settings&lt;br /&gt;
  5 = Applications/addressbook.desktop&lt;br /&gt;
  6 = Settings/RingProfiles.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 2&lt;br /&gt;
&lt;br /&gt;
&#039;Rows&#039; und &#039;Columns&#039; geben an, wieviel Reihen und Spalten das Hauptmenu hat.&lt;br /&gt;
Über die Zuweisungen 1 bis (Columns * Rows) kann man dann den Menüpositionen die Menüpunkte zuweisen.&lt;br /&gt;
Die Menupunkte sind definiert in den Verzeichnissen unter &lt;br /&gt;
 /usr/local/apps&lt;br /&gt;
gibt man nur ein Verzeichnis an, dann erscheint ein Submenü, dessen Icon und Name in der .directory -Datei des entsprechenden Ordner definiert ist.&lt;br /&gt;
direkte Menupunkte haben Dateinamen mit der Endung .desktop&lt;br /&gt;
&#039;Default&#039; bestimmten vorselektierten Eintrag.&lt;br /&gt;
&lt;br /&gt;
Hier ein weiteres Beispiel für ein angepasstes Menu:&lt;br /&gt;
  [Menu]&lt;br /&gt;
  1 = Applications/addressbook.desktop&lt;br /&gt;
  2 = Applications/callhistory.desktop&lt;br /&gt;
  3 = Applications/sysinfo.desktop&lt;br /&gt;
  4 = Applications&lt;br /&gt;
  5 = Settings&lt;br /&gt;
  6 = Games&lt;br /&gt;
  7 = Applications/camera.desktop&lt;br /&gt;
  8 = Applications/photoedit.desktop&lt;br /&gt;
  9 = Applications/manualsub.desktop&lt;br /&gt;
  Columns = 3&lt;br /&gt;
  Default = 5&lt;br /&gt;
  Map = 123456789*0#&lt;br /&gt;
  Rows = 3&lt;br /&gt;
&lt;br /&gt;
Der Ordner Games ist (momentan ;) leer.&lt;br /&gt;
&lt;br /&gt;
=== Genereller Aufbau Menü-Einträge===&lt;br /&gt;
Die Einträge für die Menüs sind im Filesystem abgelegt:&lt;br /&gt;
&lt;br /&gt;
* Settings: /usr/local/apps/Settings&lt;br /&gt;
* Applications: /usr/local/apps/Applications&lt;br /&gt;
* Klingeltöne: /usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Die Dateien haben die Endung &amp;quot;.desktop&amp;quot; und sind normale Textdateien, die die relevanten Infos enthalten.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel aus dem Settingsordner:&lt;br /&gt;
  [Translation]&lt;br /&gt;
  File=QtopiaSettings&lt;br /&gt;
  Context=Sound&lt;br /&gt;
  [Desktop Entry]&lt;br /&gt;
  Type=Application&lt;br /&gt;
  Exec=sound&lt;br /&gt;
  Icon=Sound&lt;br /&gt;
  Name[]=Sound&lt;br /&gt;
  CanFastload=0&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Translation&#039; gibt an in welchem File, die Lokalisationsdaten stehen.&lt;br /&gt;
&lt;br /&gt;
Der Abschnitt &#039;Desktop Entry&#039;:&lt;br /&gt;
* Type: Typ des Eintrages &lt;br /&gt;
** Application für Anwendungen&lt;br /&gt;
** audio/x-wav für Klingeltöne&lt;br /&gt;
* Exec: Anwendung, die ausgeführt werden soll&lt;br /&gt;
* Icon: Icon, das im Menü benutzt wird. &lt;br /&gt;
** Pfad ist meist: /usr/local/pics/[Exex]/[Icon].png&lt;br /&gt;
** manchmal aber auch: /usr/local/pics/icons/[14x14|16x16|22x22]/[Icon].png&lt;br /&gt;
* Name[]: Name im Menü, wird über das in Translation angegebe File und Context aufgelöst. Dies wird verhindert, wenn die Klammern wegelassen werden, was das Einfügen eigener Einträge ermöglicht&lt;br /&gt;
&lt;br /&gt;
Hier ein Textfile mit allen desktop-Files als Referenz: [[File:alleDesktopFiles.txt]]&lt;br /&gt;
&lt;br /&gt;
=== Versteckte Menüeinträge ===&lt;br /&gt;
in den oben genannten Ordnern existieren ein paar Dateien mit der Endung &#039;.desktopMASK&#039;.&lt;br /&gt;
Benennt man diese um, werden die Einträge nach einem Neustart im Menü freigeschalten.&lt;br /&gt;
&lt;br /&gt;
folgendes an der Kommandozeile eingeben:&lt;br /&gt;
 cd /usr/local/apps/Settings&lt;br /&gt;
 mv datetime.desktopMASK datetime.desktop&lt;br /&gt;
 mv callforward.desktopMASK callforward.desktop&lt;br /&gt;
 mv calloptions.desktopMASK calloptions.desktop&lt;br /&gt;
 mv resetparam.desktopMASK resetparam.desktop&lt;br /&gt;
 mv subkpncode.desktopMASK subkpncode.desktop&lt;br /&gt;
&lt;br /&gt;
Dies aktiviert folgende Optionen:&lt;br /&gt;
* Datums/Zeit-Einstellung&lt;br /&gt;
* Anrufweiterleitung&lt;br /&gt;
* Anrufoptionen&lt;br /&gt;
* Parameter zurücksetzen&lt;br /&gt;
* Number Switch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nützlichsten sind wohl die ersten Einträge.&lt;br /&gt;
Bei dem &amp;quot;Number Switch&amp;quot; ist unklar, was er bewirken soll. Beim Start wird ein Code abgefragt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterhin kann im Verzeichnis /usr/local/apps/Applications eine [[File:demomode.desktop]] anlegen.&lt;br /&gt;
&lt;br /&gt;
Hierfür ist folgende Prozedur nötig:&lt;br /&gt;
* im Terminal&lt;br /&gt;
                 cd /usr/local/apps/Applications&lt;br /&gt;
                 vi demomode.desktop&lt;br /&gt;
&lt;br /&gt;
* i drücken &lt;br /&gt;
* folgendes Textfragment einfügen &lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaApplications&lt;br /&gt;
                 Context=DemoMode&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Exec=demomode&lt;br /&gt;
                 Icon=Camera&lt;br /&gt;
                 Type=Application&lt;br /&gt;
                 Name[]=DemoMode&lt;br /&gt;
* [Esc] &lt;br /&gt;
* :wq [Enter] &lt;br /&gt;
&lt;br /&gt;
Dies schaltet einen Demo-Modus frei.&lt;br /&gt;
&lt;br /&gt;
=== Französisch ===&lt;br /&gt;
Es gab die Geräte wohl auch in Frankreich von der France Telekom.&lt;br /&gt;
Zumindest sind entsprechende monitor und upgrade Referenz-Dateien&lt;br /&gt;
vorhanden in denen das steht. Daher wohl auch die Französischen&lt;br /&gt;
Sprachdateien, die zwar auf dem Gerät sind, allerdings in einem&lt;br /&gt;
Unterverzeichnis, so das sie nicht auswählbar sind.&lt;br /&gt;
&lt;br /&gt;
Um diese Dateien zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/local/i18n&lt;br /&gt;
 mv NOTUSED/fr .&lt;br /&gt;
&lt;br /&gt;
Nun ist auch noch französisch als Sprache verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Grafische Anpassungen ==&lt;br /&gt;
So gut wie alle Grafiken liegen im Verzeichnis /usr/local/pics und können beliebig ausgetauscht werden (gleicher Dateityp, gleiche Größe).&lt;br /&gt;
&lt;br /&gt;
Einige besonders interessante werden hier aufgeführt:&lt;br /&gt;
&lt;br /&gt;
=== Eigene Startup/Shutdown-Animation ===&lt;br /&gt;
&lt;br /&gt;
Die Animation beim Starten oder Herunterfahren sind normale (animierte) GIFs. Diese findet man in&lt;br /&gt;
&lt;br /&gt;
 /usr/local/pics/qpe&lt;br /&gt;
&lt;br /&gt;
Die Links &amp;quot;splash.gif&amp;quot; und &amp;quot;goodbye.gif&amp;quot; zeigen auf die tasächlich zu verwendenen Dateien (&amp;quot;splash-chuck.gif&amp;quot;, &amp;quot;goodby-chuck.gif&amp;quot;).&lt;br /&gt;
Man kann sein eigenes animiertes GIF im Format 176x220 Pixel raufladen und die&lt;br /&gt;
splash.gif entsprechend neu verlinken. Dazu löscht man zuerst die alte&lt;br /&gt;
mit:&lt;br /&gt;
&lt;br /&gt;
 rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Anschliessend erzeugt man den Link neu, dabei zeigt er dann auf die&lt;br /&gt;
eigene Datei:&lt;br /&gt;
&lt;br /&gt;
 ln -s /pfad/zur/eigenedatei.gif /usr/local/pics/qpe/splash.gif&lt;br /&gt;
&lt;br /&gt;
Danach wird dann bei jedem Neustart die eigene Animation angezeigt.&lt;br /&gt;
Analog hierzu mit der goodbye.gif.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, man packe das Bild auf einen Webserver. Dann am Gerät über telnet&lt;br /&gt;
anmelden und:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
cd /usr/local/pics/qpe/&lt;br /&gt;
wget http://dein.server/woauchimmer/Matrix5.gif&lt;br /&gt;
rm /usr/local/pics/qpe/splash.gif&lt;br /&gt;
ln -s Matrix5.gif splash.gif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die GIF Animation kann bis zu 176x220 Pixel groß sein.&lt;br /&gt;
Kleinere (möglicherweise auch größere) Bilder werden zentriert.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Bild:walking_baby_tux.gif&lt;br /&gt;
Bild:custwakeup2.gif&lt;br /&gt;
Bild:custgoodbye2.gif&lt;br /&gt;
Bild:94vw4.gif&lt;br /&gt;
Bild:1_Matrix--16984.gif&lt;br /&gt;
Bild:1_Matrix--16985.gif&lt;br /&gt;
Bild:3.gif&lt;br /&gt;
Bild:ClanSpider2.gif&lt;br /&gt;
Bild:TS12.gif&lt;br /&gt;
Bild:Matrix5.gif&lt;br /&gt;
Bild:qtopia3.gif&lt;br /&gt;
Bild:qtopia0.gif&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigener Boot/Update-Screen ===&lt;br /&gt;
&lt;br /&gt;
Der Boot-Screen, oder der Update-Screen liegen als Rohdaten vor.&lt;br /&gt;
 /user_data/data/welcome.rgb565&lt;br /&gt;
 /usr/local/startup_V4.20/update.bin&lt;br /&gt;
&lt;br /&gt;
Weitere Beispielbilder:&lt;br /&gt;
 /user_data/prod/data/lcd_test_card1.bin&lt;br /&gt;
 /user_data/prod/data/lcd_test_card2.bin&lt;br /&gt;
&lt;br /&gt;
Diese werden direkt in den Framebuffer geschrieben.&lt;br /&gt;
Daher müssen sich diese genau ein bestimmtes Format halten: &lt;br /&gt;
* Größe 240 x 220 (Das Display ist 176 x 220, der Rest ist also nicht zu sehen)&lt;br /&gt;
* 16bit pro Pixel RGB565&lt;br /&gt;
&lt;br /&gt;
Um solch ein Bild zu erstellen sind folgende Schritte notwendig:&lt;br /&gt;
# Ein Bild in Gimp mit 176x220 erstellen&lt;br /&gt;
# das Bild vertikal spiegeln&lt;br /&gt;
# Bild-&amp;gt;Leinwandgröße auf 240x220 erweitern (Bilddaten ganz nach links)&lt;br /&gt;
# Datei-&amp;gt;Kopie speichern...&lt;br /&gt;
# Als Windowsbitmap -&amp;gt; erweiterete Optionen -&amp;gt; 16bit R5G6B5&lt;br /&gt;
# BMP-Header entfernen (dies kann auch auf dem Telefon gemacht werden)&lt;br /&gt;
         tail -c 105600 input.bmp &amp;gt; output.raw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Von der Kommandozeile kann auch manuell das Bild in den Framebuffer geschrieben werden.&lt;br /&gt;
 cat /user_data/prod/data/lcd_test_card1.bin &amp;gt; /dev/fb0&lt;br /&gt;
&lt;br /&gt;
== Wichtige Verzeichnisse ==&lt;br /&gt;
&lt;br /&gt;
=== Adressdaten ===&lt;br /&gt;
&lt;br /&gt;
# cat /user_data/home/Applications/addressbook/addressbook.xml &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE Addressbook &amp;gt;&amp;lt;AddressBook&amp;gt;&lt;br /&gt;
  &amp;lt;Groups&amp;gt;&lt;br /&gt;
  &amp;lt;/Groups&amp;gt;&lt;br /&gt;
  &amp;lt;Contacts&amp;gt;&lt;br /&gt;
    &amp;lt;Contact&lt;br /&gt;
                                Uid=&amp;quot;-1269720893&amp;quot; &lt;br /&gt;
                         Categories=&amp;quot;-1269431263;-1266109093;-1266109094&amp;quot; &lt;br /&gt;
                          FirstName=&amp;quot;ich&amp;quot; &lt;br /&gt;
                             FileAs=&amp;quot;ich&amp;quot; &lt;br /&gt;
                           JobTitle=&amp;quot;cc&amp;quot; &lt;br /&gt;
                         Department=&amp;quot;dep&amp;quot;&lt;br /&gt;
                            Company=&amp;quot;aa&amp;quot; &lt;br /&gt;
                      BusinessPhone=&amp;quot;55&amp;quot; &lt;br /&gt;
                        BusinessFax=&amp;quot;77&amp;quot; &lt;br /&gt;
                     BusinessMobile=&amp;quot;66&amp;quot; &lt;br /&gt;
                          HomePhone=&amp;quot;55&amp;quot;&lt;br /&gt;
                         HomeMobile=&amp;quot;11&amp;quot; &lt;br /&gt;
                             HomePc=&amp;quot;12&amp;quot;&lt;br /&gt;
                           HomeData=&amp;quot;13&amp;quot;&lt;br /&gt;
                            HomeFax=&amp;quot;14&amp;quot;&lt;br /&gt;
                     BusinessStreet=&amp;quot;street&amp;quot;&lt;br /&gt;
                       BusinessCity=&amp;quot;city&amp;quot;&lt;br /&gt;
                      BusinessState=&amp;quot;state&amp;quot;&lt;br /&gt;
                        BusinessZip=&amp;quot;zip&amp;quot;&lt;br /&gt;
                    BusinessCountry=&amp;quot;country&amp;quot;&lt;br /&gt;
                      BusinessPager=&amp;quot;88&amp;quot;&lt;br /&gt;
                             Office=&amp;quot;office&amp;quot;&lt;br /&gt;
                         Profession=&amp;quot;prof&amp;quot;&lt;br /&gt;
                          Assistant=&amp;quot;ass&amp;quot;&lt;br /&gt;
                            Manager=&amp;quot;man&amp;quot;&lt;br /&gt;
                         HomeStreet=&amp;quot;ptjml&amp;quot;&lt;br /&gt;
                           HomeCity=&amp;quot;cit&amp;quot;&lt;br /&gt;
                          HomeState=&amp;quot;stat&amp;quot;&lt;br /&gt;
                            HomeZip=&amp;quot;zi&amp;quot;&lt;br /&gt;
                        HomeCountry=&amp;quot;coun&amp;quot;&lt;br /&gt;
                             Spouse=&amp;quot;spouse&amp;quot;&lt;br /&gt;
                             Gender=&amp;quot;1&amp;quot;&lt;br /&gt;
                           Birthday=&amp;quot;20100322&amp;quot;&lt;br /&gt;
                        Anniversary=&amp;quot;20100429&amp;quot;&lt;br /&gt;
                           Children=&amp;quot;child&amp;quot;&lt;br /&gt;
                              Notes=&amp;quot;gakm&amp;quot;&lt;br /&gt;
               CompanyPronunciation=&amp;quot;bb&amp;quot;&lt;br /&gt;
                   BUSINESS_CONTACT=&amp;quot;&amp;quot;&lt;br /&gt;
                          photofile=&amp;quot;ci-1269721575-0.jpg&amp;quot;&lt;br /&gt;
                   qdl-private-data=&amp;quot;&amp;quot;&lt;br /&gt;
                               tone=&amp;quot;/usr/local/etc/SystemRingTones/16-Tetris.desktop&amp;quot;&lt;br /&gt;
         /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554029&amp;quot; &lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone1&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone1&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**621&amp;quot;  &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/15-Techno2.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
    &amp;lt;Contact Uid=&amp;quot;-1269554032&amp;quot; &lt;br /&gt;
             Categories=&amp;quot;-1269431263&amp;quot;&lt;br /&gt;
             FirstName=&amp;quot;VoIP&amp;quot; &lt;br /&gt;
             LastName=&amp;quot;Phone3&amp;quot; &lt;br /&gt;
             FileAs=&amp;quot;VoIP Phone3&amp;quot; &lt;br /&gt;
             HomeMobile=&amp;quot;**623&amp;quot;  &lt;br /&gt;
             BUSINESS_CONTACT=&amp;quot;&amp;quot; &lt;br /&gt;
             qdl-private-data=&amp;quot;&amp;quot; &lt;br /&gt;
             tone=&amp;quot;/usr/local/etc/SystemRingTones/08-Celtrelax.desktop&amp;quot;  /&amp;gt;&lt;br /&gt;
  &amp;lt;/Contacts&amp;gt;&lt;br /&gt;
  &amp;lt;/AddressBook&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UID ist wohl egal, solange sie nicht zweimal vorkommen.&lt;br /&gt;
&lt;br /&gt;
Die Beschränkung auf 500 Adressbucheinträge kann man auch aufheben&lt;br /&gt;
&amp;quot;maxEntries = 500&amp;quot; in der &amp;quot;Contacts.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die Kategorien stehen in /user_settings/Categories.xml:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;!DOCTYPE CategoryList&amp;gt;&lt;br /&gt;
  &amp;lt;Categories&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431263&amp;quot; name=&amp;quot;_Personal&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Category id=&amp;quot;-1269431262&amp;quot; name=&amp;quot;_Business&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/Categories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einem Kontakt eine bestimmte Kategorie zuordnet, dann wird die ID dieser Kategorie im Attribut &amp;quot;Categories&amp;quot; des Kontakts eingetragen (s.o.). Wenn die Kategorie BUSINESS gewählt wird, steht im Attribut &amp;quot;BUSINESS_CONTACT&amp;quot; eine &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Einrücken der Attribute mit TABs in den Dateien ist übrigens nicht erlaubt!&lt;br /&gt;
&lt;br /&gt;
Die Software des Telefons wertet die XML Datei bei jedem Zugriff neu aus. Es ist also möglich, die Datei im laufendem Betrieb zu ändern (z.B. per Script).&lt;br /&gt;
&lt;br /&gt;
=== Fotos &amp;amp; Videoschnappschüsse ===&lt;br /&gt;
&lt;br /&gt;
Alle Bilder die mit der Kamera aufgenommen werden, sowie Schnappschüsse die während eines Videocalls aufgenommen wurden, befinden sich in folgendem Verzeichnis:&lt;br /&gt;
       /user_data/home/Documents&lt;br /&gt;
&lt;br /&gt;
Die Bilder sind dabei nach folgendem Namensschema benannt:&lt;br /&gt;
&lt;br /&gt;
       DD-MM-YYYY-hh:mm:ss.jpg&lt;br /&gt;
&lt;br /&gt;
Tag (DD) und Monat (MM) können auch einstellig sein.&lt;br /&gt;
&lt;br /&gt;
== Klingeltöne ==&lt;br /&gt;
&lt;br /&gt;
Die Klingeltöne liegen, wie oben beschrieben unter:&lt;br /&gt;
&lt;br /&gt;
/usr/local/etc/SystemRingTones/&lt;br /&gt;
&lt;br /&gt;
Es sind .wav Dateien mit (16Khz, 16Bit, Mono), welche sich, z.B. mit MhWaveEdit (Linux/GTK) recht komfortabel erzeugen lassen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den Audio Dateien müssen noch im selben Verzeichnis entsprechende *.desktop dateien angelegt werden, damit alles korrekt ins Menü integriert wird.&lt;br /&gt;
Eine für den fiktiven 16. Klingelton erzeugte Datei &amp;quot;16-Tetris.desktop&amp;quot; könnte den folgenden Inhalt haben:&lt;br /&gt;
&lt;br /&gt;
                 [Desktop Entry]&lt;br /&gt;
                 Categories =&lt;br /&gt;
                 File =16-Tetris.wav&lt;br /&gt;
                 Name[] =16-Tetris&lt;br /&gt;
                 Type = audio/x-wav&lt;br /&gt;
                 [Translation]&lt;br /&gt;
                 File=QtopiaRingTones&lt;br /&gt;
                 Context=16-Tetris&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlegen der Dateien sollte sie dann im Menü auftauchen und auswählbar sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timeserver ==&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/170483#1645101&lt;br /&gt;
Unter /usr/local/data steht in der monitor.cfg und monitor_ref_KPN.cfg&lt;br /&gt;
die Adressen der Zeitserver &amp;quot;ntp.xs4all.nl&amp;quot; und &amp;quot;130.142.110.71&amp;quot;. Diese&lt;br /&gt;
könnte man z.B. auf &amp;quot;ptbtime1.ptb.de&amp;quot; und &amp;quot;ptbtime2.ptb.de&amp;quot; ändern.&lt;br /&gt;
&lt;br /&gt;
(http://www.mikrocontroller.net/topic/170483#1649594)&lt;br /&gt;
das telefon benutzt *nicht ntp* sondern das time-protokoll auf port 37 -&lt;br /&gt;
chronos.zedat.fu-berlin.de kann man als server nehmen.&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Software ==&lt;br /&gt;
=== Dropbear (SSH-Server) installieren ===&lt;br /&gt;
&lt;br /&gt;
# Mit telnet auf dem Gerät einloggen&lt;br /&gt;
# folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://vp6500.bd8.nl/bin/dropbear.tgz&lt;br /&gt;
       tar -xzf dropbear.tgz&lt;br /&gt;
       rm dropbear.tgz&lt;br /&gt;
       cd /etc/rc.d/init.d&lt;br /&gt;
       mv dropbear S90dropbear&lt;br /&gt;
       ./S90dropbear start&lt;br /&gt;
Kommando 6 (mv ...) ist notwendig damit dropbear bei jedem Reboot automatisch&lt;br /&gt;
gestartet wird.&lt;br /&gt;
&lt;br /&gt;
hier ein Alternativlink falls Telnet Probleme macht:&lt;br /&gt;
 wget http://www.mikrocontroller.net/attachment/74656/dropbear.tgz&lt;br /&gt;
&lt;br /&gt;
=== Nano 2.2.3 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /usr/bin&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74023/nano&lt;br /&gt;
* Mit folgendem Befehl den Editor ausführbar machen:&lt;br /&gt;
       chmod +x /usr/bin/nano&lt;br /&gt;
* Nun ist vi Geschichte ;-)&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.0.9 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74380/openvpn.tar.gz&lt;br /&gt;
       tar -xzf openvpn.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN 2.1.1 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74395/openvpn-2.1.1.tar.gz&lt;br /&gt;
       tar -xzf openvpn-2.1.1.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
=== Tinc 1.0.12 installieren ===&lt;br /&gt;
&lt;br /&gt;
* Mit telnet auf dem Gerät einloggen&lt;br /&gt;
* folgendes in die Kommandozeile kopieren&lt;br /&gt;
       cd /&lt;br /&gt;
       wget http://www.mikrocontroller.net/attachment/74396/tinc-1.0.12.tar.gz&lt;br /&gt;
       tar -xzf tinc-1.0.12.tar.gz&lt;br /&gt;
       depmod&lt;br /&gt;
       mknod /dev/net/tun c 10 200&lt;br /&gt;
&lt;br /&gt;
= SIP Einstellungen =&lt;br /&gt;
&lt;br /&gt;
== Einstellung für 1und1 ==&lt;br /&gt;
&lt;br /&gt;
* SIP1:&lt;br /&gt;
** Display Name: ...&lt;br /&gt;
** Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Telephone Number: 0#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
* Auth:&lt;br /&gt;
** Auth Username: 49#VORWAHLOHNE0#NUMMER#&lt;br /&gt;
** Password: *********&lt;br /&gt;
* Server:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* Proxy:&lt;br /&gt;
** sip.1und1.de:5060&lt;br /&gt;
* RTP:&lt;br /&gt;
** 30000 und 30019&lt;br /&gt;
* STUN:&lt;br /&gt;
** stun.1und1.de&lt;br /&gt;
* STUN Server Port:&lt;br /&gt;
** 3478&lt;br /&gt;
* SIP2:&lt;br /&gt;
** UDP: 5060&lt;br /&gt;
** TCP: 5060&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Sipgate ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Sipgate Username&lt;br /&gt;
**User Name: your SIPgate-ID&lt;br /&gt;
**Telephone Number:  Sipgate-Telefonnummer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentification UserName: your SIPgate-ID&lt;br /&gt;
**Password: Sipgate Passwort&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register address:port: sipgate.de:5060&lt;br /&gt;
*Proxy&lt;br /&gt;
**SIP proxy1 address:port: sipgate.de:5060&lt;br /&gt;
*SIP2&lt;br /&gt;
**SIP Port Listen&lt;br /&gt;
**for UDP: 5062&lt;br /&gt;
**for TCP: 5062&lt;br /&gt;
**for TCP TLS: 5053&lt;br /&gt;
*STUN: [X] use rport&lt;br /&gt;
&lt;br /&gt;
SIP Outbound muss leer sein.&lt;br /&gt;
&lt;br /&gt;
Ein Videotelefonat von Sipgate zu Sipgate zwischen zwei VP6500 wurde erfolgreich getestet. Gegebenenfalls muss die eigene Videoübertragung noch durch Drücken der Taste &#039;&#039;&#039;Video&#039;&#039;&#039; gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Ekiga.net ==&lt;br /&gt;
&lt;br /&gt;
*SIP1&lt;br /&gt;
**Display Name: Irgendwas&lt;br /&gt;
**User Name: username&lt;br /&gt;
**Telephone Number: leer&lt;br /&gt;
*Auth&lt;br /&gt;
**Authentication User Name: username&lt;br /&gt;
**Password: password&lt;br /&gt;
*Server&lt;br /&gt;
**SIP register: ekiga.net:5060&lt;br /&gt;
**Protocol: ( ) TCP (*) UDP&lt;br /&gt;
**Expire Timer: 3600&lt;br /&gt;
**Keep Alive: 0&lt;br /&gt;
*Proxy&lt;br /&gt;
**alle leer&lt;br /&gt;
*STUN&lt;br /&gt;
**( ) use rport&lt;br /&gt;
**STUN Server IP address: stun.ekiga.net&lt;br /&gt;
**STUN Server port: 3478&lt;br /&gt;
*SIP2&lt;br /&gt;
**(*) Symmetric Mode&lt;br /&gt;
**UDP: 5060&lt;br /&gt;
**TCP: 5060&lt;br /&gt;
**TCP TLS: 5061&lt;br /&gt;
*OBproxy&lt;br /&gt;
**alle leer&lt;br /&gt;
&lt;br /&gt;
Nach der (kostenlosen) Registrierung bei ekiga.net und der Anmeldung des Telefons kann man unter der 500 einen Audio und Video(!) Test machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere features: https://www.ekiga.net/index.php?page=services&amp;lt;br&amp;gt;&lt;br /&gt;
Ekiga teilt keine Festnetz Rufnummern zu, daher ist ein Anruf von/zu Festnetz Telefonen nicht möglich.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Bei Ekiga.net angemeldete Geräte können aber problemlos untereinander telefonieren, sogar mit Video. Da man vom Mainscreen des VP5500/6500 aus direkt nur numerische Kontakte (herkömmliche Telefonnumern) wählen kann, Ekiga.net Telefonnummern aber aus [Benutzername]@ekiga.net bestehen, legt man über das Menü des VP5500/6500 einfach &amp;lt;b&amp;gt;einen neuen Kontakt&amp;lt;/b&amp;gt; (Telefonbuch) an. Als Video-Rufnummer trägt man einfach [Benutzername]@ekiga.net ein, wobei [Benutzername] der Name des Ekiga-Accounts ist, den man erreichen will. Zwischen der Eingabe von Buchstaben, Zahlen und Sonderzeichen kann man dabei mit der &amp;lt;b&amp;gt;[#]&amp;lt;/b&amp;gt;-Taste des VP5500/6500 umschalten.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sollte bei einem Telefonat über Ekiga Video einmal nicht funktionieren, hilft eventuell die manuelle Aktivierung der Videofunktion mittels der &amp;lt;b&amp;gt;Video-Taste&amp;lt;/b&amp;gt; auf der Tastatur des VP6500&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellung für Fritzbox 7170/7270 und andere mit SIP-Registrar ==&lt;br /&gt;
Die Anmeldung eines Telefons auf der Fritzbox starten (System/Ansicht/&amp;quot;Expertenansicht aktivieren&amp;quot;, dann Telefonie/Telefoniegeräte/&amp;quot;Neues Gerät einrichten&amp;quot;, &amp;quot;Telefon&amp;quot;, &amp;quot;Bitte auswählen&amp;quot;/&amp;quot;LAN/WLAN (IP-Telefon)&amp;quot;) und sich eine Nummer geben lassen,&amp;lt;br&amp;gt; dann in Registration auf dem VPx500 wechseln und die Einstellungen wie unten vornehmen.&amp;lt;br&amp;gt; Anschließend will das Telefon diese Einstellungen aktivieren, vorher noch auf der FB die Anmeldung starten.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Im Beispiel will die FB die Nummer 621 vergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP1&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Display Name: &amp;lt;leer lassen&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
User Name: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Telephone Number: 621&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Auth&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Authentication UserName: 621&amp;lt;br&amp;gt;&lt;br /&gt;
Password: [hier das gleiche, wie auf der FB eingeben]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter Server&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
SIP register address:port&amp;lt;br&amp;gt;&lt;br /&gt;
192.168.2.1:5060 (IP Bitte auf Euer Netz anpassen) oder alternativ: fritz.box:5060&amp;lt;br&amp;gt;&lt;br /&gt;
Protocol: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
ExpireTime: 3600&amp;lt;br&amp;gt;&lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reiter SIP2&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[ ] Symmetric Mode&amp;lt;br&amp;gt;&lt;br /&gt;
SIP Port Listen&amp;lt;br&amp;gt;&lt;br /&gt;
for UDP: 5060&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen dazu:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Protokoll: UDP&amp;lt;br&amp;gt;&lt;br /&gt;
Bei TCP hat das VP6500 nach Minuten oder Stunden immer wieder die Verbindung zur FB verloren.&amp;lt;br&amp;gt; &lt;br /&gt;
Keep Alive: 300&amp;lt;br&amp;gt;&lt;br /&gt;
Die Keep Alive Time habe ich eingestellt, weil ich die TCP Probleme umgehen &amp;lt;br&amp;gt;wollte. Ich denke nicht, dass es zu Problemen bzgl. Akku kommt. Da es so &amp;lt;br&amp;gt;aber perfekt funktioniert, habe ich es gelassen. Das UDP Protokoll kommt zudem mit weniger Netzwerk-Traffic aus.&amp;lt;br&amp;gt;&lt;br /&gt;
Anmeldung:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anmeldung wurde von der Fritz!Box nicht immer erfolgreich bestätigt. Einfach Weiter klicken und die restlichen Einstellungen vornehmen.&amp;lt;br&amp;gt; Spätestens nach einem Reboot des VPx500 funktioniert alles einwandfrei.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls eure Fritz!Box keine Möglichkeit bietet, ein IP-Telefon anzumelden, empfehle ich euch mal in das http://wiki.ip-phone-forum.de/skript:speedport2fritz einzulesen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bzw. mal im IP-Phone-Forum nach SIP-Registrar suchen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SIP Listen Port 5060 hat mich viel Zeit gekostet - stand noch von sipgate direkt auf 5062 und das VP5500 hat sich dann zwar an der fritzbox registriert aber keine eingehenden Anrufe empfangen...&lt;br /&gt;
&lt;br /&gt;
= Buildumgebung erstellen =&lt;br /&gt;
&lt;br /&gt;
Bislang ist die Erstellung von GUI-Applikationen (QTopia) noch nicht auf einfache Weise möglich. Das größte Problem ist, dass der Quellcode der Video-Telefon-Anwendung zum größten Teil zur Verfügung steht. Das Erstellen von Kommandozeilen-Anwendungen geht aber schon problemlos.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
Die verwendete ARM-Entwicklungsumgebung basiert auf gcc. Mittels cygwin kann diese zwar auch als Win32-Anwendungen gebaut werden, dies ist aber in hohem Maß unüblich.&lt;br /&gt;
&lt;br /&gt;
Am besten eine aktuelle Version von Debian oder Ubuntu in &amp;quot;vmware player&amp;quot; oder &amp;quot;virtual box&amp;quot; installieren. Wenn man die virtuelle Maschine nur zum Compilieren verwendet, reicht eine kompakte Kommandozeilen-Version (z.B. Ubuntu Server 9.10). Fertige virtuelle Machinen, im vmware-Marketing-Sprech gerne auch &amp;quot;virtual appliances&amp;quot; genannt, sind reichlich verfügbar (z.B. http://www.vmware.com/appliances/directory/70918).&lt;br /&gt;
&lt;br /&gt;
=== Freetz-Linux ===&lt;br /&gt;
Für Fritzbox-Besitzer besonders geeignet ist das Freetz-linux, welches man im IP-Phone-Forum finden kann (-&amp;gt; http://www.ip-phone-forum.de/showpost.php?p=1400234&amp;amp;postcount=1).&lt;br /&gt;
Dieses kann zum Erstellen von Freetz-Images einerseits und andererseits als Buildumgebung benutzt werden. So spart man sich eine zweite VM.&lt;br /&gt;
&lt;br /&gt;
Die VM selbst braucht nur gestartet werden, den Rest macht man am Besten von seiner gewohnten Umgebung aus.&lt;br /&gt;
Mittels Samba kann einfach per Windowsnetzwerk auf das Home-Verzeichnis zugriffen werden und per SSH kann einfach eine Shell (UTF als Codierung einstellen, dann stimmen auch die Sonderrzeichen) geöffnet werden.&lt;br /&gt;
Es muss sichergestellt werden sein, dass die VM zugriff auf das lokale Netzwerk, sowie das Internet hat (am besten mit einem &#039;ping google.com&#039; überprüfen). Bei mir ging es eigenartiger weise erst, als ich die virtuelle Netzwerkkarte in den VM-Settings auf NAT gestellt habe.&lt;br /&gt;
&lt;br /&gt;
Benutzername und alle Kennwörter sind &#039;freetz&#039;&lt;br /&gt;
&lt;br /&gt;
==== Installation und Test der VP5500 Toolchain ====&lt;br /&gt;
Installation der Buildumgebung:&lt;br /&gt;
  sudo mkdir /opt/VP5500&lt;br /&gt;
  sudo mkdir /opt/VP5500/toolchain&lt;br /&gt;
  cd /opt/VP5500/toolchain&lt;br /&gt;
  sudo wget http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo bunzip2 arm-linux-gcc-3.3.2.tar.bz2&lt;br /&gt;
  sudo tar -xf arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo rm arm-linux-gcc-3.3.2.tar&lt;br /&gt;
  sudo ln -s /opt/VP5500/toolchain/usr/local/arm /usr/local/arm&lt;br /&gt;
&lt;br /&gt;
Nach einem sudo-Kommando muss eventuell das Passwort eingegeben werden, weswegen die Befehle einzeln eingegeben werden sollten (oder man öffnet am Anfang eine sudo shell, dann kann man das auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Test der Buildumgebung:&lt;br /&gt;
  cd ~&lt;br /&gt;
  wget http://www.mikrocontroller.net/attachment/73161/helloworld.tgz&lt;br /&gt;
  tar -xzf helloworld.tgz&lt;br /&gt;
  rm helloworld.tgz&lt;br /&gt;
  cd helloworld&lt;br /&gt;
  make&lt;br /&gt;
Dannach sollte im ~/helloworld verzeichnis ein neues executable liegen, was vom Hostrechner einfach via Netzwerkfreigabe (\\freetz-linux\helloworld) und via WinSCP auf das Telefon kopiert werden kann.&lt;br /&gt;
&lt;br /&gt;
==== Freetz-Linux eigentlicher Anwendungszweck ====&lt;br /&gt;
wer das Ding auch zum Bauen von Freetz-Images zum Erweitern seiner Fritz-box benutzen will muss sich zuerst ein Freetz runterladen.&lt;br /&gt;
Folgende Schritte machen dies:&lt;br /&gt;
 cd ~&lt;br /&gt;
 svn checkout  http://svn.freetz.org/trunk  freetz-trunk &lt;br /&gt;
Dannach gibts im Home-Verzeichnis das aktuelle Freetz im Verzeichnis &#039;freetz-trunk&#039;.&lt;br /&gt;
Konfigurieren mit &#039;make menuconfig&#039; und Image erstellen mit &#039;make&#039;.&lt;br /&gt;
Wenn alles gut geht kann man das image dann vom Hostrechner aus der Windowsfreigabe &#039;\\freetz-linux\freetz-trunk\images&#039; rausholen und auf die Box spielen.&lt;br /&gt;
&lt;br /&gt;
Für detailiertere Infos bitte direkt bei Freetz nachschlagen:&lt;br /&gt;
http://trac.freetz.org/&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
Die bisher bekannten, mit VP5500 und VP6500 ausgelieferten Software-Versionen, basieren auf einer etwas älteren &amp;quot;gcc 3.3.2-ARM-Toolchain&amp;quot;. Eine passende Toolchain für ein x86-basiertes Entwicklungssystem ist unter http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2 zu finden.&lt;br /&gt;
&lt;br /&gt;
Unter Debian-basierten Linux-Distros kann dieses Archiv z.B. nach /opt/VP5500/toolchain entpackt werden (einige der Makefiles im Forum setzen diesen Speicherort vorraus). Es ist jedoch zu beachten, dass diese Version der Toolchain auch über den Pfad /usr/local zugänglich sein sollte. Dazu kann mittels &amp;quot;ln -s /opt/VP5500/toolchain/usr/local/arm arm&amp;quot; in /usr/local ein Symlink auf den eigentlichen Speicherort gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Hello World ===&lt;br /&gt;
Christian Klippel (ChrisK) hat unter http://www.mikrocontroller.net/attachment/73161/helloworld.tgz ein &amp;quot;Hello World&amp;quot; bereitgestellt, mit dem sich die Toolchain testen lässt und dessen &amp;quot;Makefile&amp;quot; und &amp;quot;Makefile.local&amp;quot; als Grundlage für eigene Versuche dienen kann.&lt;br /&gt;
&lt;br /&gt;
Das Archiv wird in ein lokals Verzeichnis (z.b. ~/helloworld) entpackt und dort durch Eingabe von &amp;quot;make&amp;quot; compiliert.&lt;br /&gt;
     &lt;br /&gt;
Zum Testen muss das Binary natürlich auf das Zielsystem übertragen werden. Wenn auf dem Entwicklungssystem ein http-Server oder ein ssh-Server läuft, kann man das Binary einfach in ein darüber zugängliches Verzeichnis kopieren es anschließend in einer telnet-Sitzung vom Verzeichnis /tmp aus mittels wget oder scp laden. Zum Test muss die Datei mittels &amp;quot;chmod +x helloworld&amp;quot; ausführbar gemacht werden, bevor sie mit &amp;quot;./helloworld&amp;quot; ausgeführt werden kann.&lt;br /&gt;
&lt;br /&gt;
Mittels eines ftpd (z.B. http://www.mikrocontroller.net/attachment/73780/troll-ftpd_1.28-cg2_arm.tgz) oder sshd (z.B. Dropbear von http://vp6500.bd8.nl/) auf dem Zielsystem, kann man das Kopieren auch vom Entwicklungssystem aus durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Anpassen kleinerer Konsolen-Tools auf Cross-Compilierung ===&lt;br /&gt;
Die Makefiles von kleineren Projekten sind häufig nicht so sauber aufgebaut wie das helloworld-Beispiel, so dass man sie leichter ersetzt, als ändert. Am Beispiel von micro_httpd (http://www.acme.com/software/micro_httpd/ , http://www.mikrocontroller.net/attachment/73175/micro_httpd.tar.gz) kann leicht nachvollzogen werden, wie man den modularen Ansatz vom &amp;quot;Hello World&amp;quot;-Beispiel übernehmen kann (Makefile -&amp;gt; Makefile + Makefile.local).&lt;br /&gt;
&lt;br /&gt;
= Hardware  + Software Versionen =&lt;br /&gt;
&lt;br /&gt;
Listet mal eure Hardware- und Softwareversion aus dem &#039;&#039;&#039;Applications&#039;&#039;&#039; =&amp;gt; &#039;&#039;&#039;System Info&#039;&#039;&#039; Menü auf, wenn sie hier noch nicht stehen!&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0645      || 4.20&lt;br /&gt;
|- &lt;br /&gt;
| ind5                         ||0647      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0648      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0649      || 4.20&lt;br /&gt;
|-&lt;br /&gt;
| ind5                         ||0702      || 4.20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Hardware Version             !! Date     !! Software Version   &lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0711     || 3.22&lt;br /&gt;
|-&lt;br /&gt;
| ind3-v2                      || 0713     || 3.22&lt;br /&gt;
|- &lt;br /&gt;
| ind3-v2                      || 0716     || 3.22&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Stromaufnahme =&lt;br /&gt;
&lt;br /&gt;
== VP5500 ==&lt;br /&gt;
FIXME &lt;br /&gt;
&lt;br /&gt;
== VP6500 ==&lt;br /&gt;
 &lt;br /&gt;
Konfiguration: VP6500 mit aktivierter serieller Konsole an Labornetzteil, Spannung 3.67V (Bei weniger bootet es anscheinend aufgrund von Stromspitzen nicht richtig und vermeldet auf der seriellen Konsole ein &#039;battery low&#039; und schaltet sich danach selbst ab. Diese Spannung sollte noch so gerade &#039;safe&#039; sein, geht man davon aus, daß da ein Step-Up im Innern am werkeln ist und noch ein geringer Abfall über die Schottky-Diode einzurechnen ist). &lt;br /&gt;
&lt;br /&gt;
=== Messungen ===&lt;br /&gt;
* Booten: bis zu 420mA&lt;br /&gt;
* Einbuchen: ca. 400mA&lt;br /&gt;
* mit abgeschaltetem Display, aber eingebucht und laufend (idle): ca. 80mA&lt;br /&gt;
* mit angeschaltetem Display, eingebucht und idle: ca. 190mA&lt;br /&gt;
* mit 100% Prozessor-Last (von serieller Konsole ausgeführt: &amp;quot;while true; do true; done&amp;quot;): ca. 60mA mehr als idle (Scheint aber auch größere Sprünge für andere CPU-Last zu geben)&lt;br /&gt;
* im &#039;Deep Sleep&#039; (wird ein paar Minuten nach Einschalten erreicht): &amp;lt;10mA (!), mit kurzen Wachphasen mit erheblichem Stromverbrauch (&amp;gt;100mA). Beachte: Die serielle Konsole ist in diesem Modus auch nicht mehr aktiv, das Telefon ist aber nicht abgestürzt (Tastendruck aktiviert die Konsole wieder).&lt;br /&gt;
* Telefonieren ca 500mA&lt;br /&gt;
* Telefonieren mit Webcam ca 550mA&lt;br /&gt;
&lt;br /&gt;
=== Ladegerät ===&lt;br /&gt;
* Phone nicht in der Ladeschale: &amp;lt; 0.2W&lt;br /&gt;
* Phone wird geladen: ca 4W&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Word_Clock&amp;diff=43022</id>
		<title>Word Clock</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Word_Clock&amp;diff=43022"/>
		<updated>2010-02-08T18:15:30Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* DCF77 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Was ist das? =&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-frontplatte.png| |WordClock]]&lt;br /&gt;
&lt;br /&gt;
Es geht hier um folgenden Thread [1], in dem der Bau einer Uhr disktuiert wird. Als Inspiration kann diese [2] dienen. Es wird keine patentrechtlich bedenkliche Kopie :-)&amp;lt;br&amp;gt;&lt;br /&gt;
[1] [http://www.mikrocontroller.net/topic/156661 Beitrag: Brauche Hilfe beim Bau einer Uhr]&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.qlocktwo.com http://www.qlocktwo.com]&lt;br /&gt;
&lt;br /&gt;
== Funktionalitäten ==&lt;br /&gt;
* Speichern der Uhrzeit über Real Time Clock&lt;br /&gt;
* Optionaler DCF77-Funkempfang&lt;br /&gt;
* Automatische Helligkeitsanpassung an das Umgebungslicht&lt;br /&gt;
* Anzeige der Uhrzeit durch RGB-LED-beleuchtete Buchstaben, d.h. es sind beliebige Farben möglich&lt;br /&gt;
* Bedienung über Infrarot-Fernbedienung: Helligkeit, Farbe, Uhrzeit und Ausgabeformat (&amp;quot;viertel vor acht&amp;quot; oder &amp;quot;dreiviertel acht&amp;quot;)&lt;br /&gt;
* Farbe einstellbar oder änderbar durch automatisch wechselndes HUE-Fading&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== Elektronik ==&lt;br /&gt;
* Atmega88 oder Atmega168&lt;br /&gt;
* 24-Bit-Schieberegister an SPI für 24 Wörter&lt;br /&gt;
* 4 Output-Pins für Minutenanzeige&lt;br /&gt;
* 4 weitere GPOS - für allgemeine Zwecke&lt;br /&gt;
* RGB-Steuerung über PWM gegen GND, d.h. 32x3-Matrix&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:wordclock-schmal-schaltung.png|miniatur|Schaltbild V1.0]]&lt;br /&gt;
&lt;br /&gt;
Das Schaltbild ist für die Prototypen-Platine als auch für die endgültige Version 1.0 (schmale Platine) identisch. Lediglich der Pullup-Widerstand R7 am DCF-Anschluss ist weggefallen und ab Version 0.9 der Software auch nicht mehr am Prototypen nötig.&lt;br /&gt;
&lt;br /&gt;
Eine größere Sammelbestellung wurde im Januar 2010 organisiert, siehe auch &#039;&#039;&#039;[http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_der_Platine Sammelbestellung der Platine]&#039;&#039;&#039;. Es sind keine Platinen mehr übrig.&lt;br /&gt;
&lt;br /&gt;
Hier die zugehörige Schaltung V1.0 als PDF: &#039;&#039;&#039;[[Media:wordclock-schmal.pdf]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Für eine einfarbige Variante reicht der Warenkorb mit dem ATmega 88:&lt;br /&gt;
Eine vollständige Liste zur Bestellung der nötigen Bauteile ist bei Reichelt abgelegt: &#039;&#039;&#039;[https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=209167;PROVID=2084 Warenkorb-Mono]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für die RBG-Version wird der ATmega 168 benötigt. Einen angepassten Warenkorb ist wieder bei Reichelt hinterlegt: &#039;&#039;&#039;[https://secure.reichelt.de/?;ACTION=20;LA=5010;AWKID=209168;PROVID=2084 Warenkorb-RGB]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Derzeit ist der TSOP 1736 bei Reichelt nicht lieferbar. Laut telefonischer Auskunft (Stand: 19.01.2010), ist dieser im Moment im Rückstand. Ein Liefertermin ist bei Reichelt nicht bekannt.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stand: 02.02.2010 Da nach wie vor der TSOP1736 nicht lieferbar ist, wurde der Warenkorb um den TSOP1738 erweitert.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hinweis zum TSOP1738 &amp;gt;&amp;gt; http://www.mikrocontroller.net/topic/156661#1580976&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Liste bezieht sich sowohl auf den Prototypen als auf die endgültige (schmalere) Version.&lt;br /&gt;
&lt;br /&gt;
== Bestückung ==&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Beschreibung zur Bestückung:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototyp:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock.png|miniatur|Bestückte Platine (Prototyp)]]&lt;br /&gt;
&lt;br /&gt;
* Links: Anschluss für stehende Lithium-Knopfbatterie CR2032 (die drei abgebildeten Stifte sind natürlich nicht notwendig, die Batterie wird direkt eingelötet)&lt;br /&gt;
* Unten links: Anschluss für DCF77-Modul und für Testzwecke RX &amp;amp; TX&lt;br /&gt;
* Oben Mitte: TSOP1736 für Infrarot-Empfang&lt;br /&gt;
* Oben links und rechts: Wannenstecker für insg. 32 Ausgabekanäle: OUT0-OUT23 (für die Wörter), OUTL1-OUTL4 (für die Minuten) und OUTG1-OUTG4 (für General-Purpose-Ausgabezwecke - noch nicht definiert)&lt;br /&gt;
* Rechts: Anschlussklemmen für Versorgungsspannung 7-12V und die drei PWM-Kanäle Rot, Grün und Blau&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Endgültige Version (schmale Ausführung):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal.png|miniatur|Bestückte Platine (endgültige Version)]]&lt;br /&gt;
&lt;br /&gt;
* Oben Mitte: Anschluss für stehende Lithium-Knopfbatterie CR2032 (die drei abgebildeten Stifte sind natürlich nicht notwendig, die Batterie wird direkt eingelötet)&lt;br /&gt;
* Unten 3-polige Stiftleiste: Anschluss für DCF77-Modul&lt;br /&gt;
* Unten 2-polige Stiftleiste: RX &amp;amp; TX (für Testzwecke)&lt;br /&gt;
* Unten rechts: TSOP1736 für Infrarot-Empfang&lt;br /&gt;
* Darüber: 2-polige Stiftleiste für LDR (Helligkeitsmessung)&lt;br /&gt;
* Oben links und rechts: Wannenstecker für insg. 32 Ausgabekanäle: OUT0-OUT23 (für die Wörter), OUTL1-OUTL4 (für die Minuten) und OUTG1-OUTG4 (für General-Purpose-Ausgabezwecke)&lt;br /&gt;
* Rechts: Anschlussklemmen für Versorgungsspannung 7-12V und die drei PWM-Kanäle Rot, Grün und Blau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: die Reihenfolge der Schraubklemmen-Anschlüsse hat sich bei der endgültigen gegenüber der Prototyp-Version geändert, siehe weiter unten!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der IR-Empfänger TSOP1736 muss hinter einem nicht benutzten Buchstaben angebracht werden. Deshalb braucht man ihn nicht unbedingt auf die Platine löten, sondern kann ihn auch über ein 3-poliges Kabel mit der Platine verbinden. Das Kabel sollte aber nicht zu lang sein, da der TSOP immer gern seinen Elko in der Nähe hat.&lt;br /&gt;
&lt;br /&gt;
Da die Routine zur automatischen Helligkeitsregelung noch nicht ausgetestet ist, sollte man den Widerstand R6 (Pulldown für LDR) zunächst noch nicht bestücken, bis klar ist, welcher Wert der optimale für den gewählten LDR ist.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-bestueckungsdruck.png|miniatur|Bestückungsaufdruck der Prototyp-Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLGENDES GILT NUR FÜR DEN PROTOTYPEN:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einen Fehler in der Target3001-Bibliothek hat die Prototypen-Platine einen Fehler, der aber leicht behebbar ist:&#039;&#039;&#039; Die Einstecklöcher für die 3 MOSFETs IRLU2905 besitzen auf der Unterseite keine Lötpunkte. Daher müssen die IRLUs an die oben liegenden Lötpunkte festgelötet werden. Auf der unteren Seite bilden die Bohrlöcher leider einen Kurzschluss mit der unten liegenden Massefläche.&lt;br /&gt;
&lt;br /&gt;
Deshalb müssen vorher(!) die Löcher für die IRLU-Beinchen mit einem spitzen Gegenstand auf der Unterseite von dem Kurzschluss mit der unteren Massefläche befreit werden. Dazu geht man folgendermaßen vor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-anschluesse.png|miniatur|Anschlüsse der Prototyp-Platine]]&lt;br /&gt;
&lt;br /&gt;
Spitzen Gegenstand (z.B. Teppichmesser, Spitze einer kleinen Kneifzange) von unten(!) ins Loch stecken und zwei- bis dreimal dreimal im Bohrloch drehen, damit die Verbindung der unteren Massefläche zur Durchkontaktierung unterbrochen wird. Anschließend mit dem Ohmmeter prüfen, ob der Kurzschluss behoben ist. Insgesamt sind es 6 Löcher, die so behandelt werden müssen, diese betreffen jeweils die Pins 1 und 2 der drei IRLU-MOSFETs. Pin3 muss nicht bearbeitet werden, da hier sowieso die Masse angeschlossen werden muss,&lt;br /&gt;
siehe auch das nächste Bild unten.&lt;br /&gt;
&lt;br /&gt;
Ist der Kurzschluss zur unteren Massefläche behoben, sollte man die IRLU-Beinchen trotzdem nicht durch das Bohrloch stecken, sondern:&lt;br /&gt;
&lt;br /&gt;
* Beinchen kürzen, vielleicht die Enden (wegen der Stabilität) 2mm umbiegen&lt;br /&gt;
* Oben in SMD-Manier anlöten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Im rechts stehenden Bild sind nicht nur die Lage der Anschlüsse verdeutlicht, sondern auch die Bohrlöcher für die IRLU-MOSFETs rot umkringelt, welche man von der Unterseite(!) her &amp;quot;behandeln&amp;quot; muss. Beim Prototypen müssen die IRLUs so angelötet werden, dass das Metall zur Schraubklemme zeigt.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückung und Anschlüsse der endgültigen Version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckungsdruck.png|miniatur|Bestückungsaufdruck der endgültigen (schmaleren) Platine]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs beachten!]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-anschluesse.png|miniatur|Anschlüsse]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG für die Version 1.0:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der oberste IRLU2905 muss anders herum eingelötet werden (Metall Richtung Spannungsregler) als die beiden unteren (Metall Richtung Schraubklemme). Siehe auch Foto rechts.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Reihenfolge der Schraubklemmen-Anschlüsse hat sich gegenüber dem Prototypen geändert, bitte unbedingt die Reihenfolge beachten!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Möchte man einfarbige LEDs verwenden und auf die RGB-Steuerung verzichten, schließt man einfach zwei der drei RGB-PWM-Kanäle nicht an und verwendet stattdessen nur PWMR zur PWM-Steuerung. Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bestückungsliste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diese Liste bezieht sich sowohl auf den Prototypen als auch auf die endgültige (schmalere) Version.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Name                Wert&lt;br /&gt;
 C1,C3,C4,C6,C8,C9   100NF&lt;br /&gt;
 C10,C11,C12,C13     100NF&lt;br /&gt;
 C2                  4,7µF&lt;br /&gt;
 C5,C7               47µF&lt;br /&gt;
 D1                  1N4001&lt;br /&gt;
 IC1                 ATMEGA88&lt;br /&gt;
 IC2                 7805&lt;br /&gt;
 IC3                 TSOP1736&lt;br /&gt;
 IC4,IC5,IC6         74HCT595N&lt;br /&gt;
 IC7                 DS1307&lt;br /&gt;
 IC8,IC9,IC10,IC11   UDN2981A&lt;br /&gt;
 K4                  Wannenstecker 10&lt;br /&gt;
 K7,K8               Wannenstecker16&lt;br /&gt;
 K6                  LDR&lt;br /&gt;
 KL1                 KLEMME5POL&lt;br /&gt;
 Q1                  32,768KHz&lt;br /&gt;
 R1,R6,R8,R10,R12    10K&lt;br /&gt;
 R7                  10K, entfällt!&lt;br /&gt;
 R2                  100&lt;br /&gt;
 R3,R4               4K7&lt;br /&gt;
 R5,R9,R11           82&lt;br /&gt;
 T1,T2,T3            IRLU2905&lt;br /&gt;
&lt;br /&gt;
== FAQ zur Bestückung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-schmal-bestueckt.jpg|miniatur|Bestückung: Orientierung der IRLUs (ganz rechts) beachten!]]&lt;br /&gt;
&lt;br /&gt;
 Q: Wie herum müssen die IRLUs eingelötet werden?&lt;br /&gt;
 A: Beim Prototypen: Alle drei mit der Metallseite zur Schraubklemme hin, Pin1&lt;br /&gt;
    ist also immer &amp;quot;oben&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
    Bei V1.0 (schmale Version): Der oberste kommt mit der Metallseite nach&lt;br /&gt;
    links (Richtung Spannungsregler), Pin 1 ist hier der untere. Die anderen&lt;br /&gt;
    beiden IRLUs werden mit der Metallseite Richtung Schraubklemme eingelötet,&lt;br /&gt;
    siehe auch Foto rechts. Hier ist jeweils Pin 1 der obere.&lt;br /&gt;
&lt;br /&gt;
 Q: Welche ICs sollte ich sockeln?&lt;br /&gt;
 A: Wenn durch einen versehentlichen Kurzschluss bei der Freiluftverdrahtung der&lt;br /&gt;
    LEDs ein UDN2981 abfackelt, ist das ägerlich. Daher sollte man zumindest&lt;br /&gt;
    die UDNs und den ATMega sockeln. Besser ist es natürlich, alle zu sockeln.&lt;br /&gt;
&lt;br /&gt;
 Q: Bei dem ATMega und der RTC ist nicht ersichtlich, wie herum sie eingebaut&lt;br /&gt;
    werden müssen?&lt;br /&gt;
 A: Doch, kann man sehen: Der Lötpunkt von Pin1 ist immer rechteckig, die&lt;br /&gt;
    anderen sind oval. Das gilt übrigens für fast alle Bauteile, auch die Wannen.&lt;br /&gt;
&lt;br /&gt;
 Q: Ich möchte oben statt der abgebildeten zwei 2x8-poligen Stiftleisten 16-polige&lt;br /&gt;
    Wannenstecker nehmen. Wie herum kommen dann die oberen Wannen drauf?&lt;br /&gt;
 A: Mit der Kerbe nach unten, sieht man auch am rechteckigen Lötpunkt - und&lt;br /&gt;
    auch auf dem Foto rechts.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich auf die Batterie verzichten, weil ich DCF77 einsetze bzw. nach&lt;br /&gt;
    einem Stromausfall die Uhr per Fernbedienung selbst neu stellen möchte?&lt;br /&gt;
 A: Wenn man keine Batterie einsetzt, sollte man VBat der RTC DS1307 mit GND&lt;br /&gt;
    verbinden. Das geht am einfachsten an den auf der Platine vorgesehenen&lt;br /&gt;
    Batterieanschlüssen: einfach K1 (Bat+) und K3 (Bat-) mit einem Stück Draht&lt;br /&gt;
    überbrücken. Übrigens: die Batterie hält lt. Datenblatt des DS1307&lt;br /&gt;
    10 Jahre, es ist also durchaus sinnvoll, diese auch zu bestücken.&lt;br /&gt;
&lt;br /&gt;
 Q: Zur Zeit ist der Infrarot-Empfänger TSOP1736 nur schlecht erhältlich.&lt;br /&gt;
    Gibt es dazu eine Alternative?&lt;br /&gt;
 A: Als Ersatz kann man auch den TSOP1738 nehmen. Dieser hat bei Fernbedienungen&lt;br /&gt;
    mit einer Modulationsfrequenz kleiner/gleich 36kHz zwar eine geringere&lt;br /&gt;
    Reichweite, bei Fernbedienungen mit einer Modulationsfrequenz größer/gleich&lt;br /&gt;
    38kHz jedoch sogar eine höhere.&lt;br /&gt;
&lt;br /&gt;
 Q: Kann ich (aus Kostengründen) auch einfarbige LEDs verwenden?&lt;br /&gt;
 A: Ja, einfach zwei der drei RGB-PWM-Kanäle nicht anschließen und nur PWMR (für Rot) benutzen.&lt;br /&gt;
    Die 2 zu PWMG und PWMB gehörenden IRLUs und die angeschlossenen 4 Widerstände am Gate der IRLUs&lt;br /&gt;
    kann man dann auch weglassen.&lt;br /&gt;
&lt;br /&gt;
== Anschluss eines DCF77-Moduls ==&lt;br /&gt;
&lt;br /&gt;
Der Anschluss eines DCF77-Moduls ist optional. Wird ein DCF77-Modul angeschlossen, kann mittels einer LED der DCF77-Empfang angezeigt werden. Die LED blinkt dann im Sekundenrhytmus und zeigt direkt die empfangenen DCF77-Impulse. Der Empfang wird kurze Zeit nach dem Einschalten aktiviert bzw. jede Stunde wiederholt. &lt;br /&gt;
&lt;br /&gt;
Die DCF77-LED kann folgendermaßen angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wannen.png|miniatur|Anschlüsse der Wannenstecker]]&lt;br /&gt;
&lt;br /&gt;
RGB-LED in Farbe:&lt;br /&gt;
&lt;br /&gt;
            /---|&amp;gt;|----| R |---- PWMR&lt;br /&gt;
 OUTG4   +--|---|&amp;gt;|----| R |---- PWMG&lt;br /&gt;
            \---|&amp;gt;|----| R |---- PWMB&lt;br /&gt;
&lt;br /&gt;
Einfarbige LED gedimmt:&lt;br /&gt;
&lt;br /&gt;
 OUTG4   +--|---|&amp;gt;|----| R |---- PWMR&lt;br /&gt;
&lt;br /&gt;
Einfarbige LED immer gleich hell:&lt;br /&gt;
&lt;br /&gt;
 OUTG4   +--|---|&amp;gt;|----| R |---- GND&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Anschluss des DCF77-Moduls von Reichelt ist folgendes zu beachten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 - Prototyp-Platine: Der Pull-Up-Widerstand R7 darf nicht eingelötet werden&lt;br /&gt;
   bzw. muss nachträglich wieder von der Platine entfernt werden - z.B. durch&lt;br /&gt;
   Abkneifen der Widerstandsdrähte mit einer Kneifzange. Grund: Das&lt;br /&gt;
   Reichelt-Modul hat keinen Open-Collector-Ausgang, sondern einen sehr&lt;br /&gt;
   schwachen Ausgang, welcher durch den Pullup-Widerstand permanent auf High&lt;br /&gt;
   gezogen wird.&lt;br /&gt;
&lt;br /&gt;
 - Es sollte direkt auf den Lötaugen des Reichelt-DCF77-Moduls ein&lt;br /&gt;
   Abblock-Kondensator von 100nF zwischen den Pins +UB und GND aufgelötet&lt;br /&gt;
   werden&lt;br /&gt;
&lt;br /&gt;
 - Der Eingang PON muss offen bleiben - entgegen den (falschen) Angaben&lt;br /&gt;
   im Reichelt Datenblatt!&lt;br /&gt;
&lt;br /&gt;
 - Das DCF77-Modul von Reichelt braucht eine Synchronisierungszeit von&lt;br /&gt;
   mindestens 10 Sekunden. Erst dann arbeitet der Empfänger.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beim Anschluss des Conrad-Moduls ArtNr. 641138 ist folgendes zu beachten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 - Prototyp: Der Pullup-Widerstand R7 muss unbedingt eingelötet sein&lt;br /&gt;
&lt;br /&gt;
 - Es muss der nicht-invertierte Open-Collector-Ausgang Pin 3 als Signal&lt;br /&gt;
   an die WordClock angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Zur Info (10.01.2010): Torsten Giese hat die DCF77-Routinen so erweitert, dass die verschiedenen DCF77-Modultypen (mit/ohne open Collector, active low/high)&lt;br /&gt;
automatisch erkannt werden. Kommt mit Software-Version 0.9. Dann muss der Widerstand R7 für &#039;&#039;&#039;alle&#039;&#039;&#039; Varianten fehlen. Daher ist er auch in der endgültigen Platinen-Version entfallen.&lt;br /&gt;
&lt;br /&gt;
== Anschluss der LEDs ==&lt;br /&gt;
=== Zuordnung der Kanäle ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wannen.png|miniatur|Anschlüsse der Wannenstecker]]&lt;br /&gt;
&lt;br /&gt;
Folgende Tabelle enthält die Zuordnung der Wörter zu den Pins der Wannenstecker.&lt;br /&gt;
Die Bezeichnungen der Pins entsprechen dem Schaltplan.&lt;br /&gt;
Zu beachten ist, dass die Reihenfolge der Wörter nichts mit der Anordnung auf der Frontplatte zu tun haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Zuordnung Pins&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Wort || Anschluss&lt;br /&gt;
|-&lt;br /&gt;
| ES || OUT0&lt;br /&gt;
|-&lt;br /&gt;
| IST || OUT0&lt;br /&gt;
|-&lt;br /&gt;
| FÜNF || OUT1&lt;br /&gt;
|-&lt;br /&gt;
| ZEHN || OUT2&lt;br /&gt;
|-&lt;br /&gt;
| VOR || OUT3&lt;br /&gt;
|-&lt;br /&gt;
| DREI || OUT4&lt;br /&gt;
|-&lt;br /&gt;
| VIERTEL || OUT5&lt;br /&gt;
|-&lt;br /&gt;
| NACH || OUT6&lt;br /&gt;
|-&lt;br /&gt;
| VOR || OUT7&lt;br /&gt;
|-&lt;br /&gt;
| HALB || OUT8&lt;br /&gt;
|-&lt;br /&gt;
| S || OUT9&lt;br /&gt;
|-&lt;br /&gt;
| EIN || OUT10&lt;br /&gt;
|-&lt;br /&gt;
| ZWEI || OUT11&lt;br /&gt;
|-&lt;br /&gt;
| DREI || OUT12&lt;br /&gt;
|-&lt;br /&gt;
| VIER || OUT13&lt;br /&gt;
|-&lt;br /&gt;
| FÜNF || OUT14&lt;br /&gt;
|-&lt;br /&gt;
| SECHS || OUT15&lt;br /&gt;
|-&lt;br /&gt;
| SIEBEN || OUT16&lt;br /&gt;
|-&lt;br /&gt;
| ACHT || OUT17&lt;br /&gt;
|-&lt;br /&gt;
| NEUN || OUT18&lt;br /&gt;
|-&lt;br /&gt;
| ZEHN || OUT19&lt;br /&gt;
|-&lt;br /&gt;
| ELF || OUT20&lt;br /&gt;
|-&lt;br /&gt;
| ZWÖLF || OUT21&lt;br /&gt;
|-&lt;br /&gt;
| UHR || OUT22&lt;br /&gt;
|-&lt;br /&gt;
| min1 || OUTL1&lt;br /&gt;
|-&lt;br /&gt;
| min2 || OUTL2&lt;br /&gt;
|-&lt;br /&gt;
| min3 || OUTL3&lt;br /&gt;
|-&lt;br /&gt;
| min3 || OUTL4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Beschaltungsvarianten der LEDs===&lt;br /&gt;
&lt;br /&gt;
Da die Schaltung genügend Power hat, um eine Unmenge an RGB-LEDs zu treiben, gibt es folgende 3 Möglichkeiten, die auch mixbar sind:&lt;br /&gt;
&lt;br /&gt;
1. Pro Wort für jeden Buchstaben eine RGB-LED (mit gemeinsamer Anode) in&lt;br /&gt;
Parallelschaltung (natürlich mit geeignetem Vorwiderstand pro LED)&lt;br /&gt;
&lt;br /&gt;
Prinzip (am Beispiel des Wortes &amp;quot;VIER&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
         /---|&amp;gt;|----| R1R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R1G |---- PWMG     &amp;quot;V&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R1B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R2R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R2G |---- PWMG     &amp;quot;I&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R2B |---- PWMB&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      |  /---|&amp;gt;|----| R3R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R3G |---- PWMG     &amp;quot;E&amp;quot;&lt;br /&gt;
      |  \---|&amp;gt;|----| R3B |---- PWMB&lt;br /&gt;
      |&lt;br /&gt;
      |  /---|&amp;gt;|----| R4R |---- PWMR&lt;br /&gt;
      +--|---|&amp;gt;|----| R4G |---- PWMG     &amp;quot;R&amp;quot;&lt;br /&gt;
         \---|&amp;gt;|----| R4B |---- PWMB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Pro Wort für jeden Buchstaben eine RGB-LED in Reihenschaltung (mit&lt;br /&gt;
nur 1 Vorwiderstand für die ganze Reihe, bzw. 3 wegen RGB). Das geht&lt;br /&gt;
aber nur, wenn die RGB-LEDs unabhängige Anoden und Kathoden haben (ja,&lt;br /&gt;
die gibt es).&lt;br /&gt;
&lt;br /&gt;
Prinzip:&lt;br /&gt;
                         &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
         /----| R1R |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
 OUTx --+-----| R1G |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMG&lt;br /&gt;
         \----| R1B |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMB&lt;br /&gt;
&lt;br /&gt;
Theoretisch könnte man solche Streifen als Platine herstellen, welche man dann immer auf die gewünschte Länge kürzt, als 1, 2, 3 ... 7 Buchstaben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Pro Wort nur eine LED. Für längere Wörter (ab 3 bis 4 Buchstaben) kann man natürlich auch 2 LEDs parallel oder in Reihe schalten, siehe 1. und 2.&lt;br /&gt;
&lt;br /&gt;
Prinzip:&lt;br /&gt;
          &amp;quot;V I E R&amp;quot;&lt;br /&gt;
         /---|&amp;gt;|----| R1R |---- PWMR&lt;br /&gt;
 OUTx +-+----|&amp;gt;|----| R1G |---- PWMG&lt;br /&gt;
         \---|&amp;gt;|----| R1B |---- PWMB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung von einfarbigen LEDs vereinfachen sich die Prinzip-Schaltungen wie folgt:&lt;br /&gt;
&lt;br /&gt;
1. Parallelschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
       /----|&amp;gt;|----| R1 |---- PWMR     &amp;quot;V&amp;quot;&lt;br /&gt;
      +-----|&amp;gt;|----| R2 |---- PWMR     &amp;quot;I&amp;quot;&lt;br /&gt;
 OUTx-+&lt;br /&gt;
      +-----|&amp;gt;|----| R3 |---- PWMR     &amp;quot;E&amp;quot;&lt;br /&gt;
       \----|&amp;gt;|----| R4 |---- PWMR     &amp;quot;R&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Reihenschaltung, eine LED pro Buchstabe im Wort:&lt;br /&gt;
&lt;br /&gt;
                       &amp;quot;V&amp;quot;    &amp;quot;I&amp;quot;    &amp;quot;E&amp;quot;    &amp;quot;R&amp;quot;&lt;br /&gt;
 OUTx ----| R1 |----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|----|&amp;gt;|---- PWMR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Pro (kurzem) Wort nur eine LED:&lt;br /&gt;
&lt;br /&gt;
          &amp;quot;V I E R&amp;quot;&lt;br /&gt;
 OUTx +------|&amp;gt;|----| R1 |---- PWMR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Berechnen der Vorwiderstände kann z.B. dieser Rechner&lt;br /&gt;
verwendet werden: &#039;&#039;&#039;[http://www.elektronik-kompendium.de/sites/bau/1109111.htm Vorwiderstands-Rechner]&#039;&#039;&#039; oder &#039;&#039;&#039;[http://www.modding-faq.de/index.php?artid=506 Vorwiderstands-Rechner mit Unterstützung für Reihenschaltung]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendet man SMD-LEDs mit einem Abstrahlwinkel von 120°, kann man mit einer LED bei einem Abstand von ca. 3,5 cm immer zwei Buchstaben ausleuchten. Wenn man jedes Buchstabenpaar mit einer SMD-LED beleuchtet, dann benötigt man jeweils:&lt;br /&gt;
&lt;br /&gt;
* 1 LED für 1er und 2er-Wort&lt;br /&gt;
* 2 LEDs für 3er und 4er Wort&lt;br /&gt;
* 3 LEDs für 5er und 6er Wort und&lt;br /&gt;
* 4 LEDs für 7er Wort &lt;br /&gt;
&lt;br /&gt;
Das macht dann, inkl. der 4 Minutenpunkte, insgesamt 55 LEDs.&lt;br /&gt;
&lt;br /&gt;
Bedingung ist aber ein Diffusor direkt hinter den Buchstaben, damit die LEDs selbst nicht sichtbar sind.&lt;br /&gt;
&lt;br /&gt;
== Sammelbestellung der Platine ==&lt;br /&gt;
Stand Januar 2010:&lt;br /&gt;
&lt;br /&gt;
Es gab Ende 2009 eine Vorabbestellung in kleinerer Auflage (lediglich 20 Platinen), damit die Entwickler schon mal testen und entwickeln konnten. Leider fiel durch die geringe Stückzahl der Preis entsprechend hoch aus. Die Prototypen-Serie ist mittlerweile vergriffen.&lt;br /&gt;
&lt;br /&gt;
Die neue Sammelbestellung der endgültigen WordClock-Platinen ging am 15.01.2010 raus. Es wurden 200 Platinen bestellt. Die Komplettlieferung ist am Donnerstag, dem 28.01.2010, eingetroffen. Der größte Teil der Platinen wurden am Samstag, den 30.01.2010, an die jeweiligen Leute weiterversandt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aktueller Zählerstand der Interessenten am 19.01.2010: 200 Platinen. Es sind sind also keine mehr verfügbar. Diejenigen Platinen, die durch Absagen wieder frei wurden, wurden mittlerweile für nachrückende Interessenten auf der Warteliste reserviert.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich weisen diese Platinen-Version auch nicht mehr den Kurzschluss auf, den die Prototypen-Platine hatte. Die Platine ist wesentlich schmaler als der Prototyp. Maße: 146mm x 35,6mm.&lt;br /&gt;
&lt;br /&gt;
Da die 200 Platinen der Sammelbestellung sehr schnell vergeben waren, wird über eine weitere Sammelbestellung nachgedacht.&lt;br /&gt;
&lt;br /&gt;
== Frontplatte ==&lt;br /&gt;
=== Konzept ===&lt;br /&gt;
&#039;&#039;&#039;[http://www.mikrocontroller.net/topic/156661#1481337 Brauche Hilfe beim Bau einer Uhr]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei interesse an einer Frontplatte kann man mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw ukw]) eine Nachricht hinterlassen,&lt;br /&gt;
siehe auch [http://www.mikrocontroller.net/articles/Word_Clock#Sammelbestellung_Frontplatte Sammelbestellung Frontplatte].&lt;br /&gt;
&lt;br /&gt;
2 Versionen sind vorgesehen, jeweils in 45cm x 45cm&lt;br /&gt;
&lt;br /&gt;
* Deutsch mit Bezeichnung &amp;quot;viertel vor&amp;quot; und &amp;quot;drei Viertel&amp;quot; - per Software einstellbar&lt;br /&gt;
* Englisch&lt;br /&gt;
&lt;br /&gt;
Die Minutenanzeige (1 - 4 Minuten) werden jeweils mit einem Punkt an der Ecke der Frontplatte dargestellt.&lt;br /&gt;
&lt;br /&gt;
==== Deutsch ====&lt;br /&gt;
&lt;br /&gt;
 E S K I S T A F Ü N F    &amp;lt;nowiki&amp;gt;==&amp;gt; ES IST FÜNF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 U Z E H N F M V O R G    &amp;lt;nowiki&amp;gt;==&amp;gt; ZEHN VOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 D R E I V I E R T E L    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI VIERTEL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 N A C H V O R H A L B    &amp;lt;nowiki&amp;gt;==&amp;gt; NACH VOR HALB&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 X F Ü N F R S Z W E I    &amp;lt;nowiki&amp;gt;==&amp;gt; FÜNF ZWEI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 S I E B E N A V I E R    &amp;lt;nowiki&amp;gt;==&amp;gt; SIEBEN VIER&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Z E H N T G S E C H S    &amp;lt;nowiki&amp;gt;==&amp;gt; ZEHN SECHS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 L D R E I U A C H T J    &amp;lt;nowiki&amp;gt;==&amp;gt; DREI ACHT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 E L F N E U N E I N S    &amp;lt;nowiki&amp;gt;==&amp;gt; ELF NEUN EIN|S&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 B Z W Ö L F R H U H R    &amp;lt;nowiki&amp;gt;==&amp;gt; ZWÖLF UHR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folgende Schreibweisen werden unterstützt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wessi-Modus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  es ist ein uhr&lt;br /&gt;
  es ist fünf nach eins&lt;br /&gt;
  es ist zehn nach eins&lt;br /&gt;
  es ist viertel nach eins&lt;br /&gt;
  es ist zehn vor halb zwei&lt;br /&gt;
  es ist fünf vor halb zwei&lt;br /&gt;
  es ist halb zwei&lt;br /&gt;
  es ist fünf nach halb zwei&lt;br /&gt;
  es ist zehn nach halb zwei&lt;br /&gt;
  es ist viertel vor zwei&lt;br /&gt;
  es ist zehn vor zwei&lt;br /&gt;
  es ist fünf vor zwei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ossi-Modus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  es ist ein uhr&lt;br /&gt;
  es ist fünf nach eins&lt;br /&gt;
  es ist zehn nach eins&lt;br /&gt;
  es ist viertel zwei&lt;br /&gt;
  es ist zehn vor halb zwei&lt;br /&gt;
  es ist fünf vor halb zwei&lt;br /&gt;
  es ist halb zwei&lt;br /&gt;
  es ist fünf nach halb zwei&lt;br /&gt;
  es ist zehn nach halb zwei&lt;br /&gt;
  es ist dreiviertel zwei&lt;br /&gt;
  es ist zehn vor zwei&lt;br /&gt;
  es ist fünf vor zwei&lt;br /&gt;
&lt;br /&gt;
Hier der aktuelle Entwurf der Buchstaben-Anordnung als Bild: &#039;&#039;&#039;[[Media:WordclockFront_ger.pdf]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Englisch ====&lt;br /&gt;
&lt;br /&gt;
 I T K I S G H A L F E   &amp;lt;nowiki&amp;gt;==&amp;gt;  it_is half&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T E N Y Q U A R T E R   &amp;lt;nowiki&amp;gt;==&amp;gt;  ten quarter&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 D T W E N T Y F I V E   &amp;lt;nowiki&amp;gt;==&amp;gt;  twenty|five&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T O P A S T E F O U R   &amp;lt;nowiki&amp;gt;==&amp;gt;  to past four&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 F I V E T W O N I N E   &amp;lt;nowiki&amp;gt;==&amp;gt;  five two nine&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T H R E E T W E L V E   &amp;lt;nowiki&amp;gt;==&amp;gt;  three twelve&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 B E L E V E N O N E S   &amp;lt;nowiki&amp;gt;==&amp;gt;  eleven one&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 S E V E N W E I G H T   &amp;lt;nowiki&amp;gt;==&amp;gt;  seven eight&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 I T E N S I X T I E S   &amp;lt;nowiki&amp;gt;==&amp;gt;  ten six&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 T I N E O I C L O C K   &amp;lt;nowiki&amp;gt;==&amp;gt;  o_clock&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und als Bild: &#039;&#039;&#039;[[Media:WordclockFront_eng.pdf]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Sammelbestellung Frontplatte ===&lt;br /&gt;
&lt;br /&gt;
Seit 20. Januar liegt ein Angebot einer Digitaldruck-Firma vor, welche eine Plexi-Scheibe (3mm) in 45cm x 45cm anbietet. Dabei wird die Scheibe von hinten zunächst mit einer 4-fach-Schicht schwarzer Farbe bedruckt. Lediglich die Buchstaben und Minutenpunkte bleiben frei. Anschließend kommen noch 2 Schichten weiße Farbe komplett deckend über die schwarze Farbe, sodass diese Schichten als Diffusor wirken.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wordclock-mit-blitz.jpg|miniatur|WordClock mit Blitz]]&lt;br /&gt;
[[Datei:Wordclock-ohne-blitz.jpg|miniatur|WordClock ohne Blitz]]&lt;br /&gt;
&lt;br /&gt;
Das Angebot beträgt 32 Euro inkl. MwSt. pro Platte bei Abnahme von 100 Stück.&lt;br /&gt;
&lt;br /&gt;
Folgende Varianten sind vorgesehen:&lt;br /&gt;
&lt;br /&gt;
  - A: 45cm x 45cm mit weißer Schicht als Diffusor&lt;br /&gt;
  - B: 45cm x 45cm mit transparenten Buchstaben (ohne weiße Schicht)&lt;br /&gt;
  - C: 30cm x 30cm mit weißer Schicht als Diffusor&lt;br /&gt;
  - D: 30cm x 30cm mit transparenten Buchstaben (ohne weiße Schicht)&lt;br /&gt;
&lt;br /&gt;
Um herauszufinden, wieviele Leute tatsächlich an einer Sammelbestellung interessiert sind, kann man mir (Benutzer [http://www.mikrocontroller.net/user/show/ukw ukw]) eine Nachricht hinterlassen. Bitte die Stückzahl und die Variante nennen!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stand 05.02.2010: A: 64   B: 9   C: 5   D: 3, insgesamt also: 81&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ich werde versuchen, die Anzahl möglichst jeden Tag zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Sobald die 100 erreicht sind, wende ich mich nochmal an die Firma, um auch Angebote über die Varianten einzuholen. Anschließend wird dann die Sammelbestellung anlaufen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung: die beiden Bilder rechts zeigen das auf 25cm x 25cm verkleinerte Muster mit Diffusor (Variante A) - jedoch ohne Minutenpunkte, welche für die endgültige Version natürlich vorgesehen sind.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Sammelbestellung LEDs &amp;amp; Streifenplatinen ===&lt;br /&gt;
==== Streifenplatinen ====&lt;br /&gt;
Wie im Forum angekündigt, läuft im Moment eine Vorabanfrage bezüglich einer Sammelbestellung für die SMD RGB LEDs sowie der passenden Streifenleiterplatten.&lt;br /&gt;
Die Platine hat ein Maß von 314 x 12 mm&lt;br /&gt;
&lt;br /&gt;
Die Streifenplatine wird so ausschauen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1.png|750px|Streifenplatine für SMD RGB LEDs Version 6]]&lt;br /&gt;
&lt;br /&gt;
Ausschnitt vergrößert dargestellt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED_Streifen_V6_1_schnitt.png|Aussschnitt]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Technische Daten der SMD RGB PLCC-6 LEDs ====&lt;br /&gt;
Specifikation&lt;br /&gt;
    * Source Material: InGaN&lt;br /&gt;
    * Emitting Colour: SMD SMT 5050 RGB&lt;br /&gt;
    * LENS Type: Water clear&lt;br /&gt;
    * Reverse Voltage: 5.0 V&lt;br /&gt;
    * Viewing Angle: 140 degree&lt;br /&gt;
    * Lead Soldering Temp: 260°C for 5 seconds&lt;br /&gt;
&lt;br /&gt;
Absolute Maximum Rating (Ta = 250C)&lt;br /&gt;
        PARAMETER      | Symbol | RED | GREEN | BLUE | UNITS&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 Power Dissipation     |   PO   |  80 |   95  |  85  |  mW&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 DC Current            |   IF   |  20 |   20  |  20  |  mA&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 Peak Forward Current  |   IFP  | 100 |  100  | 100  |  mA&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 Reverse Voltage       |   VR   |   5 |    5  |   5  |   V&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 Operating Temperature |   Topr |     -25 to +85     |  °C&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 Storage Temperature   |   Tstg |     -40 to +85     |  °C&lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Electro-optical Characteristics (Ta = 250C)&lt;br /&gt;
&lt;br /&gt;
 PARAMETER               | SYMBOL | CONDITIONS | MIN.|  TYP. | MAX.| UNIT&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Forward Voltage (B)     |   VF   | IF = 20mA  | 3.4 |  3.6  | 3.8 |  V&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Forward Voltage (G)     |   VF   | IF = 20mA  | 3.4 |  3.6  | 3.8 |  V&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Forward Voltage (R)     |   VF   | IF = 20mA  | 1.9 |  2.1  | 2.5 |  V&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Dominant Wavelength (B) |   lD   | IF = 20mA  | 465 |  470  | 175 | nm&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Dominant Wavelength (G) |   lD   | IF = 20mA  | 515 |  520  | 525 | nm&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
 Dominant Wavelength (R) |   lD   | IF = 20mA  | 625 |  630  | 635 | nm&lt;br /&gt;
 ------------------------------------------------------------------------&lt;br /&gt;
[[Datei:plcc6_smd_RGB.JPG]]&lt;br /&gt;
----&lt;br /&gt;
==== Sammelbestellung ====&lt;br /&gt;
&lt;br /&gt;
Folgende Angebote stehen zur Verfügung:&lt;br /&gt;
* Paket 1: SMD RGB LEDs im 100er Päckchen für 24,00 Eur&lt;br /&gt;
* Paket 2: Streifenplatinen im 10er Pack für 5,90 Eur&lt;br /&gt;
* Paket 3: Komplettpaket besteht aus Paket1 + Paket2 + Hühnerfutter für 31,08 Eur&lt;br /&gt;
&lt;br /&gt;
Da für die WordClock nur 96 LEDs benötigt werden, sind in den oben genannten Paketen &amp;quot;nur&amp;quot; 100 LEDs enthalten!&lt;br /&gt;
&lt;br /&gt;
Wer zusätzlich LEDs benötigt, kann diese bei mir zum Stückpreis von 0,24 Eur erhalten. Hierzu bitte einfach eine PN ([http://www.mikrocontroller.net/user/show/wawibu wawibu]) an mich.&lt;br /&gt;
&lt;br /&gt;
Falls jemand nur LEDs haben möchte, so kann ich diese auch entsprechend - so lange der Vorrat reicht - anbieten. &lt;br /&gt;
&lt;br /&gt;
Beitrag im Marktplatz: http://www.mikrocontroller.net/topic/166284&lt;br /&gt;
&lt;br /&gt;
Das Paket 1 versende ich im Luftpolsterumschlag für 1,80 Eur. &lt;br /&gt;
Paket 2 und 3 versende ich im Karton für 5,20 Eur.&lt;br /&gt;
&lt;br /&gt;
Die Versandkosten fallen natürlich nur einmal an. Bei einer Kombination der Pakete fällen die höheren Versandkosten an.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Versandkosten:&lt;br /&gt;
* 1x Paket 1 = 1,80 Eur&lt;br /&gt;
* 5x Paket 1 = 1,80 Eur&lt;br /&gt;
* 1x Paket 2 = 5,20 Eur&lt;br /&gt;
* 1x Paket 1 und 1x Paket 2 = 5,20 Eur&lt;br /&gt;
* 3x Paket 2 und 2x Paket 3 = 5,20 Eur&lt;br /&gt;
&lt;br /&gt;
Wer interesse hat, schreibt mir bitte eine PN ([http://www.mikrocontroller.net/user/show/wawibu wawibu]).&lt;br /&gt;
&lt;br /&gt;
Forumsbeitrag: http://www.mikrocontroller.net/topic/156661#1561973&lt;br /&gt;
&lt;br /&gt;
Stand (03.02.2010):&lt;br /&gt;
* Paket 1:  18x&lt;br /&gt;
* Paket 2:  27x&lt;br /&gt;
* Paket 3: 114x&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die emails an die Vorbesteller wurde heute (29.01.2010) versendet. Die Frist zur &#039;&#039;&#039;verbindlichen Zusage&#039;&#039;&#039; läuft am &#039;&#039;&#039;12.Februar 2010&#039;&#039;&#039; aus. Alle die sich bis dahin gemeldet haben, sind bei der Bestellung dabei.&lt;br /&gt;
&lt;br /&gt;
Link zur Mail:&lt;br /&gt;
http://www.mikrocontroller.net/topic/156661#1575610&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Module ==&lt;br /&gt;
&lt;br /&gt;
=== DCF77 ===&lt;br /&gt;
&lt;br /&gt;
Zur Programmierung siehe den Artikel [[DCF77-Funkwecker_mit_AVR]]. Im Abschnitt &#039;&#039;Programmierung&#039;&#039; ist das Funksignal dokumentiert, zusammen mit einem Beispiel (Bitstrom und Bedeutung).&lt;br /&gt;
&lt;br /&gt;
Codebeispiel siehe &#039;&#039;&#039;[[http://www.mikrocontroller.net/topic/25071 DCF_77]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Torsten Giese ([http://www.mikrocontroller.net/user/show/wawibu wawibu])&lt;br /&gt;
&lt;br /&gt;
=== Automatische Helligkeitsregelung ===&lt;br /&gt;
&lt;br /&gt;
Die Helligkeit des Displays wird über einen LDR gesteuert.&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Rene H. ([http://www.mikrocontroller.net/user/show/promeus promeus])&lt;br /&gt;
&lt;br /&gt;
=== RTC ===&lt;br /&gt;
&lt;br /&gt;
Vorgesehen ist die Verwendung eines batteriegepufferten DS1307 - über I2C angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
=== IR ===&lt;br /&gt;
&lt;br /&gt;
Es werden folgende Infrarot-Protokolle verstanden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Protokoll || Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| SIRCS || Sony&lt;br /&gt;
|-&lt;br /&gt;
| NEC || NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, NoName und viele weitere japanische Hersteller.&lt;br /&gt;
|-&lt;br /&gt;
| SAMSUNG || Samsung&lt;br /&gt;
|-&lt;br /&gt;
| MATSUSHITA || Matsushita&lt;br /&gt;
|-&lt;br /&gt;
| KASEIKYO || Panasonic, Denon und andere japanische Hersteller, welche Mitglied der &amp;quot;Japan&#039;s Association for Electric Home Application&amp;quot; sind.&lt;br /&gt;
|-&lt;br /&gt;
| RECS80 || Philips, Nokia, Thomson, Nordmende, Telefunken, Saba&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die automatische Erkennung des Protokolls werden die nötigen Tastatur-Befehl-Bits aus den Infrarot-Daten extrahiert - ohne Kenntnis, welche Tasten da eigentlich tatsächlich gedrückt wurden. So eine Tabelle würde den Speicher des µCs sprengen. Deshalb passiert die Zuordnung der Tasten zu WordClock-Befehlen in einer kleinen Anlern-Prozedur, die einmal nach dem ersten Boot-Vorgang ausgeführt werden muss.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen eigenen Artikel zum Infrarot-Fernbedienungs-Decoder, siehe [http://www.mikrocontroller.net/articles/IRMP IRMP]&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
=== PWM ===&lt;br /&gt;
&lt;br /&gt;
Die PWM steuert die 3 RGB-Kanäle. Damit ist freie Farbenwahl möglich.&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Frank M. ([http://www.mikrocontroller.net/user/show/ukw ukw])&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Das Display wird nicht als 10x11-Matrix angesteuert, sondern wortweise. Dies war nötig, weil hier RGB-LEDs zum Einsatz kommen, um beliebige Farben anzuzeigen. Daraus ergibt sich dann für die Wörter eine 24x3-Matrix. Ebenso können die Minutenpunkte farbig angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Die Farben sind kein Muss - in der Minimalbeschaltung können auch einfarbige LEDs zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
=== Benutzer-Interaktion ===&lt;br /&gt;
&lt;br /&gt;
Mit der Fernbedienung wird folgendes möglich sein:&lt;br /&gt;
&lt;br /&gt;
 * Einmaliges Anlernen der Fernbedienung&lt;br /&gt;
 * Anpassen der automatischen Helligkeitssteuerung&lt;br /&gt;
 * Einstellen des Farbprogramms (Übergänge etc)&lt;br /&gt;
 * Stellen der Uhr (wenn kein DCF77-Modul angeschlossen)&lt;br /&gt;
 * ...&lt;br /&gt;
&lt;br /&gt;
Software-Entwickler: Vlad Tepesch ([http://www.mikrocontroller.net/user/show/vlad_tepesch vlad_tepesch])&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
Hier eine &#039;&#039;&#039;Vorabversion&#039;&#039;&#039; des Quellcodes zum Projekt:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Media:Wordclock-08-src.zip]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bitte 00README.txt lesen!&lt;br /&gt;
&lt;br /&gt;
= Abstimmungen =&lt;br /&gt;
Eine Stimme ist ein Strich. Nach 5 Strichen bitte ein Leerzeichen einfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
DCF: ||||| ||||| ||||| ||||| ||||| ||||| ||||| &amp;lt;br&amp;gt;&lt;br /&gt;
ethernet ntp client: ||||| |&amp;lt;br&amp;gt;&lt;br /&gt;
IR für Fernbedienung: ||||| ||||| |||&amp;lt;br&amp;gt;&lt;br /&gt;
Bewegungsmelder: ||||| |||&amp;lt;br&amp;gt;&lt;br /&gt;
Bluetooth: |&amp;lt;br&amp;gt;&lt;br /&gt;
IR zum PC für Kommunikation/Bootloader |&amp;lt;br&amp;gt;&lt;br /&gt;
RFM12 für Kommunikation/Bootloader |&amp;lt;br&amp;gt;&lt;br /&gt;
NTP Server (um eine genaue Zeit ins Netzwerk zu verteilen) |&amp;lt;br&amp;gt;&lt;br /&gt;
usw: |&amp;lt;br&amp;gt;&lt;br /&gt;
Ambilight: ||||| ||||| |&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Word Clock als PC-Programm =&lt;br /&gt;
[http://bralug.de/wiki/Wort_Uhr Hier] ist der [http://bralug.de/wiki/Wort_Uhr Quelltext] zu einer X11-Version der Word Clock zu finden.&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Aquarium_Controller&amp;diff=40238</id>
		<title>Aquarium Controller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Aquarium_Controller&amp;diff=40238"/>
		<updated>2009-10-28T05:55:28Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* DCF77-Empfänger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
[[Bild:AquaCtrlHousing2.jpg|thumb|400px]]&lt;br /&gt;
&lt;br /&gt;
Die folgende Artikel beschreibt den Aquarium Controller, ein Gerät, mit dem alle elektischen Geräte eines Aquariums zentral gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Ziel war es, ein Gerät zu entwickeln, welches nicht nur als kurzweiliges Experiment meinen Hobbyzwecken dienen sollte. Vielmehr war es wichtig, die Liste der Features so einzugrenzen, dass in endlicher und der mir zur Verfügung stehenden Zeit ein nutzbringendes Gerät entsteht, welches zuverlässig seinen Dienst verrichtet.&lt;br /&gt;
&lt;br /&gt;
End of Einleitung...&lt;br /&gt;
&lt;br /&gt;
== Anschlußmöglichkeiten ==&lt;br /&gt;
&lt;br /&gt;
Steuerung folgender Geräte:&lt;br /&gt;
&lt;br /&gt;
* Taglicht (Leuchtstoffröhren, 230V)&lt;br /&gt;
* Nachtlicht (LED-Leiste, 12V)&lt;br /&gt;
* CO2 (230V)&lt;br /&gt;
* Heizung (230V)&lt;br /&gt;
* Pumpe (230V)&lt;br /&gt;
&lt;br /&gt;
Anschluß für folgende Messwertaufnehmer:&lt;br /&gt;
&lt;br /&gt;
* 1 x Temperatursensor (NTC)&lt;br /&gt;
* 1 x pH-Sonde&lt;br /&gt;
&lt;br /&gt;
Sonstiges:&lt;br /&gt;
&lt;br /&gt;
* Eingebautes Netzteil, Anschluß direkt an 230V&lt;br /&gt;
* Eingebaute Steckdosen für die 230V-Verbraucher&lt;br /&gt;
* RS232-Schnittstelle zum Debuggen und Fernsteuern&lt;br /&gt;
* Anschluß eines DCF77-Empfängers&lt;br /&gt;
&lt;br /&gt;
== Elektronik ==&lt;br /&gt;
&lt;br /&gt;
Das Herz des Designs ist ein AVR-Prozessor ATmega644, an den sämtliche Komponenten direkt angeschlossen sind:&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrlSchematic001.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensor ===&lt;br /&gt;
&lt;br /&gt;
Als Temperatursensor kommt ein NTC-Sensor, Typ Epcos B57861S0103, 10kΩ&lt;br /&gt;
zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
Die Begradigung der Kennlinie erfolgt über einen Polygon 3. Ordnung.&lt;br /&gt;
&lt;br /&gt;
Der Abgleich erfolgt rein in Software über zwei Messpunkte, bei denen Soll- und Istwert anzugeben sind.&lt;br /&gt;
&lt;br /&gt;
=== pH-Sonde ===&lt;br /&gt;
&lt;br /&gt;
Tatsächlich ist diese Schnittstelle bis heute (Stand 6.09.2009) ungetestet, müßte aber theoretisch funktionieren (Ich liebe diesen Satz: Damit ist die Schaltung zum Scheitern verurteilt)&lt;br /&gt;
&lt;br /&gt;
Der Abgleich erfolgt rein in Software über zwei Messpunkte, bei denen Soll- und Istwert anzugeben sind.&lt;br /&gt;
&lt;br /&gt;
=== Leuchtstoffröhren (Taglicht) ===&lt;br /&gt;
&lt;br /&gt;
Die Leuchtstoffröhren können per Software geschaltet werden und über eine 1-10V-Schnittstelle in der Helligkeit gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
=== LED-Leiste (Mondlicht) ===&lt;br /&gt;
&lt;br /&gt;
Die LED-Leiste wird über einen PWM-Ausgang in der Helligkeit gesteuert, wobei eine Spannung von 12V für die Versorgung der LEDs verwendet wird.&lt;br /&gt;
&lt;br /&gt;
=== DCF77-Empfänger ===&lt;br /&gt;
&lt;br /&gt;
Um eine optimale Ausrichtung der Antenne zu erzielen, wird der DCF77-Empfänger über eine 3-poligen Klinkenstecker extern angeschlossen. Im Einsatz befindet sich jener Empfänger aus dem Doppelheft der Elrad 7/8 &#039;85 (welche ich eigenhändig gekauft habe ;-)&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Ooops, das riecht nach Arbeit. Behelfsmäßig kann hier der sich praktisch selbst erklärende Quelltext ;-) herunter geladen werden: [[Media:AquaCtrlSrc016.zip|Aquarium Controller Firmware V0.16]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praxisbetrieb ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät ging am 11.06.2009 mit der Softwareversion V0.15 unter Realbedingungen in den Dauerbetrieb. Seitdem ergaben sich die Änderungen in der Firmware, ansonsten sind keine Auffälligkeiten zu verzeichnen (Stand 6.09.2009).&lt;br /&gt;
&lt;br /&gt;
Im Hochsommer kam es zu einer übermäßigen Wassererwärmung (&amp;gt;29°C), welche das Gerät ordnungsgemäß als Alarmsignal ausgab. Die Abhilfe ist in diesem Fall rein manueller Natur: Klappen auf, um das Wasser herunterzukühlen.&lt;br /&gt;
&lt;br /&gt;
== Impressionen ==&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Bilder von den ersten Tests, im rechten Bild sieht man die mit Silikon an die Leuchtstoffröhreneinheit angeklebte LED-Leiste.&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrl 1st Test 01.jpg|500px]]  [[Bild:AquaCtrl 1st Test 02.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Das geöffnete Gerät und das Aquarium komplett (die Steuerung ist rechts unten zu sehen):&lt;br /&gt;
&lt;br /&gt;
[[Bild:AquaCtrl Opened.jpg|500px]]  [[Bild:Aquarium_Complete.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Verbesserungen ==&lt;br /&gt;
&lt;br /&gt;
* Das Design verzichtet komplett auf geschaltete Stromversorgungen um Problemen mit der Meßwertaufnahme vorzubeugen. Damit ist das Gerät aber nicht gerade ein Stromsparwunder: Die Umstellung der Erzeugung der Betriebsspannungen 5V/12V auf Stepdown wären sinnvoll. Weiterhin würde man in diesem Fall die Hintergrundbeleuchtung an 5V anschließen, was eine deutliche Reduzierung der Leistungsaufnahme bedeuten würde.&lt;br /&gt;
&lt;br /&gt;
* Einsatz einer Anzeige mit mehr Zeilen oder gleich ein Grafikdisplay um alle relevanten Informationen gleichzeitig darstellen zu können.&lt;br /&gt;
&lt;br /&gt;
* Enstörmaßnahmen an den Schaltkontakten der Relais.&lt;br /&gt;
== Firmware-History ==&lt;br /&gt;
&lt;br /&gt;
=== V0.14 ===&lt;br /&gt;
* Erste veröffentlichte Version&lt;br /&gt;
&lt;br /&gt;
=== V0.15 ===&lt;br /&gt;
* Unterstützung der Alarmfunktionen&lt;br /&gt;
* Bugs bereinigt in den Funktionen &#039;NewSwitchEvent&#039; und &#039;NewDimEvent&#039;&lt;br /&gt;
&lt;br /&gt;
=== V0.16 ===&lt;br /&gt;
* Minimal einstellbare Temperatur ist 0°, um auch eine kleine Hysterese bei der Temperaturregelung einstellen zu können&lt;br /&gt;
* Default Temperatur-Hysterese ist 2.0°&lt;br /&gt;
* Default pH-Hysterese 0.2&lt;br /&gt;
* Verlängerte Alarm-Wiederholzeit&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FAQ&amp;diff=39708</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FAQ&amp;diff=39708"/>
		<updated>2009-10-06T14:20:43Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: /* Wie funktioniert String-Verarbeitung in C? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Verzeichnis von im Forum oft gestellten und immer wieder beantworteten Fragen und den zugehörigen Antworten:&lt;br /&gt;
&lt;br /&gt;
=Wie kann ich Zahlen auf [[LCD]]/[[UART]] ausgeben?=&lt;br /&gt;
&lt;br /&gt;
Aber die Bibliothek, die du benutzt, stellt nur eine Funktion zur Verfügung, mit der man einen String ausgeben kann... Was tun? &lt;br /&gt;
&lt;br /&gt;
In den folgenden Beispielen wird eine selbstgeschriebene Funktion zur Stringausgabe auf LCD - die Funktion lcd_string() - aus dem [[AVR-GCC-Tutorial/LCD-Ansteuerung|LCD-Teil des AVR-GCC-Tutorials]] verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
lcd_string( &amp;quot;Hallo Welt&amp;quot; );  // ggf. auch lcd_out() o.ä. in anderen Libraries&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um also eine Zahl (numerische Konstante oder Variableninhalt) auszugeben, muss von dieser Zahl zunächst ihre String-Repräsentation ermittelt werden. Hier geht es aber nur darum, zu zeigen wie man diese String Repräsenation erzeugen kann. Was man dann mit diesem String weiter macht, ob das dann eine LCD-Ausgabe oder eine UART-Übertragung oder das Abspeichern auf SD-Karte oder ... ist, spielt eine untergeordnete Rolle.&lt;br /&gt;
&lt;br /&gt;
Es gibt mehrere Möglichkeiten, sich die Stringrepräsentation zu erzeugen:&lt;br /&gt;
&lt;br /&gt;
===itoa()===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;itoa()&amp;lt;/b&amp;gt; ist keine C-Standardfunktion (wohl aber ihre Umkehrung &amp;lt;b&amp;gt;atoi()&amp;lt;/b&amp;gt; ). Auf manchen Compilern heisst diese Funktion dann folgerichtig &amp;lt;b&amp;gt;_itoa()&amp;lt;/b&amp;gt;, wobei der führende _ eben anzeigt, dass es sich um eine Erweiterung des C-Standards handelt. Bei [[WinAVR]] ist itoa() Bestandteil der mitgelieferten Library avr-libc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Buffer[20];&lt;br /&gt;
  int i = 25;&lt;br /&gt;
&lt;br /&gt;
  itoa( i, Buffer, 10 );&lt;br /&gt;
  lcd_string( Buffer ); // ggf. auch lcd_out() o.ä. in anderen Libraries&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;itoa( i, Buffer, 10 );&amp;lt;/b&amp;gt; - Die Zahl i wird nach ASCII gewandelt und die String Repräsentierung davon wird in Buffer abgelegt. Die Basis, in der diese Wandlung erfolgt, ist das 10-er System. Wird das dritte Argument von 10 in zb. 2 oder auch 16 abgewandelt, erhält man die binäre oder eben eine hexadezimale Repräsentierung des Wertes. Auch wenn 10, 2 und 16 die häufigsten Angaben an dieser Stelle sind, kann itoa aber grundsätzlich in jedes beliebige Zahlensystem wandlen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, darauf zu achten, dass das Array &amp;lt;i&amp;gt;Buffer&amp;lt;/i&amp;gt; groß genug dimensioniert wird, um alle Zeichen der Textrepräsentation der Zahl aufzunehmen.&lt;br /&gt;
&lt;br /&gt;
Anzumerken bleibt weiters, dass es normalerweise für alle Datentypen entsprechende Umwandlungsfunktionen gibt, wenn es sie für einen Datentyp gibt. Die Namensgebung lehnt sich an das Schema an: &#039;&#039;Kürzel_für_den_Datentyp to a&#039;&#039;. Eine Funktion die einen unsigned int wandelt, heißt dann utoa (oder _utoa), Floating Point heißt dann ftoa (oder _ftoa), etc.&lt;br /&gt;
&lt;br /&gt;
===sprintf()===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Buffer[20];&lt;br /&gt;
  int i = 25;&lt;br /&gt;
&lt;br /&gt;
  sprintf( Buffer, &amp;quot;%d&amp;quot;, i );&lt;br /&gt;
  lcd_string( Buffer ); // ggf. auch lcd_out() o.ä. in anderen Libraries&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode funktioniert auch bei long oder float Werten. Unbedingt beachtet werden muss allerdings, dass die Typkennzeichnungen im sog. Format-String (hier &amp;quot;%d&amp;quot;) mit den tatsächlichen Typen der auszugebenden Werten übereinstimmt. Und dass der Buffer, der den Text aufnimmt, auch groß genug dimensioniert wird.&lt;br /&gt;
&lt;br /&gt;
Mit sprintf() hat man dieselben Möglichkeiten zur Formatierung wie bei &amp;lt;b&amp;gt;printf()&amp;lt;/b&amp;gt; (siehe unten). Insbesondere gibt es natürlich die Möglichkeit die Zahl gleich in einen umgebenden Text einzubetten bzw. Formatierungen anzugeben:&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Buffer[20];&lt;br /&gt;
  int i = 25;&lt;br /&gt;
&lt;br /&gt;
  sprintf( Buffer, &amp;quot;Anzahl: %d Stueck&amp;quot;, i );&lt;br /&gt;
  lcd_out( Buffer );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Haken&amp;quot; an der mächtigen Funktion sprintf() ist, daß sie auch bei minimalisierter Konfiguration verhältnismäßig viel Programmspeicher (Flash-ROM) belegt und relativ viel Prozesszeit benötigt. Daher sollte man sprintf() nur verwenden, wenn kein Speicher- und Prozesszeitmangel besteht. Sonst sollte itoa() oder eine eigene, auf die Bedürfnisse optimierte Implementierung auf jeden Fall vorgezogen werden.&lt;br /&gt;
&lt;br /&gt;
====Formatierungen mit printf====&lt;br /&gt;
&lt;br /&gt;
Für jedes auszugebende Argument muss es im Formatstring einen entsprechenden Formatbezeichner geben. Der Aufbau eines Formatbezeichners ist immer&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;b&amp;gt;%[Modifizierer][Feldbreite][.Präzision]Typ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Typ&amp;lt;/b&amp;gt; ist dabei eine Kennung, der mit dem Datentyp des jeweiligen auszugebenden Argumentes übereinstimmen muss. Einige oft benutzte Kennungen, ohne Anspruch auf Vollständigkeit, sind:&lt;br /&gt;
  &amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;    char&lt;br /&gt;
  &amp;lt;b&amp;gt;d&amp;lt;/b&amp;gt;    int&lt;br /&gt;
  &amp;lt;b&amp;gt;f&amp;lt;/b&amp;gt;    float, double&lt;br /&gt;
  &amp;lt;b&amp;gt;ld&amp;lt;/b&amp;gt;   long&lt;br /&gt;
  &amp;lt;b&amp;gt;u&amp;lt;/b&amp;gt;    unsigned int&lt;br /&gt;
  &amp;lt;b&amp;gt;lu&amp;lt;/b&amp;gt;   unsigned long&lt;br /&gt;
  &amp;lt;b&amp;gt;p&amp;lt;/b&amp;gt;    pointer&lt;br /&gt;
  &amp;lt;b&amp;gt;s&amp;lt;/b&amp;gt;    string&lt;br /&gt;
  &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;    ein int wird ausgegeben, die Ausgabe erfolgt aber als Hexadezimalzahl&lt;br /&gt;
  &amp;lt;b&amp;gt;X&amp;lt;/b&amp;gt;    ein int wird ausgegeben, die Ausgabe erfolgt aber als Hexadezimalzahl, wobei Grossbuchstaben verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;b&amp;gt;Feldbreite&amp;lt;/b&amp;gt; gibt die Breite des Ausgabefeldes an, in die die Ausgabe durchgeführt werden soll. Reicht die angegebene Feldbreite nicht aus, so vergrößert printf diese Breite eigenmächtig. Die Feldbreite muß nicht angegeben werden. In diesem Fall bestimmt printf selbst die Feldbreite, so dass die Ausgabe darin Platz findet.&lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;b&amp;gt;Modifizierer&amp;lt;/b&amp;gt; bestimmt, wie und womit nicht benutzte Felder des Ausgabefeldes gefüllt werden sollen, wie die Ausrichtung innerhalb des Feldes erfolgen soll und ob ein Vorzeichen auch dann ausgegeben werden soll wenn die auszugebende Zahl positiv ist. Wird kein Modifizierer angegeben, so werden nicht benutzte Felder mit einem Leerzeichen gefüllt, positive Vorzeichen unterdrückt und die Ausgabe im Feld rechts ausgerichtet.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt;    Vorzeichen wird immer ausgegeben&lt;br /&gt;
  &amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt;    Die Ausgabe wird im Ausgabefeld linksbündig ausgerichtet&lt;br /&gt;
  &amp;lt;b&amp;gt;0&amp;lt;/b&amp;gt;    anstelle von Leerzeichen werden führende 0-en ausgegeben&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;b&amp;gt;Präzision&amp;lt;/b&amp;gt; kommt nur bei float oder double Zahlen zum Einsatz. Sie legt fest, wieviele Positionen der kompletten Feldbreite für die Ausgabe von Nachkommastellen reserviert werden sollen. Auch sie muss wiederrum nicht angegeben werden und printf benutzt in so einem Fall Standardvorgaben.&lt;br /&gt;
&lt;br /&gt;
===== Beispiele =====&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;quot;%d&amp;quot;&amp;lt;/b&amp;gt; Ausgabe eines Integer&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;quot;%5d&amp;quot;&amp;lt;/b&amp;gt; Ausgabe eines Integer in einem Feld mit 5 Zeichen Breite&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;quot;%05d&amp;quot;&amp;lt;/b&amp;gt; Ausgabe eines Integer in einem Feld mit 5 Zeichen Breite, wobei das Feld links mit führenden Nullen auf 5 Zeichen aufgefüllt wird&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;quot;%-5d&amp;quot;&amp;lt;/b&amp;gt; Ausgabe eines Integer in einem Feld mit 5 Zeichen Breite. Die Zahl wird linksbündig in das Feld gestellt.&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;quot;%6.3f&amp;quot;&amp;lt;/b&amp;gt; Ausgabe eines float (oder double). DIe Ausgabe erfolgt in einem Feld mit 6 Zeichen Breite, wobei 3 Nachkommastellen ausgegeben werden. Achtung: In der Feldbreite ist auch ein eventuelles Vorzeichen sowie der Dezimalpunkt enthalten. Bei einer Feldbreite von 6 Zeichen und 3 Nachkommastellen, bleiben bei einer positiven Zahl daher nur 2 Positionen für den Vorkommaanteil, bei negativen sogar nur 1 Stelle ( 6 - 3 Nachkommastellen - 1 Dezimalpunkt - 1 Vorzeichen == 1 )&lt;br /&gt;
&lt;br /&gt;
===Eigene Umwandlungsfunktionen===&lt;br /&gt;
&lt;br /&gt;
Möchte man &amp;lt;b&amp;gt;itoa()&amp;lt;/b&amp;gt; nicht benutzen oder hat es gar auf seinem System nicht zur Verfügung, dann ist es auch nicht schwer, sich selbst eine Funktion dafür zu schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
void ItoA( int z, char* Buffer )&lt;br /&gt;
{&lt;br /&gt;
  int i = 0;&lt;br /&gt;
  int j;&lt;br /&gt;
  char tmp;&lt;br /&gt;
  unsigned u;    // In u bearbeiten wir den Absolutbetrag von z.&lt;br /&gt;
  &lt;br /&gt;
    // ist die Zahl negativ?&lt;br /&gt;
    // gleich mal ein - hinterlassen und die Zahl positiv machen&lt;br /&gt;
    if( z &amp;lt; 0 ) {&lt;br /&gt;
      Buffer[0] = &#039;-&#039;;&lt;br /&gt;
      Buffer++;&lt;br /&gt;
      // -INT_MIN ist idR. größer als INT_MAX und nicht mehr &lt;br /&gt;
      // als int darstellbar! Man muss daher bei der Bildung &lt;br /&gt;
      // des Absolutbetrages aufpassen.&lt;br /&gt;
      u = ( (unsigned)-(z+1) ) + 1; &lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
      u = (unsigned)z;&lt;br /&gt;
    }&lt;br /&gt;
    // die einzelnen Stellen der Zahl berechnen&lt;br /&gt;
    do {&lt;br /&gt;
      Buffer[i++] = &#039;0&#039; + u % 10;&lt;br /&gt;
      u /= 10;&lt;br /&gt;
    } while( u &amp;gt; 0 );&lt;br /&gt;
&lt;br /&gt;
    // den String in sich spiegeln&lt;br /&gt;
    for( j = 0; j &amp;lt; i / 2; ++j ) {&lt;br /&gt;
      tmp = Buffer[j];&lt;br /&gt;
      Buffer[j] = Buffer[i-j-1];&lt;br /&gt;
      Buffer[i-j-1] = tmp;&lt;br /&gt;
    }&lt;br /&gt;
    Buffer[i] = &#039;\0&#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Grundprinzip ist einfach:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Ermittlung der einzelnen Stellen erfolgt in der zentralen Schleife&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    do {&lt;br /&gt;
      Buffer[i++] = &#039;0&#039; + u % 10;&lt;br /&gt;
      u /= 10;&lt;br /&gt;
    } while( u &amp;gt; 0 );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
durch fortgesetzte Division durch 10. Nur leider erhält man dadurch die einzelnen Ziffern der Zahl in umgekehrter Reihenfolge im String. Dies ist aber kein Problem, die nachfolgende Schleife&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  for( j = 0; j &amp;lt; i / 2; ++j ) {&lt;br /&gt;
    tmp = Buffer[j];&lt;br /&gt;
    Buffer[j] = Buffer[i-j-1];&lt;br /&gt;
    Buffer[i-j-1] = tmp;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
spiegelt den String in sich, sodass danach der String eine korrekte Repräsentation der ursprünglichen Zahl darstellt. Der Funktionsteil vor der &#039;Zerlegeschleife&#039; behandelt den Sonderfall daß die Zahl negativ ist. Negative Zahlen werden behandelt indem im Endergebnis ein &#039;-&#039; vermerkt wird und danach die Zahl positiv gemacht wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forenbeitrag [http://www.mikrocontroller.net/topic/67405#541885 Integer-Zahl in String mit bestimmter Zeichenlänge]&lt;br /&gt;
* Forenbeitrag [http://www.mikrocontroller.net/topic/84005#704736 (Resourcenschonend) Wert einer Variable am LCD ausgeben] von Niels Hüsken &lt;br /&gt;
* [[Festkommaarithmetik]]&lt;br /&gt;
&lt;br /&gt;
=Aktivieren der Floating Point Version von sprintf beim WinAVR mit AVR-Studio=&lt;br /&gt;
Beim WinAVR/AVR-Studio wird standardmässig eine Version der printf-Bibliothek verwendet, die keine Floating Point Verarbeitung unterstützt. Die meisten Programme benötigen keine Floating Point Unterstützung, sodass hier wertvoller Programmspeicherplatz gespart werden kann.&lt;br /&gt;
&lt;br /&gt;
Benutzt man dann allerdings eine printf Variante für die Ausgabe von Floating Point Zahlen, so erscheint an Stelle der korrekt formatierten Zahl lediglich ein &#039;?&#039;. Dies ist ein Indiz, dass die Floating Point Verarbeitung im Projekt aktiviert werden muss.&lt;br /&gt;
&lt;br /&gt;
Um die Floating Point Verarbeitung zu aktivieren, geht man im AVR-Studio wie folgt vor:&lt;br /&gt;
Menüpunkt: &amp;quot;&amp;lt;b&amp;gt;Project&amp;lt;/b&amp;gt;&amp;quot;/&amp;quot;&amp;lt;b&amp;gt;Configuration Options&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Im sich öffnenden Dialog wird in der linken Navigationsleiste der Eintrag &amp;quot;&amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;&amp;quot; ausgewählt.&lt;br /&gt;
Unter &#039;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Available Link Objects&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&#039; werden alle möglichen Bibliotheken angeboten. Für die Aktivierung der Floating Point Unterstützung sind 2 interessant: &lt;br /&gt;
* &amp;lt;b&amp;gt;libprintf_flt.a&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;libm.a&amp;lt;/b&amp;gt;&lt;br /&gt;
Beide Bibliotheken werden durch aktivieren und einen Druck auf &amp;quot;&amp;lt;b&amp;gt;Add Library --&amp;gt;&amp;lt;/b&amp;gt;&amp;quot; in die rechte Spalte übernommen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:AVR_Studio_float1.gif]]&lt;br /&gt;
&lt;br /&gt;
Danach wählt man in der Navigationsleiste den Eintrag &amp;quot;&amp;lt;b&amp;gt;Custom Options&amp;lt;/b&amp;gt;&amp;quot;. Unter &#039;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Custom Compilation Options&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&#039; wird &#039;&amp;lt;i&amp;gt;[Linker Options]&amp;lt;/i&amp;gt;&#039; ausgewählt und in das Textfeld rechts/unten wird der Text&lt;br /&gt;
&amp;lt;b&amp;gt;-Wl,-u,vfprintf&amp;lt;/b&amp;gt;&lt;br /&gt;
eingegeben. Ein Druck auf &amp;quot;&amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt;&amp;quot; befördert die Zeile in das Listenfeld darüber, welches die Kommandos an den Linker enthält.&lt;br /&gt;
&lt;br /&gt;
[[Bild:AVR_Studio_float2.gif]]&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration abgeschlossen, &amp;quot;&amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Wie funktioniert String-Verarbeitung in C?=&lt;br /&gt;
&lt;br /&gt;
In C gibt es, anders als in anderen Programmiersprachen, keinen eigenen String-Datentyp. Als Ersatz dafür werden Character-Arrays benutzt, in denen die einzelnen Character (=Zeichen) gespeichert werden. Allerdings gibt es noch einen Zusatz: Das letzte Zeichen eines Strings ist immer ein &#039;\0&#039;-Zeichen, dass das Ende des Strings markiert. Schlieslich kann ja das Array wesentlich größer sein, als der in ihm gespeicherte String und irgendwie müssen ja diverse Funktionen das tatsächliche Ende eines Strings erkennen können.&lt;br /&gt;
&lt;br /&gt;
Möchte man also die Zeichenkette &amp;quot;Hello World&amp;quot; in einem String speichern, so wird dafür ein Array mit mindestens der Länge 12 benötigt. 11 für die Zeichen die &amp;quot;Hello World&amp;quot; bilden, plus eine zusätzliche Position für das abschliesende &#039;\0&#039;-Zeichen.&lt;br /&gt;
&lt;br /&gt;
Da Strings in char-Arrays gespeichert werden, können selbstverständlich normale Array Operationen dafür benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Test[12];&lt;br /&gt;
&lt;br /&gt;
  Test[0] = &#039;H&#039;;&lt;br /&gt;
  Test[1] = &#039;a&#039;;&lt;br /&gt;
  Test[2] = &#039;l&#039;;&lt;br /&gt;
  Test[3] = &#039;l&#039;;&lt;br /&gt;
  Test[4] = &#039;o&#039;;&lt;br /&gt;
  Test[5] = &#039; &#039;;&lt;br /&gt;
  Test[6] = &#039;W&#039;;&lt;br /&gt;
  Test[7] = &#039;o&#039;;&lt;br /&gt;
  Test[8] = &#039;r&#039;;&lt;br /&gt;
  Test[9] = &#039;l&#039;;&lt;br /&gt;
  Test[10] = &#039;d&#039;;&lt;br /&gt;
  Test[11] = &#039;\0&#039;;   // das abschliessende \0 nicht vergessen! Sonst ist&lt;br /&gt;
                     // das kein String!&lt;br /&gt;
&lt;br /&gt;
  char Temp[6];&lt;br /&gt;
&lt;br /&gt;
  for( i = 0; i &amp;lt; 6; ++i )&lt;br /&gt;
    Temp[i] = Test[ i + 6 ];&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&#039;&#039;&#039;\0&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&amp;lt;/font&amp;gt; ist nichts anderes als eine binäre Null. Diese spezielle Schreibweise soll explizit die Verwendung dieser &#039;&#039;0&#039;&#039; als Stringende - Character &#039;&#039;(char)0&#039;&#039; hervorheben.&lt;br /&gt;
&lt;br /&gt;
== Einige Stringfunktionen ==&lt;br /&gt;
Arrays sind in C keine vollwertigen Datentypen, z.B. ist es nicht möglich einem Array in einem Rutsch ein anderes Array zuzuweisen oder 2 Arrays miteinander zu vergleichen. Genau das möchte man aber in der Stringverarbeitung häufig, sodass es dafür Standardfunktionen gibt, die allesamt im Headerfile &amp;quot;string.h&amp;quot; zusammengefasst sind und deren Namen alle mit str... beginnen. Allen diesen Funktionen gemeinsam ist, dass sie sich &amp;lt;font color=FF0000&amp;gt;&amp;lt;b&amp;gt;nicht&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; um die korrekte Bereitstellung von Arrays kümmern, sondern davon ausgehen, dass dies vom Programmierer korrekt erledigt wird.&lt;br /&gt;
&lt;br /&gt;
=== strcpy( char* dest, const char* src ) ===&lt;br /&gt;
Kopieren eines Strings von der Speicherfläche auf die src zeigt, zur Speicherfläche, auf die dest zeigt.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Ziel1[20];&lt;br /&gt;
  char Ziel2[20];&lt;br /&gt;
&lt;br /&gt;
  strcpy( Ziel1, &amp;quot;Hallo Welt&amp;quot; );&lt;br /&gt;
  strcpy( Ziel2, Ziel1 );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== strcat( char* dest, const char* src ) ===&lt;br /&gt;
Anhängen eines Strings an einen bestehenden String.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Ziel[20];&lt;br /&gt;
  char Temp[20];&lt;br /&gt;
&lt;br /&gt;
  strcpy( Ziel, &amp;quot;Hallo &amp;quot; );    // Ziel enthält jetzt den String &amp;quot;Hallo &amp;quot;&lt;br /&gt;
  strcat( Ziel, &amp;quot;Welt&amp;quot; );      // Ziel enthält jetzt den String &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  strcpy( Temp, &amp;quot; !&amp;quot; );&lt;br /&gt;
  strcat( Ziel, Temp );        // Ziel enthält jetzt den String &amp;quot;Hallo Welt !&amp;quot;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== strcmp( const char* str1, const char* str2 ) ===&lt;br /&gt;
Vergleichen 2-er Strings. Das Ergebnis ist 0, wenn die beiden Strings identisch sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Ziel[20];&lt;br /&gt;
&lt;br /&gt;
  strcpy( Ziel, &amp;quot;Hallo Welt&amp;quot; );  // Ziel enthält jetzt den String &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  if( strcmp( Ziel, &amp;quot;Hallo Welt&amp;quot; ) == 0 )&lt;br /&gt;
    printf( &amp;quot;Ziel war &#039;Hallo Welt&#039;\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  if( strcmp( Ziel, &amp;quot;test&amp;quot; ) != 0 )&lt;br /&gt;
    printf( &amp;quot;Ziel war NICHT &#039;test&#039;\n&amp;quot; );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== strlen( const char* str ) ===&lt;br /&gt;
Die Länge eines Strings feststellen. Die Länge beinhaltet nicht das abschliessende &#039;\0&#039; Zeichen.&lt;br /&gt;
&lt;br /&gt;
Unter &#039;Länge&#039; wird hier die tatsächliche Länge des Strings (also die Anzahl der im String gespeicherten Zeichen) verstanden und nicht die &#039;Länge&#039; des Arrays in dem der String gespeichert ist. Wird der Text &amp;quot;test&amp;quot; in einem char-Array der Größe 20 gespeichert, so lautet das Ergebnis von strlen() 4 und nicht etwa 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
  char string[20];&lt;br /&gt;
  strcpy( string, &amp;quot;test&amp;quot; );&lt;br /&gt;
  i = strlen( string );      // i bekommt hier den Wert 4&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  char Meldung[14];&lt;br /&gt;
  strcpy( Meldung, &amp;quot;Hello World&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Mittels der Definition&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  char Meldung[14];&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
wird ein Array bereitgestellt, welches maximal 14 Zeichen aufnehmen kann. &amp;lt;b&amp;gt;Hello World&amp;lt;/b&amp;gt; verbraucht für die lesbaren Zeichen 11 Array-Positionen, dazu noch das obligatorische abschliessende &#039;\0&#039; Zeichen, macht in Summe 12 Positionen. Eine Definition von 14 Zeichen ist also mehr als minimal notwendig&lt;br /&gt;
wäre. Das macht aber nichts, da durch das abschliessende &#039;\0&#039; Zeichen immer feststellbar ist, an welcher Stelle der tatsächliche String zu Ende ist. Die restlichen 2 Array-Positionen sind zur Zeit halt einfach unbenutzt.&lt;br /&gt;
&amp;lt;b&amp;gt;strcpy()&amp;lt;/b&amp;gt; kopiert den 2.ten angegebenen String an die Position auf die sein erstes Argument zeigt. Im obigen Beispiel zeigt das 1.te Argument auf den Beginn von &amp;lt;i&amp;gt;Meldung&amp;lt;/i&amp;gt;, also auf das Array. Folgerichtig wird der String &amp;quot;Hello World&amp;quot; in das Array &amp;lt;i&amp;gt;Meldung&amp;lt;/i&amp;gt; umkopiert. Nach Ausführung der &amp;lt;b&amp;gt;strcpy()&amp;lt;/b&amp;gt; Funktion enthält also &amp;lt;i&amp;gt;Meldung&amp;lt;/i&amp;gt; den Inhalt:&lt;br /&gt;
&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
     | H | e | l | l | o |   | W | o | r | l | d | \0|   |   |&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
     &lt;br /&gt;
Möchte man an diesen Text jetzt noch etwas anfügen, z.B. ein &amp;quot;?&amp;quot;, so würde das so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  char Meldung[14];&lt;br /&gt;
  strcpy( Meldung, &amp;quot;Hello World&amp;quot; );&lt;br /&gt;
  strcat( Meldung, &amp;quot;?&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;FF0000&amp;quot;&amp;gt;&lt;br /&gt;
Man beachte: auch wenn hier scheinbar nur ein einzelnes Zeichen angehängt wird, so handelt es sich doch um einen String. Strings werden in C immer mit einem &amp;quot; eingeleitet und abgeschlossen. Im Gegensatz zu einzelnen Zeichen, die in einfache &#039; eingefasst werden. &amp;quot;?&amp;quot; ist also nicht dasselbe wie &#039;?&#039;! Das&lt;br /&gt;
erste ist ein String (der mit dem obligatorischen &#039;\0&#039; Zeichen insgesamt aus 2 Zeichen besteht), während letzteres ein einzelnes Zeichen darstellt! Die meisten str... Funktionen arbeiten nur mit Strings!&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da &amp;lt;i&amp;gt;Meldung&amp;lt;/i&amp;gt; maximal 14 Zeichen umfassen kann, der Text &amp;quot;Hello World?&amp;quot; aber nur aus 13 Zeichen besteht, funktioniert Obiges auch ohne Probleme. Der Array-Inhalt sieht dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
     | H | e | l | l | o |   | W | o | r | l | d | ? | \0|   |&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
&lt;br /&gt;
Ein schwerwiegender Fehler wäre es, wenn der komplette String nach dem &amp;lt;b&amp;gt;strcat()&amp;lt;/b&amp;gt; aus mehr als 14 Zeichen (das &#039;\0&#039;-Zeichen nicht vergessen!) bestehen würde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  char Meldung[14];&lt;br /&gt;
  strcpy( Meldung, &amp;quot;Hello World&amp;quot; );&lt;br /&gt;
  strcat( Meldung, &amp;quot; von mir&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
würde also das Array überlaufen lassen.&lt;br /&gt;
&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
     | H | e | l | l | o |   | W | o | r | l | d |   | v | o | n       m   i   r   \0&lt;br /&gt;
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+&lt;br /&gt;
&lt;br /&gt;
Man sieht sehr schön, daß in diesem Fall die weiteren Zeichen einfach an die Folgepositionen im Speicher geschrieben werden und dadurch ungewollt Speicher verändern, der nicht zu &amp;lt;i&amp;gt;Meldung&amp;lt;/i&amp;gt; gehört. Abhängig von den Details des Programmes können aber an dieser Stelle im Speicher z.B. ganz andere Variablen liegen, die dann verändert werden. &amp;lt;b&amp;gt;strcpy()&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;strcat()&amp;lt;/b&amp;gt; oder alle anderen String-Funktionen können den Programmierer gegen diesen Fall nicht schützen! Dazu müssten sie die Größe des Speicherbereichs kennen, was sie nicht tun. Es obliegt einzig und alleine der Sorgfalt des Programmierers, das Programm gegen solche Fälle abzusichern!&lt;br /&gt;
&lt;br /&gt;
Seit einiger Zeit wurde das Sammelsurium der str... Funktionen durch Varianten ergänzt, die sich anschicken dieses Manko zu entschärfen. Diesen Funktionen wird die maximale Anzahl der zu bearbeitenden Zeichen mitgegeben. Mit der Kenntnis der Größe des Zielbereichs und der Länge des bereits darin enthaltenen Strings ist es damit möglich eine Obergrenze auszurechnen, wieviele Zeichen von einer Funktion gefahrlos bearbeitet werden dürfen, ehe der Zielbereich überlaufen würde.&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen heißen grundsätzlich gleich wie die str... Funktionen, nur befindet sich ein kleines &#039;n&#039; im Funktionsnamen. Aus &amp;lt;b&amp;gt;strcpy&amp;lt;/b&amp;gt; wird so &amp;lt;b&amp;gt;strncpy&amp;lt;/b&amp;gt;, aus &amp;lt;b&amp;gt;strcat&amp;lt;/b&amp;gt; wird &amp;lt;b&amp;gt;strncat&amp;lt;/b&amp;gt; usw. Für Details dazu sei auf Literatur oder Web-Recherche verwiesen. Auch wenn einen diese Funktionen gegen die gefürchteten Array-Overflows schützen können, so muß man sich trotzem klarmachen, daß dieser Schutz nur die halbe Miete ist. Denn was soll &amp;lt;b&amp;gt;strncpy&amp;lt;/b&amp;gt; denn tun, wenn der zu kopierende String nicht in das Zielarray passt? &amp;lt;b&amp;gt;strncpy&amp;lt;/b&amp;gt; kopiert soviel wie es kann und gibt dann auf. Aber: Dadurch ist der String aber nicht zur Gänze in den Zielbereich kopiert worden. Programmteile die darauf angewiesen sind, daß der String vollständig kopiert wurde, werden dann nicht mehr oder nicht richtig funktionieren usw. Auch wenn die strn... Funktionen eine gewisse Abhilfe bringen und zumindest den Absturz eines Programmes verhindern können, stellen sie dennoch keine Allheilmittel dar. Um die korrekte Abschätzung der benötigten Arraygrößen kommt man nicht umhin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;strlen()&amp;lt;/b&amp;gt; liefert die Länge eines Strings. Die Längenangabe beinhaltet dabei nicht das abschliessende &#039;\0&#039; Zeichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  char Meldung[14];&lt;br /&gt;
  int  Len;&lt;br /&gt;
  &lt;br /&gt;
  strcpy( Meldung, &amp;quot;Hello World&amp;quot; );&lt;br /&gt;
  Len = strlen( Meldung );&lt;br /&gt;
  &lt;br /&gt;
  /* Hier enthaelt Len den Wert 11 */&lt;br /&gt;
&lt;br /&gt;
  Len = strlen( &amp;quot;Hallo Welt&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  /* Hier enthält Len den Wert 10 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;strcmp()&amp;lt;/b&amp;gt; schlussendlich vergleicht 2 Strings auf Gleichheit. Der Rückgabewert spiegelt dabei die Position des ersten Unterschiedes in den beiden Strings wieder. Folgerichtig sagt ein Wert von 0 daher aus, dass die beiden Strings identisch sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  char Meldung1[14];&lt;br /&gt;
  char Meldung2[14];&lt;br /&gt;
&lt;br /&gt;
  strcpy( Meldung1, &amp;quot;Hello World&amp;quot; );&lt;br /&gt;
  strcpy( Meldung2, &amp;quot;Hallo Welt&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  if( strcmp( Meldung1, Meldung2 ) == 0 ) {&lt;br /&gt;
    /* die Strings sind identisch */&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    /* die Strings sind nicht identisch */&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if( strcmp( Meldung2, &amp;quot;Hallo Welt&amp;quot; ) == 0 ) {&lt;br /&gt;
    /* Meldung2 war &amp;quot;Hallo Welt&amp;quot; */&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt noch weitere String-Funktionen, dafür sei aber auf die Verwendung der zum Compiler gehörenden Dokumentation bzw. auf einführende Literatur zum Thema &#039;Programmieren in C&#039; verwiesen.&lt;br /&gt;
&lt;br /&gt;
=Funktionszeiger=&lt;br /&gt;
Um Menüs oder ähnliche Dinge aufzubauen ist es oft praktisch ein Array von Funktionszeigern zu definieren. Der Aufruf einer Funktion kann dann indirekt über eine Variable erfolgen, wobei die Variable die Adresse der aufzurufenden Funktion enthält.&lt;br /&gt;
&lt;br /&gt;
Um mit Funktionszeigern zu arbeiten ist es in der Praxis sinnvoll sich einen &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt; für den Typ des Funktionszeigers zu definieren. Ein &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt; definiert einen neuen (kürzeren) Namen für einen Datentyp. Und wie wir sehen werden, ist der Datentyp eines Funktionszeigers in der Schreibweise ganz schön umfangreich.&lt;br /&gt;
&lt;br /&gt;
==typedef==&lt;br /&gt;
Einen &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt; zu definieren ist eigentlich ganz einfach: Man schreibt die Deklaration so, als ob man eine Variable definieren würde. Vor das ganze Konstrukt kommt das Schlüsselwort &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt;. Es bewirkt, dass der Name an der Position des Variablennamens zum Namen für den neuen Datentyp wird, der dann in weiterer Folge wie jeder andere Datentyp benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Wir wollen einen Funktionszeiger auf eine Funktion definieren, die keine Argumente entgegen nimmt und auch nichts liefert. Also Funktionen nach&lt;br /&gt;
dem Muster:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
void foo( void )&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein entsprechender &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt; würde zB so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef void (*VoidFnct)( void );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vereinbart einen neuen Datentyp &amp;lt;b&amp;gt;VoidFnct&amp;lt;/b&amp;gt;. Dieser ist ein Funktionszeiger auf Funktionen, die keine Argumente nehmen und auch nichts zurückliefern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef int (*IntFnct)( void );&lt;br /&gt;
typedef int (*IntFnct2)( int );&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;IntFnct&amp;lt;/b&amp;gt; ist ein Zeiger auf eine Funktion, die keine Argumente nimmt aber einen &amp;lt;b&amp;gt;int&amp;lt;/b&amp;gt; zurückliefert. &amp;lt;b&amp;gt;IntFnct2&amp;lt;/b&amp;gt; hingegen ist ein Zeiger auf eine Funktion, die einen &amp;lt;b&amp;gt;int&amp;lt;/b&amp;gt; als Argument nimmt und einen &amp;lt;b&amp;gt;int&amp;lt;/b&amp;gt; zurückliefert. Andere Argumenttypen bzw. Rückgabetypen folgen dem gleichen Muster. Wichtig ist, dass sowohl Argumenttypen als auch Rückgabetypen Teil der Signatur eines Funktionszeigers ist. Es ist also nicht möglich einen Funktionszeigertyp zu vereinbaren, der auf beliebige Funktionen mit beliebigen Argumenttypen bzw. Rückgabetypen verweist. Hier muss man ev. auf einen cast ausweichen. Generell ist das aber meist keine gute Idee.&lt;br /&gt;
&lt;br /&gt;
==Funktionszeigertabellen==&lt;br /&gt;
Mit einem &amp;lt;b&amp;gt;typedef&amp;lt;/b&amp;gt; ist es nun ein leichtes ein Array von Funktionszeigern zu vereinbaren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef void (*VoidFnct)( void );&lt;br /&gt;
&lt;br /&gt;
VoidFnct MeineFunktionen[5];&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies vereinbart &amp;lt;i&amp;gt;MeineFunktionen&amp;lt;/i&amp;gt; als ein Array von Funktionszeigern, wobei jeder Funktionszeiger auf eine Funktion vom Typ void-void zeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef void (*VoidFnct)( void );&lt;br /&gt;
&lt;br /&gt;
void Funct1()&lt;br /&gt;
{&lt;br /&gt;
  printf( &amp;quot;Dies ist Funktion 1\n&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Funct2()&lt;br /&gt;
{&lt;br /&gt;
  printf( &amp;quot;Dies ist Funktion 2\n&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
VoidFnct MeineFunktionen[] = { Funct1, Funct2 };&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  //&lt;br /&gt;
  // ruft die Funktion auf, deren Adresse in MeineFunktionen[0]&lt;br /&gt;
  // steht. In diesem Fall wäre das Funct1()&lt;br /&gt;
  //&lt;br /&gt;
  MeineFunktionen[0]();&lt;br /&gt;
&lt;br /&gt;
  //&lt;br /&gt;
  // und jetzt die MeineFunktionen[1]&lt;br /&gt;
  //&lt;br /&gt;
  MeineFunktionen[1]();&lt;br /&gt;
&lt;br /&gt;
  //&lt;br /&gt;
  // jetzt wird MeineFunktionen[0] umgeleitet auf Funct2()&lt;br /&gt;
  // Achtung: Auf der rechten Seite wird kein () angegeben.&lt;br /&gt;
  // Ansonsten würde ja die Funktione Funct2 aufgerufen. Wir&lt;br /&gt;
  // wollen aber nur ihre Speicheradresse haben! Daher unterbleibt&lt;br /&gt;
  // das ()&lt;br /&gt;
  //&lt;br /&gt;
  MeineFunktionen[0] = Funct2;&lt;br /&gt;
&lt;br /&gt;
  //&lt;br /&gt;
  // welche Funktion wird jetzt aufgerufen?&lt;br /&gt;
  //&lt;br /&gt;
  MeineFunktionen[0]();&lt;br /&gt;
  // Richtig: Die Funktion, deren Adresse in MeineFunktionen[0]&lt;br /&gt;
  //          steht. Und das ist jetzt Funct2.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Menüs mit Funktionszeigern==&lt;br /&gt;
Besonders bei Menüs ist es oft hilfreich, sich eine Struktur bestehend&lt;br /&gt;
aus dem Menütext und der aufzurufenden Funktion zu definieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef void (*VoidFnct)( void );&lt;br /&gt;
&lt;br /&gt;
struct MenuEntry {&lt;br /&gt;
  char     Text[20];&lt;br /&gt;
  VoidFnct Function;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Menü ist dann einfach ein Array aus derartigen Strukturelementen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void HandleEdit()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HandleCopy()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HandlePaste()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct MenuEntry MainMenu[] = {&lt;br /&gt;
 { &amp;quot;Edit&amp;quot;, HandleEdit },&lt;br /&gt;
 { &amp;quot;Copy&amp;quot;, HandleCopy },&lt;br /&gt;
 { &amp;quot;Paste&amp;quot;, HandlePaste }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#define ARRAY_SIZE(X) ( sizeof(X) / sizeof(*(X)) )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void DoMenu( int NrEntries, struct MenuEntry Menu[] )&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  int Auswahl;&lt;br /&gt;
  &lt;br /&gt;
  do {&lt;br /&gt;
    //&lt;br /&gt;
    // Das Menue anzeigen. Für jeden Menuepunkt noch eine Zahl&lt;br /&gt;
    // davor stellen, damit der Benutzer auch was zum Eingeben hat&lt;br /&gt;
    //&lt;br /&gt;
    for( i = 0; i &amp;lt; NrEntries; ++i )&lt;br /&gt;
      printf( &amp;quot;%d) %s\n&amp;quot;, i + 1, Menu[i].Text ); &lt;br /&gt;
&lt;br /&gt;
    printf( &amp;quot;9) Exit\n\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    // &lt;br /&gt;
    // Jetzt die Benutzereingabe abwarten ...&lt;br /&gt;
    //&lt;br /&gt;
    printf( &amp;quot;Ihre Eingabe: &amp;quot; );&lt;br /&gt;
    scanf( &amp;quot;%d&amp;quot;, &amp;amp;Auswahl );&lt;br /&gt;
&lt;br /&gt;
    //&lt;br /&gt;
    // ... und auswerten&lt;br /&gt;
    //&lt;br /&gt;
    if( Auswahl == 9 )&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
    Auswahl = Auswahl - 1;&lt;br /&gt;
    if( Auswahl &amp;lt; 0 || Auswahl &amp;gt; NrEntries )&lt;br /&gt;
      printf( &amp;quot;Ungültige Eingabe\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
      // Die Eingabe war gültig. Zugehörige Funktion aufrufen&lt;br /&gt;
      Menu[Auswahl].Function();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  // Das Menü arbeiten lassen.&lt;br /&gt;
  // Die Funktion DoMenu ruft selbsttätig die zu den jeweiligen&lt;br /&gt;
  // Menüpunkten gehörenden Funktionen auf. DoMenu kommt erst&lt;br /&gt;
  // dann wieder zurück, wenn der Benutzer den Menüpunkt&lt;br /&gt;
  // 9) Exit&lt;br /&gt;
  // ausgewählt hat.&lt;br /&gt;
&lt;br /&gt;
  DoMenu( ARRAY_SIZE( MainMenu ), MainMenu );&lt;br /&gt;
&lt;br /&gt;
  while( 1 )&lt;br /&gt;
    ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf einem Mikrocontroller wird man natürlich die Ein/Ausgabe nicht über &amp;lt;b&amp;gt;printf&amp;lt;/b&amp;gt;/&amp;lt;b&amp;gt;scanf&amp;lt;/b&amp;gt; abwickeln. Hier geht es aber um das Prinzip der Funktionszeiger und wie man mit ihnen arbeitet, daher wurde die allereinfachste Art der Benutzerinteraktion gewählt. Gegebenenfalls muss &amp;lt;b&amp;gt;printf&amp;lt;/b&amp;gt; und &amp;lt;b&amp;gt;scanf&amp;lt;/b&amp;gt; durch die Möglichkeiten auf dem konkreten System ersetzt werden. Auch ist die Art und Weise wie das Menü präsentiert bzw. die Benutzereingabe ausgewertet wird, nicht der Weisheit letzter Schluss. Anstatt den Benutzer Zahlen eingeben zu lassen, könnte man auch einen Auswahl-Balken vom Benutzer mit 2 Tasten über die Menüeinträge bewegen lassen. Oder einen Drehencoder nehmen, ...&lt;br /&gt;
&lt;br /&gt;
=Ich hab da mehrere *.c und *.h Dateien. Was mache ich damit?=&lt;br /&gt;
Zunächst ist es wichtig, sich zu vergegenwärtigen wie denn der C Compiler/Linker überhaupt arbeitet. Ein komplettes Programmier-Projekt kann und wird im Normalfall aus mehreren Source Code Dateien bestehen die alle zusammengenommen das komplette Programm bilden.&lt;br /&gt;
&lt;br /&gt;
Der Prozess des Erstellens des Programmes geschieht in mehrerern Schritten:&lt;br /&gt;
* zunächst werden alle Einzelteile (jede *.c Datei) für sich &#039;&#039;compiliert&#039;&#039;. Dabei ensteht für jede *.c Datei eine sog. Object-Datei in der bereits der Maschinencode für die im *.c programmierten Funktionen enthalten ist&lt;br /&gt;
* danach werden die einzelnen Object-Dateien zusammen mit zusätzlichen Bibliotheken zum fertigen Programm &#039;&#039;gelinkt&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Angenommen das komplette Projekt besteht aus 2 Dateien&lt;br /&gt;
&lt;br /&gt;
Datei: &amp;lt;b&amp;gt;main.c&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int twice(int i);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  twice( 5 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei: &amp;lt;b&amp;gt;func.c&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int twice( int number )&lt;br /&gt;
{&lt;br /&gt;
  return 2 * number;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann werden &amp;lt;b&amp;gt;main.c&amp;lt;/b&amp;gt; und &amp;lt;b&amp;gt;func.c&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;unabhängig&amp;lt;/i&amp;gt; voneinander compiliert. Als Ergebnis erhält man die Dateien &amp;lt;b&amp;gt;main.o&amp;lt;/b&amp;gt; und &amp;lt;b&amp;gt;func.o&amp;lt;/b&amp;gt; die den besagten Object-Code enthalten. Erst diese beiden Zwischenergebnisse werden dann zusammen mit eventuellen Bibliotheken zum fertigen Programm gebunden (gelinkt), das dann ausgeführt werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        +---------+                         +----------+&lt;br /&gt;
        | main.c  |                         | func.c   |&lt;br /&gt;
        +---------+                         +----------+&lt;br /&gt;
             |                                   |&lt;br /&gt;
             |                                   |&lt;br /&gt;
             v                                   v&lt;br /&gt;
         Compiler                            Compiler&lt;br /&gt;
             |                                   |&lt;br /&gt;
             |                                   |&lt;br /&gt;
             v                                   v&lt;br /&gt;
        +---------+                         +----------+&lt;br /&gt;
        | main.o  |                         | func.o   |&lt;br /&gt;
        +---------+                         +----------+&lt;br /&gt;
             |                                   |&lt;br /&gt;
             +-----------+   +-------------------+&lt;br /&gt;
                         |   |&lt;br /&gt;
                         v   v&lt;br /&gt;
                         Linker  &amp;lt;------ zus. Bibliotheken&lt;br /&gt;
                           |&lt;br /&gt;
                           v&lt;br /&gt;
                      +----------+&lt;br /&gt;
                      | fertiges |&lt;br /&gt;
                      | Programm |&lt;br /&gt;
                      +----------+&lt;br /&gt;
&lt;br /&gt;
Bekommt man also von irgendwo bereits fertige *.c (und zugehörige *.h) Dateien, so genügt es, die *.c Dateien ganz einfach in das Projekt mit aufzunehmen. Daduch wird das entsprechende *.c File compiliert und das Ergebnis davon, das Object-file, wird dann in das fertige Programm mit eingelinkt.&lt;br /&gt;
&lt;br /&gt;
Wie eine *.c Datei in das Projekt mit aufgenommen wird, hängt im wesentlichen von der benutzten Entwicklungsumgebung ab.&lt;br /&gt;
&lt;br /&gt;
==Makefile==&lt;br /&gt;
Die zusätzliche *.c Datei wird in die SRC Zeile im makefile eingetragen.&lt;br /&gt;
==AVR-Studio==&lt;br /&gt;
Hier ist es besonders einfach eine Datei in das Projekt mit aufzunehmen. Dazu wird im Projektbaum einfach der Knoten &amp;quot;Source Files&amp;quot; aktiviert und mit der rechten Maustaste das Kontextmenü geöffnet. Im Menü wird der Punkt &amp;quot;Add existing Source File(s)&amp;quot; ausgewählt und anschliessend zeigt man AVR-Studio das zusätzliche *.c File. AVR-Studio berücksicht dann dieses File bei der Projekterzeugung, compiliert es und sorgt dafür, daß es zum fertigen Programm dazugelinkt wird.&lt;br /&gt;
&lt;br /&gt;
=Globale Variablen über mehrere Dateien=&lt;br /&gt;
Ein häufige Problemkreis in der C Programmierung sind auch globale Variablen, die von mehreren *.c Dateien aus benutzt werden sollen. Was hat es damit auf sich?&lt;br /&gt;
&lt;br /&gt;
Zunächst mal muß man bei der Vereinbarung von Variablen zwischen &amp;lt;b&amp;gt;Definition&amp;lt;/b&amp;gt; und &amp;lt;b&amp;gt;Deklaration&amp;lt;/b&amp;gt; unterscheiden. Worin besteht der Unterschied?&lt;br /&gt;
* &amp;lt;b&amp;gt;Definition&amp;lt;/b&amp;gt;: Mit einer Definition wird der Compiler angewiesen eine Variable tatsächlich zu erzeugen. Damit er das kann, muß ihm selbstverständlich der exakte Datentyp und auch der Name der Variablen zur Verfügung stehen. Eine Definition sorgt also dafür, daß im späteren Programm Speicherplatz für diese Variable reserviert wird&lt;br /&gt;
* &amp;lt;b&amp;gt;Deklaration&amp;lt;/b&amp;gt;: Mit einer Deklaration teilt man dem Compiler lediglich mit, dass eine Variable existiert. An dieser Stelle soll der Compiler also keinen Speicherplatz reservieren (das muß an anderer Stelle geschehen sein), sondern der Compiler soll einfach nur zur Kenntniss nehmen, daß es eine Variable mit einem bestimmten Namen gibt und von welchem Datentyp sie ist.&lt;br /&gt;
&lt;br /&gt;
Aus obigem folgt sofort, dass eine Definition auch immer eine Deklaration ist. Denn dadurch daß der Compiler angewiesen wird eine Variable auch tatsächlich zu erzeugen folgt, dass er dazu auch dieselben Informationen benötigt, die auch in einer Deklaration angegeben werden müssen. Der einzige Unterschied: Bei einer Deklaration trägt der Compiler nur in seinen internen Tabellen ein, dass es diese Variable tatsächlich gibt, während er bei einer Definition zusätzlich auch noch dafür sorgt, dass im fertigen Programm auch noch Speicher für diese Variable bereitgestellt wird.&lt;br /&gt;
&lt;br /&gt;
Warum ist diese Unterscheidung jetzt wichtig?&lt;br /&gt;
&lt;br /&gt;
Weil es in C die sog. &amp;lt;b&amp;gt;One Definition Rule&amp;lt;/b&amp;gt; oder kurz &amp;lt;b&amp;gt;ODR&amp;lt;/b&amp;gt; gibt. Sie besagt, dass in einem vollständigem Programm, also über alle *.c Dateien gesehen, es für eine Variable nur &amp;lt;b&amp;gt;eine&amp;lt;/b&amp;gt; Definition geben darf. Es darf allerdings beliebig viele Deklarationen geben, solange diese Deklarationen alle im Datentyp übereinstimmen. Kurz gesagt: Man darf den Compiler nur einmal auffordern eine Variable zu erzeugen (Definition), kann sich aber beliebig oft auf diese eine Variable beziehen (Deklarationen). Aber Vorsicht! Da der Compiler jede einzelne *.c Datei für sich alleine übersetzt und dabei kein Wissen von ausserhalb benutzt, obliegt es der Verantwortung des Programmierers dafür zu sorgen, dass alle Deklarationen im Datentyp übereinstimmen. Der Compiler kann diese Einhaltung prinzipbedingt nicht überwachen!&lt;br /&gt;
&lt;br /&gt;
Woran erkennt man eine Definition bzw. Deklaration?&lt;br /&gt;
&lt;br /&gt;
Eine Definition einer globalen Variable steht immer ausserhalb eines Funktionsblocks. Zb.&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
int  MyData;         // Globale Variable namens MyData. Sie ist vom Typ int&lt;br /&gt;
char Name[30];       // Globales Array&lt;br /&gt;
long NrElements = 5; // Globale Variable, die auch noch initialisiert wird&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Deklaration unterscheidet sich von einer Definition in 2 Punkten&lt;br /&gt;
* Es wird das Schlüsselwort &amp;lt;b&amp;gt;extern&amp;lt;/b&amp;gt; vorangestellt.&lt;br /&gt;
* Es kann keine Initialisierung geben. Sobald eine Initialisierung vorhanden ist, wird das Schlüsselwort &amp;lt;b&amp;gt;extern&amp;lt;/b&amp;gt; ignoriert und aus der Deklaration wird eine Definition.&lt;br /&gt;
&lt;br /&gt;
Beispiele für Deklarationen&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
extern int  MyData;&lt;br /&gt;
extern char Name[30];&lt;br /&gt;
extern long NrElements;&lt;br /&gt;
extern long NrElements = 5;  // Achtung: Dies ist keine Deklaration!&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Besitzt man also 2 *.c Dateien, main.c und helpers.c, und sollen sich diese beiden Dateien eine globale Variable teilen, so muss in eine Datei eine Definition hinein, während in die andere Datei eine Deklaration derselben Variablen erfolgen muß. Traditionell werden die Definitionen in der Datei gemacht, die auch die main() Funktion enthält. Das muss nicht so sein, ist aber eine Konvention, die oft Sinn macht.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
int  AnzahlElemente;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  AnzahlElemente = 8;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
helpers.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
extern int AnzahlElemente;   // Dies ist die Deklaration die auf die globale&lt;br /&gt;
                             // Variable AnzahlElemente in main.c verweist.&lt;br /&gt;
                             // Wichtig: Der Datentyp muss mit dem in main.c&lt;br /&gt;
                             // angegebenen übereinstimmen&lt;br /&gt;
&lt;br /&gt;
void foo()&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
  j = AnzahlElemente;&lt;br /&gt;
  AnzahlElemente = 9;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Praktische Durchführung==&lt;br /&gt;
Besteht ein vollständiges Programm aus mehreren *.c Dateien, dann kann man sich vorstellen, daß es mühsam ist, alle Deklarationen immer auf gleich zu halten. Hier bietet sich der Einsatz eines Header Files an, in der die Deklarationen stehen und welches in die jeweiligen *.c Dateien inkludiert wird&lt;br /&gt;
&lt;br /&gt;
Bsp:&lt;br /&gt;
&lt;br /&gt;
Global.h&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
extern int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int Anzahl;      // auch wenn Global.h inkludiert wurde, so muss es eine&lt;br /&gt;
                 // Definition der Variablen geben. In Global.h sind ja nur&lt;br /&gt;
                 // Deklarationen.&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
  Anzahl = 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
foo.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void foo()&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
  Anzahl = 8;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bar.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void bar()&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
  j = Anzahl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diese Art kann man erreichen, dass zumindest alle Deklarationen ein und derselben Variablen in einem Programm übereinstimmen. Die Datei Global.h wird auch in main.c inkludiert, obwohl man das eigentlich nicht müsste, denn dort wird die Variable ja definiert. Durch die Inclusion ermöglicht man aber dem Compiler die Überprüfung ob die Deklaration auch tatsächlich mit der Definition übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
Solange kein Initialisierungen der globalen Variablen notwendig sind, gibt es noch einen weiteren Trick, um sich selbst das Leben und die Verwaltung der globalen Variablen zu erleichtern.&lt;br /&gt;
Worin besteht das Problem?&lt;br /&gt;
Das Problem besteht darin, dass man bei Einführung einer neuen globalen Variablen an 2 Stellen erweitern muss: Zum einen in der Header-Datei, die die &#039;extern&#039;-Deklaration der Variablen enthält, zum anderen muss in einer C-Datei die Definition der Variablen erfolgen. Das kann man sich mit etwas Präprozessorarbeit auch einfacher machen:&lt;br /&gt;
&lt;br /&gt;
Global.h&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#ifndef EXTERN&lt;br /&gt;
#define EXTERN extern&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
EXTERN int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#define EXTERN&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
  Anzahl = 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
foo.c&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void foo()&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
  Anzahl = 8;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert das Ganze? Im Grunde muss man nur dafür sorgen, dass der Compiler an &#039;&#039;einer&#039;&#039; Stelle das Schlüsselwort &#039;&#039;&#039;extern&#039;&#039;&#039; ignoriert (hier in main.c) und bei allen anderen Inclusionen beibehält. Dadurch das ein Präprozessor-ifndef benutzt wird, kann dieses erreicht werden. Wird das Header File includiert und ist zu diesem Zeitpunkt das Makro &#039;&#039;&#039;EXTERN&#039;&#039;&#039; noch nicht definiert, so wird innerhalb des Header Files &#039;&#039;&#039;EXTERN&#039;&#039;&#039; zu &#039;&#039;&#039;extern&#039;&#039;&#039; definiert und damit in weiterer Folge im Quelltext &#039;&#039;&#039;EXTERN&#039;&#039;&#039; durch &#039;&#039;&#039;extern&#039;&#039;&#039; ersetzt. Wenn daher foo.c das Header File inkludiert, wird die Zeile&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
EXTERN int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
vom Präprozessor zu&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
extern int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
In main.c hingegen sieht die Include-Sequenz so aus&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
#define EXTERN&lt;br /&gt;
#include &amp;quot;Global.h&amp;quot;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
Wenn Global.h bearbeitet wird, existiert bereits ein Makro &#039;&#039;&#039;EXTERN&#039;&#039;&#039;, das auf einen leeren Text expandiert. Dadurch wird verhindert, dass innerhalb von Global.h das Makro &#039;&#039;&#039;EXTERN&#039;&#039;&#039; mit dem Text &#039;&#039;&#039;extern&#039;&#039;&#039; belegt wird und&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
EXTERN int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
wird daher vom Präprozessor zu&lt;br /&gt;
&amp;lt;C&amp;gt;&lt;br /&gt;
int Anzahl;&lt;br /&gt;
&amp;lt;/C&amp;gt;&lt;br /&gt;
erweitert, genau wie es benötigt wird.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=34353</id>
		<title>AVR Softwarepool</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=34353"/>
		<updated>2009-02-12T05:55:14Z</updated>

		<summary type="html">&lt;p&gt;Werner-b: Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die interessantesten Softwareprojekte aus der Codesammlung...&lt;br /&gt;
&lt;br /&gt;
(A)  ... Projekt ist in &#039;&#039;&#039;Assembler&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C)  ... Projekt ist in &#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(B)  ... Projekt ist in &#039;&#039;&#039;Bascom&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(PC) ... Projekt ist nicht für einen µC, sondern für den PC&lt;br /&gt;
&lt;br /&gt;
==1-Wire==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14792  DS1820, DS18B20 in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6505 Mehrere DS1820/DS18B20 auslesen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Mehrere DS1820/DS18B20/DS18S20/DS1822 über einen Webserver auslesbar]&lt;br /&gt;
&lt;br /&gt;
==Akkulader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72627#594587 Bleiakku-Lader 12/24V]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
==Bootloader==&lt;br /&gt;
* (A,C,PC) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (A,PC) [http://www.mikrocontroller.net/topic/95839 AVR Bootloader mit Verschlüsselung]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72308#591159 ATtiny45 Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader für ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/56818#439359 SD/MMC Card Bootloader (passt in 2kb bootsection)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/61170#480765 boofa - Bootloader für AVR über UART (AVR109)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53130#413058 Bootloader ATmega168]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/73196#600293 UART Bootloader ATtiny13 - ATmega644]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Bootloader]]&lt;br /&gt;
&lt;br /&gt;
==DCC==&lt;br /&gt;
&lt;br /&gt;
(Digital Command Control, Standard zur digitalen Steuerung von Modelleisenbahnen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31397#241300 DCC Decoder]&lt;br /&gt;
&lt;br /&gt;
==DCF77==&lt;br /&gt;
&lt;br /&gt;
(Zeitsignaldienst für funkgesteuerte Uhren auf der Langwellen-Frequenz 77,5 kHz)&lt;br /&gt;
 &lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38914#287867 DCF77 AVR-Assemblerbaustein ]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6500#41738 DCF77-Uhr mit ATTINY12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31385#241104 DCF Digital Empfangsmodul - Korrelation - (Assembler)ATmega8 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25071#186286 DCF 77 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14788#101528 DCF-Uhr mit DotMatrix-Anzeige für avr-gcc]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12154#79501 PC DCF Timer ( PC Zeitschaltuhr)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25116#187197 DCF 77 Uhr mit CodeVision ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/58769#456232 DCF77 Uhr in C mit ATtiny26]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48597#372164 DCF77 Uhr, zum X.ten Mal, jetzt mit SAF]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 DCF77 mit beliebig gepoltem Eingangssignal innerhalb eines Webservers]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/121049 DCF-Uhr, Sonnenstand, TWI-Port, Alarmfunktion für Atmega8]&lt;br /&gt;
&lt;br /&gt;
== DRAM ==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR] und Anwendung als [http://www.mikrocontroller.net/topic/25053#186089 Audiorekorder]&lt;br /&gt;
&lt;br /&gt;
==Drehgeber==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6526#41978 Drehgeber auslesen]&lt;br /&gt;
&lt;br /&gt;
==DTMF==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/92444#792954 DTMF dekodieren]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungssysteme==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/74198#611404 AVR Code Wizard]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/30110#230503 Multitasking kernel für ATtinys in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/65156#521012 BASIC-Computer mit ATmega32]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/64129#511368 AVR TinyBASIC Anpassung für ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/59189#460273 Mini-Computer mit BASIC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/55807 Forth System für ATmegas in Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94193 Forth-Computer mit ATmega32 und Videoausgabe] von Christian Berger&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62500#493931 Fixpoint-Arithmetik in &amp;quot;C&amp;quot;]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/85256#717037 64 Bit float Emulator in C, IEEE754 kompatibel]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/94468#812992 Gleitkomma-Bibliothek für AVR]&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
&lt;br /&gt;
(Fast Fourier Transformation, &amp;quot;schnelle&amp;quot; Fouriertransformation)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25095#186536 FFT auf dem AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25062#186225 128point FFT in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/27001#203911 Schnelle FFT in Assembler]&lt;br /&gt;
&lt;br /&gt;
==Funksteckdosen==&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 Ansteuerung von Funksteckdosen mit einem Webserver]&lt;br /&gt;
&lt;br /&gt;
==GPS==&lt;br /&gt;
&lt;br /&gt;
(Global Positioning System, satellitengestütztes System zur weltweiten Positions- und Zeitbestimmung)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48544#371717 GPS - MOUSE - MINI- NAVIGATOR (Assembler) ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/72507#593252 GPS an mega8,88 oder 168]&lt;br /&gt;
&lt;br /&gt;
==Kryptographie==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/73468 Verschiedene kryptographische Funktionen] &lt;br /&gt;
&lt;br /&gt;
==LANC==&lt;br /&gt;
&lt;br /&gt;
(Steuerprotokoll für Video- und Digitalfotokameras, auch als Control-L bekannt)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/40463#302754 Sony LANC Auswertung mit AVR] (Atmega 128 @ 16 MHz)&lt;br /&gt;
&lt;br /&gt;
==LEDs und LED-Anzeigen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76839#638278 Solarlicht Steuerung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/73776#606472 LED-Touch-Panel] (ARM)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/54561#421940 HSV RGB Led Dimmer, C Code &amp;amp; Video &amp;amp; Doku]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/67567#543492 Mini RGB Lichteffektgenerator mit Menü für Pic16F84]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48464#370871 Ansteuerung einer RGB LED (PWM)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/87149#737282 3x7 Segment und 1 I/O-Pin (Assembler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] (vier 7-Segmentanzeigen)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31388#241192 AVR-Lauflicht]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94746#815809 HSB-&amp;gt;RGB Umrechnung rein in Assembler, auch für ATiny]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
==LCD und VFD==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/53137#413137 Programm zum Erstellen eigener Schriftarten (LCD)]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/54860#423255 LCD Schriftarten ( Fonts in veschiedenen Größen )]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31403  The Siemens S65 132x176, 65536 color display with AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48501#371218 LCD Ansteuerung im 4bit-Modus]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48456#370782 LCD Library T6963c]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76399#633680 &amp;quot;Bessere&amp;quot; T6963c Library]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25099#186569 LCD Controller für 640x480 LCD mit mega8515]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38923#287939 LCD Controller KS0073 Support im 4-Bit Mode]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/79609#664268 KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/81793#683135 Pollin E0855-2 SED1530-Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90449#772843 LCD über nur einen IO-Pin ansteuern]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120475 VFD Library (Vacuum Fluorescent Display Library)]&lt;br /&gt;
&lt;br /&gt;
==I2C==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/83871#new  I2C-Master realisiert in Software, ohne TWI für alle ATMEGAs]&lt;br /&gt;
&lt;br /&gt;
==Messgeräte==&lt;br /&gt;
===Drehzahlmesser===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/1518#8469 Drehzahlmesser 4 mal 7-segment mit 90S2313]&lt;br /&gt;
&lt;br /&gt;
===Entfernungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
&lt;br /&gt;
===Frequenzmesser===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/62610#495030 Frequenzmesser bis 2Mhz -- mit AVR ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48582#372072 Frequenzmessung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62517#494146 Input Capture Pin (ICP) auslesen ( Frequenz messen)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25144#187587 Frequenzmessund und Impulszählung über den Parallelport-IR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31394#241251 einfacher 5 MHz Frequenzzähler (Assembler) ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
&lt;br /&gt;
===Kompass===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/100239#870281 KOMPASS KMZ10A KMZ10B ATmega8 Assembler]&lt;br /&gt;
&lt;br /&gt;
===Messgeräte für elektronische Bauteile===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60797#477026 LC-METER / LC-Messgerät ATmega8 Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60591#474873 Widerstandstester]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56770#438957 Ladungsmessgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31386#241139 Transistortester]&lt;br /&gt;
&lt;br /&gt;
===Spannungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] - Voltmeter&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53127#413006 Thermometer mit LED &amp;amp; LM35]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Viele DS18x20-Thermometer in einem Webserver]&lt;br /&gt;
&lt;br /&gt;
===Oszilloskop===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/53129#413011 Einfaches Oszilloskop - Bascom]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48586#372093 Oszi- &amp;amp; Logikanalyser mit LCD]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31376#240880 einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56616#437772 Einfaches &amp;quot;Oszilloskop&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==MIDI==&lt;br /&gt;
&lt;br /&gt;
(Musical Instrument Digital Interface, Datenübertragungsstandard für Musikinstrumente)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/106512# Drum-Trigger mit MIDI-Ausgabe]&lt;br /&gt;
&lt;br /&gt;
==MMC==&lt;br /&gt;
&lt;br /&gt;
(Multimedia Card, digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25056#186117 SourceCode MMC die Zweite]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48481#370950 MMC/SD-Karte mit FAT16 an AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14800#102024 MMC/SD ansteuern mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
&lt;br /&gt;
==Netzgerät==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/60786#476904 Labornetzgerät]&lt;br /&gt;
&lt;br /&gt;
==Netzwerk==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87517#new Kleiner ENC28J60 µWebserver von SimonK]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/82127#new Ulrich Radigs ENC28J60 mit leicht lötbaren/beschaffbaren Bauteilen]&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64763#517245 Zwei Parser für numerische Ausdrücke]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76842#638283 uShell - ein universeller Parser für uCs]&lt;br /&gt;
&lt;br /&gt;
==RFID==&lt;br /&gt;
&lt;br /&gt;
(Radio Frequency Identification, Verfahren zur funkbasierten Identifizierung und Lokalisierung von Gegenständen)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
&lt;br /&gt;
==RC5==&lt;br /&gt;
&lt;br /&gt;
(verbreitetes Datenübertragungsprotokoll für Infrarot-Fernbedienungen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/14789#101536 RC5 Sender auf einem Attiny11L]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12216#80856 Fernbedien RC5 Empfänger]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/59235#460765 RC5 Sender selber bauen ???]&lt;br /&gt;
&lt;br /&gt;
==Ringpuffer==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66789#536189 Ringpuffer AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
&lt;br /&gt;
==SD==&lt;br /&gt;
&lt;br /&gt;
(Secure Digital Memory Card; digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68257#550336 Datenrekorder auf SD-Karte mit mega88]&lt;br /&gt;
&lt;br /&gt;
==Sonstiges==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/111783#994358 Sonnenstandberechnung mit Atmega 8]&lt;br /&gt;
&lt;br /&gt;
==Spaßprojekte==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/119876#1083044 Miniprojekt: Lagerfeuer-LED (ATtiny25)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
&lt;br /&gt;
==Spiele==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48505#371259 Tetris auf dem AtMega8]&lt;br /&gt;
&lt;br /&gt;
==Taster / Schalter==&lt;br /&gt;
===mechanisch===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6492#41625 Tasten entprellen - Bulletproof] (siehe auch: [[Entprellung]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48465#370877 Universelle Tastenabfrage]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6491#41624 Tasten-Matrix entprellen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64731#517001 Tastenmatrix auslesen über nur 2 Leitungen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64743#517105 Tasten Entprellen für N00bs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
===kapazitiv===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38904  Sensor mit nur einer Kontaktfläche]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25045 Einfache Sensortaste]&lt;br /&gt;
&lt;br /&gt;
==Tonerzeugung==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66945#537624 ATMEGA8 Soundgenerator/Synthizer]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
&lt;br /&gt;
==TWI==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87597#742070 AVR TWI Master und Slave Funtionen in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31404#242081 TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8]&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/75254#622120 USB Host Stack für Eingebettete Systeme (LGPL)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90791#776280 Relaiskarte für den USB Port]&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38928#287985 Software UART]&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53140#413249 AVR ASCII Video Terminal - 40 x 25 - BAS Signal]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53139#413225 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler]&lt;br /&gt;
* (A) [http://www.electronicspit.com/users/pit/ Videosignal in Farbe]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25091#new VGA Testbildgenerator]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101429#882288 ATmega8 erzeugt Video in C!]&lt;br /&gt;
&lt;br /&gt;
==Zeitgeber und Uhren==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12185#80055 Die genaue Sekunde / RTC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74673#616226 LCD-Timer für Belichtungsgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/119859#1082804 DS1307 Assembler-Code]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31374#240878 AVR Library für RTC 12C887 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25136#187534 RTC DS1302 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25087#186454 RTC + Scheduler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53131#413059 Jumbo-LED Uhr]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25069 Sekunden in Zeit/Datum umwandeln (mit Sommerzeit/Schaltjahren)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/48560#371911 BASCOM Uhr mit Butterfly]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48450#370765 Countdown timer für UV Belichter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98885 Countdown Timer mit ATtiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Schaltuhr mit DCF77-Referenz in einem Webserver, Steuerung von Funksteckdosen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/100892#876549 Eieruhr mit ATtiny24V/ATtiny2313V]&lt;br /&gt;
[[Category:AVR]]&lt;/div&gt;</summary>
		<author><name>Werner-b</name></author>
	</entry>
</feed>