Hallo Leute,
ich habe ein Board entwickelt für die Ansteuerung von LED-Treibern.
Soweit hat alles funktioniert...PWM, Timer, I²C, SPI und UART. Jedoch
eine wichtige Komponente (ADC) funktioniert halt überhaupt nicht.
1 | void adc_init (void)
|
2 | {
|
3 | DDRC &= ~(1<<port); /*Den Port auf einang schalten*/
|
4 |
|
5 | ADMUX = (1<<REFS0); /*Referenz auf AREF - interne Ref aus */
|
6 |
|
7 | ADCSRA = 0x07; /*Teiler auf 128 - höchste Genauigkeit*/
|
8 |
|
9 | ADCSRB = 0x00; // Einfach so aus Verzwiflung auf null
|
10 |
|
11 | ADCSRA |= (1<<ADEN); /*Analogwandler einschalten*/
|
12 | }
|
13 |
|
14 |
|
15 | unsigned int adc_read (unsigned char port)
|
16 | {
|
17 | unsigned int value;
|
18 |
|
19 | ADMUX = (0x0F & port); // Mux auf Port ausrichten
|
20 |
|
21 | ADCSRA |= (1<<ADSC); // Wandlung starten
|
22 | while (!(ADCSRA & ADSC)); // Warten bis wandlung ende
|
23 |
|
24 | value = ADCH;
|
25 | value += ADCL<<8;
|
26 |
|
27 | return value;
|
28 | }
|
Mein Controller... Atmega48 - AVCC & VCC=3,3 - AREF = AVCC.
Returnwert der Funktion ist immer 0.
Was mach ich falsch? Sieht einer von euch einen Fehler?
Vielen Dank im voraus!
Gruß
Johannes