====== Pins ====== Die Pins-Bibliothek erleichtert die Arbeit mit digitalen AVR In- und Output-Pins. Der Nutzer kann eine zu einem Pin gehörige Variable erstellen und mit dieser sämtliche Pin-Operationen vornehmen. Auf diese Weise entfällt die Verwendung von Registernamen oder Bit-Indizes, wie es beim Programmieren mit direktem Zugriff auf das Register nötig ist. Port und Index des Pins müssen nur einmalig festgelegt werden, sodass Änderungen leicht implementiert werden können. ===== Datentypen ===== * **//pin//** Datentyp für Adressen von Pin-Registern und Bitmasken. Um das effizienteste Programm zu entwickeln, sollten //pin// Variablen konstant sein und am Anfang des Programmcodes initialisiert werden. Letzteres kann mit der Makrofunktion //PIN// durchgeführt werden, deren erster Parameter der Buchstabe des Ports ist (A, B, C, etc.) und zweiter Parameter der Pin-Index (0 – 7). Es können nur bestehende Ports und Pins verwendet werden. ===== Funktionen ===== * **//void pin_setup_output(pin pin)//** \\ Konfiguriert einen Pin als Output. Parameter: * //pin// - Pin Variable. * **//void pin_setup_input(pin pin)//** \\ Konfiguriert einen Pin als Input ohne Pull-up Widerstand. Parameter: * //pin// - Pin Variable. * **//void pin_setup_input_with_pullup(pin pin)//** \\ Konfiguriert einen Pin als Input mit Pull-up Widerstand. Parameter: * //pin// - Pin Variable. * **//void pin_set(pin pin)//** \\ Setzt einen Output-Pin high. Parameter: * //pin// - Pin Variable. * **//void pin_clear(pin pin)//** \\ Setzt einen Output-Pin low. Parameter: * //pin// - Pin Variable. * **//void pin_toggle(pin pin)//** \\ Invertiert den Status eines Output-Pins. Parameter: * //pin// - Pin Variable. * **//void pin_set_to(pin pin, bool value)//** \\ Setzt einen Output-Pin in den gewünschten Zustand. Parameter: * //pin// - Pin Variable. * //value// - Gewünschter Status als Bool'scher Wert. * **//bool pin_get_value(pin pin)//** \\ Holt Pin-Wert. Parameter: * //pin// - Pin Variable. * Gibt Bool'schen Wert //true// wenn Pin high und //false// wenn Pin low ist aus. * **//bool pin_get_debounced_value(pin pin)//** \\ Liest den Pinwert durch den Switch-Debounce-Filter. Das Filtern benötigt mindestens 8 ms und kann bis zu 100 ms benötigen, je nachdem wann das Bouncing endet. Falls es nicht endet wird //false// ausgegeben. Funktionen nutzen Softwareverzögerung. Parameter: * //pin// - Pin Variable. * Gibt dem Pin den Bool'schen Wert //true// wenn der Pin high ist und //false// wenn der Pin low oder unbestimmt ist. ===== Beispiel ===== Beispiel um einen Pin-Wert zu erhalten und zu setzen. Pin PC0 Wert wird invertiert und an Pin PC3 angeschlossen. #include pin output_pin = PIN(C, 3); pin input_pin = PIN(C, 0); int main(void) { bool value; // Konfiguriert Pin als Output-Pin pin_setup_output(output_pin); // Konfiguriert Pin als Input-Pin mit Pull-up Widerstand pin_setup_input_with_pullup(input_pin); // Endlosschleife while (true) { // Wert eines Input-Pins erhalten value = pin_get_value(input_pin); // Wert für den Output-Pin setzen pin_set_to(output_pin, !value); } }