This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| en:software:homelab:library:pin [2010/02/08 14:39] – Page moved from en:software:library:pin to en:software:homelab:library:pin mikk.leini | en:software:homelab:library:pin [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== |
| - | Viikude teek on ette nähtud | + | Pins library provides an easy way for operating with AVR digital input-output pins. The user can create a pin related variable and do all the pin operations with that variable. This way there is no need to deal with the register names and bit indexes like it is done while programming in direct register access method. The pin's port and index must be specified only once, so the changes are easy to implement. |
| - | Määrates viigu füüsilise siini (pordi) ja indeksi ära ainult ühe korra ja ühes kohas, on füüsiliste muudatuste korral lihtne programmi muuta. Näiteks, kui algul kasutatakse indikaatorina ühte LED-i, võib lihtsa tarkvara muudatusega teist LED kasutama hakata. Viigu muutujatest võib luua ka massiive, näiteks siinide koostamiseks. | + | ===== Data Types ===== |
| - | ===== Andmetüübid ===== | + | * **//pin//** \\ Data type to hold pin registers addresses and bit mask. To get the most efficent program, //pin// typed variables should be constant, and they should be initialized at the beginning of the program code. Intializing can be done with the macro function //PIN//, whose first parameter is the port letter (capital A, B, C, etc) and the other one being the pin index (0 to 7). Only existing ports and pins can be used. |
| - | | + | ===== Constants ===== |
| + | | ||
| + | * **//LED1, LED2, LED3//** - Homelab User interface board LEDs by LED numbers | ||
| + | * **//S1, S2, S3// | ||
| + | |||
| + | ===== Functions ===== | ||
| - | ===== Funktsioonid ===== | + | * **//void pin_setup_output(pin pin)//** \\ |
| + | Configures pin as an output. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_setup_input(pin pin)//** \\ | ||
| + | Configures pin as an input without pull-up resistor. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_setup_input_with_pullup(pin pin)//** \\ | ||
| + | Configures pin as an input with pull-up resistor. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_set(pin pin)//** \\ | ||
| + | Sets output pin high. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_clear(pin pin)//** \\ | ||
| + | Sets output pin low. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_toggle(pin pin)//** \\ | ||
| + | Inverts output pin state. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * **//void pin_set_to(pin pin, bool value)//** \\ | ||
| + | Sets output pin to desired state. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * //value// - Desired state boolean value. | ||
| + | * **//bool pin_get_value(pin pin)//** \\ | ||
| + | Gets pin value. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * Return boolean //true// when pin is high and //false// when pin is low. | ||
| + | * **//bool pin_get_debounced_value(pin pin)//** \\ | ||
| + | Reads pin value through the switch debounce filter. Filtering takes at least 8 ms and may last up to 100 ms, depending on when the bouncing ends. If the bouncing does not end, //false// is returned. Function uses software delay. Parameters: | ||
| + | * //pin// - Pin variable. | ||
| + | * Return pin boolean value - //true// when pin is high and //false// when pin is low or undetermined. | ||
| - | * **//void pin_setup_output(pin pin)//** \\ Viigu väljundiks määramine. Parameetrid: | + | ===== Example ===== |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_setup_input(pin pin)//** \\ Viigu sisendiks määramine ilma //pull-up// takistita. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_setup_input_with_pullup(pin pin)//** \\ Viigu sisendiks määramine koos // | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_set(pin pin)//** \\ Viigu väljundi kõrgeks määramine. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_clear(pin pin)//** \\ Viigu väljundi madalaks määramine. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_toggle(pin pin)//** \\ Viigu väljundi oleku pööramine. Madal olek muutub kõrgeks ja vastupidi. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * **//void pin_set_to(pin pin, bool value)//** \\ Viigu väljundi parameetriga määratud olekusse viimine. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * //value// - Tõeväärtuse muutuja. | + | |
| - | * **//bool pin_get_value(pin pin)//** \\ Viigu sisendi oleku lugemine ja funktsiooniga tagastamine. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * Tagastab tõeväärtuse. | + | |
| - | * **//bool pin_get_debounced_value(pin pin)//** \\ Viigu sisendi oleku lugemine läbi lüliti väreluse filtri ja selle tagastamine. Filtreerimine toimub minimaalselt 8 ms ja maksimaalselt 100 ms jooksul - olenevalt sellest, kui kiiresti lüliti värelemine lõppeb. Kui värelemine 100 ms jooksul ei lõpe, siis funktsioon tagastab //false//. Funktsioon kasutab tarkvaralist pausi funktsiooni viite teegist. Parameetrid: | + | |
| - | * //pin// - Viigu muutuja. | + | |
| - | * Tagastab tõeväärtuse. | + | |
| - | ===== Näide ===== | + | Example of getting and setting a pin's value. Pin PC0 value is inverted and attached to pin PC3. |
| - | + | ||
| - | Näide sellest, kuidas ühe viigu väärtus teha sõltuvaks teisest. Programmis omandab viik PC3 viigule | + | |
| <code c> | <code c> | ||
| Line 47: | Line 59: | ||
| bool value; | bool value; | ||
| - | // Viigu väljundiks seadistamine | + | // Configuring pin as an output pin |
| pin_setup_output(output_pin); | pin_setup_output(output_pin); | ||
| - | // Viigu pull-up | + | // Configuring pin as an input pin with pull-up |
| pin_setup_input_with_pullup(input_pin); | pin_setup_input_with_pullup(input_pin); | ||
| - | // Lõputu tsükkel | + | // Endless loop |
| while (true) | while (true) | ||
| { | { | ||
| - | // Sisendviigu väärtuse lugemine | + | // Getting an input pin value |
| value = pin_get_value(input_pin); | value = pin_get_value(input_pin); | ||
| - | // Väljundviigule vastupidise väärtuse omistamine | + | // Setting an output pin value |
| pin_set_to(output_pin, | pin_set_to(output_pin, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | led_on, led_off, button_read commands example | ||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | // Homelab buttons and LEDs are predefined in the library | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | // Set LED pin as output | ||
| + | pin_setup_output(led_green); | ||
| + | |||
| + | // Set Button S1 pin as input | ||
| + | pin_setup_input(S1); | ||
| + | |||
| + | // Endless loop | ||
| + | while (true) | ||
| + | { | ||
| + | // If button is pressed, turn on LED, if not pressed, turn LED off. | ||
| + | if(button_read(S1) == true) | ||
| + | led_on(led_green); | ||
| + | else | ||
| + | led_off(led_green); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||