Hallo Birger
du hast ja vollkommen recht. Bloss das blöde dabei ist, ich hab keinen
Quarz drin (zum ersten mal arbeite ich mit dem internen). Die Frage
dabei ist doch, muss ich die Frequenz eintragen. Da das Stück geht,
würde ich sagen ja. Es sieht jetz so aus.
1 | #define INT_PRESCALE 8L
|
2 | #define CKDIV_VALUE 8L
|
3 | #define PRESCALER ((1 << CS01) | (1 << CS00))
|
4 | #define INT_CNTDWN_INIT ((0.2L * 16000000) / (CKDIV_VALUE * 256L * INT_PRESCALE))
|
Wahrscheinlich kann man das ganze noch vereinfachen. Brauche es nicht so
kompliziert machen.
Die Zeit kann mit der folgenden Teil verlängert oder verkürzt werden.
1 | uint8_t prog_door()
|
2 | {
|
3 | /* Einstellen der Türaktivierdauer nach wiederholtem Drücken des Programmiertaste ohne Codeeingabe */
|
4 | while(1)
|
5 | {
|
6 | waitforkeyrelease();
|
7 | /* Plus-Taste erhöht Aktivierdauer */
|
8 | if ((keyreleased0 & (1 << PROG_DOOR_PLUS)) > 0 && (init_doorcntdwn < 100) ) init_doorcntdwn++;
|
9 | /* Minus-Taste reduziert Aktivierdauer */
|
10 | if ((keyreleased0 & (1 << PROG_DOOR_MINUS)) > 0 && (init_doorcntdwn > 5) ) init_doorcntdwn--;
|
11 | /* Türöffner zum Test aktivieren */
|
12 | if ((keyreleased0 & (1 << PROG_DOOR_TEST)) > 0) set_door_on();
|
13 | if (PROGKEYWASRELEASED)
|
14 | {
|
15 | /* geänderte Türaktivierdauer in EEPROM ablegen */
|
16 | cli();
|
17 | eeprom_write_byte(&eeprom_initdoorcntdwn, init_doorcntdwn);
|
18 | sei();
|
19 | break;
|
20 | };
|
21 | if ((keyreleased0 & ((1 << PROG_DOOR_PLUS) | (1 << PROG_DOOR_MINUS) | (1 << PROG_DOOR_TEST))) == 0)
|
22 | {
|
23 | /* undefinierte Taste wurde betätigt */
|
24 | /* veränderte Türaktivierdauer verwerfen, alten Wert aus EEPROM laden */
|
25 | init_doorcntdwn = eeprom_read_byte(&eeprom_initdoorcntdwn);
|
26 | break;
|
27 | };
|
28 | }; /* while */
|
29 | set_door_off();
|
30 | SET_LED_OFF(1 << LED_PROG_PB)
|
31 | return STATE_READ_CODE;
|
32 | };
|
Bin noch am suchen, wie es zusammenhängt. Die Zeit lässt sich noch nicht
verändern. Die Abfrage der Tasten geht dabei ohne Probleme.
achim