Hallo,
habe folgendes Problem bei meiner Ansteuerung meiner LEDs. Wenn ich den
ADC_Init in den Code integriere, dann leuchten nur 6 anstelle der 9
LEDs.
Wird der ADC_Init auskommentiert, so leuchten alle 9 LEDS wie gewollt.
Der Port A benötigt folgende Konfiguration
PA3=Eingang ADC
PA7=Ausgang (Poti für ADC freigeben)
PA0-PA2: Kathoden der LED, Ausgänge bei Null leuchtet die jeweilige
Ebene
Ebene 1= 110
Ebene 2= 101
Ebene 3= 011
PA4-PA6: Anode der LEDs, ist diese High, so leuchten je nach Ebene die
LEDs dieser Reihe
Reihe 1= 001
Reihe 2= 010
Reihe 3= 100
Sollen alle Leuchten so hat PORTA=0xf0:
1 | int main(void)
|
2 | {
|
3 | ///////IO Konfiguration//////////
|
4 | DDRA=0xf7;
|
5 | DDRB=0x00;
|
6 | ADC_Init();
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | while(1)
|
12 | {
|
13 | if (PINB & (1<<PINB2))
|
14 | {
|
15 | PORTA=0x10;
|
16 | }
|
17 | else
|
18 | {
|
19 | LEDallOFF();
|
20 | }
|
21 |
|
22 | }
|
23 | return 0;
|
24 | }
|
hier die ADC_Init aus dem Tutorial AD Wandler mikrocontroller.net:
1 | /////////////////////ADC///////////////////////////////
|
2 | /* ADC initialisieren */
|
3 | void ADC_Init(void) {
|
4 |
|
5 | // die Versorgungsspannung AVcc als Refernz wählen:
|
6 | //ADMUX = (1<<REFS0);
|
7 | // oder interne Referenzspannung als Referenz für den ADC wählen:
|
8 | ADMUX = (1<<REFS1) | (0<<REFS0);
|
9 |
|
10 | // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
|
11 | // schon auf 0, also single conversion
|
12 | ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
|
13 | ADCSRA |= (1<<ADEN); // ADC aktivieren
|
14 |
|
15 | /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
|
16 | also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
|
17 |
|
18 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
|
19 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten
|
20 | }
|
21 | /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
|
22 | Wandlung nicht übernommen. */
|
23 | (void) ADCW;
|
24 | }
|
Kann jemand den Fehler finden?