Hallo Leute, eins vorweg, ich bin absoluter Einsteiger was C angeht, und plänkel aktuell noch in den Basics herum. Falls das Thema woanders hingehört bitte verschieben! Ich will mir ein kleines Programm für mein eigenes Projekt schreiben und möchte dabei erreichen, dass ich zunächst erst einmal LEDs über einen Schalter (aktuell an PINA0) anschalten und in einer Art Abfolge laufen lassen kann. Das Hauptproblem besteht darin, dass ich aktuell nicht weiß wie ich permanent den Schalter abfrage und meine LED-Abfolge damit starten lassen kann. Zudem weiß ich nicht wie ich die Abfolge unterbreche, falls der Schalter wieder auf "Aus" gestellt wird. Die LEDs funktionieren in der gewünschten Abfolge bereits ohne Schalter über die PWM Steuerung. Aber die Integration des Schalters und damit der Start oder Abbruch darüber machen mir Kopfzerbrechen. Hier mal mein bisheriges Programm:
1 | /*
|
2 | * PWM.c
|
3 | *
|
4 | * Created: 24.10.2015 17:56:40
|
5 | * Author : lkrie
|
6 | */
|
7 | |
8 | #define F_CPU 970000UL
|
9 | #include <avr/io.h> |
10 | #include <util/delay.h> |
11 | //#include <conio.h>
|
12 | |
13 | |
14 | int wert = 3; //PWM Differenzwert - Verkürzt oder verlängert das PWM Signal |
15 | //int wert2 = 200;
|
16 | int maxperf = 255; //maximale Leistung liegt bei 255 |
17 | int minperf= 0; //minimale Leistung liegt bei 0 |
18 | |
19 | int main(void) |
20 | {
|
21 | DDRD = 0; |
22 | DDRB = 0xFF; |
23 | DDRA = 0x00; |
24 | PORTA = 0xff; |
25 | TCCR0A = (1<<WGM00)|(1<<COM0A1); |
26 | TCCR1A = (1<<WGM10)|(1<<COM1A1); |
27 | TCCR0B = (1 << CS01); |
28 | OCR0A = 0; |
29 | OCR0B = 0; |
30 | |
31 | |
32 | |
33 | |
34 | while(1) |
35 | {
|
36 | //hier soll der Schalter rein, mitdem ich den Start der Abfolge initieren kann.
|
37 | for (OCR0A = minperf; OCR0A < maxperf; OCR0A = OCR0A + wert) |
38 | {
|
39 | _delay_ms(10); |
40 | }
|
41 | for (OCR0A = maxperf; OCR0A > minperf; OCR0A = OCR0A - wert) |
42 | {
|
43 | _delay_ms(10); |
44 | }
|
45 | for (OCR0A = minperf; OCR0A < maxperf; OCR0A = OCR0A + wert) |
46 | {
|
47 | _delay_ms(10); |
48 | }
|
49 | for (OCR0A = maxperf; OCR0A > minperf; OCR0A = OCR0A - wert) |
50 | {
|
51 | _delay_ms(10); |
52 | }
|
53 | _delay_ms(600); |
54 | for (OCR0A = minperf; OCR0A < maxperf; OCR0A = OCR0A + wert) |
55 | {
|
56 | _delay_ms(10); |
57 | }
|
58 | for (OCR0A = maxperf; OCR0A > minperf; OCR0A = OCR0A - wert) |
59 | {
|
60 | _delay_ms(10); |
61 | }
|
62 | for (OCR0A = minperf; OCR0A < maxperf; OCR0A = OCR0A + wert) |
63 | {
|
64 | _delay_ms(10); |
65 | }
|
66 | for (OCR0A = maxperf; OCR0A > minperf; OCR0A = OCR0A - wert) |
67 | {
|
68 | _delay_ms(10); |
69 | }
|
70 | _delay_ms(500); |
71 | for (OCR0A = minperf; OCR0A < 180; OCR0A = OCR0A + wert) |
72 | {
|
73 | _delay_ms(12); |
74 | }
|
75 | for (OCR0B = 0; OCR0B < 10; OCR0B = OCR0B + OCR0B) |
76 | {
|
77 | _delay_ms(600); |
78 | }
|
79 | }
|
80 | }
|