Patrick Kag schrieb:
> Zum Testen hab ich Versucht and den PC0 einen Widerstand hängen und den
> auf die 5V vom µC gehängt, aber nach einen Spannungswert hat es mir
> nicht ausgesehen.. (hab es um den Wert zu sehen in den eeprom
> gepseichert)
Das klingt nicht richtig.
Zum Testen verwendest du am bersten ein Potentiometer, das du so 
verschaltest
| 1 |       +5V +
 | 
| 2 |           |
 | 
| 3 |          +-+
 | 
| 4 |     10k  | |
 | 
| 5 |        --------------- zum ADC Pin
 | 
| 6 |          | |
 | 
| 7 |          +-+
 | 
| 8 |           |
 | 
| 9 |           + GND
 | 
mit dem Poti kannst du dir dann eine Spannung zwischen 0 und 5V 
einstellen, die du mit dem ADC messen kannst.
Aber mit einem einzelnen Widerstand wirst du da nichts reissen. Durch 
den ADC fliesst so wenig Strom durch den Widerstand, das du da keinen 
Spannungsabfall feststellen kannst. Es sei denn der Widerstand ist recht 
groß, aber dann kriegst du wieder andere Probleme mit dem ADC.
> 1) wie könnte ich den adc wert sonst ausgeben ohne lcd display bzw.
> eeprom ?
Deine tatsächlich beste Wahl wäre entweder erst mal ein LCD in Betrieb 
zu nehmen oder die UART in Betrieb zu nehmen, damit du dir Zahlenwerte 
direkt ausgeben lassen kannst.
Meiner Meinung nach ist es gerade als Neuling ein Fehler, auf 
vernünftige Debug Hilfen, wie zum Beispiel Möglichkeiten zur Ausgabe, zu 
verzichten. Selbst wenn deine endgltige Schaltung kein Display haben 
wird, ist es trotzdem eine gute Idee, in der Entwicklungsversion 
irgendeine Form der Ausgabe zur Verfügung zu haben. Wie du das mit ein 
paar LED gemacht hast - das kann natürlich reichen. Mit den gleichen 
Pins hättest du aber auch ein LCD ansteuern können und damit wesentlich 
mehr Flexibilität beim Debuggen gehabt.
> 2) Soweit ich das richtig nachgelesen habe bekomme ich vom analog
> eingang aber nur einen Spannungs wert
Dazu haben andere schon etwas gesagt.
Ich möchte eigentlich dazu nur ergänzen: Ich denke, du machst wieder den 
Kardinalfehler Nummer 1 aller Neulinge. Du willst zu viel auf einmal, 
indem du sofort auf das endgültige Ziel losgehst. Dazu schreibst du Code 
und nichts funktioniert. Dann ist das Gejammer groß und man muss auf die 
Neulinge einreden, wie auf ein krankes Kind, bis man sie dazu bringt, 
mit einem ganz einfachen Programm anzufangen und das dann schrittweise 
und mit viel testen bis zum endgültigen Programm auszubauen.
>   switch (lastValue)
>   {
>     case > 700:
was auch immer du da programmierst, korrektes C ist das nicht.
Ok, der GCC hat so manche Erweiterung, allerdings würde ich mir 
überlegen, ob ich die benutzen will. Ein
| 1 |     if( lastValue > 700 )
 | 
| 2 |       ...
 | 
| 3 |     else if( lastValue > 600 )
 | 
| 4 |       ...
 | 
| 5 |     else if ...
 | 
ist ganz normales C, das jeder C Compiler versteht. Und durch den 
Wegfall der ganzen break ist das in Summe auch noch kürzer in der 
Schreibweise. Ich sehe hier keinen Vorteil in der Benutzung von 
irgendwelchen Erweiterungen im switch-case. Ich würde einen Vorteil 
darin sehen, wenn man sich die Anzahl der zu leuchtenden LED aus dem 
Wert ausrechnet und dann zb mit einem Array das auszugebende Muster 
bestimmt. So nach dem Muster
| 1 | uint8_t Muster[] = { 0b11111111,      //   0
 | 
| 2 |                      0b11111110,      // 128
 | 
| 3 |                      0b11111100,      // 256,
 | 
| 4 |                      ....
 | 
| 5 |                    };
 | 
| 6 | 
 | 
| 7 |    AnzahlLed = lastValue / 128;
 | 
| 8 |    PORTD = Muster[AnzahlLed];
 | 
Das wäre schön einfach und kurz. Aber das tust du ja nicht.
Zusammen mit den ADC Routinen aus dem AVR-GCC-Tuorial hätte dein erstes 
Testprogramm zum ADC so aussehen können
| 1 | .....
 | 
| 2 | 
 | 
| 3 | uint8_t Muster[] = { 0b11111111,      //   0
 | 
| 4 |                      0b11111110,      // 128
 | 
| 5 |                      0b11111100,      // 256,
 | 
| 6 |                      0b11111000,
 | 
| 7 |                      0b11110000,
 | 
| 8 |                      0b11100000,
 | 
| 9 |                      0b11000000,
 | 
| 10 |                      0b10000000,
 | 
| 11 |                      0b00000000
 | 
| 12 |                    };
 | 
| 13 | 
 | 
| 14 | 
 | 
| 15 | int main()
 | 
| 16 | {
 | 
| 17 |   uint16_t value;
 | 
| 18 | 
 | 
| 19 |   DDRD = 0xFF;
 | 
| 20 | 
 | 
| 21 |   ADC_init();
 | 
| 22 | 
 | 
| 23 |   while( 1 ) {
 | 
| 24 |     value = ADC_Read( 0 );
 | 
| 25 |     if( value > 1023 )
 | 
| 26 |       value = 1023;
 | 
| 27 |     value /= 128;
 | 
| 28 |     PORTD = muster[ value ];
 | 
| 29 |   }
 | 
| 30 | }
 | 
Poti an den ADC angeklemmt und die LEDs müssten bereits auf drehen am 
Poti reagieren, was dir die Gewissheit gibt, das der ADC mal prinzipiell 
arbeitet und du vernünftige Werte kriegst.
Ausbauen kann man immer noch. Aber das wäre mein erstes Testprogramm. 
Gedanken über EEPROM oder Sleep Modi kann ich mir immer noch machen. 
Aber sicher nicht jetzt, wenn es darum geht, dem ADC ein erstes 
Lebenszeichen zu entlocken. Und das beste drann: das hat keine Stunden 
gedauert sondern lediglich ein paar Minuten.