Moin, nachdem mein ADC nun läuft würde ich gerne eine Kanalumschaltung per Knopfdruck einbauen. Mein Problem ist allerdings, dass die Kanalumschaltung nicht funktioniert. Hier mal die Initialisierung des ADC und mein Versuch den Kanal zu wechsel:
1 | #define F_CPU 8000000UL
|
2 | #define Vref 4.94
|
3 | |
4 | |
5 | #include <avr/io.h> //einbinden der Bibliothek 'io.h' |
6 | #include <util/delay.h> //einbinden der Bibliothek 'delay.h' |
7 | #include <avr/interrupt.h> |
8 | #include <stdlib.h> |
9 | #include "avr.h" |
10 | #include "SPI.h" |
11 | #include "UART.h" |
12 | |
13 | |
14 | void ADC_init(void) |
15 | {
|
16 | uint16_t first_result = 0; |
17 | |
18 | DIDR0 = (1<<ADC0D); |
19 | |
20 | ADMUX = (1<<REFS0); // | (1<<REFS1); //Einschalten der Referenzspannung: Vref = AVCC |
21 | ADMUX |=(MUX0); |
22 | |
23 | ADCSRA = (1<<ADEN) | (1<<ADIE); // ADC aktivieren und Interrupt einschalten |
24 | ADCSRA |= ((ADPS0) | (1<<ADPS1) | (1<<ADPS2)); //Prescaler 128 |
25 | |
26 | |
27 | _delay_ms(1); |
28 | |
29 | sei(); |
30 | |
31 | ADCSRA |= (1<<ADSC); |
32 | while (ADCSRA & (1<<ADSC)) |
33 | {
|
34 | |
35 | }
|
36 | |
37 | first_result = (ADCL + (ADCH<<8)); |
38 | |
39 | }
|
40 | |
41 | double calculate_adc(uint16_t value) |
42 | {
|
43 | double result = 0.0; |
44 | |
45 | result = (value / 1024.0) * Vref; |
46 | return result; |
47 | |
48 | }
|
49 | |
50 | void start_converting(void) |
51 | {
|
52 | ADCSRA |= (1<<ADSC); |
53 | _delay_ms(1); |
54 | }
|
55 | |
56 | void select_adc(void) |
57 | {
|
58 | int adc_number, adc_counter; |
59 | |
60 | if (!(PINC &(1<<PC0))) |
61 | {
|
62 | adc_counter = 0; |
63 | ADCSRA &= ~(1<<ADEN); |
64 | ADMUX &= ~0x03; |
65 | ADMUX =(1<<MUX0); |
66 | _delay_ms(1); |
67 | ADCSRA |= (1<<ADEN); |
68 | start_converting(); |
69 | }
|
70 | if (!(PINC &(1<<PC1))) |
71 | {
|
72 | adc_counter = 1; |
73 | ADCSRA &= ~(1<<ADEN); |
74 | ADMUX &= ~0x03; |
75 | ADMUX |=(1<<MUX1); |
76 | _delay_ms(1); |
77 | ADCSRA |= (1<<ADEN); |
78 | start_converting(); |
79 | }
|
80 | |
81 | if (adc_counter == 0) |
82 | {
|
83 | adc_number = 0; |
84 | }
|
85 | |
86 | if (adc_counter == 1) |
87 | {
|
88 | adc_number = 1; |
89 | }
|
90 | |
91 | if (adc_number == 0) |
92 | {
|
93 | PORTD |=(1<<PD7); |
94 | uart_putc(0x1b); |
95 | uart_puts("[04;2H"); |
96 | Send_UART_Char("Aktiver ADC: ADC0"); |
97 | |
98 | }
|
99 | |
100 | if (adc_number == 1) |
101 | {
|
102 | PORTD &= ~(1<<PD7); |
103 | uart_putc(0x1b); |
104 | uart_puts("[04;2H"); |
105 | Send_UART_Char("Aktiver ADC: ADC1"); |
106 | |
107 | }
|
108 | |
109 | |
110 | }
|