LCD-Anzeige mit nur 3 Draehten
------------------------------
Problem: ein LCD ansteuern mit nur einem Ausgangspin vom ATtiny13A
Loesung: direkt am LCD einen ATtiny2313A montieren, Datenuebertragung
         auf 1 Leitung zum 2313, von dort ueber 6 Leitungen zum LCD

Schema:
          +-------+
          | 2313  |        +--------------+
+5V   o---+       |        |              |
          |       |------\ |     LCD      |
Daten o---+ PD0   | B0-B5 >|              |
          |       |------/ |              |
GND   o---+       |        +--------------+
          |       |
          +-------+

Ausfuehrlicheres Schema: dreidrahtlcd.png

Datenuebertragung auf 1 Leitung:
-------------------------------

                | 1.Bit |  2. Bit  |   ...  9. Bit |    Rueckmeldung

-----+ Startbit +---+   +---+      +---            +----+   +--
     |  3 ms    |1ms|1ms|1ms| 2ms  |   ...         |    |1ms|
     |          |   |   |   |      |               |    |   |
     +----------+   +---+   +------+             --+    +---+

Das Startbit definiert die Laenge eines zu uebertragenden Bits und ist
3 Einheiten lang (z.B. 3ms). Eine 0 wird durch einen 2 Einheiten langen
Puls uebertragen, eine 1 durch einen 1 Einheit langen Puls.
(Eine 1 also ein kurzer negativer Puls, eine 0 ein langer Puls)
Wenn das erste Datenbit eine 1 ist wird ein Kommando fuer das LCD, sonst
ein darzustellendes Zeichen uebertragen. Die folgenden 8 Bit ergeben
ein Byte beginnend mit dem hoechstwertigen Bit.
Fuer eine schnelle Uebertragung muss am Ende die Datenrichtung umgekehrt
werden, und der LCD-Kontroller gibt einen 1 Einheiten langen Puls zurueck.
(Fuer langsame Uebertragung kann man darauf verzichten und einfach eine
genuegend lange Warteschlaufe einbauen.)

Zusammenfassung Timer im ATtiny13A:
----------------------------------
Die wichtigsten Informationen zum Timer sind im Datenblatt Seite 73 zu finden.
Zusammenfassung der Tabelle 11-8:
Mode WGM2:1:0 Modus   TOP   Update  TOV-Flag bei
 0      0 0 0 normal  0xFF  sofort  0xFF
 1      0 0 1 PWM     0xFF  0xFF    0x00
 2      0 1 0 CTC     OCR0A sofort  0xFF (also nie wenn OCRA!=0xFF !!)
 3      0 1 1 FastPWM 0xFF  0xFF    0xFF
 5      1 0 1 FastPWM OCR0A TOP     0x00
 7      1 1 1 FastPWM OCR0A TOP     TOP

Relevante Register:
TIMSK0 Timer-Interrupt-MaSK fuer timer0
(im 13A gibts nur den Timer0, in andern Typen kanns noch z.B. Timer1 geben)
Bit 7  6  5  4   3      2      1   0
    -  -  -  - OCIE0B OCIE0A TOIE0 -
TCCR0A
Bit  7      6      5      4     3  2  1     0
    COM0A1 COM0A0 COM0B1 COM0B0 -  - WGM01 WGM00 
TCCR0B
Bit  7     6    5  4  3     2    1    0
    FOC0A FOC0B -  - WGM02 CS02 CS01 CS00
TCNT0  Timer CouNTer 0
 Zaehlerwert lesbar und schreibbar
OCR0A  Output Compare Register timer0 A
 Vergleichsregister A, wird dauernd mit TCNT0 verglichen
OCR0B  Output Compare Register timer0 B
 Vergleichsregister B, wird dauernd mit TCNT0 verglichen

Beispiel: Servotester
---------------------
pwmservo2.asm steuert gleichzeitig 2 Servos an. Die aktuellen Stellwerte
sollen auf dem LCD ausgegeben werden. 2 Eingaenge werden fuer Potis, 2
Ausgaenge fuer die Servos und noch 1 Ausgang fuer das LCD verwendet.
