Hallo,
Ich brauchte da mal ein bisschen Hilfe weil ich so langsam nicht weiter
weiß wie ich das machen soll.
Und zwar habe ich vor ein lauflicht zu bauen was ich dann per Taster
auch noch schneller machen kann und auch auf Dauer licht schalten
möchte.
Das lauflicht an sich selbst funktioniert schon so wie ich es haben
möchte, allerdings bekomme ich das einfach nicht hin das das auf
tasterdruck auf Dauer licht umschaltet hab da jetzt auch schon paar
Ansätze versucht allerdings funktionieren die immer nur sporadisch mehr
durch Zufall als gewollt , d.h. ich drücke den Taster nichts passiert
dann wackle ich bisschen am Taster und plötzlich schaltet es mal für
eine msec um aber dann wieder zurück auf das lauflicht, achja hatte hier
im forum mal geguckt gehabt und jetzt mal das entprell macro eingefügt,
was mir leider auch nicht viel weiter geholfen hat.
Die Schaltung an sich habe ich hier auf einen Steck Brett aufgebaut
,habe um auszuschließen das der Taster defekt ist auch den Draht auch
mal kurz direkt an den pin vom atmega8 dran gehalten, da passierte dann
aber nichts. bin hier so bisschen am Verzweifeln so langsam.
Vielleicht kann sich ja mal jemand der mehr Ahnung von der Materie hat
als ich den Code mal angucken, habe zwar schon in C und C++ programmiert
aber halt noch nie in Verbindung mit einen µC.
danke
und hier nochmal der Code:
1 | /*
|
2 | * GccApplication1.c
|
3 | *
|
4 | * Created: 13.07.2012 02:12:07
|
5 | * Author: Flow
|
6 | */
|
7 |
|
8 |
|
9 | #include <avr/io.h>
|
10 | #include <util/delay.h>
|
11 | #define F_CPU 1000000
|
12 |
|
13 |
|
14 | #define debounce( port, pin ) \
|
15 | ({ \
|
16 | static uint8_t flag = 0; /* new variable on every macro usage */ \
|
17 | uint8_t i = 0; \
|
18 | \
|
19 | if( flag ){ /* check for key release: */ \
|
20 | for(;;){ /* loop ... */ \
|
21 | if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \
|
22 | i = 0; /* 0 = bounce */ \
|
23 | break; \
|
24 | } \
|
25 | _delay_us( 98 ); /* * 256 = 25ms */ \
|
26 | if( --i == 0 ){ /* ... until key >25ms released */ \
|
27 | flag = 0; /* clear press flag */ \
|
28 | i = 0; /* 0 = key release debounced */ \
|
29 | break; \
|
30 | } \
|
31 | } \
|
32 | }else{ /* else check for key press: */ \
|
33 | for(;;){ /* loop ... */ \
|
34 | if( (port & 1<<pin) ){ /* ... until key released or ... */ \
|
35 | i = 0; /* 0 = bounce */ \
|
36 | break; \
|
37 | } \
|
38 | _delay_us( 98 ); /* * 256 = 25ms */ \
|
39 | if( --i == 0 ){ /* ... until key >25ms pressed */ \
|
40 | flag = 1; /* set press flag */ \
|
41 | i = 1; /* 1 = key press debounced */ \
|
42 | break; \
|
43 | } \
|
44 | } \
|
45 | } \
|
46 | i; /* return value of Macro */ \
|
47 | })
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | void port0(int i){
|
54 | if(i==1){
|
55 | PORTC |= (1<<PC0);
|
56 | }
|
57 | else if(i==2){
|
58 | PORTC &= ~(1<<PC0);
|
59 | }
|
60 | }
|
61 | void port1(int i){
|
62 | if(i==1){
|
63 | PORTC |= (1<<PC1);
|
64 | }
|
65 | else if(i==2){
|
66 | PORTC &= ~(1<<PC1);
|
67 | }
|
68 | }
|
69 | void port2(int i){
|
70 | if(i==1){
|
71 | PORTC |= (1<<PC2);
|
72 | }
|
73 | else if(i==2){
|
74 | PORTC &= ~(1<<PC2);
|
75 | }
|
76 | }
|
77 | void port3(int i){
|
78 | if(i==1){
|
79 | PORTC |= (1<<PC3);
|
80 | }
|
81 | else if(i==2){
|
82 | PORTC &= ~(1<<PC3);
|
83 | }
|
84 | }
|
85 | void dauerlicht(){
|
86 | PORTC |= (1<<PC0);
|
87 | PORTC |= (1<<PC1);
|
88 | PORTC |= (1<<PC2);
|
89 | PORTC |= (1<<PC3);
|
90 | return;
|
91 | }
|
92 |
|
93 | void blinklicht(){
|
94 | int a=1;
|
95 | int b=2;
|
96 | port2(a);
|
97 | port0(b);
|
98 | _delay_ms(300);
|
99 | port3(a);
|
100 | port1(b);
|
101 | _delay_ms(300);
|
102 | port0(a);
|
103 | port2(b);
|
104 | _delay_ms(300);
|
105 | port1(a);
|
106 | port3(b);
|
107 | _delay_ms(300);
|
108 | }
|
109 |
|
110 | int main(void)
|
111 | {
|
112 |
|
113 | int i=1;
|
114 | DDRC = 0xFF;
|
115 | DDRD &= ~(1<<PD0);
|
116 | //PORTC |= (1<<PC4);
|
117 |
|
118 | while(1)
|
119 | {
|
120 | if(debounce(PIND,PIND4)){
|
121 | i++;
|
122 | }
|
123 |
|
124 |
|
125 | if(i%2)
|
126 | blinklicht();
|
127 | else if(1)
|
128 | dauerlicht();
|
129 |
|
130 | }
|
131 | }
|