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.