Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:avr:io [2014/01/29 14:54] – raivo.sell | et:avr:io [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
* DDR - siini füüsilise suuna määramiseks. | * DDR - siini füüsilise suuna määramiseks. |
| |
<note>lisada xmega näide</note> | Xmega kontrollerite puhul on registrite nimedeks (x on pordi täht): |
| |
| * PORTx.OUT - siini füüsilise väljundoleku määramiseks. |
| * PORTx.IN - siini füüsilise sisendoleku lugemiseks. |
| * PORTx.DIR - siini füüsilise suuna määramiseks |
<box 100% round #EEEEEE|Näide> | <box 100% round #EEEEEE|Näide> |
| |
| |
<code c> | <code c> |
#include <avr/io.h> | unsigned char x; |
| |
int main() | // Viigud 0-3 sisendiks, 4-7 väljundiks |
{ | DDRB = 0xF0; |
unsigned char x; | |
| |
// Viigud 0-3 sisendiks, 4-7 väljundiks | // Viienda viigu kõrgeks seadmine |
DDRB = 0xF0; | PORTB |= (1 << PIN5); |
| |
// Viienda viigu kõrgeks seadmine | // 0-3 sisendviigu väärtuse lugemine |
PORTB |= (1 << PIN5); | x = PINB & 0x0F; |
| </code> |
| |
// 0-3 sisendviigu väärtuse lugemine | Xmega puhul järgnev: |
x = PINB & 0x0F; | |
} | <code c> |
| unsigned char x; |
| |
| // Viigud 0-3 sisendiks, 4-7 väljundiks |
| PORTB.DIR = 0xF0; |
| |
| // Viienda viigu kõrgeks seadmine |
| PORTB.OUT |= (1 << PIN5_bp); |
| |
| // 0-3 sisendviigu väärtuse lugemine |
| x = PORTB.IN & 0x0F; |
</code> | </code> |
| |
</box> | </box> |
| |
Toodud näites on sisendeid kasutatud Hi-Z ehk kõrge impendatsiga (inglise keeles //high impedance//) režiimis. Põhimõtteliselt on tegemist sisendiga, mis ei koorma peaaegu üldse signaaliallikat. Seda režiimi võib vaja minna, kui viiku kasutatakse andmesiinina. Kui viik on kasutusel nupu, lüliti või muu maad ning sisendit kokku ühendavas lahenduses, siis tasub sisendis kasutada //pull-up// takistit. Selleks tuleb sisendrežiimis seada kõrgeks vastava viigu väljundbitt - tulemusena lülitub toitepinge ja sisendi vahele takisti, mis hoiab sisendi pingenivood kõrgel, kui miski seda just alla ei tõmba. //Pull-up// takisti eesmärk on ära hoida sisendi "ujumine" (inglise keeles //floating//) staatilise elektri ja muude häirete tõttu. Pärast kontrolleri käivitumist on kõik IO siinid vaikimisi kõrge impedantsiga sisendrežiimis. | Toodud näites on sisendeid kasutatud Hi-Z ehk kõrge impedantsiga (inglise keeles //high impedance//) režiimis. Põhimõtteliselt on tegemist sisendiga, mis ei koorma peaaegu üldse signaaliallikat. Seda režiimi võib vaja minna, kui viiku kasutatakse andmesiinina. Kui viik on kasutusel nupu, lüliti või muu maad ning sisendit kokku ühendavas lahenduses, siis tasub sisendis kasutada //pull-up// takistit. Selleks tuleb AVRil sisendrežiimis seada kõrgeks vastava viigu väljundbitt - tulemusena lülitub toitepinge ja sisendi vahele takisti, mis hoiab sisendi pingenivood kõrgel, kui miski seda just alla ei tõmba. Xmega seeria kontrolleritel on võimalik pordi igat viiku seadistada tema vastavast registrist (PORTx.PINnCTRL), kust on võimalik määrata muuseas kas viigule on ühendatud //pull-up// või //pull-down// takisti. Täpsema kirjelduse leiab vastava kontrolleri andmelehest. |
| |
| //Pull-up// ja //pull-down// takisti eesmärk on ära hoida sisendi "ujumine" (inglise keeles //floating//) staatilise elektri ja muude häirete tõttu tõmmates viigu vastavalt kas kõrgeks või madalaks. Pärast kontrolleri käivitumist on kõik IO siinid vaikimisi kõrge impedantsiga sisendrežiimis. |
| |
Enamasti on IO siinil olevaid viike peale loogiliste ühenduste kasutatud ka muu perifeeria tarbeks. Kui on soov kasutada viigu alternatiivfunktsiooni, tuleks tutvuda AVR-i andmelehega, kus on öeldud, mis režiimis peab IO viik olema. Näiteks ADC kanali sisendina kasutamiseks peaks viik olema sisendrežiimis ja PWM signaali genereerimiseks väljundrežiimis. Mõned perifeeriamoodulid määravad aga ise IO viigu režiimi. | Enamasti on IO siinil olevaid viike peale loogiliste ühenduste kasutatud ka muu perifeeria tarbeks. Kui on soov kasutada viigu alternatiivfunktsiooni, tuleks tutvuda AVR-i andmelehega, kus on öeldud, mis režiimis peab IO viik olema. Näiteks ADC kanali sisendina kasutamiseks peaks viik olema sisendrežiimis ja PWM signaali genereerimiseks väljundrežiimis. Mõned perifeeriamoodulid määravad aga ise IO viigu režiimi. |