Documente Academic
Documente Profesional
Documente Cultură
PROIECT 2
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.
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.
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.
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
list #include
p=12f675 <p12f675.inc>
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
;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
cblock
#define TRIS_D6_D7 valoarea ei binara #define TRIS_D6_D7_OFF #define D6_ON D6_ON (LED-OK aprins)
B'00111001'
0x000
Timerl_Interrupt movlw 0xE1 movwf TMR1H movlw 0x0FF movwf TMR1L ;Reinitializam TMR1H cu valoarea de inceput
FLAGS,6
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
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
; 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
STATUS,RP0
;Selectare Bank 0
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
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
call movf
Button_Press ;Apelare de subrutin STATE_COUNTER,w ;Se mascheaz ultimii trei bii din STATE_COUNTER
andlw B'00000111'
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
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
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
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
Debounce_1
bcf btfsc
goto incf
Debounce_1 STATE_DEBOUNCE, f
Temp movlw 0x21 temporizare movwf CountH 33D ;ncepe initializarea registrelor folosite pentru
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
;Temp = 2 + 33*(5+3*99) us
btfss goto
Debounce_2
bcf btfss
goto clrf
Debounce_2 STATE_DEBOUNCE
goto
Temp
end
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