Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
INGINERIE CALCULATOARE
PROIECTAREA SI REALIZAREAUNUI CEAS DIGITAL - PARTEA SOFTWARE
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.
Se va realiza un ceas digital ce va implementa urmatoarele posibilitati de afisare :
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.
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.
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.
Schema bloc principala contine principalele elemente ale ceasului digital, impreuna cu descrierea legaturilor dintre acestea.
Figura 2.1. Schema bloc principala
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
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.
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.
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:
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 :
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.
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.
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.
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.
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
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
Schema logica a programului principal - MAIN
Figura 5.2.1. Schema logica principala
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
Figura 5.2.2. Schema logica - 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.
;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"
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
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.
;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.
;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
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.
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre: |
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |