QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Lucrare de licenta inginerie calculatoare - proiectarea si realizareaunui ceas digital - partea software



FUNDATIA PENTRU CULTURA SI INVATAMANT "IOAN SLAVICI" TIMISOARA

UNIVERSITATEA "IOAN SLAVICI" TIMISOARA

FACULTATEA DE INGINERIE

SPECIALIZAREA: INGINERIE CALCULATOARE










LUCRARE DE LICENTA




TEMA: PROIECTAREA SI REALIZAREAUNUI CEAS DIGITAL - PARTEA SOFTWARE








Introducere - prezentarea proiectului, oportunitate, structura proiectului


Din cele mai vechi timpuri ceasurile au avut menirea de a cuantiza trecerea timpului si au ajuns obiecte indispensabile omului modern. La inceput ceasurile se bazau pe pozitia relativa a soarelui in jurul pamantului apoi, datorita evolutiei tehnologice, au aparut ceasurile mecanice, cu pendul si apoi cu arc, ce ocupa si in prezent o parte importanta a pietei.

In momentul aparitiei ceasurilor digitale, acestea pareau ne-fiabile si destul de robuste, depinzand de o sursa de alimentare externa. In timp insa impreuna cu dezvoltarea ledurilor si a afisajelor cu cristale lichide, ceasurile digitale au evoluat exponential.

In prezent ceasurile digitale au depasit limita "orei exacte", avand posibilitatea de a transmite si alte informatii utile. In functie de nevoile utilizatorului, aceste informatii pot fi de tipul : afisarea de temperatura, tensiune arteriala, text cu scop informativ respectiv alarmarea sau audierea emisiunilor radio favorite.

Actualmente se intensifica si utilizarea afisajelor cu leduri in publicitate, deoarece acestea au un impact mare asupra publicului, datorita intensitatii, culorilor si a posibilitatilor de afisare a informatiei si imaginilor. Spre deosebire de ceasurile analogice, cele digitale sunt foarte usor de intretinut, ne-avand componente mecanice in miscare.


In acest proiect se va realiza un ceas digital ce va implementa urmatoarele posibilitati de afisare :

  • afisare dinamica, pentru reducerea consumului
  • afisaj matricial, pentru reprezentarea de cifre si litere
  • afisare secventiala, pentru afisarea orei exacte, temperaturii si a mesajelor text cu acelasi montaj

Dispozitivul este bazat pe microcontrolerul PIC16F877A produs de firma Microchip. Acesta achizitioneaza temperatura cu ajutorul senzorului de temperatura TC1047A, produs de aceeasi firma, informatia temporala de la circuitul specializat DS12887 produs de firma Dallas si comanda o matrice de afisare, formata din 7x30 Leduri.


Proiectul poate avea o mare oportunitate comerciala, putand fi transformat in ceas stradal cu afisare secventiala de ora exacta, temperatura si slogan publicitar la un cost redus si impact considerabil pentru public. De asemenea, bazat pe acest proiect, se poate dezvolta versiunea grafica, ce ar avea si posibilitatea afisarii imaginilor color cu scop publicitar sau delectativ.


Capitolul 2 trateaza functiile ce trebuie indeplinite de catre un ceas digital cu afisare secventiala de temperatura, timp si mesaje sub forma de text. Tot aici se vor explica si principiile ce au stat la baza dezvoltarii afisajelor matriciale dinamice. De asemenea sunt avute in vedere prezentarea schemelor bloc si descrierea amanuntita a blocurilor componente.

In capitolu 3, se va descrie microcontrolerul PIC16F877A. De asemenea se va descrie si tehnica programarii microcontrolerului cu ajutorul programatorului JDM si a programului IC-Prog .

Urmatoarul capitol este dedicat descrierii programului ce ruleaza pe acesta. Ultimul capitol contine concluziile acestui proiect si cateva idei referitoare la posibilitatile de dezvoltare a ceasurilor digitale si afisajelor matriciale.


Structura si functiile indeplinite


Principala functie pe care trebuie sa o indeplineasca un ceas digital este acela de a afisa ora exacta in ore si minute. Deoarece in ultima perioada clientul doreste o diversificare a informatiei afisate, a aparut si nevoia ceasurilor digitale care in afara orei exacte, sa afiseze si alte date ca de exemplu : ziua, luna, anul, temperatura, un mesaj publicitar, etc.

Principalele functii realizate de sistem sunt urmatoarele :

Afisare temperatura

Afisare timp: ora si minute

Afisare data: ziua si luna

Afisare text - Text static - de exemplu numele firmei

- Text dinamic, ce se deplaseaza de la stanga la dreapta - de exemplu sloganul unei campanii publicitare


Afisarea este una matriceala cu 7 linii si 30 de coloane. La intersectia fiecarei linii cu o coloana este asezat un led, cu anodul pe linie si catodul pe coloana. In total sunt 210 de leduri, comandate separat, in grupuri de cate 7, pe coloane. Pe o coloana se poate activa un led prin aplicarea unei tensiuni pozitive, pe linia ledului, fata de coloana aferenta.



Figura 2.1. Asezarea ledurilor in matrice


Deoarece la un moment dat nu este activa decat o singura coloana, se pune problema afisarii unui caracter, care este format din mai multe coloane dispuse ca in figura de mai jos.


Figura 2.2. Caracterul "A" afisat pe 7x5 pixeli


Afisarea unui caracter este posibila deoarece ochiul uman percepe variatia unei surse de lumina, cum este ledul, doar la o frecventa mai mica de 20-30 Hz. Aceasta face posibila crearea impresiei de continuitate a caracterului afisat, cu conditia ca liniile si coloanele ce formeaza caracterul, sa fie reimprospatate cu o frecventa mai mare de 20-30 Hz. Acest lucru este important de retinut in momentul realizarii afisajelor cu multe coloane, unde trebuie tinut cont si de timpul de baleiere a coloanelor, de la un capat la celalalt, pentru a evita aparitia efectului de palpaire a textului.

Pentru obtine o luminozitate acceptabila a ledurilor in conditii de baleiere se aplica doua strategii. Prima este aceea de a alimenta ledul cu o tensiune nominala pe o durata relativ mare de timp. Aceasta strategie se aplica afisajelor cu coloane putine, deoarece timpul de baleiere a afisajului creste foarte mult, aparand fenomenul de palpaire. Al doilea procedeu este acela de a lucra cu o tensiune mai mare decat cea nominala, astfel obtinand aceeasi luminozitate ca in cazul precedent, pe o durata mai scurta de timp ca si in cazul precedent. Acest procedeu este aplicat afisajelor cu multe coloane. Dezavantajul acestei metode este durata de viata mai mica a ledurilor, fiind obligatorie utilizarea ledurilor de calitate. In proiect se utilizeaza combinat ambele metode, pentru a se realiza un produs fiabil cu costuri minime.

Functionarea blocului de afisare este descrisa in amanunt in Capitolul 4.2.


Temperatura este masurata cu ajutorul senzorului TC1047A. Acesta este un senzor de temperatura cu iesire in tensiune liniar variabila cu temperatura.TC1047A poate masura intr-o gama de temperatura cuprinsa intre -40°C si +125°C cu o cuanta de 10mV/°C. Tensiunea de iesire a senzorului va fi convertita de CAN-ul microcontrolerului PIC16F877A si prelucrata, pentru ca in final sa poata fi afisata.


Ora exacta va fi preluata de la modulul RTC (Real Time Clock), implementat cu ajutorul circuitului DS12887. Acest circuit calculeaza si reda ora si data calendaristica exacta, pe baza unui ceas quartz-pilotat, si are un acumulator incorporat. Acest subsistem inlocuieste un numar de 16 componente discrete intr-o aplicatie normala.


La nivelul microcontrolerului se vor calcula valorile binare necesare pentru afisarea orei si minutelor, dupa care acestea vor fi afisate, secvential cu temperatura, data si textul publicitar. Setarea datei si a orei exacte se face prin intermediul meniului si a butoanelor dedicate.




2.1. Schema bloc


Schema bloc principala contine principalele elemente ale ceasului digital, impreuna cu descrierea legaturilor dintre acestea.










Figura 2.1. Schema bloc principala



2.2. Structura blocului de comanda si control


Schema blocului de comanda contine subsistemele:

blocul de a temperaturii, realizeaza conversie analog-numerica

blocul de achizitie a timpului, furnizeaza datele necesare afisarii datei si orei exacte

interfata setare timp, interfata cu utilizatorul, permite setarea orei, datei si anului, prin intermediul a doua butoane

memoriile de date si program furnizeaza bibliotecile de date a caracterelor de afisat si spatiu necesar programului

blocul de iesire afisaj realizeaza compatibilitatea logica intre sistemul de comanda si blocul de afisare


Cablajele si schema de implementare se gasesc in anexa.





Figura 2.2. Schema bloc comanda


2.3. Structura blocului de control al afisajului


Acesta contine:

blocul de interfata

blocul de control al linilor si coloanelor, ce realizeaza logica necesara afisarii datelor pe matricea de leduri

comanda de putere a liniilor, contine circuitele de putere ce activeaza cele 7 linii ale matricei de leduri

comanda de putere a coloanelor, contine circuitele de putere necesare celor 30 de coloane ale matricei de leduri

matricea de leduri contine 210, leduri grupate in 6 module a cate 35 de leduri

alimentarea afisajului






Figura 2.3. Schema bloc control


Cablajele si schema de implementare se gasesc in anexa.



2.4. Solutii de implementare si motivarea lor


Implementarea proiectului se poate realiza cu orice microcontroler sau procesor ce are posibilitatea de conversie analog-numerica si respectiv un numar mare de linii de iesire.

Tinand cont de necesitatea unei memorii program si date, a unui convertor CAN si un sistem de contorizare a orei exacte, am ales utilizarea urmatoarelor circuitelor specializate:

- TC1047A pentru senzor de temperatura

PIC16F877A pentru CAN si Porturi iesire

DS12887 pentru RTC


Blocul de comanda este bazat pe microcontrolerul PIC16F877A produs de firma Microchip. Acesta are avantajul unui numar mare de linii de iesire, memorie program si date incorporata, convertor analog-numeric pe 10 biti incorporat. De asemenea memoria program poate fi usor incarcata cu un programator JDM prin standardul ICSP (In Circuit Serial Programing). Memoria program este de tip FLASH, ceea ce face posibila stergerea si inlocuirea rapida a programului. Descrierea microcontrolerului PIC16F877A este detailata in Capitolele 4 si 5.2.


Blocul de Achizitie al temperaturii este compus din senzorul de temperatura TC1047A si convertorul analog-numeric pe 10 biti al microcontrolerului. Acest bloc realizeaza conversia temperaturii in informatie afisabila.


Interfata de programare consta intr-o consola cu doua butoane de la care utilizatorul poate seta ora exacta, in orice moment al rularii aplicatiei. Primul buton serveste la selectarea meniului, care poate fi: setare minute, setare ore, setare zi, luna sau an, iar al doilea buton este folosit la modificarea valorilor acestor Setari prin incrementarea valorii respective.


Am ales o afisare matriceala pentru a avea posibilitatea reprezentarii atat a numerelor corespunzatoare informatiei de timp si temperatura cat si a caracterelor ASCII necesare afisarii textului.

Pentru blocul de afisare se pot folosi atat leduri discrete cat si matricei de leduri, de 7x5 leduri, special realizate pentru astfel de aplicatii Acestea din urma sunt mult mai usor integrabile, avand deja interconectate liniile si coloanele in aceeasi capsula cu ledurile. In acest proiect s-au utilizat 6 astfel de module, fiecare a cate 35 de leduri.

In proiect s-a utilizat matricea de leduri TA07-11GWA, produsa de firma Kingbright.


Figura 2.3.1. Afisaje leduri



Figura 2.3.2. Matricea TA07-11GWA


Blocul de comanda a liniilor este unul foarte simplu, bazat doar pe tranzistoare BC ce amplifica impulsurile de comanda primite de la microcontroler. In acest bloc se realizeaza si limitarea in curent a diodelor, prin inserierea in colector a unei rezistente.

Pentru implementare s-au utilizat 7 tranzistoare NPN din seria BC - BC337.


Blocul de comanda al coloanelor este ceva mai complex, deoarece acesta va trebui sa puna in conductie 7 leduri, in loc de un led in cazul anterior. Din aceasta cauza am utilizat drivere de putere din familia ULN. Aceste drivere au intrari compatibile TTL si CMOS 5V, fiind posibila comanda directa de la blocul de comanda.

In momentul proiectarii a aparut problema lipsei de linii de comanda la nivelul microcontrolerului. In cazul legarii directe a afisajului de procesor, as fi avut nevoie de : 7 iesiri pentru linii si 30 iesiri pentru coloane. Stiind ca doar o coloana va fi activata la un moment dat, se pot substitui cele 30 de iesiri cu registri de deplasare conectati in serie. Aceasta metoda reduce numarul de iesiri la doar 4, indiferent de numarul coloanelor. La inceputul baleierii afisajului se incarca un singur registru cu valoarea 1 logic dupa care se aplica un numar de impulsuri de tact, echivalente cu numarul de coloane. Numarul de coloane se poate contoriza atat prin programare cat si prin urmarirea valorii ultimului bistabil din sirul de registre. Iesirile registrelor sunt direct legate la driver-ele de putere. In acest bloc nu exista limitatoare de curent.

Pentru implementarea registrelor de deplasare am utilizat registrele cu intrare seriala si iesire paralela - 74HC164, iar pentru driver-e integratul monolitic cu 8 tranzistoare Dalington cu emitor comun - ULN2803.

Schema electrica si cablajul blocului de afisare se gasesc in anexa.


Interfata dintre blocul de control al afisajului si blocul de comanda, este necesara in cazul in care se doreste conectarea la distanta a afisajului de catre electronica de comanda deoarece registrele de deplasare nu au porti cu histereza pentru eliminarea perturbatiilor.

Pentru implementare se utilizeaza porti cu Trigger-Smith, implementate in serie cu cele 3 intrari ale registrelor de deplasare. Circuitul potrivit pentru acest scop este - 74HC14 sau orice alt buffer cu histereza compatibil CMOS 5V.


Blocul de ora exacta este format dintr-un singur circuit specializat. Circuitul integrat DS12887, initial dezvoltat pentru a fi interconectat in sisteme cu magistrala Intel sau Motorola, se poate utiliza si in aplicatii diverse cum este si acest proiect. Un mare avantaj al folosirii acestui circuit este ca se economisesc un numar mare de componente discrete ce ar trebui incluse in montaj pentru realizarea unui temporizator de precizie.




Figura 2.3.3. DS12887, DS1287


DS12887 are incapsulat un quartz de 32768Hz, circuite de compensare a variatiilor de temperatura si un acumulator. Acesta din urma asigura o fiabilitate crescuta a ceasului, deoarece in cazul intreruperii tensiunii de alimentare, ora exacta se va mentine, afisandu-se in momentul revenirii tensiunii de alimentare.

Comunicarea cu circuitul RTC (Real Time Clock) se realizeaza pe o magistrala paralela de 8 biti si 5 linii de control CS (Circuit Select), AS (Address Strobe), DS (Data Strobe), R/W (Read/Write) si RESET. Exista si posibilitatea utilizarii unei linii de intrerupere IRQ ce se utilizeaza pentru realizarea unei intreruperi periodice presetabile. Nu este utilizata in acest proiect. Structura interna si functionarea acestui circuit sunt descrise in amanunt in Capitolul 5.2.


Blocul de alimentare este astfel proiectat incat sa asigure o tensiune de alimentare continua de 5V pentru electronica de comanda si cea de alimentare a afisajului. De asemenea s-a incercat simplificarea cat mai mare a acestui bloc. Se utilizeaza o sursa simpla cu transformator, punte redresoare, capacitate filtraj si regulator serie. Deoarece afisajul consuma maxim 350 mA, in situatia in care toate ledurile sunt aprinse, regulatorul a fost ales din seria L78XX.









3. Microcontrolerul PIC16F877A



Circuitul integrat PIC16F877A face parte din generatia de procesoare 16FXXX, fiind un microcontroler RISC produs de firma "Microchip".

Dupa intrarea pe piata, Microchip a inceputo vasta campanie publicitara prin acordarea circuitelor mostra utilizatorilor interesati de componente electronice de ultima ora. Deoarece raportul cost / performanta a acestor produse este unul foarte bun comparativ cu vechii producatori, microcontrolerele PIC au dobandit in prezent un mare segment al pietei.


PIC16F877A are urmatoarele caracteristici :

un nucleu pe 8 biti

memorie program incorporata de 8K octeti, memorie de tip FLASH

memorie date de 368 Bytes SRAM

memorie suplimentara date de 256 Bytes EEPROM

contine un CAN pe 10 biti cu 8 canale de intrare multiplexate

doua iesiri PWM

doua comparatoare de tensiune

32 de instructiuni

Din punct de vedere al posibilitatilor de comunicare cu alte periferice si circuite are implementat standardele de comunicare :

SPI

I2C

USART

Port paralel cu linii de control RD,WR si CS

PIC16F877A are 33 de ce pot fii programate ca linii intrare, analogica sau digitala, sau iesire digitala.

Procesorul PIC16F877A are o structura interna conform arhitecturii Harvard, cu magistrale separate pentru accesul la memoriile interne de program si, respectiv, de date. Din aceasta cauza el dispune de o mare flexibilitate a aplicatiilor, putand transfera informatie din memoria program in cea de date. De asemenea este un procesor rapid, avand divizorul intern doar 4, si poate functiona pana la o frecventa de 20MHz, rezultand un timp de 0,2us/ciclu masina.







Structura interna a procesorului este prezentata in figura de mai jos:



Figura 3.1. Structura bloc a PIC16F877


3.1. Organizarea memoriei program


Microcontrolerul PIC16F87XA are un contor de program de 13 biti, ce poate adresa o memorie program de 8K cuvinte a cate 14 biti. Memoria program, de 8K este de tip FLASH.

Adresa de reset a memoriei program este 00h iar cea de intrerupere 04h.


Figura 3.1.1. Organizarea memoriei program PIC16F877


3.2. Organizarea memoriei de date


Memoria de date este partitionata in mai multe bancuri de memorie, continand registre de uz general. Cu ajutorul bitilor RP1, din registru STATUS bit 6, si RP0, STATUS bit 6, se selecteaza bancul curent.



Figura 3.2.1. Setarea bancurilor


Fiecare banc cuprinde 128 bytes. Locatiile de memorie din zona inferioara bancurilor este rezervata registrilor cu functii speciale.


3.3. Modulul convertorului analog-numeric


Convertorul analog numeric are 8 canale de intrare multiplexate. Conversia semnalului analogic este executata de un convertor pe 10 biti. Convertorul are intrarile tensiunilor de referinta, Vref+ si Vref-, setabile soft (fiind combinatii intre tensiunile de alimentare Vdd, Vss si tensiunile de pe pinii RA2 si RA3).

CAN-ul este astfel proiectat incat sa poata functiona si in modul SLEEP, mod in care majoritatea functiilor microcontrolerului sunt inhibate. Pentru a functiona in modul SLEEP, tactul CAN-lui trebuie adus de la oscilatorul RC intern.

Acest modul are 4 registri principali:

  • ADRESH - partea superioara a rezultatului conversiei
  • ADRESL - partea inferioara a rezultatului conversiei
  • ADCON0 - primul registru control
  • ADCON1 - al doilea registru control

Cu ajutorul ultimilor doi registri se configureaza functionarea convertorului.


Registrul ADCON0:

ADCS1, ADCS0 : impreuna cu bitul ADCS2 din ADCON1, seteaza frecventa tactului al modulului de conversie.



Figura 3.3.1. Setare tact CAN


CHS2, CHS1, CHS0 : biti de selectare a canalului de intrare


000 = Canal 0 (AN0)

001 = Canal 1 (AN1)

010 = Canal 2 (AN2)

011 = Canal 3 (AN3)

100 = Canal 4 (AN4)

101 = Canal 5 (AN5)

110 = Canal 6 (AN6)

111 = Canal 7 (AN7)


Figura 3.3.2. Setare canal CAN


GO/DONE :bitul de stare a conversiei. Daca bitul ADON = 1 atunci daca GO/DONE = 1 conversia analog-numerica este in desfasurare, GO/DONE = 0 conversia sa terminat.

ADON : bit de control al alimentarii modulului CAN.


Registrul ADCON0:


ADFM : seteaza formatul rezultatului conversiei. Daca este 1 registrul ADRSH va contine doar ultimi doi cel mai semnificativi biti ai conversiei. Daca este 0 atunci registrul ADRESL va contine pe locatiile superioare ultimi doi cei mai nesemnificativi biti.


ADCS2 : seteaza frecventa tactului al modulului de conversie.


PCFG3, PCFG2, PCFG1, PCGF0 : cei 4 biti seteaza numarul canalelor analogice de intrare si sursa tensiunilor de referinta Vref+ si Vref-

Figura 3.3.2. Configurare porturi CAN


Canalul analogic de intrare respectiv tensiunile de referinta, se vor conecta la pinii exterior asemanator figurii urmatoare.


Figura 3.2.1. Structura selectorului de canal


3.4. Modulul comparator de tensiune


Modulul comparator contine doua comparatoare analogice. Intrarile comparatoarelor sunt multiplexate cu porturile I/O, pini RA0 la RA3, iar iesirile cu pinii RA4 si RA5. De asemenea sursa de referinta interna, poate fi setata ca intrare a comparatoarelor.

Registrul CMCON controleaza multiplexarea intrarilor si iesirile.




Figura 3.4.1. Comparatoare - Moduri de functionare


Registrul CMCON:


C2OUT : setare pentru iesirea comparatorului 2, cand C2INV = 0, iesirea comparatorului trece pe 1 logic in momentul C2 Vin+ > C2 Vin-, C2INV = 1, iesirea trece pe 1 cand C2 Vin+ < C2 Vin-.


C1OUT : setare pentru iesirea comparatorului 1, cand C1INV = 0, iesirea comparatorului trece pe 1 logic in momentul C1 Vin+ > C1 Vin-, C1INV = 1, iesirea trece pe 1 cand C1 Vin+ < C1 Vin-.


C2INV : setare pentru inversarea logica a iesirii comparatorului 2, daca este 1 logic atunci iesirea este negata


C1INV : setare pentru inversarea logica a iesirii comparatorului 1, daca este 1 logic atunci iesirea este negata


CIS, CM2, CM1, CM0 : determina modul de conectare a comparatoarelor cu pinii microcontrolerului, conform figurii 4.3.3.


Iesirile comparatoarelor pot fi conectate la logica intreruperilor, ce face posibila sesizarea modificari rezultatelor de iesire a comparatoarelor. Aceasta se realizeaza prin registri INTCON, PIR2 si PIE2.


3.5. Modulul tensiune de referinta interna


Modulul tensiune de referinta interna este format dintr-o retea de 16 rezistente ce pot fi activate cu ajutorul registrului CVRCON.



Figura 3.5.1. Blocul referinta de tensiune


Registrul CVRCON:


CVREN : bit de validare al modulului de tensiune de referinta intern. Daca este setat pe 1 logic acest bloc va primi alimentat.


CVROE : valideaza iesirea acestui modul pe pinul RA2 al microcontrolerului in momentul in care este setat pe 1 logic.


CVRR : setarea domeniului generatorului de tensiune de referinta. Daca este pe 1 logic domeniul va fi cuprins intre 0 si 0,75Vdd, iar in caz contrar, intre 0,25 si 0,75Vdd.


CVR3, CVR2, CVR1, CVR0 : selecteaza in 16 trepte divizorul de tensiune al sursei de referinta, conform figurii 4.5.1. sau prin aplicarea formulelor :

CVRR = 1 : CVREF = (VR<3:0>/ 24) *(CVRSRC)

CVRR = 0 : CVREF = 1/4 *(CVRSRC) + (VR3:VR0/ 32) *(CVRSRC)


3.6. Modulul PWM


Modulul PWM poate genera un semnal PWM cu o rezolutie de 10 biti, iesirea fiind numita CCP1. Modulul este construit in jurul numaratorului TMR2 de 10 biti, 8 biti si 2 biti ai prescalarului.

Cu acest modul se poate utiliza la implementarea surselor in comutatie sau comanda motoarelor in montajele de variatie a turatiei.


Figura 3.6.1. Blocul PWM


Perioada semnalului PWM se poate calcula cu formula :

PWM period = [(PR2) + 1] *4 * TOSC *(valoarea prescalarului TMR2)


Factorul de umplere al semnalului PWM se poate calcula cu formula :

FU_PWM =(CCPR1L:CCP1CON<5:4>) *TOSC * (valoarea prescalarului TMR2)


Rezolutia semnalului PWM pentru o frecventa stabilita se calculeaza cu formula :

3.7. Modulele temporizatoare


3.7.1. Modulul Timer0 / WDT


Modulul Timer0 are urmatoarele proprietati :

  • Numarator pe 8 biti
  • Citibil si inscriptibil
  • Prescalar pe 8 biti
  • Posibilitatea selectiei tactului intern sau extern
  • Cerere de intrerupere la depasire a valorii FFh si 00h
  • Selectarea frontului activ pentru tact extern

Tactul intern este echivalent cu Fosc/4. Tactul extern se introduce prin intermediul pinului RC4 si nu este divizat intern.



Figura 3.7.1.1. Blocul Timer0/WDT



Prescalarul si numaratorul sunt impartite si cu modulul WDT, ce realizeaza resetarea microcontrolerului in cazul unei erori de program. Acesta activeaza intreruperea WDT-time out.



3.7.2. Modulul Timer1


Modulul Timer1 difera de Timer0, fiind format in jurul unui numarator pe 16 biti, realizat prin concatenarea a doua numaratoare pe 8 biti.


Figura 3.7.2.1. Blocul Timer1


De asemenea acesta poate fi folosit ca numarator a tactului extern, care se poate aduce de la un al doilea oscilator prin intermediul pinilor RC0 si RC1.

Aceasta metoda se poate utiliza ca o a doua varianta pentru achizitia timpului, montandu-se un quartz de 32678Hz, si divizand cu prescalarul pe doi biti T1CKPS1 si T1CKPS0.


3.7.3. Modulul Timer2


Acest modul se foloseste un numarator pe 8 biti, un prescalar pe 2 biti si un postscalar pe 4 biti.



Figura 3.7.3.1. Blocul Timer2


TIMER2 se foloseste si in cadrul modulatorului PWM. Cele doua moduri nu pot functiona in acelasi timp. Functionarea in mod de numarator este stabilita de bitul TMR2ON al registrului T2CON.


3.8. Logica intreruperi


Familia de microcontrolere PIC16F87XA are 15 surse de intrerupere. In registrul INTCON se retin fanioanele individuale ale intreruperilor.



Figura 3.8.1. Blocul intreruperi


Intre sursele de intrerupere se numara atat intreruperile interne ale numaratoarelor, descrise in alineatele anterioare, cat si intreruperile externe ale portului B.

Intreruperea RB0/INT poate fi setata activa pe frontul crescator sau descrescator al semnalului de intrare, avand la intrare o poarta Trigger Smitt si posibilitatea activarii unui pull up intern de 10K.

Pinii RB4, RB5, RB6, RB7 pot activa intreruperea RBIF in momentul schimbarii valori logice la intrarea acestora. Intreruperea se activeaza atat in momentul trecerii de pe 0 pe 1 logic a intrarii cat si de pe 1 pe 0, fiind foarte utila pentru conectarea a 4 taste distincte sau a unei matricei de taste.



4. Programarea microcontrolerului PIC16F877A


4.1. Descrierea programatorului universal ICSP


Programatorul utilizat se bazeaza pe structura JDM. Acest tip de programator este unul foarte simplu de realizat, avand putine piese si conectandu-se la portul serial al calculatorului. De asemenea acesta nu are nevoie de o sursa anexa de alimentare in timpul programarii, tensiunile necesare obtinandu-se de la portul serial.



Figura 4.1. Programatorul JDM


Acest tip de programator poate programa un numar foarte mare de microcontrolere, memorii si circuite specializate, folosindu-se de standardul serial de programare ICSP (In Circuit Serial Programing). Acest tip de programare are marele avantaj ca poate fi utilizat si in montajele in care procesorul este deja inclus, programarea facandu-se in circuit.

Programarea ICSP se realizeaza, din punct de vedere hardware, cu ajutorul a trei linii de comanda: SDA (Serial Data), SCL (Serial Clock) si Vpp (tensiunea de programare in jurul a 14V). Pentru verificarea datelor inscrise in microcontroler se utilizeaza o tensiune de alimentare de 5V.


Programatorul este realizat pe montaj, astfel incat utilizatorul sa poata rula aplicatia inscris pe microcontroler direct de pe acelasi montaj. Acest lucru usureaza foarte mult munca utilizatorului, acesta nu mai trebuie sa mute circuitul programat din programator in montajul cu aplicatia propriu zisa. Cu ajutorul unei magistrale de 34 de linii, pinii integratului sunt conectati la montajul aplicatiei. Utilizatorul va comuta starea de programare respectiv rulare a aplicatiei de la un comutator.



Figura 4.1.1. Programatorul universal ICSP


Ca aplicatia sa se poata rula, aceasta implica existenta unor piese pe montajul programatorului.

Alimentarea aplicatiei se face din exterior, de aceasta data, cu o tensiune stabilizata de 5V DC. Valoarea tensiunii poate fi modificata in functie de aplicatie, ceea ce inseamna ca se pot rula si aplicatii de joasa tensiune de la 2V la 5,5V.

Furnizarea impulsurilor de tact este asigurata de quartz, dimensionat in functie de aplicatie. Desi microcontrolerele PIC suporta si circuite oscilante RC si rezonatoare, pe programator exista numai posibilitatea implantarii oscilatoarelor cu quartz. Frecventa de oscilare poate varia de la zeci de KHz la zeci de MHz (in functie de aplicatie).

Programatorul este unul proiectat astfel incat sa poata inscrie mai multe tipuri de microcontrolere din familia PIC16FXX, PIC16CXX, PIC16FXXX, PIC18FXX, PIC18FXXX si cu posibilitatea conectarii liniilor necesare programarii prin intermediul unui conector cu 2x5 pini.









Figura 4.1.2. Schema electrica a programatorului universal ICSP

Cablul ce conecteaza programatorul de portul RS232 al calculatorului este un cablu ecranat, pentru minimizarea erorilor de programare determinate de factorii perturbatori si pentru a putea mari viteza inscrieri datelor in memoria program.


Figura4.1.3. Schema electrica a cablului serial


Cu ajutorul calaretilor, se poate seta tipul microcontrolerului de programat. Acestea sunt situati in partea dreapta, intre soclu si conectorul de magistrala. Calaretii sunt setati pe doua pozitii distincte, intre pinii 1-2 sau 2-3. Acestea stabilesc atat pozitia pinilor de programare cat si interconectarea iesirilor microcontrolerului la magistrala I/O. Pentru setarea corespunzatoare a circuitului se utilizeaza tabelul de mai jos :


JUMPERI

16FXX,18FXX   18 pini

16FXXX, 18FXXX 28 pini

16FXXX, 18FXXX 40 pini

JP1




JP2




JP3




JP4




JP5




JP6




JP7




JP8




JP9




JP10




JP11




JP12




JP13




JP14




JP15




JP16




JP17




JP18




JP19





Figura 4.1.4. Setari programator


Montajul este adus in starea de programare prin mutarea comutatorului, din partea stanga mijloc, pe pozitia "PRG". In acest moment este posibila programarea microcontrolerului de la calculator, cu ajutorul programului descris in capitolul urmator. In pozitia "PRG", microcontrolerul este deconectat de la sursa externa de alimentare. De asemenea pinii RB7, RB6, Vdd si Vss ai circuitului sunt deconectati de la magistrala.


Figura 4.1.5. Amplasarea pieselor programatorului


Prin intermediul magistralei I/O, microcontrolerul poate comunica cu montajul aplicatiei. Magistrala este formata din doua randuri a cate 17 pini, sub forma unui conector. Pentru legatura cu montajul se poate utiliza o magistrala de 34 de linii, ce se poate gasi in orice calculator intre unitatea disc flexibil de 1.44M si placa de baza. In cazul achizitiei de tensiuni analogice, legatura cu cablu magistrala nu este intotdeauna convenabila deoarece semnalul analogic poate fi perturbat de celelalte linii.

Programatorul poate fi adus in starea de aplicatie, in care aplicatia poate rula, prin mutarea comutatorului pe pozitia "RUN". In acest moment pinii RB7 si RB6 ai microcontrolerului se regasesc pe magistrala aplicatiei.

In timpul programarii, pinul OSCin al microcontrolerului este fortat la masa, astfel incat procesorul sa nu poata genera tactul intern. In momentul rularii OSCin este lasat sa oscileze liber.

In cazul rularii, sursa externa de alimentare este conectata la microcontroler, acesta avand posibilitatea de rulare. In parte din dreapta sus a montajului se gaseste comutatorul de conectare al alimentarii externe la montaj. In cazul prezentei unei tensiuni externe de alimentare, ledul verde de langa soclu cu maneta, va semnala prezenta acestuia.

Conectarea la portul RS232 al calculatorului, se va semnala prin aprinderea ledului galben de pe programator. In cazul in care acesta nu se aprinde este posibil ca mufa sa nu fie corespunzator conectata la programator sau setarile programului IC-Prog / PonyProg sa nu fie corespunzatoare.

Programarea microcontrolerului este semnalata de catre ledurile : rosu si portocaliu. Ledul rosu semnaleaza prezenta tensiunii Vpp de programare la pinii microcontrolerului si cel portocaliu, transmiterea datelor spre circuit. In cazul in care aceste leduri sunt aprinse si pe perioada in care nu decurge programarea, inseamna ca s-au gresit setarile microcontrolerului. Palpairea intermitenta a acestor leduri in timpul programarii semnifica buna functionare a programatorului.

Microcontrolerul are posibilitatea de a fi resetat prin butonul de reset, in timpul rularii aplicatiei. Acesta este asezat in partea din stanga jos a programatorului.

Pini microcontrolerului vor aparea, pe magistrala I/O, in functie de setarile facute in felul urmator:


Nume port

16FXX,18FXX   18 pini

16FXXX, 18FXXX 28 pini

16FXXX, 18FXXX 40 pini

RA0




RA1




RA2




RA3




RA4




RA5




RB0




RB1




RB2




RB3




RB4




RB5




RB6




RB7




RC0




RC1




RC2




RC3




RC4




RC5




RC6




RC7




RD0




RD1




RD2




RD3




RD4




RD5




RD6




RD7




RE0




RE1




RE2





Figura 4.1.6. Pinout-ul magistralei I/O


Numerotarea pinilor a fost facuta incepand cu pinul unu, partea stanga sus a magistralei I/O, vazuta de sus. O descriere detailata a configuratiei pinilor si setarilor se poate gasi in anexa.


CON2

Pin 1

Pin 34

Pin 2

Pin 33

Pin 3

Pin 32

Pin 4

Pin 31

Pin 5

Pin 30

Pin 6

Pin 29

Pin 7

Pin 28

Pin 8

Pin 27

Pin 9

Pin 26

Pin 10

Pin 25

Pin 11

Pin 24

Pin 12

Pin 23

Pin 13

Pin 22

Pin 14

Pin 21

Pin 15

Pin 20

Pin 16

Pin 19

Pin 17

Pin 18


Figura 4.1.6. Numerotarea pinilor magistralei I/O


Pinul 1 nu este conectat. Acesta deserveste doar rolul de reper in momentul conectarii magistralei, pentru a nu se conecta in mod gresit la aplicatie.

Circuitul se introduce sau se scoate din soclu numai cand placa nu se afla sub tensiune si programul utilizat este dezactivat. Circuitul nu se introduce sau extrage in faza de citire sau de programare.

Programarea microcontrolerelor si memoriilor se face cu ajutorul programului IC-Prog sau PonyProg.








4.2. Descrierea programului IC-Prog


Programul IC-Prog scris de catre Bonny Gijzen, este special realizat pentru programarea microcontrolerelor si memoriilor produse de Microchip, Philips si Scenix. Programul este usor de utilizat, avand o interfata grafica prietenoasa, cu setari usor accesibile si posibilitatea de editare a programului in limbaj de asamblare.


Figura 4.2.1. Interfata IC-Prog


Programul ruleaza sub sistemele de operare Windows98/2000/NT/XP, pentru Windows2000 si XP avand nevoie de drivere suplimentare (ce se pot gasi pe internet, pe pagina oficiala IC-Prog).

La instalare, si apoi in timpul rularii, se seteaza adresa portului COM sau LTP al calculatorului pe care este conectat programatorul. Programatoarele ce pot fi utilizate cu acest soft sunt diverse: JDM, Conquest, TAFE, TAIT Serial, FUN-Card, TAIT Paralel, ProPic 2, SCHAER, STK200, AN589, WILLEPRO, Fluffy, DL2TM, ER1400, etc.

Acestea difera intre ele prin modul de comunicare cu calculatorul, serial sau paralel.

Atentie la setarea de "I/O delay" ce introduce o intarziere intre bitii transmisii la portul serial. Deoarece se doreste o intarziere cat mai mica, este preferat utilizarea unui cablu coaxial la lungimi mai mari de 1 metru.

De asemenea in acest meniu se pot alege si modul de comunicare pentru diversele linii utilizate pe programator. Astfel se poate alege modul normal sau negat pentru liniile de SerialData, SerialClock, Mclr si Vcc. Acestea functioneaza cu logica normala pentru programatorul JDM. Interfata se va alege "Direct I/O". Aceste Setari sunt realizate automat de catre program in momentul instalarii programatorului JDM, modificarile sunt necesare doar in cazul schimbarii montajului.


Figura 4.2.2. Setare IC-Prog


Cel mai des utilizat programator dintre acestea este JDM Programer, deoarece contine putine piese, cost redus si nu are nevoie de o sursa de alimentare externa.

In cazul in care se doreste o verificare programatorului, se poate accesa meniul SETTINGS, sub meniul HARDWARE CHECK.



Figura 4.2.3. Meniul Hardware Check


Acest meniu da posibilitatea utilizatorului de a verifica corectitudinea conectari liniilor SerialData, Mclr si Vcc, prin intermediul ledurilor de pe montaj.

Selectarea circuitului de programat se poate face cu ajutorul butonului special aflat pe meniul principal. Aceeasi operatiune se poate derula si prin meniul SETTINGS - DEVICE unde apare o lista de componente clasate in functie de tipuri circuitelor.



Figura 4.2.4. Alegere circuit


Principiul de functionare al buffer-ului:


Programele utilizate folosesc un 'buffer', adica o memorie intermediara intre fisierele de pe disk si circuitele programabile, tabloul hexazecimal poate fi vizualizat pe ecran. Pentru a programa un circuit folosind date continute intr-un fisier, va trebui mai intai sa incarcati continutul fisierului in buffer cu ajutorul comenzii 'Open' din meniul 'File', apoi trebuie sa transferati continutul din buffer spre circuit cu ajutorul comenzii 'Write' din meniul 'Device' sau 'Program All' din meniul 'Command' (variaza in functie de programul utilizat). Pentru a salva datele continute de catre un circuit pe intr-un fisier, va trebui mai intai sa cititi datele continute de catre circuit cu ajutorul comenzii 'Read' din meniul 'Device' sau 'Read All' din meniul 'Command', apoi sa salvati continutul buffer-ului intr-un fisier cu ajutorul comenzii 'Save As' din meniul 'File'.


Este posibila modificarea buffer-ului pe ecran cu ajutorul unui dublu-clic pe valoarea care se doreste a fi modificata. Daca se sterge un circuit, continutul buffer-ului ramane pe ecran, deci, va trebui sa cititi din nou continutul circuitului pentru ca modificarile sa fie vizibile.


Functiile Programului IcProg v1.05C


File/Open file:

Deschide codul si datele continute de un fisier anume.

Inainte de a deschide un fisier trebuie sa selectati tipul de circuit care va fi programat din meniul "Settings/Device".


Puteti sa cititi diferit formatele fisierelor:

*.hex (IHX) - pentru fisierele de format Intel 8 bits

*.hex (IHX16) - pentru fisierele de format Intel 16 bits

*.bin pentru fisierele binare

*.mot pentru fisierele de format Motorola-S

*.obj pentru fisierele proiect

*.e2p pentru fisierele de format EEPROM


File/Save File As:

Permite salvarea continutului ferestrei curente cu posibila modificare a numelui fisierului si a formatului de salvare. Daca se salveaza cu formatul .bin, continutul fisierului va reflecta exact continutul memoriei circuitului. Daca salvati cu formatul .hex fisierul va fi codat in formatul Intel 8 bits(IHX8).


File/Open Data File:

Daca incarcati un fisier pentru un microcontroler continand in mod egal un EEPROM, utilizati meniul 'FileOpen Data File' pentru a incarca partea EEPROM a memoriei. Continutul EEPROM-ului va fi afisat in fereastra 'Adress-EEPROM Data'. Puteti citi diferit formatele fisierelor: *.hex (IHX8) pentru fisierele cu format Intel 8 bits, *.hex (IHX16) pentru fisierele in format Intel 16 bits, *.bin pentru fisierele binare, *.mot pentru fisierele in format Motorola-S, *.obj pentru fisierele proiect si .e2p pentru fisierele in format EEPROM.


File/Recent Files:

Permite deschiderea directa a ultimelor fisiere utilizate de catre program.


File/Exit:

Permite inchiderea programului. Daca au fost facute schimbari in continutul buffer-ului, programul va intreba daca doriti sa salvati modificarile.


Edit/Fill Buffer :

Permite initializarea cu aceleasi valori a continutului complet al buffer-ului 'Address-Program Code'. Aceasta valoare poate fi scrisa in mod zecimal, hexazecimal sau ASCII.


Edit/Fill Buffer From:

Permite initializarea cu aceiasi valoare a unei parti a continutului buffer-ului "Address-Program Code" continand adresa de inceput si o adresa de sfarsit.


Edit/Copy From Buffer:

Permite copierea in memoria programului a continutului buffer-ului   "Address- Program Code" selectat cu mouse-ul.


Edit/Paste to Buffer:

Permite transferarea datelor in memoria programului in buffer-ul:

"Address-Program Code". Adresa este selectata cu mouse-ul.


Edit/Fill Data Buffer:

Permite initializarea cu aceiasi valoare a continutului complet al buffer-lui 'Address-EEPROM Data'. Aceasta valoare poate fi scrisa in mod zecimal, hexazecimal sau ASCII.

Edit/Fill Data Buffer From:

Permite initializarea cu aceeasi valoare, a unei parti selectate cu mouse-ul, din continutul buffer-ului 'Address-EEPROM Data'. Aceasta valoare poate fi scrisa in mod zecimal, hexazecimal sau ASCII.


Edit/Copy from Data Buffer:

Permite copierea in memoria programului a continutului buffer-ului "Address-EEPROM Data" selectat cu mouse-ul.


Edit/Paste To Data Buffer:

Permite transferul datelor din memoria programului in buffer-ul "Address-Program Code". Adresa este selectata.


Settings/Device:

Permite selectarea tipului de circuit (microcontroler sau memorie) care urmeaza programat.

Urnind circuitul selectat, apar diferite ferestre:

Daca circuitul poseda o memorie de date si o memorie EEPROM a codurilor vor aparea doua ferestre.

Continutul ferestrei 'Check Sum' rezulta din adunarea tuturor octetilor care constituie programul citit din circuit. Acesta permite, de exemplu identificarea unui program in raport cu un altul pentru a vedea daca sunt identice. Aceasta valoare se modifica automat daca se modifica programul.

Diferite optiuni vor aparea de asemenea in cadrul meniului 'Configuration' permitand modificarea registrelor de configurare. Pentru a cunoaste utilizarea acestor registre trebuie sa consultati datasheet-ul fabricantului (specificat). In acelasi timp se deschide o fereastra in care va sunt date cateva informatii pentru microcontrolere PIC.

Puteti alege intre mai multe tipuri de oscilatoare:


- LP : Low Power Crystal

- XT : Crystal/Resonator

- HS : High Speed Crystal/Resonator

- RC : Resistor/Capacitor


Aceasta selectie depinde de tipul oscilatorului conectat pe intrarile OSC1/CLKIN si OSC2/CLKOUT ca si de schema de utilizare a microcontrolerului dupa programare. Pentru modelele XT, LP si HS un oscilator cu quartz sau un oscilator TTL/C-MOS care este conectat pe intrarile OSC1/CLKIN si OSC2/CLKOUT. Pentru modul RC, o retea RC este conectata pe intrarea OSC1/CLKIN (frecventa mai putin precisa).

Configuratia de origine este pozitionata pe modul RC.


Validarea sau non-validarea WDT-ului:

Validand aceasta caseta printr-o cruce, 'Watchdog timer' va fi activat. Adica un oscilator intern independent de oscilatorul extern va fi functional chiar daca microcontrolerul este in pozitie de asteptare.


Validarea sau non-validarea a PWRT-ului:

Validand aceasta caseta printr-o cruce, 'Power-up Timer'-ul va fi activ. Microcontrolerul va efectua la punerea sa sub tensiune un Reset general pe durata a 72ms, timp in care tensiunea de alimentare se stabilizeaza.


Validarea sau non-validarea MCLR-ului:

Validand aceasta caseta printr-o cruce, 'Memory Clear' va fi activat. Va fi posibila o repunere la zero extern prin conectarea "GP3/MCLR/Vpp" a microcontrolerului.


Validarea sau non-validarea CP-ului :

Validand aceasta caseta printr-o cruce, va fi activat 'Code Protect'. Programul integrat in memoria circuitului nu va fi citibil daca se face o re-citire a acestuia. In timp ce circuitul poate fi in continuare sters pentru a putea fi reprogramat, acesta contine o memorie Flash.


Identificarea unui circuit:

In caseta 'ID Value', se introduce un numar de identificare care va fi inregistrat intr-un registru special al circuitului.


Settings/Hardware F3:

Permite configurarea interfetei de programare intre program si cartela de programare.

Pentru explicatii vedeti mai sus: --> 'instalarea si configurarea programului IC-Prog'.


Settings/Options:

Permite definirea unei cereri de confirmare atunci cand efectuati o operatie. Aceasta functie este disponibila pentru a confirma programarea circuitului.

(Programming a device) pentru a confirma stergerea unui circuit (Erasing a device) si pentru a salva continutul buffer-ului pe un fisier deja existent (Overwriting a file).

Putem de asemenea sa definim un mesaj de avertizare pentru ca nici un identificator n-a fost definit pentru un program dat (ID word is missing in file) si pentru ca nici un cuvant de configurare n-a fost definit pentru un program dat (Config word is missing in file).


Settings/Smartcard:

Permite setarea de cartele tip PHEONIX.


Settings/Clear Settings:

Permite anularea valorilor setate anterior.


Command/Read All:

Permite citirea continutului unui circuit in buffer. Citirea va putea fi facuta la fel de bine pe codurile de program, ca si pe datele EEPROM-ului, ca si pe continutul registrelor de configurare.

Daca circuitul este protejat la citire, buffer-ul nu va indica valorile bune si pe ecran se vor afisa 0-uri (zerouri). In acest caz daca este vorba de o memorie Flash circuitul va putea fi sters si re-programat normal.

Daca doriti salvarea continutului unui circuit pe disc, veti utiliza mai intai aceasta functie, apoi utilizati functia 'Save File As . '.

Daca doriti sa faceti o copie a unui circuit, veti utiliza mai intai aceasta functie pentru a incarca buffer-ul, schimbati circuitul, apoi utilizati functia 'CommandProgram All'.


Command/Program All:

Permite programarea continutului unui circuit plecand de la buffer.

Programarea se va face de asemenea asupra codurilor de program, ca si a datelor EEPROM-ului, cit si a continutului registrelor de configurare. In acest caz, asigurati-va ca registrele de configurare sunt corect pozitionate inainte de a folosi aceasta functie.


Command/Program Config:

Permite programarea in mod unic a registrelor de configurare a circuitului.


Command/Erase All:

Permite stergerea continutului unui circuit.

In acest caz toti bitii sunt adusi la nivelul logic 1. Aceasta functie nu este intotdeauna disponibila (unele circuitele nu sunt programabile decat o singura data).


Command/Blank Check:

Permite testul de integritate pentru a verifica daca circuitul este vid. Daca circuitul este nou sau este sters, toti bitii memoriei vor fi la nivelul logic 1 (FF). Aceasta functie este utilizata inaintea oricarei programari caci nu este posibil de a programa un circuit in mod gresit decat daca acesta fie nu a fost nou sau nu a fost sters in prealabil. Ca efect, o programare pune anumiti biti la nivelul logic 0, inversarea ne putand fi posibila decat daca circuitul poate fi sters cu ajutorul functiei 'Command/Erase All'.


Command/Verify:

Verifica continutul circuitului cu cel al buffer-ului. Un mesaj de eroare apare in cazul in care ceva este in neregula (cablul nu este conectat corectat, programul nu este configurat corect, cartela nu este alimentata corect).


View/Assembler:

Prin aceasta comanda pe ecran sunt afisate datele in limbajul de asamblare.


View/Hex View:

Prin aceasta comanda pe ecran sunt afisate datele in format HEX.


View/Refresh:

Permite reimprospatarea datelor afisate pe ecran.


Steregerea unui circuit:

Microcontrolerele de tip PIC 12C508/509 nu se pot programa decat o singura data si nu se pot sterge. Microcontrolerele de tip PIC 16X84 trebuie sa fie sterse cu ajutorul meniului 'Erase' inainte de reprogramare.

Un EEPROM se re-programeaza direct, fara fie necesara stergerea acestuia in prealabil.

16C84 si 16F84 sunt microcontrolere de 14 biti, deci atunci cand buffer-ul este gol, la fiecare adresa, se va afisa pe ecran valoarea hexazecimala '3FFFh' (in binar: 11 1111 1111 1111b).

La fel in cazul microcontrolerelor 12C508 si 12C509 care sunt microcontrolere de 12 biti, cand buffer-ul este gol la fiecare adresa se va afisa pe ecran valoarea hexazecimala 'FFFh' (in binar: 1111 1111 1111b).


Rezolvarea problemelor curente:

In timpul programarii sau testului de verificarea a unui microcontroler de tip PIC 12C508, poate aparea un mesaj de eroare. Microcontrolerele de tip PIC 12C508 contin adesea la ultima adresa din memorie valori diferite de 'FFFh' chiar si atunci cand sunt ne-folosite. Pentru a evita acest mesaj de eroare se va citi (READ) microcontrolerul, notati acesta valoare, incarcati fisierul sursa in buffer si re-scrieti aceasta valoare in buffer la aceeasi locatie de memorie (ultima adresa).


Copia unui program dintr-un microcontroler nu functioneaza decat daca originalul functioneaza. Este posibil de asemenea ca microcontrolerul sursa sa fie protejat la citire. In acest caz valorile salvate inainte de copiere nu sunt corecte.

Programatorul nu este detectat de catre calculator sau de catre Windows ca fiind componenta hardware!

Se verifica ca portul serial sa fie bine declarat in BIOS si in meniul sistemului Windows.

Se verifica configuratiile de interfata din meniurile de initializare.

Se verifica activarea corecta a portului setat COM1 sau COM2

Se verifica tensiunea de alimentare sa fie corecta.



4.3. Mediu de dezvoltare MPLAB IDE


Programul MPLAB IDE si Editorul MPLAB sunt realizate de catre firma Microchip pentru a fi folosite ca medii de dezvoltare si debug pentru programatorii de microcontrolere PIC. Acest mediu ofera atat posibilitatea de editare, compilare, simulare soft(MPLAB SIM) cat si simulare pe platformele MPLAB ICD2, MPLAB ICE2000, MPLAB ICE4000 si MPLAB SIM30.

Programul permite inscrierea directa, fara alt program aditional, a microcontrolerelor rin intermediul platformelor MPLAB ICD2, PICSTAR Plus si PRO MATE II.

Programele pot fi scrise pentru o gama larga de microcontrolere din seriile ROM 12CXX,16CXX, 16CXXX, 18CXXX, seriile CR cat si F(Flash).

Figura 4.3.1. Schema electrica de comanda


Editorul ASM al MPLAB diferentiaza prin culori comenzile , tipurile de variabilele si adresele, usurand munca programatorului. De asemenea la compilare acesta creeaza o lista de erori(fisierul *.err) ce sunt afisate utilizatorului in vederea corectiei. In urma compilari fara erori a programului sunt create fisierele *.lst, *.cod si *.hex.

Dupa o compilare reusita se poate simula programul in mod continu sau instructiune cu instructiune si vizualizarea continutului tuturor registrilor si locatiilor de memorie.


Structura software-ului


Functiile indeplinite de program trebuie sa realizeze:

o  Achizitie temperatura

o  Achizitie ora exacta

o  Achizitie data

o  Intrerupere setare

o  Afisare


Aceste functii se implementeaza in limbaj de asamblare specific microcontrolerului.

In subcapitolele urmatoare se vor descrie:

Modul de generare a codului caracterelor ASCI pentru afisajul matriceal de 7x5 pixeli pe caracter

Schemele logice si implementarea in asamblare pentru:

Programul principal (Main)

Subrutina de achizitie temperatura

Subrutina de achizitie ora exacta

Subrutina de achizitie data

Subrutina de intrerupere si setare timp

Subrutina de conversie format

Subrutina de afisare

Subrutina de transformare a variabilei din binar in BCD



5.1. Programul generator cod caractere


Programul "Char-Matrix cod generator" se utilizeaza la generarea codurilor echivalente ASCII pentru afisaje matriceale de 35 (5x7) si 56 (7x8) pixeli. Acesta este necesar pentru generarea cifrelor si textului ce sunt afisate pe matricea de leduri.



Figura 5.1.1. Char-Matrix cod generator


Acest program este o simpla aplicatie Visual Basic care genereaza manual codul fiecarei coloane ce trebuie afisate pentru a forma un caracter. Aceste valori sunt inscrise in baza de date in format zecimal.



Figura 5.1.2. Generare cod caracter A


Dupa apasarea unui buton acesta se coloreaza in rosu, ramanand vizibila forma caracterului. In partea de jos a ecranului apar codurile echivalente pentru fiecare coloana. Acestea se pot salva intr-o baza de date (*.mdb Acces) impreuna cu numele caracterului, prin apasarea butonului Save.


Figura 5.1.3. Baza de date


5.2. Scheme logice si implementarea acestora


Schema logica a programului principal - MAIN





















Figura 5.2.1. Schema logica principala

  • Implementarea programul principal - MAIN

Programul principal este alcatuit din 5 programe diferite care realizeaza afisarea orei si minutelor, zilei si lunii, temperaturii, textului static si textului dinamic.


LOOP_MAIN

CALL READ_ORA_EXACTA

;AFISAZA STATIC DE LA ADESA '51h' 30 DE COLOANE(CU DATE DIN MEMORIA DE ;DATE)

movlw d'210' ;timp de afisare a textului

movwf loops2

ROE

movlw 51H

CALL DISP_MATRIX_30

decfsz loops2,1

goto ROE


CALL READ_DATA_EXACTA

;AFISAZA STATIC DE LA ADESA '51h' 30 DE COLOANE(CU DATE DIN MEMORIA DE ;DATE)

movlw d'210' ;timp de afisare a textului

movwf loops2

RDE

movlw 51H

CALL DISP_MATRIX_30

decfsz loops2,1

goto RDE


CALL READ_TEMPERATURA

;AFISAZA STATIC DE LA ADESA '51h' 30 DE COLOANE(CU DATE DIN MEMORIA DE ;DATE)

movlw d'210' ;timp de afisare a textului

movwf loops2

RT

movlw 51H

CALL DISP_MATRIX_30

decfsz loops2,1

goto RT


;AFISAZA STATIC DE LA ADESA '51h' 30 DE COLOANE(CU DATE DIN MEMORIA ;PROGRAM)

CALL TEXT_STATIC


;AFISAZA STATIC DE LA ADESA '0Ah' 90 DE COLOANE(CU DATE DIN MEMORIA ;PROGRAM)

CALL TEXT_DINAMIC


GOTO LOOP_MAIN







  • Schema logica a subrutinei de achizitie temperatura












Figura 5.2.2. Schema logica - Achizitie temperatura


  • Implementarea subrutinei de achizitie temperatura

Domeniul de temperatura ce poate fi afisat este cuprins intre -40ºC si +87ºC. De aici rezulta cuanta convertorului de 5mV / LSB. Pentru valoarea de 500mV, ce corespunde la 0ºC, convertorul va returna 50h,80 zecimal. Pentru temperaturi pozitive valoarea convertita depaseste 50h, 80 zecimal. Deoarece cuanta de 5mV, rezultatul conversiei se va imparti la 2 pentru a obtine 1ºC / LSB. Din aceste calcule rezulta o precizie de 0.5 ºC a sistemului.


READ_TEMPERATUR


BSF ADCON0,2 ;START CONVERSIE

CALL DELAY0

TL1 NOP

NOP

BTFSC ADCON0,2 ;CONVERSIE TERMINATA

GOTO TL1


MOVF ADRESH,0

MOVWF T2

Dupa terminarea conversiei se verifica daca rezultatul este mai mare (temperatura pozitiva) sau mai mic (temperatura negativa) de 50h.


  MOVWF T3


;CALCUL TEMPERATURA

MOVLW 50h

SUBWF T2,0

MOVWF T2

BTFSS STATUS,0

GOTO NEGATIV

GOTO POZITIV

NEGATIV

MOVLW D'16'

MOVWF 51H

MOVWF 52H

MOVWF 53H

MOVWF 54H

MOVWF 55H


MOVF T3,0

SUBLW 50h

MOVWF T2

GOTO CALC_T

POZITIV  

MOVLW D'0'

MOVWF 51H

MOVWF 52H

MOVWF 53H

MOVWF 54H

MOVWF 55H

CALC_T

RRF T2,1 ;IMPARTIRE CU 2 A T2

BCF T2,7 ;

MOVF T2,0

CALL CALC_BCD


MOVLW 56H;PRIMA ADRESA MODUL TEMPERATURA

MOVWF ADR_1

CALL CALCUL_DATE


movlw D'0'

Se inscrie semnul temperaturii, valoarea acesteia, semnul de grad "º " si litera "C"


  MOVWF 60H

movlw D'14'

MOVWF 61H

movlw D'10'

MOVWF 62H

movlw D'14'

MOVWF 63H

movlw D'0'

MOVWF 64H


movlw D'124'

MOVWF 65H

movlw D'130'

MOVWF 66H

movlw D'130'

MOVWF 67H

movlw D'130'

MOVWF 68H

movlw D'68'

MOVWF 69H


;CURATARE AFISAJ ULTIMELE 5 COLOANE

MOVLW D'0'

MOVWF 6AH

MOVLW D'0'

MOVWF 6BH

MOVLW D'0'

MOVWF 6CH

MOVLW D'0'

MOVWF 6DH

MOVLW D'0'

MOVWF 6EH


RETURN



  • Schema logica a subrutinei de achizitie ora exacta








Figura 5.2.3. Schema logica - Achizitie ora exacta


Implementarea subrutinei de achizitie ora exacta


READ_ORA_EXACTA

;CALCULEAZA SI PUNE REZULTATUL INCEPAND CU ADRESA 51H-6FH

;CITIRE_ORE

MOVLW D'4';ADR

MOVWF ADR_OUT

CALL READ_ADR

MOVLW 51H;PRIMA ADRESA ORE

MOVWF ADR_1

Se citeste valoarea echivalenta a orei in BCD din DS12887. Se prelucreaza pentru afisare iar eezultatele se retin in locatiile de memorie intre adresele 51h-5Ah.

Se implementeaza punctele " : " ce vor desparti minutele de ore.

Se citeste valoarea echivalenta a minutelor in BCD din DS12887 si se prelucreaza pentru afisare. Rezultatele se retin intre adresele 60h-69h.


  CALL CALCUL_DATE

;IMPLEMENTAREA PUNCTELOR

MOVLW D'0'

MOVWF 5BH

MOVLW D'0'

MOVWF 5CH

MOVLW D'40'

MOVWF 5DH

MOVLW D'0'

MOVWF 5EH

MOVLW D'0'

MOVWF 5FH

;CITIRE_MINNUTELOR

MOVLW D'2';ADR

MOVWF ADR_OUT

CALL READ_ADR

MOVLW 60H;PRIMA ADRESA MINUTE

MOVWF ADR_1

CALL CALCUL_DATE


;CURATARE AFISAJ ULTIMELE 5 COLOANE

MOVLW D'0'

MOVWF 6AH

MOVWF 6BH

MOVWF 6CH

MOVWF 6DH

MOVWF 6EH


RETURN








Figura 5.2.4. Schema logica - Achizitie data


Implementarea subrutinei de achizitie data


READ_DATA_EXACTA

CITIRE_ZI_LUNA

MOVLW D'7';ADR

MOVWF ADR_OUT

CALL READ_ADR

MOVLW 51H;PRIMA ADRESA ZI LUNA

MOVWF ADR_1

Se citeste valoarea echivalenta a zilei in BCD din DS12887 care se prelucreaza pentru afisare si apoi datele se memoreaza la adresele 51h-5Ah.

Se implementeaza punctul " . " ce va desparti ziua de luna.

Se citeste valoarea echivalenta a lunii in BCD din DS12887 si se prelucreaza pentru afisare, rezultatul se depune intre adresele 60h-69h.


  CALL CALCUL_DATE

;IMPLEMENTAREA PUNCTELO

MOVLW D'0'

MOVWF 5BH

MOVWF 5CH

MOVLW D'64'

MOVWF 5DH

MOVLW D'0'

MOVWF 5EH

MOVWF 5FH

CITIRE_LUNA

MOVLW D'8';ADR

MOVWF ADR_OUT

CALL READ_ADR

MOVLW 60H;PRIMA ADRESA LUNA

MOVWF ADR_1

CALL CALCUL_DATE

;CURATARE AFISAJ ULTIMELE 5 COLOANE

MOVLW D'0'

MOVWF 6AH

MOVWF 6BH

MOVWF 6CH

MOVWF 6DH

MOVWF 6EH

RETURN












Figura 5.2.5. Schema logica - subrutina intrerupere



;SUBRUTINE DS12887



READ_ADR

BSF PORTD,1;DS

BSF PORTD,2;R/W

BSF PORTD,3;AS


BSF STATUS,5

Subrutina de citire din registri DS12887 se foloseste la fiecare achizitie de data sau ora exacta.


 
BCF STATUS,6

CLRF TRISC;PORTC IESIRE

BCF STATUS,5;

BCF STATUS,6


MOVF ADR_OUT,0

MOVWF PORTC

BCF PORTD,3;AS

BSF STATUS,5

BCF STATUS,6


MOVLW 0FFh

MOVWF TRISC;PORTC IENTRARE


BCF STATUS,5;

BCF STATUS,6

BCF PORTD,1;DS

MOVF PORTC,0

MOVWF DATA_IN

BSF PORTD,1;DS


RETURN


WRITE_ADR

BSF PORTD,1;DS

BSF PORTD,2;R/W

BSF PORTD,3;AS


BSF STATUS,5

BCF STATUS,6

CLRF TRISC;PORTC IESIRE

BCF STATUS,5;

Subrutina de scriere a registrilor DS12887 se foloseste in momentul inscrieri datei si orei exacte. De asemenea si in momentul setari modului de functionare al DS12887 (Capitolul 5).


 
BCF STATUS,6

MOVF ADR_OUT,0

MOVWF PORTC

BCF PORTD,3;AS


MOVF DATA_OUT,0

MOVWF PORTC

NOP

BCF PORTD,2;R/W

NOP

NOP

BSF PORTD,2;R/W

BSF STATUS,5

BCF STATUS,6

MOVLW 0FFh

MOVWF TRISC;PORTC IENTRARE

BCF STATUS,5;

BCF STATUS,6

BSF PORTD,1;DS


RETURN


RESET_DS12887

Subrutina de resetare a DS12887 se utilizeaza la punerea sub tensiune a montajului si inainte de setarea datei si orei exacte. Acesta seteaza registri A (10h),B (11h),C (12h)si D (13h) a DS12887 (Capitolul 5).


 
BCF PORTD,0;RESET DS12887

CALL DELAY0

CALL DELAY0

CALL DELAY0

CALL DELAY0

BSF PORTD,0;DS12887 ACTIV

NOP

NOP

NOP

NOP

NOP

NOP

;RESETARE TERMINATA, SETARE SQW

BSF PORTD,1;DS

BSF PORTD,2;R/W

BSF PORTD,3;AS

BSF STATUS,5

BCF STATUS,6

CLRF TRISC;PORTC IESIRE

BCF STATUS,5;

BCF STATUS,6

;SET = REGISTER A

MOVLW D'10';ADR

MOVWF PORTC

BCF PORTD,3;AS

MOVLW B'11111010';OCTET SETARE registru A

MOVWF PORTC

NOP

BCF PORTD,2;R/W

NOP

NOP

BSF PORTD,2;R/W

;SET = REGISTER B

MOVLW D'11';ADR

MOVWF PORTC

BCF PORTD,3;AS

MOVLW B'11110000';OCTET SETARE registru B

MOVWF PORTC

NOP

Pe magistrala de 8 biti se transmite atat adresa registrului ce urmeaza a fi citit cat si datele citite de la DS12887. Magistrala isi va schimba sensul in functie de rutina aplicata (Capitolul 7).


 
BCF PORTD,2;R/W

NOP

NOP

BSF PORTD,2;R/W


; registru C si D raman neschimbate


BSF STATUS,5

BCF STATUS,6

MOVLW 0FFh

MOVWF TRISC;PORTC IENTRARE

BCF STATUS,5;

BCF STATUS,6


BSF PORTD,1;DS


RETURN










Figura 5.2.6. Schema logica - conversie format



;PRIN ADR_1 SE IA ADRESA LA CARE SE INCEPE AFISAREA

;DATA_IN CONTINE DATELE DIN FORMAT BCD IN PIXELI DE AFISAT

;(LSB-UNITATI->ZECI-MSB)

CALCUL_DATE

;CALCULUL CIFREI ZECILOR

MOVF ADR_1,0

MOVWF FSR


MOVF DATA_IN,0

ANDLW B'11110000';SI logic pentru prelucrarea ultimilor 4 biti

MOVWF SBUF


W9  MOVLW D'9' CIFRA"9"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W8

MOVLW D'12';COL1

Subrutina de conversie a datelor realizeaza trecerea din BCD, a variabilelor de timp si temperatura, in cod echivalent ASCII pentru ca acestea sa poata fi afisate.


 
MOVWF INDF

INCF FSR,1

MOVLW D'146';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'82';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'60';COL5

MOVWF INDF

GOTO WX


W8  MOVLW D'8' CIFRA"8"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W7

MOVLW D'108';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'108';COL5

MOVWF INDF

GOTO WX


W7  MOVLW D'7' CIFRA"7"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W6

MOVLW D'2';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'226';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'18';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'10';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'6';COL5

MOVWF INDF

GOTO WX


W6  MOVLW D'6' CIFRA"6"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W5

MOVLW D'120';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'148';COL2

MOVWF INDF

Echivalenta intre datele de intrare, format BCD, si cele in codul echivalent de afisat se calculeaza cu ajutorul programului "Char-Matrix cod generator"descris in Capitolul 8.1.


 
INCF FSR,1

MOVLW D'146';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'96';COL5

MOVWF INDF

GOTO WX


W5  MOVLW D'5' CIFRA"5"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W4

MOVLW D'78';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'138';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'138';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'138';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'114';COL5

MOVWF INDF

GOTO WX


W4  MOVLW D'4' CIFRA"4"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W3

MOVLW D'48';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'40';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'36';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'254';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'32';COL5

MOVWF INDF

GOTO WX


W3  MOVLW D'3' CIFRA"3"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W2

MOVLW D'66';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'130';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'138';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'150';COL4

Codul echivalent al caracterelor de afisat se inscrie adresa cu adresa la locatiile de memorie consecutive care vor fi mai tarziu baleiate.


 
MOVWF INDF

INCF FSR,1

MOVLW D'98';COL5

MOVWF INDF

GOTO WX


W2  MOVLW D'2' CIFRA"2"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W1

MOVLW D'132';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'194';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'162';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'140';COL5

MOVWF INDF

GOTO WX


W1  MOVLW D'1' CIFRA"1"

SUBWF SBUF,0

BTFSS STATUS,2

GOTO W0

MOVLW D'0';COL1

MOVWF INDF

INCF FSR,1

MOVLW D'132';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'254';COL3

MOVWF INDF

INCF FSR,1

MOVLW D'128';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'0';COL5

MOVWF INDF

GOTO WX

W0  MOVLW D'124';COL1 CIFRA"0"

MOVWF INDF

INCF FSR,1

MOVLW D'162';COL2

MOVWF INDF

INCF FSR,1

MOVLW D'146';COL3

MOVWF INDF

Codul echivalent cifrei unitatilor se calculeaza asemanator cifrei zecilor descrise mai sus.


 
INCF FSR,1

MOVLW D'138';COL4

MOVWF INDF

INCF FSR,1

MOVLW D'124';COL5

MOVWF INDF

WX

;CALCULUL CIFREI UNITATILOR



Calculul cifrei unitatilor decurge asemanator calculului zecilor


RETURN















Figura 5.2.7. Schema logica - Afisare


Frecventa de re-improspatare a afisajului trebuie sa fie mai mare de 20Hz, ca ochiul uman sa nu observe palpairea ledurilor. O coloana de leduri este activa timp de 370us. Pauza dintre activarea a doua coloane este de 8us rezultand o perioada de 378us. Pentru 30 de coloane frecventa de baleiere a afisajului este de 88Hz.


Subrutina de initializare a matricei de leduri si a electronicii de comanda.


InitMATRIX

BSF PORTD,5

nop

BCF PORTD,5 ;RESET HC164

Resetarea matricei consta in resetarea tuturor registrilor de deplasare astfel incat nici o coloana de leduri sa nu mai fie activa.

Se introduce un 1 logic pe primul bit al primului registru de deplasare.

 
nop

BSF PORTD,5

nop

BCF PORTD,7 ;DATA PE 1

nop

BCF PORTD,6 ;1 IMP. CLK

nop

BSF PORTD,6

nop

BSF PORTD,7 ;DATA PE 0

BCF FLAG_MATRIX,0


RETURN



Subrutina de deplasare a coloanei active pe afisajul matricial.


Subrutina realizeaza deplasarea cu unu a coloanei active a matricei prin aplicarea unui impuls de tact celor 4 registre de deplasare.


 
;DEPLASEAZA COLOANA ACTIVA CU 1

CLK_MATRIX


CLRF PORTB

BCF PORTD,6 ;un impuls CLK



BTFSC PORTD,4 ;VERIFICA DC S-A AJUNS LA ULTIMA COLOANA

BSF FLAG_MATRIX,0

BSF PORTD,6;CLK PE 0


RETURN 



Subrutina de simpla baleiere a afisajului


;Subrutina afisare de la adresa din W (adresa X)

;cu FEADBACK

Aceasta subrutina realizeaza baleierea continua a celor 30 de coloane, afisand datele de la 30 de locati de memorie consecutive.


 
DISP_MATRIX_C_END


MOVWF FSR

CALL InitMATRIX

LOOP1e

CALL CLK_MATRIX

MOVF INDF,0

movwf PORTB

CALL DELAY

INCF FSR,1

BTFSS FLAG_MATRIX,0 ; verifica dc s-a ajuns la ultima coloana

GOTO LOOP1e


RETURN

Subrutina de transformare a variabilei din binar in BCD


;INTRARE IN W

;IESIRE BCD IN DATA_IN

CALC_BCD

MOVWF T2

MOVWF T3

CLRF T1

LOOPX

INCF T1,1

Subrutina de conversie realizeaza trecerea din binar in BCD a variabilelor de timp si temperatura.

Aceeasi subrutina se foloseste si la conversia datelor ce se inscriu in DS12887 in cadrul rutinei de intrerupere.

 
MOVF T2,0

MOVWF T3

MOVLW 0AH

SUBWF T2,1

BTFSS STATUS,0

GOTO LOOPX1

GOTO LOOPX

LOOPX1

DECF T1,1

MOVF T3,0

MOVWF T2

;T2=ZECI

;T1=UNITATI

SWAPF T2,0

IORWF T1,0

MOVWF DATA_IN


RETURN












6. Concluzii si posibilitati de dezvoltare


In cazul in care se doreste realizarea unui ceas cu functii multiple de afisare (afisare de temperatura sau text) se prefera afisajele matriceale deoarece acesta depaseste limitarile afisajelor pe segmente, avand posibilitatea afisarii caracterelor complexe si chiar si a unei grafici simple. De asemenea se pot folosi in aplicatiile unde este nevoie de afisarea unui meniu de interfata cu utilizatorul, informatii de stare sau de avertizare a acestuia.

O posibilitate de dezvoltare a proiectului este acela de realizare a ceasurilor stradale de dimensiuni mari, ce pot inlocui panourile publicitare actuale, putand afisa atat ora, data temperatura, slogan publicitar, informatii de interes public (referitoare la starea vremii sau informarea in legatura cu activitatile mondene).

Realizarea afisajului cu leduri bi-colore sau multi-colore (RGB-led Rosu, Galben, Albastru, Alb), au posibilitatea de afisare, cu o calitate buna, a imaginilor grafice. In momentul de fata, se realizeaza panouri multi-colore de dimensiuni impresionante utilizate in locul retroproiectoarelor, pe stadioane, strazi sau sedii de firma.



Figura 6.1.



Figura 6.2.


In aplicatiile in care se utilizeaza afisaje cu leduri, se pune accentul pe vizualizarea clara a caracterelor afisate, indiferent de conditiile de luminozitate, cu o implementare simpla si ieftina.

O aplicatie de acest gen ar putea fi un calculator de proces, ce afiseaza datele de stare si avertizare ce au loc in procesul de studiat. In industria auto se folosesc astfel de afisaje pentru informarea conducatorului auto asupra vitezei automobilului, timpul, temperatura din exterior, umiditate, conditiile de functionare a automobilului.

In instrumentatia de masurare se pot utiliza astfel de afisaje pentru redarea valorilor numerice ale tensiunilor, curentilor, frecventa semnalelor sau a altor marimi insotite de unitatile de masura a acestor marimi.

















Bibliografie



  1. "Sisteme de prelucrare numerica cu microcontrolere microprocesoare procesoare numerice de semnal" TOMA LIVIU - EDITURA DE VEST, Timisoara, 2002

  1. "Microcontrolere si microprocesoare" Dr. Ing. MRCEA POPA - EDITURA POLITEHNICA, 1997

  1. "Structuri logice programabile" AUREL GONTEAN, MIRCEA BABAITA - EDITURA DE VEST, Timisoara, 1997


  1. Catalogul "MICROCHIP PIC16F87XA 28/40-pin Enhanced FLASH Microcontrollers" ©2001 Microchip Technology Inc.

  1. Catalogul "MICROCHIP TC1047/TC1047A Precision Temperature-to-Voltage Convertor" ©2002 Microchip Technology Inc.

  1. Catalogul "TOSHIBA BIPOLAR DIGITAL INTEGRATED CIRCUIT ULN2803/04AV/AFW" ©1999 Toshiba Corporation.

  1. Catalogul "MOTOROLA SEMICONDUCTOR TECHNICAL DATA MC54/74HC164" ©1995 Motorola Inc.

  1. Catalogul "MOTOROLA SEMICONDUCTOR TECHNICAL DATA NPN SILICON BC337/338" ©1996 Motorola Inc.

  1. Catalogul "KINGBRIGHT TA07-11GWA Led matrix display" © 2002 Kingbright Inc.

  1. Catalogul "FIRCHILD NPN General Purpose Amplifier 1997 Fairchild Semiconductor Corporation

Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }

Referate similare:



Cauta referat