Hallo,
ich probiere gerade ein Relais das ich in bestimmten Fällen anziehen
lasse, verzögert wieder abfallen zu lassen. Doch irgendwie möchte das
nicht ganz so wie ich das möchte. Vielleicht findet jemand meinen
Fehler. Auszug aus dem Code:
1 | set_bit(RELAIS_port,RELAIS_pin);
|
2 | unsigned char end = 0;
|
3 | unsigned int ns_on = 0;
|
4 | unsigned int ms_on = 0;
|
5 | unsigned char s_on = 0;
|
6 | unsigned char m_on = 0;
|
7 | while (end == 0) {
|
8 | if (ns_on < 1000) {
|
9 | ns_on++;
|
10 | _delay_us(1);
|
11 | if (bit_is_set(START_MODE_port,START_MODE_pin)) {end = 1;};
|
12 | } else {
|
13 | ns_on = 0;
|
14 | if (ms_on > mseconds_on*10) {
|
15 | ms_on--;
|
16 | } else {
|
17 | ms_on = 999;
|
18 | if (s_on > seconds_on) {
|
19 | s_on--;
|
20 | } else {
|
21 | s_on = 59;
|
22 | if (m_on > minutes_on) {
|
23 | m_on--;
|
24 | } else {
|
25 | end = 1;
|
26 | }
|
27 | }
|
28 | }
|
29 | }
|
30 | }
|
31 | clear_bit(RELAIS_port,RELAIS_pin);
|
mseconds_on, seconds_on, minutes_on ist die Zeit die er warten soll, bis
das Relais wieder abfallen soll. Dabei wird die so angezeigt: 0;0;0 Die
Millisekunden sind hierbei nur ein Zehntel. Wenn in der Variable 1 ist,
dann sind dies 10ms.
Doch irgendwie möchte das nicht wie ich will. Ich habe 0;2;0
eingestellt, also 2 Sekunden doch das Relais ist weniger als eine
Sekunde angezogen.
Vielleicht findet jemand den Fehler. Danke schonmal.