Ja das mit Timern kommt noch, ist nur zum Probieren. Die LED, hier als
"Heizung" gekennzeichnet, flackert allerdings bei niedrigen ADC-Werten
bzw. wenn ich den Eingang auf Masse lege. Woran könnte das denn nur
liegen?
//Edit: mit einem 100nF Kerko zwischen GND und AREF funktionierts
besser, flackert aber immernoch etwas.
//Edit2: Des Rätsels Lösung: mein doofes Steckboard ist wiedermal dran
schuld. Die eine Masseschiene ist nicht gut mit der anderen verbunden.
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 | #define ControlDDR DDRA
|
6 | #define ControlPORT PORTA
|
7 |
|
8 | #define Motor 6
|
9 | #define Heizung 7
|
10 |
|
11 | uint16_t delay;
|
12 |
|
13 | int main(void)
|
14 | {
|
15 | ADMUX = (1 << REFS1) | (1 << REFS0) | (0b00010);
|
16 | ADCSR = (1 << ADEN) | (0b101);
|
17 |
|
18 | ControlDDR |= (1 << Heizung);
|
19 |
|
20 | while(1)
|
21 | {
|
22 | if(bit_is_set(ControlPORT, Heizung))
|
23 | {
|
24 | ControlPORT &= ~(1 << Heizung);
|
25 | }
|
26 | else
|
27 | {
|
28 | ControlPORT |= (1 << Heizung);
|
29 | }
|
30 |
|
31 | ADCSR |= (1 << ADSC);
|
32 | loop_until_bit_is_set(ADCSR, ADIF);
|
33 |
|
34 | delay = ADC;
|
35 |
|
36 | while(delay--)
|
37 | {
|
38 | _delay_ms(1);
|
39 | }
|
40 | }
|
41 | }
|