PIC18 mikrovaldiklio prijungimas prie kompiuterio per RS232 sąsają (0)
Duomenis iš mikrovaldiklio (MV) perduoti į kompiuterį ar kitą įtaisą galima įvairiomis sąsajomis, besiskiriančiomis įvairiais parametrais – sparta, atstumu, atsparumu trikdžiams ir t.t. Viena iš paprasčiausiai valdomų ir plačiai naudojamų yra RS232 sąsaja.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Standartas EIA232 arba RS232 buvo rekomenduotas 1960 m. ANSI (angl. American National Standard Institution) nesimetriniams duomenų mainams tarp kompiuterių ir jų periferinių įrenginių. Tuo metu skaitmeninis duomenų apsikeitimas vykdavo tarp centrinių kompiuterių (mainframe) ir terminalų. Šie įtaisai tarpusavyje buvo sujungti telefono linija, todėl papildomai duomenų perdavimui kiekvienoje pusėje reikėjo prijungti po modemą.
Duomenys EIA232 perduodami įtampų lygiais, besiskiriančiais nuo standartinių 5 V:
- „1” atitinka įtampa nuo -3 V iki -25 V žemės atžvilgiu;
- „0“ atitinka įtampa nuo +3 V iki +25 V žemės atžvilgiu;
Mikrovaldikliuose paprastai būna įdiegta aparatinė nuoseklaus ryšio sąsaja UART arba USART (UART palaiko tik asinchroninį darbo režimą, USART palaiko tiek asinchroninį, tiek ir sinchroninį darbo režimą). PIC18 šeimos mikrovaldikliuose įdiegtas 1 arba 2 USART moduliai.
Kadangi RS232 ir TTL įtampų lygiai skiriasi, gaminami įvairūs suderinimo grandynai, pavyzdžiui, MAX232.
1 pavyzdyje pateikta programa PIC18F14K22 mikrovaldikliui. Programa priima vieną baitą ir jį retransliuoja atgal.
1 pavyzdys. Duomenų perdavimas per RS232 sąsają
/****************************************************
* Programa C kalba „USART valdymas“
* Mikrovaldiklis: PIC18F14K22
* Taktinis daznis: 16MHz
* USART sasaja: 9600bps
*****************************************************/
/** I N C L U D E S *********************************/
#include #include „usart.h“ //C18 biblioteka USART sasajai
/** C O N F I G U R A T I O N ***********************/
#pragma config FOSC = IRC //vidinis RC rezonatorius
#pragma config WDTEN = OFF //Watchdog Off
#pragma config LVP = OFF //Low voltage program
unsigned char Rxdata;
unsigned char Txdata[] = „USART sasajos bandymas\n\r“;
/** M A I N *****************************************/
void main(void)
{
OSCCONbits.IRCF2 = 1; //Vidinis RC rezonatorius
OSCCONbits.IRCF1 = 1; //nustatomas 16MHz
OSCCONbits.IRCF0 = 1;
ANSEL = 0b00000000; //visi skaitmeniai iejimai
ANSELH = 0b0000;
PORTA = 0;
TRISA = 0;
PORTB = 0;
TRISB = 0b00100000; //RB7/Tx – Out, RB5/Rx – In
PORTC = 0;
TRISC = 0;
CloseUSART();
//konfiguruojamas USART
OpenUSART(USART_TX_INT_OFF & //priemimo pertrauktys isjungtos
USART_RX_INT_OFF & //siuntimo pertrauktys isjungtos
USART_ASYNCH_MODE & //asinchroninis darbo rezimas
USART_EIGHT_BIT & //8 skiltys
USART_CONT_RX & //Continuous Receive
USART_BRGH_LOW, //BRGH = 0 – 16MHz/ 1 – 4MHz
25); //SPBRG = 25 (9600bps)
BAUDCON=0×00;
//siunciami duomenys
while(BusyUSART());
putsUSART((char *)Txdata);
while(BusyUSART());
putrsUSART((const rom char *)“Iveskite simboli:\n\r“);
while (1) {
while(!DataRdyUSART()); //Laukiame duomenu
Rxdata = getcUSART(); //Nuskaitomi duomenys is USART
while(BusyUSART()); //Ar USART sasaja pasiruosusi siuntimui?
WriteUSART(Rxdata); //Siunciami duomenys
LATBbits.LATB6 = !LATBbits.LATB6; //perjungiamas LED
} //end while()
}
Mikrovaldiklio USART sąsajos valdymui panaudota C18 kompiliatoriaus biblioteka „usart.h“. Komanda OpenUSART atliekamas USART sąsajos konfigūravimas ir įjungimas. Duomenų perdavimo spartą (šiame pavyzdyje 9600bps) nustato specialusis registras SPBRG, kurio reikšmė apskaičiuojama pagal formulę:
Komanda getcUSART() nuskaito priimtą duomenų baitą iš USART sąsajos, o WriteUSART(Rxdata) įrašo baitą į duomenų išsiuntimo buferį. Atkreipkite dėmesį, kad simbolių eilučių išsiuntimui panaudotos dvi skirtingos komandos:
- putsUSART() siunčia duomenis iš ram atminties (masyvo Txdata[]);
- putrsUSART siunčia duomenis iš rom atminties, t.y. programų atminties.
2 pav. parodytas duomenų perdavimo testavimas PROTEUS programoje. Virtualaus terminalo pagalba galima įvesti norimus simbolius, kuriuos mikrovaldiklis išveda atgal.
Prijungus mikrovaldiklį prie kompiuterio COM porto, per HyperTerminalą matome tokius pačius duomenis, kaip ir PROTEUS programoje.Jei kompiuteris COM porto neturi, galima pasinaudoti „USB to COM“ keitikliu, apie kurį jau rašiau anksčiau. Tokiu atveju įdiegiamas virtualus COM portas.