Sisend-väljundviigud

Viikude teek on ette nähtud AVR digitaalsete sisend- ja väljundviikudega opereerimiseks. Teegi eesmärk on lihtsustada AVR viikude kasutamist. Kasutaja saab programmis luua soovitud viigu kohta käiva muutuja, millele ta omistab spetsiaalse makrofunktsiooniga füüsilise viigu aadressi. Seejärel saab muutuja abil välja kutsuda erinevaid funktsioone viigu suuna ja olekute muutmiseks ning nende lugemiseks.

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.

Andmetüübid

  • 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

  • void pin_setup_output(pin pin)
    Viigu väljundiks määramine. Parameetrid:
    • 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 pull-up-takistiga. Parameetrid:
    • 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.
  • 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 sellest, kuidas ühe viigu väärtus teha sõltuvaks teisest. Programmis omandab viik PC3 viigule PC0 vastupidise väärtuse:

#include <homelab/pin.h>
 
pin output_pin = PIN(C, 3);
pin input_pin = PIN(C, 0);
 
int main(void)
{
	bool value;
 
	// Viigu väljundiks seadistamine
	pin_setup_output(output_pin);
 
	// Viigu pull-up takistiga sisendiks seadistamine
	pin_setup_input_with_pullup(input_pin);
 
	// Lõputu tsükkel
	while (true)
	{
		// Sisendviigu väärtuse lugemine
		value = pin_get_value(input_pin);
 
		// Väljundviigule vastupidise väärtuse omistamine
		pin_set_to(output_pin, !value);
	}
}

led_on, led_off, button_read käskude kasutamise näide.

#include <homelab/pin.h>
 
// Kodulabori nupud ja LEDid on teegis eeldefineeritud 
// ja neid pole vaja uuesti defineerida
 
int main(void)
{
	// Viigu väljundiks seadistamine
	pin_setup_output(led_green);
 
	// Viigu pull-up takistiga sisendiks seadistamine
	pin_setup_input_with_pullup(S1);
 
	// Lõputu tsükkel
	while (true)
	{
		// Kui nupp on vajutatud, süüta LED, vastasel juhul kustuta
		if(button_read(S1) == true)
			led_on(led_green);
		else
			led_off(led_green);
	}
}
et/software/homelab/library/pin.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
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