Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:software:homelab:library:pin [2010/02/11 16:02] mikk.leiniet: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//-tüüpi muutujad on konstantsed ja need tuleb väärtustada kohe programmi alguses. Väärtustamise lihtsustamiseks on makrofunktsioon //PIN//, mille esimene parameeter on siini tähis (suur ladina täht A, B, C, jne) ja teine viigu number (0-7).    * **//pin//** \\ Viigu registrite ja bitimaski hoidmise struktuurne andmetüüp. //pin//-tüüpi muutujad on konstantsed ja need tuleb väärtustada kohe programmi alguses. Väärtustamise lihtsustamiseks on makrofunktsioon //PIN//, mille esimene parameeter on siini tähis (suur ladina täht A, B, C, jne) ja teine viigu number (0-7). 
 +
 +===== Konstandid =====
 +  * **//led_debug, led_green, led_yellow, led_red//** - Kodulabori kasutajaliidese plaadi LEDid värvide järgi ning debug LED kontrollerplaadil
 +  * **//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:
 </code> </code>
  
-===== Lähtekood ===== +led_onled_offbutton_read käskude kasutamise näide.
- +
-Järgnevalt on lühendatud kujul toodud teegi lähtekoodmille eesmärk on kogenumatele programeerijatele selgitada teegis toimuvat. Kasutusel on C-keele viidad (inglise keeles //pointer//), millest selle raamatu C-keele õpetuses kirjutatud polekuid mille kohta leiab palju infomaterjali internetist ja programmeerimise õpikutest. +
 <code c> <code c>
-#include <avr/io.h> +#include <homelab/pin.h> 
-#include "bit.h"+  
 +// 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, bit_index) \ + // Viigu pull-up takistiga sisendiks seadistamine 
-{ \ + pin_setup_input_with_pullup(S1);
- (_REG_PTR_)&DDR ## port_char, \ +
- (_REG_PTR_)&PORT ## port_char, \ +
- (_REG_PTR_)&PIN ## port_char, \ +
- 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 vajutatudsüüta LEDvastasel juhul kustuta 
- + if(button_read(S1== true
-inline void pin_setup_input(pin pin+ led_on(led_green); 
-+ else 
- bitmask_clear(*pin.ddrpin.mask); + led_off(led_green); 
-+ }
- +
-inline void pin_setup_input_with_pullup(pin pin) +
-+
- bitmask_clear(*pin.ddrpin.mask); +
- bitmask_set(*pin.port, pin.mask); +
-+
- +
-inline void pin_set(pin pin) +
-+
- bitmask_set(*pin.port, pin.mask)+
-+
- +
-inline void pin_clear(pin pin) +
-+
- bitmask_clear(*pin.port, pin.mask); +
-+
- +
-inline void pin_toggle(pin pin) +
-+
- bitmask_invert(*pin.port, pin.mask); +
-} +
- +
-inline void pin_set_to(pin pin, bool value) +
-+
- bitmask_set_to(*pin.port, pin.mask, value); +
-+
- +
-inline bool pin_get_value(pin pin) +
-+
- return (bitmask_is_set(*pin.pin, pin.mask) ? 1 : 0);+
 } }
 </code> </code>
et/software/homelab/library/pin.1265896933.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0