Sistem de Dezvoltare Bazat pe Platforma Atx Mega128 B1 Xpld

Sistem de dezvoltare bazat pe platforma ATXmega128-B1 XPLD

Abstract (max. 300 cuvinte)

În lucrarea Sistem de dezvoltare bazat pe platforma ATXmega-B1 XPLD se prezintă aplicații construite în Atmel studio 6.2 folosind librăriile specifice componentelor utilizate în realizarea aplicațiilor. Prima aplicație prezintă realizarea unui voltmetru de precizie în mV cu afișaj pe controlerul LCD cu funcție de calibrare și de compensare. Voltmetrul poate măsura o tensiune maximă de intrare de 7500 mV deoarece am folosit o tensiune de referintă de 1V. În urmatoarea aplicație utilizând modulul LCD, cronometrul, LED-urile și tastele Qtouch am realizat diferite texte care pot fi afișate pe modulul LCD în momentul utilizării unuia din butoanele Qtouch. Fiecare buton are alocat un LED care se aprinde în momentul utilizării și un cronometru care pornește în momentul utilizării unuia din cele 4 butoane. În cea de-a treia aplicație placa este conectată prin intermediul modului USB cu un laptop și afișează valorile măsurate ale temperaturii, luminozității, tensiunii externe dar și potențiometrului de tensiune atât pe laptop cât și pe modulul LCD al plăcii. Aceste valori pot fi modificate sau doar vizualizate.

Cuvinte cheie: ATXmega128-B1 XPLD, voltmetru, LCD, Atmel studio 6.2.

System of development based on ATXmega-B1 XPLD platform

Abstract

In this System of Development based on ATXmega-B1 XPLD platform, presents applications built in Atmel studio 6.2 using component – specific libraries used in development of application. The first application shows the realization of a precision voltmeter in mV, with LCD display function calibration and compensation. The voltmeter can measure a maximum input voltage of 7500 mV, because I used a voltage of 1V reference. The next application using LCD module, chronometer, LEDs and keys Qtouch, I realized different texts which can be displayed on the LCD module when using one of the buttons Qtouch. Each button is assigned of an LED that lights up when in use, and a timer that starts when using one of the 4 buttons. In the third application, the board is connected via a laptop with the USB module and shows the measured values of temperature, brightness, external voltage and potentiometer voltage, both laptop and LCD module of the board. These values can be modified or just viewed.

Keywords: ATXmega128-B1 XPLD, voltmetru, LCD, Atmel studio 6.2.

Listă figuri

Listă tabele

Cuprins

Introducere

Proiectul prezintă aplicații care se pot realiza cu ajutorul unei plăci de evaluare ATXmega128-B1 Xplained echipată cu un microcontroler Xmega128-B1 programat în Atmel Studio 6.2.

Primul capitol prezintă placa de evaluare ATXmega128-B1 Xplained și componentele acesteia: tastele Qtouch, controlerul LCD, senzorii de temperatură și lumină, tensiunea externă și potențiometrul, Convertorul Analog Digital, Comparatorul Analog, modulul USART, interfețele TWI și SPI, porturile de expansiune I/O sau modulul USB.

Al doilea capitol prezintă caracteristicile microcontrolerului Atmel Xmega128-B1 acesta fiind un microcontroler pe 8/16 biți dezvoltat pe arhitectura RISC Harvard cu memorii separate pentru partea de cod a programului și pentru date, 32×8-bit registre conectate la unitatea aritmetică și logică, stivă în RAM, stivă pointer accesibil în I/O, multiplicator hardware, configurație pentru modificarea protecției sistemului.

În cel de-al 3 capitol sunt prezentate cele 3 aplicații realizate cu ajutorul plăci de evaluare ATXmega128-B1 Xplained.

În prima aplicație cu ajutorul componentelor plăcii am realizat diferite moduri de afișare pe modulul LCD. La fiecare atingere a uneia dintre cele 4 taste Qtouch apare un text diferit și cronometrat de la momentul apăsării ,fiecare buton având cate un led activat prestabilit.

În a doua aplicație am realizat o conexiune între placa ATXmega128B1 și dispozitivul la care este conectată prin intermediul unui program de la atmel. În momentul conectării prin modulul USB placa este detectată imediat ca dispozitiv USB Hid de comunicare și prin intermediul programului pot fi modificate: valorile afișate ale senzorilor, luminiozitatea LCD, activarea ledurilor, textul de pe controlerul LCD. Odata modificate aceste valori sunt valabile pană la deconectarea modului USB, după care placa revine la setările primite din aplicație și poate măsura temperatura, luminiozitatea, tensiunea de intrare externă în mV, tensiunea potențiometrului în mV.

În a treia aplicație am realizat un voltmetru cu precizie în mV și funcție de calibrare si de compensare. Pentru realizarea acestei aplicații am folosit pe langă placa de evaluare o sursă de tensiune externă reglabilă și un multimetru pentru verificarea masurătorilor respective și pentru a putea calibra aplicația. Această aplicație poate fi folosită și în alte medii de lucru putând masura și afișa o tensiune de intrare de pana la 8V sau 13V în funcție de tensiunea de referință alocată.

Capitolul 1 – Placa de evaluare Atmel Xmega-B1 Xplained

Atmel Xmega-B1 Xplained este o platformă pentru evaluarea microcontrolerelor Atmel ATXmega128-B1, acestă placă oferă o gamă de caracteristici care permit studenților și inginerilor să testeze și să exploreze abilitățile microconrolerelor atmel dar și folosirea echipamentelor periferice. Figura de mai jos ilustrează placa de evaluare Atmel Xmega-B1 Xplained.

Figura 1.1 Schemă Bloc ATXmega128-B1 Xplained

Figura 1.1 Atmel Xmega-B1 Xplained

Atmel Xmega-B1 are urmatoarele caracteristici:

sistem programabil flash are capacitatea de citire și scriere,

EEPROM și SRAM intern,

două canale DMA,

sistem de eveniment cu patru canale și de ȋntrerupere pe mai multe nivele programabile,

real-time counter (RTC),

afișaj cu cristale lichide cu suport 4×40 de segmente,

4 led-uri galbene conectate la PORTB,

1 led verde conectat la PORTE care indică tensiunea de ieșire,

16-bit timer/contoare și canale PWM,

două USARTs,

un USB cu viteză de 2.0,

o interfață periferică serial (SPI),

ADC de 12-biți,

4 comparatoare analogice,

watchdog timer programabil cu oscilator intern separat,

oscilatoare interne precise cu PLL și prescaler.

Programul și interfața de depanare (PDI) sunt rapide, dispozitivele au de asemenea o interfață IEEE 1149.1 JTAG care poate fi folosită pentru programare și depanare. Dispozitivul Xmega-B1 are 4 moduri de economisire a energiei:

Modul de așteptare (Idle Mode) oprește CPU ȋn timp ce SRAM, controler DMA, sistem de eveniment, controler de ȋntrerupere și toate perifericele continuă sa funcționeze.

Modul energie-oprită (power-down) salvează SRAM și registrele conținute, dar se opresc oscilatoarele, dezactivând toate celelalte funcții pană la următoarea utilizare USB, schimbarea pinului sau resetare.

În Modul de consum redus (Power Saver) RTC continuă să ruleze, acesta permite aplicației să mențină timpul, ȋn timp ce dispozitivul este ȋn modul de așteptare.

În modul extins de repaus (Extended Standby Mode) oscilatorul și cronometrul asincron continuă să funcționeze, iar controlerul LCD este lăsat să reȋmprospăteze datele la panou.

ATXmega128-B1 este alimentată prin intermediul conectorului USB și oferă 2 opțiuni de alimentare:

prin conectarea kitului la un PC cu un cablu USB;

conectarea USB la un adaptor (AC/DC) de 5V.

Tensiunea de alimentare de 5V este scazută pană la 3,3V de un regulator LDO al plăci și asigură alimentarea pe întreaga platformă.

1.1 Tastele Qtouch

Placa este echipată cu patru taste atmel Qtouch (CS0, CS1, CS2, CS3).

Funcționalitatea tastelor Qtouch este controlată de Atmel AT42QT1040, dispozitivul fiind configurat în modul ASK iar anumite combinații nu sunt posibile. Cu ajutorul bibliotecii Atmel Qtouch butoanele prin atingere pot fi adăugate la orice aplicație corespunzatoare microcontrolerului AVR, acest lucru se face prin utilizarea unui set APIs pentru a defini canalele de atingere și senzori, apoi se așteaptă detectarea folosirii pentru a prelua informațiile de canal și ale senzorului utilizat.

Figura 1.2 Tastele cu atingere ale plăcii Xmega-B1 Xplained

1.2 LCD-Controler

Xmega-B1 Xplained dispune de un modul LCD cu 4 terminale comune și 40 segmente terminale, rata cadrelor este de 64Hz și este alimentat de 3,3V. Controlerul LCD poate fi cronometrat de un ceas sursă intern sau extern asincron de 32kHz, acest oscilator sursă de 32kHz este același ca și pentru contorul de timp real (RTC).

Controlul contrastului, modul de întrerupere extins, selectarea cadrelor de frecvență sunt funcții implementate pentru a reduce consumul de energie, întreruperile și nu sunt încărcate pe CPU.

Iluminarea ecranului LCD este controlată de PORTE pe PE5, în mod implicit acesta este alimentat și va porni daca PE5=1.

Figura 1.3 Controlerul LCD al plăcii Xmega-B1 Xplained

Figura 1.4 Schema bloc LCD

1.3 Intrări analogice

Atmel Xmega-B1 dispune de un senzor de temperatură, un senzor de lumină și are 2 intrări analogice una pentru potențiometrul de pe placă iar cealaltă pentru o sursă externă.

1.3.1 Senzorul de temperatură

Senzorul de temperatură are un termistor NTC conectat la PORTB pe pinul PB0. Zona de ieșire din rețeaua care conține NTC este 0V-1,1V (sau 0V-1/3 VTG). Intervalul de temperatură NTC este -40° C +125° C, iar domeniul de tesiune de intrare este 1,047V-0,077V pentru VTG=3,3V.

Tabel 1.1 Caracteristicile senzorului NTC

Figura 1.5 Senzorul de temperatură

1.3.2 Senzorul de lumină

Senzorul de lumină are un rezistor dependent de lumină (LDR) conectat la PORTB pe pin PB2. Zona de ieșire din rețeaua care conține LDR este 0V-1,1V (0V-1/3 VTG). Atunci când nivelul de lumină este redus, rezistența LDR este mare și tensiunea de intrare este aproape de 1,1V (1/3VTG).

Figura 1.6 Senzorul de Lumină

1.3.3 Potențiometru de tensiune și Tensiunea externă de intrare

Potențiometrul de pe placă poate fi măsurat la PORTB pe pin PB1, zona de intrare este de 0V-0,666V(0V-1/5VTG). O tensiune externă de intrare poate fi adaugată kitului utilizând portul dedicat, această tensiune este direcționată prin pin PB3 pe PORTB al kitului și poate fi măsurată utilizând Convertorul Analog-Digital (ADC).

Figura 1.7 Potențiometru de tensiune

1.4 Convertorul Analog-Digital

ADC convertește semnalele analogice în valori digitale, are o rezoluție de 12 biți și este capabil de o conversie de până la 300 de mii de eșantioane pe secundă (KSPS). Masurătorile ADC pot fi începute fie prin aplicația software, fie de un semnal de intrare de la un alt dispozitiv periferic. Este posibil să se utilizeze DMA pentru a se muta rezultatele convertorului direct în memorie sau trimiterea acestora la dispozitivele periferice în momentul în care conversia s-a terminat. Se pot folosi ca referință atât tensiuni interne și externe dar și senzorul de temperatură integrat poate utiliza convertorul. Convertorul Analog-Digital are o funcție de comparație pentru monitorizarea exactă a pragurilor definite de utilizator fără a interveni prin software foarte mult. Convertorul poate fi configurat pentru 8 sau 12 biți, acest lucru reducând timpul de conversie de la 3,35µs pentru 12 biți la 2,3µs pentru 8 biți. Xmega-B1 are două comparoare analogic digitale unul pe PORTA iar celălalt pe PORTB.

1.5 AC-Comparatorul Analog

AC compară nivelele de tensiune pe cele două intrări și oferă o ieșire digitală bazată pe această comparație. Analog comparatorul poate fi configurat pentru a genera cereri și evenimente de întrerupere asupra mai multor combinații diferite de intrări. O proprietate importantă a comparatorului este histerezis, acest parametru poate fi reglat pentru a obține o funcționalitate optimă pentru fiecare aplicație. Selecția de intrare include porturile și pini analogici, semnalele interne și o scală de tensiune programabilă de nivel 64. Ieșirea comparatorului analogic poate fi de asemenea folosită de dispozitive externe. Pentru înlocuirea rezistorului extern folosit la încărcarcarea condensatorilor în aplicațiile care folosesc tastele cu atingere se foloseștela dispozitivele periferice în momentul în care conversia s-a terminat. Se pot folosi ca referință atât tensiuni interne și externe dar și senzorul de temperatură integrat poate utiliza convertorul. Convertorul Analog-Digital are o funcție de comparație pentru monitorizarea exactă a pragurilor definite de utilizator fără a interveni prin software foarte mult. Convertorul poate fi configurat pentru 8 sau 12 biți, acest lucru reducând timpul de conversie de la 3,35µs pentru 12 biți la 2,3µs pentru 8 biți. Xmega-B1 are două comparoare analogic digitale unul pe PORTA iar celălalt pe PORTB.

1.5 AC-Comparatorul Analog

AC compară nivelele de tensiune pe cele două intrări și oferă o ieșire digitală bazată pe această comparație. Analog comparatorul poate fi configurat pentru a genera cereri și evenimente de întrerupere asupra mai multor combinații diferite de intrări. O proprietate importantă a comparatorului este histerezis, acest parametru poate fi reglat pentru a obține o funcționalitate optimă pentru fiecare aplicație. Selecția de intrare include porturile și pini analogici, semnalele interne și o scală de tensiune programabilă de nivel 64. Ieșirea comparatorului analogic poate fi de asemenea folosită de dispozitive externe. Pentru înlocuirea rezistorului extern folosit la încărcarcarea condensatorilor în aplicațiile care folosesc tastele cu atingere se folosește o sursă de curent constant. Comparatoarele analogice sunt întotdeauna grupate în perechi pe fiecare port, acestea sunt numite analog comparator 0 (AC0) și analog comparator 1(AC1). Ele au un comportament identic dar registre de control separate. Utilizate împreună ele pot fi setate pentru a compara un semnal la un interval de tensiune în loc de nivel de tensiune, PORTA și PORTB fiecare au câte un comparator analogic.

1.6 Modulul USART

Modulul USART (Universal Synchronous and Asinchronous serial Receiver Transmiter) efectuează recepția și transmisia datelor de la/către un dispozitiv periferic cu acces serie. Principalele caracteristici sunt:

Funcționare full-duplex completă atât în modul sincron cât și în mod asincron;

Posedă generator de rată propriu de rezoluție mare;

Diverse formate de date seriale;

Detectează automat erorile de transmisie;

Execută comunicații de tip multiprocesor.

Modulul execută conversia serie/paralel a datelor la recepție și conversia paralel/serie la transmisie. Transmiterea datelor este inițializată prin scrierea datelor care trebuie transmise în registrul UDR (USART Data Register). Datele sunt transferate de la UDR la registrul Transmit Shift când:

1. Un nou caracter este scris în UDR și caracterul precedent a fost deja transferat. Registrul de deplasare este încărcat imediat.

2. Un nou caracter este scris în UDR înainte ca un caracter precedent să fi fost transferat complet. Registul de deplasare este încărcat dupa ce prima operație a fost finalizată.

1.7 Interfața SPI și interfața TWI

Interfața de comunicație SPI (Serial Periferal Interface) asigură trasferul rapid sincron de date între microcontroler și dispozitive periferice sau cu alte microcontrolere AVR.

Interfața TWI (Two Wire Interface) implementează un protocol de comunicație pe două fire permițând interconectarea a 128 de dispozitive diferite. Interfața folosește două linii bidirecționale, una pentru tact (SCL) și una pentru date (SDA) .

1.8 Programarea și depanarea

Programarea și depanarea prin interfața PDI sprijină programarea rapidă a memoriei nevolatile (NVM): flash, EEPOM, biții de blocare fiind o proprietate importantă pentru programarea și depanarea dispozitivului printr-o interfață externă desfășurându-se în timp real. Pentru programarea sau depanarea dispozitivului este nevoie decât de conectarea acestuia la cei 2 pini care utilizează pinul de reset (PDI_CLK) și pinul de intrare sau ieșire date (PDI_DATA).

Controlerul PDI efectuează transmisia și receptia de date la nivel de octet, comanda de decodare, controlul și accesul registrelor dar și comutare ceas (PDI_CLK sau TCK). Interacțiunea dintre un programator extern și controlerul PDI se bazează pe o schemă în care programatorul transmite diferite tipuri de solicitări controlerului PDI și acesta răspunde la cererea specifică. Cererea programatorului vine sub forma unei instrucțiuni iar răspunsul primit de la controlerul PDI poate fi un pachet de octeți stocat pe dispozitiv sau poate citi un octet de date din dispozitiv. Pentru a funcționa la o viteză minimă USB-ul necesită 6MHz, iar pentru a funcționa la viteza maximă necesită 48MHz.

1.9 USB

Modulul USB este un USB 2.0 de viteză maximă 12Mbps și o viteză de 1,5Mbps pentru interfața dispozitivului. Suportă pană la 16 puncte finale, toate adresele punctelor finale au o intrare și o ieșire pentru toate cele 31 de puncte configurabile. Fiecare adresă poate fi configurată pentru oricare din cele patru tipuri de transfer: de control, de întrerupere, de volum sau izocrone.

Modulul USB nu are memorie alocată, SRAM-ul intern fiind folosit pentru a pastra configurația pentru fiecare adresă finală și datele bufferului despre fiecare punct final. Cantitatea de memorie alocată este dinamică și se alocă în funcție de numărul de obiective utilizate și de configurația acestora.

USB-ul are acces la memoria (DMA) și poate citi sau scrie datele primite de la SRAM în momentul transferului.

1.10 Porturi de expansiune

Xmega-B1 conține 4 porturi de expansiune I/O din cauza numărului mic de pini de pe dispozitiv. Prin aceste porturi placa poate fi controlată pentru o funcționalitate mult mai bună.

Următoarele tabele vor arăta funcționalitatea fiecărui pin din porturile de expansiune I/O acest lucru fiind foarte important deoarece funcționalitatea plăcii poate fi afectată până și prin eliminarea unui simplu rezistor serie.

Tabel 1.2 Portul de expansiune I/O J1

Figura 1.8 Portul de expansiune I/O J1

Tabel 1.3 Portul de expansiune I/O J2

Figura 1.9 Portul de expansiune I/O J2

Tabel 1.4 Portul de expansiune I/O J3

Figura 1.10 Portul de expansiune I/O J3

Tabel 1.5 Portul de expanstiune I/O J4

Figura 1.11 Portul de expansiune I/O J4

Capitolul 2 – Microcontroler-ul Xmega128-B1

Dispozitivele Xmega AVR folosesc un procesor pe 8/16 biți. Funcția principală a microcontrolerului este de a executa codul și de a efectua calculele. Xmega128B1 poate accesa regiștri de memorie, efectua calcule, controlează dispozitivele periferice și execută programul în memoria flash. Microcontrelerul Xmega128B1 folosește arhitectura RISC Harvard având memorii separate pentru partea de cod a programului și pentru date.

2.1 Caracteristicile microcontrolerului Atmel Xmega128-B1

8/16-biți AVR RISC CPU;

32×8-bit registre conectate la ALU;

Stivă în RAM;

Stivă pointer accesibilă în I/O;

142 de instrucțiuni;

Multiplicator hardware;

Adresare directă de până la 16MB de memorie program și 16 MB de memorie de date;

Configurație pentru modificarea protecției sistemului.

Figura 2.1 Schemă Bloc AVR CPU

2.1.1 ALU (Unitatea Aritmetică și Logică)

Unitatea Aritmetică și Locică execută operații aritmetice și logice de prelucrare a datelor între registre sau între o constantă și un registru. ALU poate executa operații și cu un singur registru iar după fiecare operație registrul se actualizează pentru afișarea noului rezultat.

2.1.2 Registrele de uz general

Pentru un acces rapid unitatea aritmetică și logică este conectată direct la registrele de fișiere. Toate cele 32 de registre de uz general pe 8 biți pot fi accesate într-un singur ciclu de tact acest lucru permite operații aritmetice, logice și operații pe bit cu răspuns foarte rapid. Din cele 32 de registre numai 6 registre sunt folosite ca 3 registre pe 16 biți pentru calcularea adresei și doar unu din acești regiștri poate fi folosit pentru a căuta tabele în memoria flash.

Memoria de date și memoria de program sunt diferite, memoria de date fiind împarțită între registrele I/O, SRAM și RAM-ul extern.

Registrele I/O se găsesc în cele mai mici adrese de memorie de 4 KB și conține 64 de adrese directe pentru funcțiile perifericelor microcontrolerului de control al registrelor sau de a controla interfața SPI și a asigura un transfer de date rapid.

Cele mai multe instrucțiuni AVR utilizează un format de 16 biți pentru cuvinte și un format de 32 de biți pentru numere. Stiva se găsește în general în memoria SRAM de date, mărimea stivei este limitată la mărimea totală a SRAM-ului și de cât este folosit din ea.

2.1.3 Registrul de stare (SREG)

Acest registru conține informații despre ultima operație aritmetică efectuată de ALU, acest registru se actualizează dupa fiecare execuție a unei operații aritmetice. Registrul de stare nu se salvează automat în memorie iar în momentul unei întreruperi de rutină nu se poate restaura la momentul dinaintea întreruperii. Registrul de stare este accesibil din spațiul de memorie I/O.

2.1.4 Stiva și Indicativul de Stivă (Stack and Stack Pointer)

Stiva este utilizată pentru stocarea adreselor de returnare după efectuarea întreruperilor sau a subrutinelor. Aceasta poate fi utilizată de asemenea pentru stocarea de date temporare. Indicativul de stivă (SP) indică întotdeauna prima locație liberă din vârful stivei, acesta este implentat sub forma a două registre de 8 biți accesibile din spațiul de memorie I/O. Xmega128-B1 pentru transferul de date în stivă folosește instrucțiunea PUSH în acest moment SP este decrementat cu 1 și decrementat cu 2 când sunt salvate adrese de revenire a subrutinelor iar în momentul folosirii instrucției POP pentru transferul din stivă este incrementat cu 1 și incrementat cu 2 când sunt citite din stivă adresele instrucțiunilor de revenire din subrutină sau dintr-o întrerupere.

2.2 Memoria

Tabel 2.1 Informații Xmega128-B1

Arhitectura atmel AVR este dotată cu 2 memorii principale, memoria de date și memoria de program. Partea executabilă de cod se poate afla numai în memoria pentru program în timp ce datele pot fi stocate în memoria program dar și memoria de date.

Memoria de date include SRAM intern si EEPROM pentru stocarea de date nevolatile.

Memoria nevoilatilă (NVM) poate fi blocată pentru operațiunile de scriere sau de citire. O secțiune separată de memorie conține biții de siguranță, acestă secțiune fiind utilizată la funcții importante de configurare ale sistemului și poate fi scrisă numai de un programator extern.

2.2.1 Memoria pentru programare (Flash Program Memory)

Figura 2.2 AT45DB Memoria pentru programare

Atmel Xmega AVR conține o memorie reprogramabilă pentru stocarea programului. Memoria flash poate fi citită sau scrisă printr-un programator extern PDI sau de aplicația software. Instrucțiunile nucleului AVR sunt de 16-32biți, memoria flash este organizată pe cuvinte de 16 biți. Memoria flash este organizată în 2 secțiuni principale:

sectiunea boot;

secțiunea pentru programe au diferite niveluri de protecție.

Tabel 2.2 Structura memoriei de programare (Hexazecimal)

Secțiunea pentru aplicație este partea din memoria flash care este folosită pentru stocarea codului executabil al aplicației. În această secțiune nu se poate stoca orice cod de boot deoarece instrucțiunea SPM nu poate fi executată din secțiunea de aplicație. Secțiunea tabelului aplicației este o parte din secțiunea aplicație a memoriei flash care poate fi utilizată pentru stocarea datelor. Dimensiunea este identică cu secțiunea de boot, iar nivelul de protecție pe această secțiune poate fi setat din biți de blocare ai secțiunii boot. În timp ce secțiunea de aplicație este folosită pentru stocarea codului, software-ul de boot loader trebuie să fie situat în partea de boot datorită faptului că instrucțiunea SPM poate fi inițiată numai de programele care se execută din acestă secțiune. Dacă această secțiune nu este utilizată pentru software-ul de boot loader, codul executabil al aplicației poate fi stocat aici.

Atmel (Production Signature Row) a adăugat o altă secțiune de memorie separată pentru date din fabrică programată. Această memorie conține date de calibrare pentru funcții cum ar fi oscilatoare și module analogice. Unele dintre valorile de calibrare vor fi încărcate automat la modulul corespunzător unității periferice în momentul resetării. Alte valori trebuie să fie încărcate din această memorie și scrise în registrele periferice corespunzătoare de software. Această memorie nu poate fi scrisă sau ștearsă, doar citită din software-ul aplicației sau de programatori externi.

2.2.2 Memoria de date

Memoria de date conține memoria I/O,SRAM interna și memoria EEPROM. Memoria de date este organizată ca o secțiune de memorie continuă.

Tabel 2.3 Memoria de date (Hexazecimal)

2.2.3 EEPROM

Dispozitivul XMEGA-B1 are EEPROM pentru stocarea datelor nevolatile. Aceasta este organizată ca un spațiu separat de date, în care pot fi citiți sau scriși biți individuali. Memoria EEPROM se poate scrie sau citi cu ajutorul regiștrilor: EEAR-EEPROM adresa registrelor, EEDR-EEPROM registru datelor și EECR-EEPROM registrul de control.

2.2.4 Spațiul de adrese I/O

Registrele de stare și de configurare pentru periferice și module, inclusiv pentru CPU sunt plasate în spatiul I/O. Locațiile I/O pot fi accesate prin instrucțiunile de încarcare (LD/LDS/LDD) sau stocare (ST/STS/STD), care sunt folosite pentru transferul de date între cei 32 de regiștri și registru de memorie I/O. Când se utilizează instrucțiunile specifice IN și OUT, trebuie folosite adresele I/O din zona 0x00 – 0x3F.

2.3 DMA (Direct memory access)

Cele două canale de acces direct la memorie (DMA) pot transfera date între memorie și periferice ajutând CPU. Acestea permit rate ridicate de transfer de date cu o intervenție minimă CPU. Cele 2 canale DMA permit până la două transferuri independente și paralele. Controlerul DMA poate muta date între SRAM și periferice, între locații SRAM și direct între registrele periferice. Având acces la toate perifericele controlerul DMA se poate ocupa automat de transferul de date la modulele periferice sau de la modulele periferice, deasemenea poate citi din memoria EEPROM. Transferul de date se face în pachete continue de 1, 2, 4 sau 8 octeți, ei construiesc transferuri bloc de dimensiune configurabilă de la 1 octet la 64KB. Se poate folosi un contor de repetare și poate fi folosit pentru a repeta fiecare transfer de bloc pentru tranzacții unice de până la 16 MB.

Încarcarea automată a adresei destinației se poate face după fiecare transfer de bloc sau atunci când o tranzacție este completă. Cele 2 canale DMA au setări de configurare și de control individuale acestea cuprind sursa, destinația de transfer și dimensiunea de tranzacție. Cererea de întrerupere poate fi generată atunci când o tranzacție este completă sau atunci când controlerul DMA detectează o eroare pe un canal DMA. Pentru a permite transferuri continue, cele 2 canale pot fi legate între ele astfel încât al doilea canal preia transferul când primul este terminat și invers.

2.4 Sistemul de eveniment

Sistemul de eveniment permite comunicarea directă a perifericelor și a semnalelor. Acesta permite schimbarea într-un periferic pentru a declanșa automat acțiuni în alte periferice. Acesta este conceput pentru a oferi un sistem previzibil pentru un timp scurt și răspunsuri previzibile dintre periferice. Acesta permite controlul perifericelor fără utilizarea sau întreruperea CPU sau DMA controler și este prin urmare un instrument puternic pentru reducerea complexități, mărimii și timpului de execuție a codului aplicației. De altfel, permite sincronizarea acțiunilor calendarului cu diferite module periferice. O schimbare în starea unui periferic este menționată ca un eveniment și de obicei corespunde condițiilor de întrerupere periferic.

Evenimentele pot fi transmise direct de alte periferice, folosind o rețea dedicată de rutare numită rețea de rutare eveniment. Modul în care evenimentele sunt dirijate și utilizate de catre periferice este configurat în software. Sistemul de eveniment poate conecta direct convertoare analogice și digitale, comparatoare analogice, pinii portului I/O, real-time counter, timer/contoare, modulul de comunicare IR (IRCOM) și interfața USB. Evenimentele pot fi de asemenea generate de software.

Figura 2.3 Sistemul de eveniment și conectarea perifericelor

2.5 Ceasurile sistemului și opțiunile acestora

Dispozitivele Xmega au un sistem ceas flexibil care acceptă un număr mare de surse ceas, acesta include ambele oscilatoare interne și oscilatorul extern cristal. PLL și Prescaler pot fi folosite pentru a genera o gamă largă de frecvențe de ceas, iar DFLL poate fi folosit pentru calibrarea automată a oscilatoarelor interne. În momentul unei resetări toate sursele ceas sunt dezactivate cu excepția oscilatorului (32kHz) cu consum redus de energie. După resetare dispozitivul pornește întotdeauna de la oscilatorul intern 2MHz, celelalte surse DFLL și PLL fiind dezactivate. În timpul funcționării normale sistemul de sursă ceas și prescaler pot fi schimbate din software.

Oscilatorul intern de 32kHz (ULP) este o sursă de putere mică și nu este un oscilator precis fiind construit în prescaler oferă o ieșire de 1kHz și poate fi activat sau dezactivat automat în momentul în care este folosit ca sursă ceas pentru RTC sau LCD.

Oscilatorul de 32,768kHz este calibrat în timpul producției pentru a asigura o frecvență prestabilită, oferă două ieșiri de 32,768kHz și 1,024kHz. Oscilatorul Crystal poate funcționa în patru moduri diferite optimizate pentru diferite intervale de frecvență 0,4MHz-16MHz.

2.6 Întreruperile

Întreruperile semnalează o schimbare a perifericelor, acest lucru poate fi folosit pentru a modifica execuția programului. Perifericele pot avea una sau mai multe întreruperi, toate putând fi activate și configurate individual. Controlerul programabil de întrerupere (PMIC) controlează prioritatea cererilor de întrerupere, în momentul în care PMIC acceptă o întrerupere, contorul de program este setat pentru a indica vectorul de întrerupere pentru a putea fi executată. Toate perifericele pot alege între trei niveluri de prioritate pentru întreruperile lor: scăzut, mediu și ridicat ele fiind repartajate în funcție de nivelul lor și de adresa vectorului de întrerupere în care cea mai mică adresă are cea mai mare prioritate de întrerupere. Întreruperile de nivel mediu întrerup pe cele de nivel scăzut, întreruperile de nivel ridicat pot întrerupe pe cele de nivel scăzut și mediu, iar cele de nivel scăzut au un sistem round-robin de planificare prin care se asigură că toate întreruperile se produc într-o anumită perioadă de timp.

Tabel 2.4 Resetarea și Întreruperea Vectorilor

2.7 Resetarea și controlul sistemului

În momentul resetării regiștrii I/O revin la setările inițiale acest lucru poate fi folosit în situațiile în care programul nu pornește sau nu continuă să ruleze. În cazul în care o sursă de resetare este activată dispozitivul stă în modul reset pană când toate porturile I/O sunt resetate la valoarea lor implicită dar conținutul SRAM este păstrat. După resetare oscilatorul implicit pornește și se calibrează de la adresa vectorului de resetare fiind cea mai mică parte a adresei memoriei programului dar este posibil ca adresa vectorului reset să se mute în cea mai mică adresă din secțiunea de boot.

Surse de resetare:

Power-on Reset (POR) – MCU este resetat atunci când tensiunea de alimentare este sub pragul POR.

Brownout detection (BOD) – MCU este resetat atunci când tensiunea de alimentare VCC este sub pragul VBOT și atunci când este în funcțiune BOD.

External Reset – MCU este resetat atunci când un nivel scăzut este prezent pe pinul RESET pentru mai mult timp decât lungimea de impuls minimă.

Watchdog Reset – MCU este resetat în momentul în care perioada WDT expiră și când WDT este în funcțiune. Resetarea WDT este activă pentru unu sau două cicluri de ceas ale oscilatorului intern de 2MHz.

Software Reset – Resetarea software este posibilă prin scrierea bitului de reset în registri de control.

Program and Debug Interface Reset – Interfața de programare și depanare de reset conține surse de resetare separate și pot fi folosite în timpul programări și depanări externe. Această sursă de resetare este accesibilă doar la programări și depanări externe.

2.8 Modurile de economisire energie

Microcontrolerele XMEGA au cinci moduri diferite de economisire a energiei reglate pentru a se potrivi cu etapele funcționale în timpul execuției aplicației. În momentul lansări unei întreruperi dispozitivul iese din modul SLEEP și execută prima instrucțiune înainte de a intra acest mod. Regimurile de consum de energie sunt:

Modul de așteptare (Idle Mode) – în acest mod CPU și memoria nevolatilă sunt oprite dar toate dispozitivele periferice inclusiv controlerul de întrerupere, sistemul de evenimente și controlerul DMA sunt funcționale.

Modul tensiune redusă (Power-Down Mode) – în acest mod toate ceasurile inclusiv RTC sunt oprite. Acest lucru permite numai operarea modulelor asincrone care nu necesită un ceas de funcționare însă rămân active întreruperile externe, interfața TWI și ceasul de urmărire.

Modul econimisire energie (Power-Save Mode) – acest mod de economisire energie este identic cu power-down mode cu două excepții RTC și LCD pot rămâne activate.

Modul așteptare comandă (Standby Mode) – acest mod de așteptare este identic cu power-down cu excepția faptului că oscilatoarele sistemului încă rulează în timp ce procesorul, perifericele, RTC și LCD sunt oprite.

Modul extins de așteptare (Extended standby Mode) – este identic cu power-save mode cu excepția că oscilatoarele rămân activate și rulează în timp ce CPU și perifericele sunt oprite.

2.9 Watchdog Timer

Timer-ul de urmărire (Watchdog) este un timer controlat care este folosit pentru a activa un dispozitiv în caz că software-ul este blocat într-o buclă infinită sau în caz că execuția programului este defectuoasă. Timer-ul Watchdog are o ieșire care poate reseta controlerul. Watchdog-ul este alimentat de la un oscilator RC on-chip separat de 1kHz. În modul de funcționare normală WDT este setat pe o singură perioadă de timp și există 11 posibile perioade timeout (TOWDT) selectabile de la 8ms la 8s. În cazul folosirii instrucțiunei WDR watchdog timerul va fi pornit de fiecare dată la o nouă perioadă de timp.

Capitolul 3 – Aplicații folosind placa de evaluare ATXmega-B1 Xplained

3.1 Aplicația 1 – folosire modul LCD, butoane Qtouch

În această aplicație am folosit modulul LCD, LED-urile, cronometrul și Butoanele Qtouch ale plăcii Xmega-B1. Modulul LCD are 4 terminale comune și 40 de terminale segment fiind configurat pentru a utiliza o frecvență de 32,768kHz de la ULP generând cadre de 64Hz iar iluminarea ecranului este controlată de PORTE pe PE5 cu 12 leduri fiind alimentat cu 3,3V.

Figura 3.1 Schema modulului LCD

În momentul conectării plăcii de evaluare Xmega-B1 prin portul USB pe display-ul plăcii va apărea pe primul rând mesajul “PROIECT” pe al doilea rând cronometrul (MN:s) iar ledul LED3 va clipi întruna ceea ce înseamnă că aplicația nu s-a blocat și încă rulează.

Figura 3.2 Afișajul la pornire al aplicației

Pentru o complexitate mai mare în această aplicație am utilizat butonale Qtouch cu diferite funcții de afișare:

Butonul CS0 – în momentul apăsării acestui buton cronometrul pornește din momentul apăsări și se aprinde LED0 specific butonului începând să ruleze pe modulul LCD din partea dreaptă înspre stânga mesajul “BUNĂ ZIUA”, cronometrul mergând în tot acest timp, cât stă în această funcție.

Figura 3.3 Afișarea în momentul folosiri butonului CS0

Butonul CS1 – în momentul apăsării acestui buton cronometrul pornește din momentul apăsări și se aprinde LED1 specific butonului începând să ruleze pe modulul LCD din partea dreaptă înspre stânga mesajul “POPA EUGEN ALEXANDRU ”, cronometrul mergând în tot acest timp cât stă în această funcție.

Figura 3.4 Afișarea în momentul folosirii butonului CS1

Butonul CS2 – în momentul apăsării acestui buton cronometrul pornește din momentul apăsării și se aprinde LED0+LED1 specific butonului începând să ruleze pe modulul LCD din partea dreaptă înspre stânga mesajul “FACULTATEA DE INGINERIE ELECTRICA”, cronometrul mergând în tot acest timp cât stă în această funcție.

Figura 3.5 Afișarea în momentul folosirii butonului CS2

Butonul CS3 – în momentul apăsării acestui buton cronometrul pornește din momentul apăsarii și se aprinde LED2 specific butonului începând să ruleze pe modulul LCD din partea dreaptă înspre stânga mesajul “ELECTRONICA ANUL IV”, cronometrul mergând în tot acest timp cât stă în această funcție.

Figura 3.6 Afișarea în momentul folosirii butonului CS3

3.2 Aplicația 2 – achiziția datelor de la senzori

În această aplicație am realizat o conexiune între placa XMEGA-B1 Xplained și un program de la Atmel prin care se pot controla o parte din componente și se poate citi datele primite de la senzorii de temperatură și de lumină dar și de la potențiometru și tensiunea de intrare, toate acestea putând fi vizualizate pe display-ul laptopului prin programul de la Atmel.

Dispozitivul USB – în momentul conectării plăcii Xmega cu un calculator prin USB, dispozitivul apare ca dispozitiv de stocare în masă de 8MB și ca un dispozitiv generic HID prin care se face schimbul de date.

Figura 3.7 Conectarea prin USB la calculator

Această aplicație se poate controla cu ajutorul tastelor Qtouch fiecare tastă având câte o opțiune de control asupra unei anumite componente:

Butonul CS0 – în momentul folosirii acestui buton pe display-ul plăcii Xmega-B1 dar și pe display-ul calculatorului se afișează pe primul rând “Light Sensor” și pe al doilea rând valoarea măsurată de acesta. Senzorul de lumină are un rezistor dependent de lumină (LDR) conectat la PORTB pe pin PB2. Zona de ieșire din rețeaua care conține LDR este 0V-1,1V (0V-1/3 VTG). Atunci când nivelul de lumină este redus, rezistența LDR este mare și tensiunea de intrare este aproape de 1,1V (1/3VTG).

Figura 3.8 Afișarea valorii senzorului de lumină cu becul aprins în camera

Figura 3.9 Afișarea valorii senzorului de lumină cu becul stins în cameră

Butonul CS1 – în momentul folosirii acestui buton pe display-ul plăcii Xmega-B1 dar și pe display-ul calculatorului se afișează pe primul rând “Temperature Sensor” și pe al doilea rând valoarea măsurată de acesta în °C. Senzorul de temperatură are un termistor NTC conectat la PORTB pe pinul PB0. Zona de ieșire din rețeaua care conține NTC este 0V-1,1V (sau 0V-1/3 VTG). Intervalul de temperatură NTC este -40° C +125° C, iar domeniul de tesiune de intrare este 1,047V – 0,077V pentru VTG=3,3V.

Figura 3.10 Afișarea temperaturii din cameră pe display dar și pe laptop

Butonul CS2 – în momentul utilizării acestui buton se afișează valoarea setări potențiometrului în mV, această valoare odată citită de program poate fi schimbată din laptop cu ajutorul programului Atmel sau de pe placă.

Figura 3.11 Afișarea tensiunii potențiometrului dupa reglaj

Butonul CS3 – în momentul utilizării acestui buton se afișează valoarea setării tensiuni de intrare în mV, această valoare odată citită de program poate fi modificată cu ajutorul programului Atmel sau din sursa de tensiune.

Figura 3.12 Afișarea tensiunii externe dupa reglaj

Prin aplicația creată, cu ajutorul interfeței de la atmel prin conexiunea USB cu placa de evaluare Xmega-B1 Xplained se pot controla luminiozitatea display-ului, contrastul acestuia, cele 4 leduri (LED0, LED1, LED2, LED3) sau se poate schimba afișajul de pornire al plăci la conectarea prin modulul USB.

Figura 3.13 Afișarea în momentul conectării prin USB

3.3 Aplicația 3 – voltmetru de precizie

AVR Atxmega128-B1 ADC are o rezoluție de 12 biți și este capabil de o conversie de până la 200k (eșantioane pe secundă) atât în modul single dar și în modul diferențial. În această aplicație am realizat cu ajutorul plăcii de evaluare Xmega-B1 prin folosirea AVR Xmega ADC un voltmetru de precizie în mV cu funcție de calibrare și funcție de compensare. Pe lângă placa de evaluare am folosit un multimetru extern pentru a verifica exactitatea de măsurare și afișare pe AVRxmega-B1 LCD dar și o sursă externă de tensiune de 7,5V.

Figura 3.14 Aparate utilizate

Pentru realizarea aplicației am folosit o tensiune de referință de 1V deoarece este compatibilă cu cele 2 intrări. Tensiunea de intrare externă este conectată printr-o punte de rezistențe și divizată în 8, aceasta permite o tensiune de intrare de la 0V-8V, iar potențiometrul poate fi folosit de la 0V-0,67V.

Figura 3.15 Schema măsurării tensiunii externe

Figura 3.16 Măsurarea potențiometrului

Pentru folosirea tuturor funcțiiolor am utilizat butoanele Qtouch, fiecare buton având câte o funcție separată:

Butonul CS0 are funcția de calibrare (gain calibration), această funcție constă în aplicarea unei tensiuni fixe pe intrarea ADC, rezultatul obținut la ieșirea ADC este comparat cu voaloarea teoretică. Fiecare valoare este apoi înmulțită cu un coeficient pentru a corecta eroarea de calibrare. După o calibrare corectă a potențiometrului și a valorilor tensiunii de intrare datele sunt salvate în Atxmega128-B1 EEPROM, acestea putând fi utilizate în măsurătorile ulterioare. În cazul în care butonul de calibrare este apăsat din greșeală fară tensiune de calibrare pe intrări, calibrarea este abandonată și valorile din EEPROM nu sunt actualizate. Cu ajutorul acestei funcții am calibrat sursa la 7V și potențiometrul la 0,6V, apoi ținând apăsat a memorat valoarea.

Figura 3.17 Setarea potențiometrului la 0,6V

Figura 3.18 Măsurarea tensiunii potențiometrului (la pinul PB1)

Figura 3.19 Calibrarea sursei de tensiune la 7,05 V

Măsurarea tensiuni externe se face între pinul PB3 și GND. Tensiunea indicată de aparatul de măsură deste de 0,88V ceea ce înseamnă că tensiunea externă calibrată este de 0,88V*8=7,04V.

Butonul CS1 (Offset Calibration) – funcția de compensare constă în aplicarea unei tensiuni pe intrarea ADC, rezultatul ieșiri ADC fiind valoarea de calibrare a acestuia. Dupa setarea valorilor potențiometrului și sursei externe de tensiune datele sunt stocate în EEPROM pentru utilizările următoare. Pentru setarea acestei calibrări am conectat printr-un jumper Vin cu GND și am ajustat valoarea potențiometrului la 0V. Apoi prin apăsarea butonului CS1 valorile s-au memorat.

Figura 3.20 Conectarea Vin cu GND prin Jumper

Figura 3.21 Setarea potențiometrului la 0V

Figura 3.22 Măsurarea tensiuni potențiometrului (pinul PB1)

Butonul CS2 (Potentiometer Voltage) are funcția de măsurare și afișare a tensiuni setate cu potențiometru în mV putând fi folosit de la 0mV la 677mV.

Figura 3.23 Reglajul maxim al potențiometrului

Butonul CS3 (External Voltage) are funcția de măsurare și de afișare a tensiuni de intrare prin pin J7 putând măsura o tensiune maximă de 7521 mV.

Figura 3.24 Maximul tensiunii de intrare

Capitolul 4 – Rezultate și concluzii

În lucrarea Sistem de Dezvoltare bazat pe platforma XMEGAB1-XPLD se prezintă aplicații construite în Atmel studio 6.2 folosind librăriile specifice componentelor utilizate în realizarea aplicațiilor.

În prima aplicație am utilizat modulul LCD, cronometrul ledurile și tastele Qtouch. În momentul apăsării uneia din cele 4 taste Qtouch pe controlerul LCD apare un anume text și pornește un cronometru din momentul atingeri butonului, fiecare buton având câte un led specific. Dacă ținem degetul pe o tastă un timp anume cronometrul nu pornește până ce numai atingem una din taste. La fiecare atingere a unei taste cronometrul se resetează de la 0 minute și 0 secunde.

Cea de-a doua aplicație este mai complexă deoarece valorile senzorilor, afișajul controlerului LCD și ledurile pot fi modificate sau doar vizualizate prin intermediul unui laptop/calculator și a interfeței de la Atmel pentru placa ATXmega128B1. Această aplicație poate măsura temperatura, luminiozitatea și poate afișa tensiunea externă și valoarea tensiuni potențiometrului atât pe display-ul plăci dar și pe interfața de calculator/laptop. Consider că această aplicație cu mici modificări poate fi implementata în controlul climei dintr-o locuință, controlul luminozități într-o încapere sau cu ajutorul unui soft putem culege informații despre temperatură din locuri greu accesibile și fără erori.

În a treia aplicație am realizat un Voltmetru de precizie în mV cu afișaj pe controlerul LCD care se poate utiliza după calibrare pentru măsurarea unor tensiuni externe de intrare de maxim 7500mV, iar potențiometrul poate fi utilizat între 0mV-0,677mV. Pentru realizarea acestei aplicații am folosit comparatorul analog digital al plăcii de evaluare care are o rezoluție de 12-bit și o tensiune de referintă de 1V. Opțiunile de calibrare și de compensare ale comparatorului analog digital pot fi utilizate prin intermediul tastelor Qtouch ale plăci. Această aplicație se poate folosi în orice mediu de lucru deoarece are o precizie bună, singura inconveniență fiind scala de măsurare foarte mică dar cu mici modificari în codul sursă se poate mări scala de măsurare până la 13V.

Bibliografie

Cărți, articole de specialitate, lucrări de licență/disertație

Dhananjay V. Gadre, Programming and Customizing the AVR Microcontroller, McGraw-Hill, 2001;

Richard Barnett, Larry O’Cull, Sarah Cox, Embedded C Programming and the Atmel AVR, 2e, Delmar, Cengage Learning, 2007;

ATXmega128-B1

ATXmega128-B1 Datasheet

http://www.atmel.com/devices/ATXMEGA128B1.aspx?tab=documents;

http://www.atmel.com/Images/Atmel-8291-8-and-16-bit-AVR-Microcontrollers-XMEGA-B_Manual.pdf

Atmel Studio 6.2

http://www.atmel.com/tools/ATMELSTUDIO.aspx;

Anexă – Coduri sursă

Bibliografie

Cărți, articole de specialitate, lucrări de licență/disertație

Dhananjay V. Gadre, Programming and Customizing the AVR Microcontroller, McGraw-Hill, 2001;

Richard Barnett, Larry O’Cull, Sarah Cox, Embedded C Programming and the Atmel AVR, 2e, Delmar, Cengage Learning, 2007;

ATXmega128-B1

ATXmega128-B1 Datasheet

http://www.atmel.com/devices/ATXMEGA128B1.aspx?tab=documents;

http://www.atmel.com/Images/Atmel-8291-8-and-16-bit-AVR-Microcontrollers-XMEGA-B_Manual.pdf

Atmel Studio 6.2

http://www.atmel.com/tools/ATMELSTUDIO.aspx;

Similar Posts