Sunteți pe pagina 1din 23

Universitatea Politehnica Bucuresti Facultatea de Electronica,Telecomunicatii si Tehnologia Informatiei

PROIECT 2

Turluianu Dragos 432B

ENUNT:
1. Sa se realizeze simularea Pspice a functionarii unui automat finit ce detecteaza o secventa de minim 3 caractere egale cu 1 intr-un sir binar, folosind mediul de programare ORCAD. 2. Sa se implementeze acelasi automat pe kit-ul de dezvoltare PICkit FLASH Starter Kit.

REZUMAT:
Proiectul isi propune simularea in Pspice a functionarii unui automat finit ce detecteaza o secventa de minim 3 caractere egale cu 1 intr-un sir binar. Pentru implementarea pe kit se va folosi diagrama de stare data. Intrarea I este conectata la pinul GP4. Citirea variabilei de intrare se face dupa apasarea switch-ului de pe placa. Semnalarea detectiei a 3 simboluri egale cu 1 (Y=1) se va face prin aprinderea led-ului D6 cu o frecventa de 10 Hz obtinuta cu Timer1. Pentru realizarea proiectului se parcurg urmatoarele etape: Obtinerea ecuatiilor corespunzatoare tranzitiilor si iesirilor; Realizarea schemei in orcad, folosind bistabile JK si porti NAND si inversoare Realizarea organigramei corespunzatoare programului Programarea si implementarea automatului finit utilizand mediul de programare MPLAB

Obtinerea ecuatiilor corespunzatoare tranzitiilor si iesirilor se realizeaza in urma diagramelor VK, in functie de semnalele primite. Simularea functionarii automatului se va face utilizand programul Orcad Family Release 9.2 Lite Edition. Pentru a reduce varietatea circuitelor logice cu care se vor obtine aceste comenzi, ne propunem o realizare doar cu porti NAND si inversoare. Organigrama este creata in conformitate cu instructiunile microcontroller-ului PIC 12F675 si cu functionarea automatului. Programarea si implementarea automatului finit utilizand mediul de programare MPLAB se obtine pe baza organigramei construita anterior folosind registrele si setarile specifice microcontroller-ului.

Capitolul 1. Introducere teoretica


Functionarea automatului
Un automat este un sistem logic a crui comportare se poate descrie ca o succesiune de evenimente numite stari, ce apar la momente discrete ale variabilei timp. Fiecare sistem care opereaza la momente de timp discrete i a carui intrari/iesiri i structura interna isi poate atribui numai un numar finit de configuratii distincte, poate fi considerat n mod abstract ca fiind un automat finit. Automatul poate fi reprezentat ca n figura 1.

x (t)

Automat

s(t)

z (t)

Fig. 1

Daca multimea starilor interne s(t) este finita, automatul este considerat automat finit. Automatul finit interactioneaz cu mediul deoarece la un anumit moment de timp t este supus unui semnal de intrare x(t), iar ca raspuns la ieire ofera la momentul t+dt semnalul z(t). Datorita faptului ca atat semnalele de intrare cat i cele de iesire sunt de regula succesiuni de valori binare (0 sau 1) i aplicarea intrarilor si succesiunea iesirilor se face n ordine secvential se justific denumirea de circuit logic secvenial (CLS). Automatele finite sunt o reprezentare abstract a circuitelor logice secveniale. Timpul in sistemele digitale este discontinuu,in sensul ca se masoara discret.Ceasul va marca aceste momente de timp sub forma de impulsuri. Scopul acestui proiect il constituie realizarea unui automat finit ce detecteaza o secventa de minim 3 caractere egale cu 1 intr-un sir binar. Starile automatului sunt numerotate de la 00 la 11, iar tranzitia intre stari se face in functie de valoarea intrarii. Se va semnala existenta a minim 3 simboluri egale cu 1 in starea 10. Schema electronica se va realiza cu bistabile J-K, conform cu ecuatiile de comanda.

Diagrama de stare care descrie functionarea automatului:

OrCAD
Simularea functionarii automatului se va face utilizand programul Orcad Family Release 9.2 Lite Edition. In fereastra de intampinare se deschide un nou proiect din meniul File->Project iar in ferestrele de dialog deschise succesiv de ultima comanda se executa urmatoarele oepratii: Se seteaza Analog and Mixed A/D Se da numele proiectului In fereastra Create Pspice Project se seteaza optiunea Create a blank project Executarea acestor operatii conduce la crearea proiectului conform setarilor efectuate si are ca urmare deschiderea une ferestre de lucru, care contine: Fereastra de proiect cu Design Resources si pSpice Resources Fereastra Session Log pentru mesajele generate de program in urma executiei comenzilor de simulare. Fereastra Schamatic1: Page1 care este pagina in care se va desena schema circuitului folosind instrumentele de desen ale programului Tool bar care contine instrumentele de desen ale programului.

PICkit1 Flash Starter Kit


Este un sistem de dezvoltare proiectat pentru programarea microcontrolerelor PIC de 8/14 pini si pentru rularea/verificarea programelor de aplicatii. Pe acest sistem pot fi dezvoltate aplicatii cu diverse grade de complexitate. Este recomandat in mod deosebit pentru insusirea cunostintelor de baza in programarea si utilizarea microcontrolerelor din familia PIC produse de firma MICROCHIP. In PICkit 1 Flash Starter Kit sunt incluse urmatoarele blocuri componente: Un soclu de evaluare pentru PIC 12F629/675 (capsula miniDIP de 8 pini) si pentru PIC 16F630/676 (capsula DIP de 14 pini); Bloc hardware pentru programarea microcontrolerelor din soclu cu procedura ICSP (In-Circuit-Serial-Programming); Matrice de 8 LED-uri pentru afisarea unor variabile de iesire, matrice comandata de 4 pini ai portului general de intrare-iesire; Doua LED-uri de semnalizare: Un LED rosu pentru semnalizarea prezentei alimentarii pe placa, Un LED galben pentru semnalizarea faptului ca o operatie de programare, verificare sau citire este in curs de desfasurare; Un microswitch SW1, cablat pe intrarea GP3 (RA3), utilizat ca intrare de date logice pentru o serie de aplicatii; Un potentiometru semireglabil RP1, cablat pe GP0 (RA0), utilizat pentru reglarea unui semnal analogic de intrare, in cazul utilizarii convertorului A/D; Accesorii de intrare-iesire: Mufa pentru cablu USB; Conector J1, necesar pentru cuplarea la calculatorul gazda; Conector J3 pentru acces din exterior la pinii microcontrollerului. In afara acestor componente existente, placa are si o arie de extindre pe care pot fi implementate: un alt tip de microcontroller in capsula DIP de 14 pini, o sursa de tensiune continua integrata (circuitul LM7805 sau unul echivalent) si un conector DB9 cu circuit de interfata serial tip RS 232. Matricea de LED-uri. PICkit 1 FLASH Starter Kit are prevazuta o matrice de afisare de 12 LED-uri, dar sunt implementate efectiv doar 8 dintre acestea. Toate cele 12 LED-uri sunt comandate de 4 pini ai portului de intrare-iesire GPIO (GP1, GP2, GP4, GP5). Aprinderea lor se face cu semnalul logic 1 (HI) in anod si simultan semnalul logic 0 (LOW) pe catod. Stingerea lor se face punand pinii afereni in stare de impedanta mare (hiZ). Schema nu permite comanda aprinderii simultane a doua LED-uri, cu alte cuvinte, la un moment dat, nu poate fi aprins decat un singur LED. Pot fi vazute insa mai multe LED-uri aprinse daca comanda lor este facuta multiplexat in timp, cu o frecventa suficient de mare pentru a crea impresia de simultaneitate, desi LED-urile sunt aprinse la momente de timp diferite.

Capitolul 2. Simularea OrCAD


Schema
Din diagrama starilor de functionare a automatelor s-au obtinut ecuatiile corespunzatoare tranzitiilor si iesirilor. Schema electronica se va sintetiza cu bistabilele J-K, conform cu ecuatiile de comanda.De asemenea pentru a vedea formele de unda la iesirea automatului finit se simuleaza in Orcad,folosind cele 2 bistabile J-K, porti NAND si inversoare pentru a reduce varietatea circuitelor logice cu care vom obtine aceste comenzi Pentru simularea se vor efectua succesiv urmatoarele operatii: Se va crea lista de legaturi a schemei,necesara compilatorului Pspice,cu comanda Create Netlist,din meniul Psice Se seteaza optiunile de simulare cu comanda New Simulation Profile din Meniul Psice.In fereastra New simulation se precizeaza numele profilului de simulare Tipul analizei:time domain Timpul de rulare:in cazul meu: 400 ms Optiune Start saving data after la 0 ms Se valideaza setarile cu Apply si ok Marcam cu voltage level marker punctele din shema in care dorim sa vizualizam semnalele.In cazul meu acestea respecta ordinea: CLK, I, Y Se executa simularea functionarii cu comanda RUN din meniul Pspice. In cazul functionarii corecte,setul de semnale afisate de program trebuie sa coincida cu cele deduse teoretic asa cum rezulta si in figura atasata.

Semnalele de intrare si de iesire

CLK-Semnalul de clock I-Semnalul de intrare de la generator Y-Semnalul de iesire

Capitolul 3. Implementarea automatului pe PICkit


Organigrama
Construirea proiectului se incepe cu editarea fisierului sursa al aplicatiei,conform unei organigrame,care va fi elaborata avand in vedere cateva consideraratii: Automatul finit are definite 5 stari:STATE 0(00),STATE 1(01),STATE 2(10),STATE 3(11) si STATE 4(OK).Trecerea dintr-o stare in alta este prezentata in figura de mai jos si este asigurata de valorile binare ale intrarii IN.Programul va avea o structura modulara avand in vedere cate un modul software pentru fiecare stare,iar inceputul va fi marcat de o eticheta. Starea viitoare a automatului este decisa de valorile de pe intrarea IN, iar citirea ei este executata numai dupa apasarea unui microswitch(SW1) legat la pinul GP4 a microcontrolerului. Detectarea starii de apasare/relaxare a lui SW1 se face intr-o subrutina denumita Button_Press.Citirea variabilei de intrare se face dupa apasarea switch-ului de pe placa. Iesirea din Button_Press trebuie executata numai dupa sesizarea starii de apasare a lui SW1. Semnalizarea detectiei a 3 simboluri egale cu 1 (Y=1) se va face prin aprinderea ledului D6 cu o frecventa de 10Hz obtinuta cu Timer1. Reguli generale: Partea de tnceput a fisierului trebuie sa contina directivele de definire a PIC-ului utilizat (LIST, #INCLUDE), de definire a unor variabile specifice, registre (continut si adrese) sau date(#DEFINE, CBLOCK, BANKSEL), de configurare a hardului (_CONFIG). Corpul programului trebuie sa inceapa cu directiva ORG <adresa de start> si contine instructiunile specifice aplicatiei, structurate pe subrutine si/sau secvente de program, recunoscute prin etichete Ultima linie de program trebuie sa fie directiva END. Comentariile se vor face dupa separatorul: ;

La elaborarea programului in limbaj de asamblare,conform organigramei automatului se vor avea in vedere urmtoarele detalii: Se va folosi registrul STATE_COUNTER pentru contorizarea starilor,cu directiva CBLOCK Se va incrementa registrul PCL(PC-LOW) pentru selectarea modului de program propriu unei stari,iar dupa executarea secventei de incrementare se va introduce o lista cu instructiuni goto care conduce executia programului catre una dintre cele 4 stari ale automatului. Temporizarea se va obtine cu un program bucla de intarziere in care pentru contorizarea ciclilor masina se vor defini 2 registre:CountH si CountL.Iesirea din subrutina Button_Press se va executa numai dupa apasarea butonului SW1.

Variabilele specifice aplicatiei sunt STATE_COUNTER (folosit la selectarea starii curente) si TEMP (folosita in cadrul buclei de temporizare). Definirea variabilelor pentru comanda LED-urilor se face prin directiva #DEFINE Setarea microcontrolerului se realizeaza prin directiva de definire a procesorului (list), iar configurarea acestuia prin directiva _CONFIG pentru configurarea perifericelor in fisierul sursa. Semnificatia bitilor de configurare: INITIALIZARE Secventa de intializare a SFR-urilor si a registrelor de uz general. Bancurile de registre folosite sunt atat Bank0 cat si Bank1 prin setarea bit-ului RP0 din registrul STATUS. Se selecteaza Bank1 pentru folosirea registrelor acestuia. Se valideaza Weak pull-up general prin setarea registrului OPTION_REG. Se foloseste registrul TRISIO pentru stingerea LED-urilor. Se configureaza pinii I/O ca intrari prin folosirea registrului WPU. Se dezactiveaza convertorul A/D setare intrari/iesiri digitale prin setarea registrului ANSEL. Se selecteaza Bank0 pentru a se putea seta registrul CMCON pentru dezactivarea comparator setare intrari/iesiri. Resetam registrele STATE_COUNTER,STATE_DEBOUNCE Setam functia Timer0 cu prescaler,factor de divizare=1/256 Activam intreruperile generale cu periferice si de depasire Resetam flag-ul de intreruperi CP_OFF Cod Protection WDT_OFF WatchDog Timer BODEN_ON Brown-Out Detect Enable PWRTE_ON PoWer-up Timer Enable INTRC_OSC_NOCLKOUT Internal RC_OSCilator MCLRE_OFF Master CleaR Enable CPD_OFF Data Code Protection

STARE_AUTOMAT Implementeaza un automat finit cu 5 stari. Se seteaza registrul STATE_COUNTER cu valoarea corespunzatoare starii curente. Se apeleaza consecutiv procedurile celor 5 stari: STATE0, STATE1, STATE2, STARTE3 si STATE4.

BUTTON_PRESS: testeaza starea microswitch-ului,executa temporizarea la schimbarea starii si se intoarce in programul principal la sesizarea starii de schimbare a lui.

Programul
;Program de implementare a automatului finit ;Automatul are 5 stri ;STATE0 = stinge orice LED aprins = citeste Inputbl ;;dac este 0, seteaz STATEO dac este 1, seteaz STATEI

;STATE1 = citeste Inputbl ;;dac este 1, seteaz STATEI dac este 0, seteaz STATE2

;STATE2 = citeste Inputbl ;;dac este 1, seteaz STATE1 dac este 0, seteaza STATE2

;STATE3 = citeste Inputbl ;;dac este 0, seteaz STATE0 dac este 1, seteaz STATE4

;STATE4 - OK = aprinde LED D6, seteaz STATEO

;Inputbl se va lega la GP4.

list #include

p=12f675 <p12f675.inc>

;Directiva de definire a procesorului

errorlevel -302 fisierul list

;Elimin mesajul de tip 302 din

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

;Directiva '__CONFIG' pentru configurarea perifericelor n fisierul surs

;Semnificatia bitilor de configurare: ;CP_OFF ;WDT_OFF - Cod Protection - WatchDog Timer

;BODEN ON - Brown-Out Detect ENable ;PWRTE_ON - PoWeR-up Timer Enable ;INTRC_OSC_NOCLKOUT - INTernal RC_OSCilator ;MCLRE_OFF - Master CLeaR Enable ;CPD_OFF - Data Code Protection

;Adresele acestor biti se gsesc n fisierul p12f675.inc

;Definirea unor registre specifice aplicaiei cu directiva CBLOCK

cblock

0x20 ;Registru de numrare a strilor automatului ;Registru de numrare a strilor debounce

STATE_COUNTER STATE_DEBOUNCE CountH

CountL DEBOUNCE FLAGS endc

;CountH si CountL sunt registre utilizate n subrutina

;Definirea variabilelor de program pentru comanda LED-urilor D6 si D7 cu directiva DEFINE

#define TRIS_D6_D7 valoarea ei binara #define TRIS_D6_D7_OFF #define D6_ON D6_ON (LED-OK aprins)

B'00111001'

;Definirea variabilei TRIS_D6_D7 prin

B'00111111' B'00000010' ;Atribuirea valorii binare variabilei

;Initialize: secventa de initializare a SFR-urilor si a registrelor de uz general

ORG nop goto ORG

0x000

Initialize 0x004 ;Adresa vectorului de interupere

Timerl_Interrupt movlw 0xE1 movwf TMR1H movlw 0x0FF movwf TMR1L ;Reinitializam TMR1H cu valoarea de inceput

btfss goto bcf bsf

FLAGS,6

;Testare bitul de stare al ledului din registrul FLAGS

LED_D6_ON ;Salt la surutina do aprins ledul D6 FLAGS,6 STATUS,RP0 ;Resetare flag D6

movlw TRIS_D6_D7_OFF movwf TRISIO bcf movwf GPIO goto LED_D6_ON bsf bsf FLAGS,6 STATUS,RP0 ; Setare flag 06 RET_I ;Salt la subrutina de resetare a flagului de ntreruperi ;Stingere led D6

STATUS,RP0

movlw TRIS_D6_D7 movwf TRISIO bcf ; Activare D6 D7

STATUS,RP0

movlw D6_ON movwf GPIO ; Aprindere led D6 RET_I bcf bcf retfie Initialize STATUS,RP0 PIR1,TMR1IF ; Resetare flagului de ntreruperi a circuitului Timerl

; call

0x3FF

;Restabilirea factorului de calibrare

; instructiune comentariu necesar n cazul utilizrii simulatorului bsf STATUS,RP0 ;Selectare Bank 1 ;ncrcarea registrului OSCCAL cu valoarea

movwf OSCCAL factorului de calibrare movlw 0x7f movwf OPTION_REG movlw B'00111111' movwf TRISIO movwf WPU clrf digitale ANSEL

;Validare Weak pull-up general

;Configurarea pinilor l/O ca intrri

;Dezactivare convertor A/D - setare intrri/ieiri

bcf clrf GPIO

STATUS,RP0

;Selectare Bank 0

movlw B'00000111' movwf CMCON digitale ;Dezactivare comparator - setare intrri/iesiri

movlw B'10000111' movwf OPTION_REG (PSA=0) ;Setare functie Timer (T0CS=0), cu prescaler

;factor de divizare 1/256 (PS2=PS1=PS0=1) bsf clrf bsf bcf STATUS,RP0 VRCON ; Setare Vref Off

PIE1,TMR1IE ; Validare intreruperi generate de Timerl STATUS,RP0

movlw 0x07 bsf bcf bsf movlw 0xBE movwf TMR1H ; incarcare registre Timerl cu valorile initiale pentru a obine ; frecventa de 30Hz movlw 0xC8 movwf TMR1L clrf clrf clrf clrf clrf STATE_COUNTER ; Resetarea registrelor folosite de ctre program STATE_DEBOUNCE CountH CountL FLAGS INTCON,PEIE ; Se activeaza ntreruperile generate de catre periferice PIR1,TMR1IF ; Rcsctarc flag ntreruperi Timerl INTCON,GIE ; Activare ntreruperi generale

;State_Machine: Implementeaz un automat finit cu 5 stri State_Machine

call movf

Button_Press ;Apelare de subrutin STATE_COUNTER,w ;Se mascheaz ultimii trei bii din STATE_COUNTER

andlw B'00000111'

addwf PCL, f curente

;Program Counter (PCL) este ncrcat cu adresa strii

; prin intermediul acumulatorului (WORKREGISTER)

goto goto goto goto

StateO State1 State2 State3

StateO

;Stinge LED-uri si execut citire Inputal ;Seteaz trecerea la starea urmtoare (Statei) dac Inputbl = 1 sau rmne n StateO dac este 0 clrf bsf T1CON STATUS,RP0

movlw b'00111111' movwf TRISIO bcf STATUS,RP0

btfss GPIO,5 dac Inputbl=1 goto incf goto State_Machine

;Citeste Inputal i sare instructiunea urmtoare

STATE_COUNTER,f ;Seteaz State1 State_Machine

State1

;Execut citire Inputbl ;Seteaz trecerea la starea urmtoare dac Inputbl = 1, sau rmne n STATEI dac este 0

bsf

STATUS,RP0

movlw b'00111111' movwf TRISIO bcf btfss goto incf goto STATUS,RP0 GPIO,5 Interm STATE_COUNTER,f ;Seteaz State2 State_Machine ;citeste Inputbl ;Configurarea pinilor l/O ca intrri

State2

;Execut citire Inputal, Inputbl ;Seteaz State3 dac Inputal = 0 si Inputbl = 0, rmne n State2 pentru Inputal = 1 si Inputbl = 0 !Seteaz STATE5 (ERR) pentru alte valori

bsf

STATUS,RP0

movlw b'00111111' movwf TRISIO

bcf btfss goto

STATUS,RP0 GPIO,5 Interm ;Citeste Inputbl

movlw 0x3 subwf STATE_COUNTER,f ;Seteaz State3 goto State_Machine

Interm movlw 0x0 movwf STATE_COUNTER goto State_Machine

State3

;Execut citire Inputbl ;Seteaz trecerea la starea urmtoare (OK) dac Inputbl = 0 sau rmne n State3 dac este 1

movlw TRIS_D6_D7 movwf TRISIO ; Configurarea pinilor pentru aprinderea ledului D6 BANKO movlw 0x1 movwf T1CON ; Activarea circuitului Timerl movlw 0x0 bsf STATUS,RP0

movlw b'00111111' movwf TRISIO precedent n TRISIO ;ncarc valoarea binar din instructiunea

bcf btfsc goto decf decf decf goto

STATUS,RP0 GPIO,5 State_Machine STATE_COUNTER,f STATE_COUNTER,f STATE_COUNTER,f;Seteaz State1 State_Machine ;Citeste Inputbl

;Button_Press: testeaz starea microswitch-ului (SW), execut temporizarea de 10 ms ; la schimbarea ;strii si se ntoarce n programul principal la sesizarea strii de apsare a lui

Button_Press

btfss goto goto

STATE_DEBOUNCE,0 Debounce_1 Debounce_2

Debounce_1

bcf btfsc

STATUS, RP0 GPIO,3 ;SW este apsat?

goto incf

Debounce_1 STATE_DEBOUNCE, f

;Nu, salt la Debounce_1 ;Da, incrementeaz STATE_DEBOUNCE

Temp movlw 0x21 temporizare movwf CountH 33D ;ncepe initializarea registrelor folosite pentru

;Se ncarc registrul CountH cu constanta

M1 movlw 0x63 movwf CountL ;Se ncarc registrul CountL cu constanta 99D

M2 decfsz CountL,f ;Se execut decrementarea registrului CountL ;Cnd coninutul acestuia ajunge la 00H, se sare instruciunea ;urmtoare (goto M2) goto M2 diferit de 0, se execut salt la M2 decfsz CountH,f acestui registru este 00H ;Dac coninutul lui CountL este

;Decrementare CountH pn cnd continutul

;situatie n care se sare instructiunea urmtoare (goto M1) goto M1

;Temporizarea obtinut cu aceast secvent de program este

;Temp = 2 + 33*(5+3*99) us

btfss goto

STATE_DEBOUNCE,0 Button_Press ;ntoarce n programul principal cu

retlw 0 continutul acumulatorului egal 0

Debounce_2

bcf btfss

STATUS,RP0 GPIO,3 ;SW este relaxat?

goto clrf

Debounce_2 STATE_DEBOUNCE

;Nu, salt la Debounce_2 ;Da, reseteaz registrul STATE_DEBOUNCE

goto

Temp

end

;directiva 'end' a programului

Concluzii
Aparitia microcontrolerelor a ajutat mult evolutia tehnologiei. Dezvoltarile ulterioare au ajutat la usurarea muncii depuse de om si la economisirea timpului, printr-o functionare mult mai buna si mai rapida. De asemenea partea electronica a dispozitivelor a putut fi realizata mult mai precis si cu performante mai bune. Automatul finit creat si implementat pe kit-ul de dezvoltare PICkit FLASH Starter Kit detecteaza o secventa de minim 3 caractere egale cu 1 intr-un sir binar. In urma rularii programului cu ajutorul programului MPLab 7.60, semnalarea detectiei a celor 3 simboluri egale cu 1 (Y=1) se va face prin aprinderea led-ului D6 cu o frecventa de 10 Hz obtinuta cu Timer1.

Bibliografie
-Aplicatii hardware si software cu microcontrolerul PIC 12F675 de Istvan Sztojanov, Sever Pasca si Elisabeta Buzoi, editura Bucuresti 2008 - Internetul