Hallo,
ich habe folgende Probleme mit meinem Programm. Ich will 3 Analoge
Kanäle messen das funktioniert für die ersten beinden Kanäle auch super.
Jedoch der 3. Kanal bereitet mir sorgen. Egal was ich für eine Spannung
anliegen habe, gibt er mir am Ausgang 5V. Bin an dem Punkt mit meinem
Latain am ende und hoffe auf Hilfe.
Hier das Programm:
1 | #include <avr/io.h>
|
2 |
|
3 | void ADC_int(void)
|
4 | {
|
5 | ADMUX=(1<<REFS0); // externe Referenzspannung
|
6 | ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); // Teiler auf 64 setzen
|
7 |
|
8 | //Dummykonvertierung
|
9 | ADCSRA|=(1<<ADSC); // starte Konvertierung
|
10 | while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
|
11 | ADCSRA &= ~(1<<ADEN); // ADC wieder deaktivieren
|
12 | }
|
13 |
|
14 | uint16_t ADC_Read (uint8_t channel)
|
15 | {
|
16 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
|
17 | ADCSRA|=(1<<ADSC); // starte Konvertierung
|
18 | while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
|
19 | ADCSRA &= ~(1<<ADEN); // ADC wieder deaktivieren
|
20 |
|
21 | return ADCW; // Rückgabe Ergebnis 10bit (1023)
|
22 |
|
23 | }
|
24 |
|
25 | int main()
|
26 | {
|
27 | uint16_t Helligkeit1;
|
28 | uint16_t Helligkeit2;
|
29 | uint16_t Helligkeit3;
|
30 | uint16_t i;
|
31 |
|
32 | DDRC = 255; //PortC = Ausgang
|
33 |
|
34 |
|
35 | ADC_int();
|
36 |
|
37 | while(1)
|
38 |
|
39 | {
|
40 | Helligkeit1 = ADC_Read(0); //Messwert 0-1023 bei U=0-5V
|
41 | Helligkeit2 = ADC_Read(1); //Messwert 0-1023 bei U=0-5V
|
42 | Helligkeit3 = ADC_Read(2); //Messwert 0-1023 bei U=0-5V
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | for( i = 0; i < 1022; i++)
|
48 | {
|
49 |
|
50 | if (Helligkeit1>1)
|
51 | {
|
52 | Helligkeit1 = Helligkeit1 - 1;
|
53 | PORTC |= (1<<PC0);
|
54 | }
|
55 | else
|
56 | {
|
57 | PORTC &= ~(1<<PC0);
|
58 | }
|
59 |
|
60 |
|
61 | if (Helligkeit2>1)
|
62 | {
|
63 | Helligkeit2 = Helligkeit2 - 1;
|
64 | PORTC |= (1<<PC1);
|
65 | }
|
66 | else
|
67 | {
|
68 | PORTC &= ~(1<<PC1);
|
69 | }
|
70 |
|
71 | if (Helligkeit3>1)
|
72 | {
|
73 | Helligkeit3 = Helligkeit3 - 1;
|
74 | PORTC |= (1<<PC2);
|
75 | }
|
76 | else
|
77 | {
|
78 | PORTC &= ~(1<<PC2);
|
79 | }
|
80 |
|
81 |
|
82 | }
|
83 |
|
84 | }
|
85 |
|
86 | return 0;
|
87 | }
|