This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:software:homelab:library:pin [2010/02/11 16:02] – mikk.leini | et:software:homelab:library:pin [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| * **//pin//** \\ Viigu registrite ja bitimaski hoidmise struktuurne andmetüüp. // | * **//pin//** \\ Viigu registrite ja bitimaski hoidmise struktuurne andmetüüp. // | ||
| + | |||
| + | ===== Konstandid ===== | ||
| + | * **// | ||
| + | * **//LED0, LED1, LED2, LED3//** - Kodulabori kasutajaliidese plaadi LEDid numbrite järgi | ||
| + | * **//S0, S1, S2, S3//** - Kodulabori kasutajaliidese plaadi nupud ning S0 nupp kontrollerplaadil | ||
| ===== Funktsioonid ===== | ===== Funktsioonid ===== | ||
| Line 32: | Line 37: | ||
| * //pin// - Viigu muutuja. | * //pin// - Viigu muutuja. | ||
| * Tagastab tõeväärtuse. | * Tagastab tõeväärtuse. | ||
| + | * **//bool button_read(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 1 kui nupp on vajutatud. | ||
| + | * Tagastab 0 kui nupp ei ole vajutatud. | ||
| + | * **//void led_on(pin pin)//** \\ Süütab valgusdioodi väljundis. Parameetrid: | ||
| + | * //pin// - Viigu muutuja. | ||
| + | * **//void led_off(pin pin)//** \\ Kustutab valgusdioodi väljundis. Parameetrid: | ||
| + | * //pin// - Viigu muutuja. | ||
| ===== Näide ===== | ===== Näide ===== | ||
| Line 65: | Line 77: | ||
| </ | </ | ||
| - | ===== Lähtekood ===== | + | led_on, led_off, button_read käskude kasutamise näide. |
| - | + | ||
| - | Järgnevalt on lühendatud kujul toodud teegi lähtekood, mille eesmärk on kogenumatele programeerijatele selgitada teegis toimuvat. Kasutusel on C-keele viidad (inglise keeles // | + | |
| <code c> | <code c> | ||
| - | #include <avr/io.h> | + | #include <homelab/pin.h> |
| - | #include " | + | |
| + | // Kodulabori nupud ja LEDid on teegis eeldefineeritud | ||
| + | // ja neid pole vaja uuesti defineerida | ||
| - | #define _REG_PTR_ volatile uint8_t * | + | int main(void) |
| - | + | ||
| - | typedef struct pin | + | |
| { | { | ||
| - | _REG_PTR_ ddr; | + | // Viigu väljundiks seadistamine |
| - | _REG_PTR_ port; | + | pin_setup_output(led_green); |
| - | _REG_PTR_ pin; | + | |
| - | uint8_t mask; | + | |
| - | } | + | |
| - | pin; | + | |
| - | #define PIN(port_char, | + | // Viigu pull-up takistiga sisendiks seadistamine |
| - | { \ | + | pin_setup_input_with_pullup(S1); |
| - | (_REG_PTR_)&DDR ## port_char, \ | + | |
| - | (_REG_PTR_)& | + | |
| - | (_REG_PTR_)& | + | |
| - | bit_mask(bit_index) \ | + | |
| - | } | + | |
| - | inline void pin_setup_output(pin pin) | + | // Lõputu tsükkel |
| - | { | + | while (true) |
| - | bitmask_set(*pin.ddr, pin.mask); | + | { |
| - | } | + | // Kui nupp on vajutatud, süüta LED, vastasel juhul kustuta |
| - | + | if(button_read(S1) == true) | |
| - | inline void pin_setup_input(pin pin) | + | led_on(led_green); |
| - | { | + | else |
| - | bitmask_clear(*pin.ddr, pin.mask); | + | led_off(led_green); |
| - | } | + | } |
| - | + | ||
| - | inline void pin_setup_input_with_pullup(pin pin) | + | |
| - | { | + | |
| - | bitmask_clear(*pin.ddr, pin.mask); | + | |
| - | bitmask_set(*pin.port, pin.mask); | + | |
| - | } | + | |
| - | + | ||
| - | inline void pin_set(pin pin) | + | |
| - | { | + | |
| - | bitmask_set(*pin.port, | + | |
| - | } | + | |
| - | + | ||
| - | inline void pin_clear(pin pin) | + | |
| - | { | + | |
| - | bitmask_clear(*pin.port, | + | |
| - | } | + | |
| - | + | ||
| - | inline void pin_toggle(pin pin) | + | |
| - | { | + | |
| - | bitmask_invert(*pin.port, | + | |
| - | } | + | |
| - | + | ||
| - | inline void pin_set_to(pin pin, bool value) | + | |
| - | { | + | |
| - | bitmask_set_to(*pin.port, | + | |
| - | } | + | |
| - | + | ||
| - | inline bool pin_get_value(pin pin) | + | |
| - | { | + | |
| - | return (bitmask_is_set(*pin.pin, | + | |
| } | } | ||
| </ | </ | ||