Hallo zusammen, ich habe mir ein kleines Programm geschrieben, bei dem ich zwei AD-Werte auslese und auf einen LCD ausgeben will. Es funktioniert alles, bis auf die aktualisierung der AD-Werte. Wenn ich Spannung an die Schaltung lege wird am Display der aktuelle AD-Wert angezeigt, drehe ich am Poti des AD-Wandlers bleibt der Wert am Display gleich. Nehme ich die Spannung weg und klemme sie wieder an, wird wieder der momentan eingestellte AD-Wert angezeigt, aber während der Laufzeit wird er nicht mehr aktualisiert. Hier der Code:
1 | #define F_CPU 8000000
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | #include <lcd-routines.h> |
6 | #include <lcd-routines.c> |
7 | |
8 | |
9 | |
10 | uint16_t ADC_C0; |
11 | uint16_t ADC_C1; |
12 | uint8_t ADCL_C0; |
13 | uint8_t ADCH_C0; |
14 | uint8_t ADCL_C1; |
15 | uint8_t ADCH_C1; |
16 | char ADC_StringC0 [16]; |
17 | char ADC_StringC1 [16]; |
18 | |
19 | |
20 | |
21 | void ADC_Init (void) |
22 | {
|
23 | |
24 | ADMUX |= (1<<REFS0); |
25 | ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADEN) | (1<<ADSC); |
26 | |
27 | while (ADCSRA & (1<<ADSC)); |
28 | ADCL_C0 = ADCL; |
29 | ADCH_C0 = ADCH; |
30 | |
31 | }
|
32 | |
33 | |
34 | void ADC_Read (void) |
35 | {
|
36 | |
37 | ADMUX &= (0<<MUX0); |
38 | |
39 | while (ADCSRA & (1<<ADSC)){} |
40 | ADCL_C0 = ADCL; |
41 | ADCH_C0 = ADCH; |
42 | |
43 | ADMUX |= (1<<MUX0); |
44 | while (ADCSRA & (1<<ADSC)){} |
45 | ADCL_C1 = ADCL; |
46 | ADCH_C1 = ADCH; |
47 | |
48 | ADC_C0 = ADCL_C0 + (ADCH_C0 * 256); |
49 | ADC_C1 = ADCL_C1 + (ADCH_C1 * 256); |
50 | |
51 | }
|
52 | |
53 | |
54 | |
55 | void LCD_Write (void) |
56 | {
|
57 | lcd_clear(); |
58 | |
59 | itoa (ADC_C0, ADC_StringC0, 10); |
60 | itoa (ADC_C1, ADC_StringC1, 10); |
61 | |
62 | lcd_setcursor(0,1); |
63 | lcd_string("ADC0 ADC1"); |
64 | lcd_setcursor(0,2); |
65 | lcd_string(ADC_StringC0); |
66 | lcd_setcursor(9,2); |
67 | lcd_string(ADC_StringC1); |
68 | |
69 | |
70 | }
|
71 | |
72 | |
73 | |
74 | |
75 | |
76 | int main(void) |
77 | {
|
78 | ADC_Init(); |
79 | lcd_init(); |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | while(1) |
86 | {
|
87 | ADC_Read(); |
88 | LCD_Write(); |
89 | _delay_ms(100) |
90 | }
|
91 | }
|