TIPS ‘N TRICKS

24 IULIE 2008

Microchip continuă să ofere produse inovative mai mici, mai rapide, mai uşor de utilizat şi mai sigure în funcţionare. Microcontrolerele FLASH PIC® cu 8-pini (MCU) sunt utilizate într-o gamă largă de aplicaţii, de la produse de zi cu zi: periuţe de dinţi, uscătoare de păr, maşini de gătit, până la produse industriale, auto şi medicale.
MCU PIC12F629/675 adună toate avantajele arhitecturii PIC MCU şi flexibilitatea memoriei program FLASH într-o capsulă cu 8-pini. El oferă caracteristici şi inteligenţă indisponibilă anterior din cauza limitărilor legate de cost şi spaţiu. Caracteristicile includ un set de instrucţiuni pe 14-biţi, capsulă de mici dimensiuni, domeniu larg al tensiunii de operare de la 2 la 5,5V, un oscilator intern programabil de 4MHz, memorie de date on-board EEPROM, referinţă de tensiune on-chip şi până la 4 canale de conversie A/D pe 10-biţi. Flexibilitatea FLASH şi o excelentă suită de unelte de dezvoltare, inclusiv un ICD (In-Circuit Debugger) economic, In-Circuit Serial Programming™ şi MPLAB® ICE 2000, fac aceste dispozitive ideale pentru orice aplicaţie de control embedded. Următoarea serie de sfaturi Tips’n Tricks poate fi aplicată într-o varietate de aplicaţii ce utilizează MCU pe 8 pini.
TIP 1. – Multiplexare Intrare/Ieşire
Pot fi activate diode sau combinaţii de diode prin comanda I/O sau comutând pe intrări (Z). Numărul de diode (D) care poate fi comandat depinde de numărul de I/O (GP) utilizat.

Ecuaţia este: D = GP x (GP – 1).

Exemplu – Şase LED-uri pe trei pini de I/O

TIP 2. – Scanarea mai multor taste cu o intrare
Timpul necesar pentru încărcarea unui condensator depinde de rezistenţa dintre VDD şi condensator. Atunci când este apăsat un buton, VDD este furnizat într-un punct diferit dintr-o reţea de rezistenţe. Rezistenţa dintre VDD şi condensator este redusă, ceea ce reduce timpul de încărcare al condensatorului. Pentru măsurarea timpului de încărcare al condensatorului poate fi utilizat un temporizator cu un comparator sau cu schimbarea intrării digitale. Timpul de încărcare este măsurat pentru a determina care buton este apăsat.
Secvenţa software:
1. Configurare GP2 pentru a furniza la ieşire o tensiune joasă pentru descărcarea condensatorului prin rezistenţa de I/O.
2. Configurare GP2 ca o intrare de comparator şi CVREF ca cealaltă.
3. Utilizarea unui temporizator pentru măsurare atunci când are loc cursa comparatorului. Dacă timpul măsurat este mai mare decât timpul maxim permis, atunci se repetă; în caz contrar se determină care buton este apăsat. La apăsarea unei taste, reţeaua de divizare a tensiunii schimbă rampa RC.

TIP 3. – Tastatură 4×4 cu o intrare
Prin selectarea cu grijă a valorilor rezistenţelor, fiecare buton generează o tensiune unică. Această tensiune este măsurată cu ajutorul A/D pentru a determina care buton este apăsat. Rezistenţele cu precizie mai ridicată trebuie utilizate pentru maximizarea unicităţii tensiunii. Convertorul A/D va citi aproape 0 atunci când nici un buton nu este apăsat.

TIP 4. – Un singur pin de putere/date
O singură intrare / ieşire I/O poate fi utilizată atât pentru comunicaţie într-o singură direcţie, cât şi ca sursă de putere pentru alt microcontroler. Linia de I/O este menţinută în stare de nivel superior cu ajutorul rezistenţei de încărcare conectate la VDD. Emiţătorul utilizează un tranzistor reductor pentru a reduce linia de date în stare de nivel inferior sau dezactivează tranzistorul pentru a permite creşterea către nivel superior, în acest fel transmiţând date către receptor. Condensatorul stabilizează VDD al emiţătorului, iar o diodă previne descărcarea condensatorului prin linia de I/O atât timp cât aceasta este în stare de nivel inferior. De notat că VDD al emiţătorului este mai mic decât al receptorului cu căderea de tensiune pe diodă.

TIP 5. – Decodare taste şi parametrii ID
Butoane şi jumpere pot avea în comun I/O prin utilizarea a încă unei intrări/ieşiri pentru selecţie între cele două. Atât butoanele, cât şi jumperele sunt legate pentru a avea în comun o rezistenţă de reducere. De aceea, ele vor fi citite ca ‘0’ până când un buton este apăsat sau un jumper este conectat. Fiecare intrare (GP3/2/1/0) are în comun un jumper şi un buton. Pentru citirea parametrilor jumperelor, trebuie programat GP4 pentru ieşire în stare de nivel superior şi fiecare jumper va fi citit ca ‘1’ pe I/O atribuită sau ‘0’ dacă nu este conectat. Cu ieşirea GP4 în nivel logic inferior, un buton va fi citit ca ‘1’ pe I/O atribuită şi ‘0’ în caz contrar.
– Când GP4 = 1 şi nu este apăsată nici o tastă, citeşte parametrii ID;
– Când GP4 = 0, citeşte butoanele de comutaţie.

TIP 6. – Utilizarea PIC MCU A/D pentru limitare inteligentă a curentului
– Detectează curentul prin rezistenţa de sens.
– Condensator de filtrare de vârf opţional.
– Răspunsul ca diferite nivele de supracurent poate fi realizat în software.
Prin adăugarea unei rezistenţe (Rsense) în serie cu un motor, convertorul A/D poate fi utilizat pentru a măsura creşterile de curent, oferind limitare de curent, recuperare supracurent sau lucrând ca întrerupător inteligent de circuit. Rezistenţa de 10K limitează curentul prin canalul analogic şi nu afectează limita impedanţei sursei convertorului A/D.

TIP 7. – Tehnici de întârziere
– Utilizare GOTO “următoarea instrucţiune” în loc de două NOP.
– Utilizare CALL Rtrn, 1 instrucţiune NOP (unde “Rtrn” este eticheta de ieşire din subrutina existentă).
MCU sunt utilizate uzual pentru interfaţarea cu “lumea exterioară” cu ajutorul unei magistrale de date, LED-uri, butoane, limitatoare etc. Pentru că MCU operează la o frecvenţă fixă, el are nevoie adesea de rutine de întârziere pentru a răspunde cerinţelor de parametrizare/menţinere a unor alte dispozitive, pauze pentru handshake sau descreşterea vitezei de date pentru o magistrală partajată. Întârzieri mai mari sunt bine potrivite pentru instrucţiuni DECFSZ şi INCFSZ, unde o variabilă este incrementată sau decrementată până când ajunge 0, moment în care este executat un salt adiţional. Pentru întârzieri mai mici de câteva cicluri, sunt prezentate câteva idei de micşorare a dimensiunii programului. Pentru o întârziere de două cicluri, este uzuală utilizarea a două instrucţiuni NOP, care utilizează două locaţii de memorie program. Acelaşi rezultat poate fi obţinut prin utilizarea “goto $+1”. “$” reprezintă valoarea numărătorului curent al programului în MPASM™. Când este întâlnită această instrucţiune, MCU va sări la următoarea locaţie de memorie. Aceasta este ce s-ar fi întâmplat dacă s-ar fi utilizat două NOP, dar devreme ce instrucţiunea “goto” utilizează cicluri de două instrucţiuni, a fost creată o întârziere de două cicluri. Astfel a fost creată o întârziere de două cicluri utilizând numai o locaţie a memoriei program. Pentru a crea o întârziere de patru cicluri, trebuie adăugată în program o etichetă la o instrucţiune existentă “RETURN”. În acest exemplu, eticheta “Rtrn” a fost adăugată instrucţiunii “RETURN” ce exista deja undeva în program. Atunci când se execută “CALL Rtrn”, MCU întârzie un ciclu de două instrucţiuni pentru a executa “CALL” şi încă două pentru a executa “RETURN”. În loc de a fi utilizate patru instrucţiuni “NOP” pentru crearea o întârziere de 4 cicluri, acelaşi rezultat a fost obţinut prin adăugarea unei singure instrucţiuni “CALL”.
www.microchip.com

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre