Counter: Unterschied zwischen den Versionen
Biff (Diskussion | Beiträge) K (INT0 statt PCINT0) |
(→Code) |
||
| (4 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | + | Dieses Beispiel zeigt, wie man einen '''Impulszähler''' mittels eines [[Control6]]-Skripts erstellen kann. Der Signaleingang ist am INT0-Pin. | |
| − | === | + | |
| − | + | ==Abfrage== | |
| − | + | Counter-Abfrage mittels ECMD über TCP: | |
| − | Counter Abfrage mittels ECMD: | + | gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701 |
| − | + | pc_counter 98 | |
| − | gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701 | + | oder mittels ECMD und Webbrowser: |
| − | pc_counter 98 | + | http://10.0.0.40/ecmd?c6+get+pc_counter |
| − | + | (liefert "pc_counter 98" im Browser). | |
| − | + | ||
| − | + | Siehe auch [[ECMD Protocols]]. | |
| − | <source lang=" | + | |
| + | ==Code== | ||
| + | Code für die src-Datei: | ||
| + | <source lang="c"> | ||
CONTROL_START | CONTROL_START | ||
ECMD_GLOBAL(pc_counter, 0); | ECMD_GLOBAL(pc_counter, 0); | ||
ON STARTUP DO | ON STARTUP DO | ||
| − | // Pullup | + | // Pullup-Widerstaende aktivieren |
| − | PORTD |= _BV(PORTD2); | + | PORTD |= _BV(PORTD2); // activate pullup on D2 |
| − | DDRD | + | DDRD &= ~_BV(DDD2); // set D2 to input |
| − | + | ||
| − | + | _EIMSK |= _BV(INT0); // external interrupt request 0 enable | |
| − | _EIMSK |= _BV(INT0); | + | _EICRA |= _BV(ISC01); // the falling edge of INT0 generates an interrupt request. |
| − | _EICRA |= _BV(ISC01); | ||
END | END | ||
CONTROL_END | CONTROL_END | ||
| Zeile 30: | Zeile 32: | ||
} | } | ||
</source> | </source> | ||
| + | |||
| + | |||
| + | Wichtig zu wissen: | ||
| + | int0 und int1 sind external interrupts, das bedeutet du bekommst den oben stehenden code nicht mir anderen ports zum laufen. | ||
| + | Siehe https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328 | ||
| + | |||
| + | ==Siehe auch== | ||
| + | *[[Benutzer:Biff|Erfahrungsbericht]] | ||
[[Category:Control6 Examples]] | [[Category:Control6 Examples]] | ||
Aktuelle Version vom 20. Mai 2014, 13:41 Uhr
Dieses Beispiel zeigt, wie man einen Impulszähler mittels eines Control6-Skripts erstellen kann. Der Signaleingang ist am INT0-Pin.
Abfrage
Counter-Abfrage mittels ECMD über TCP:
gummi:~# echo "c6 get pc_counter" | socat stdio tcp4:10.0.0.40:2701 pc_counter 98
oder mittels ECMD und Webbrowser:
http://10.0.0.40/ecmd?c6+get+pc_counter
(liefert "pc_counter 98" im Browser).
Siehe auch ECMD Protocols.
Code
Code für die src-Datei:
CONTROL_START
ECMD_GLOBAL(pc_counter, 0);
ON STARTUP DO
// Pullup-Widerstaende aktivieren
PORTD |= _BV(PORTD2); // activate pullup on D2
DDRD &= ~_BV(DDD2); // set D2 to input
_EIMSK |= _BV(INT0); // external interrupt request 0 enable
_EICRA |= _BV(ISC01); // the falling edge of INT0 generates an interrupt request.
END
CONTROL_END
ISR(INT0_vect)
{
pc_counter ++;
}
Wichtig zu wissen:
int0 und int1 sind external interrupts, das bedeutet du bekommst den oben stehenden code nicht mir anderen ports zum laufen.
Siehe https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328