Sunteți pe pagina 1din 17

Universitatea POLITEHNICA Bucureti

Facultatea de Electronic, Telecomunicaii i Tehnologia Informaiei

PROIECT 2
Automat finit pentru detectarea secvenei 1011 ntr-un ir binar

Coordonator tiintific:
as. ing. Bogdan FLOREA

Student:
Adriana Vcrelu
Grupa: 432B

2010-2011

Cuprins:
1. Enun
2. Rezumatul proiectului
3. Aspecte teoretice ale proiectului
- funcionarea automatului
- elemente de OrCAD
- elemente ale microcontrollerului PIC
4. Simularea OrCAD
- schema implementat cu bistabili J-K
- semnalele obinute
5. Implementarea automatului pe microcontroler
- schema logic a programului
- programul in ANSI C

1. Enun:

2. Rezumatul proiectului:
Proiectul const n implementarea unui automat cu stri finite ce detecteaz un ir de bii
1011.
Proiectul trebuie implementat prin dou metode, (1) folosind bistabili J-K, inversoare i pori SAUNU i (2) cu ajutorul unei aplicaii PICkit 1 FLASH Starter Kit, echipat cu microcontrolerul PIC
12F675
Pentru implementarea cu ajutorul bistabililor J-K i a circuitelor logice combinaionale aplicm
fiecrei ecuaii de comand formulele lui de Morgan i simplificm ecuaiile date.
Dup aceast etap, implementm circuitul n PSpice pentru a-l simula i testa.
Pentru a implementa automatul pe PIC, n primul rnd trebuie s implementm iniializarea
registrelor microcontrollerului, apoi citirea biilor de pe switch-uri, funcia de detecie a secvenei
cerute, i nu n ultimul rnd trebuie s calculm valoarea de reload pentru frecvena de 20 Hz a
Timer1 ( valorile de reload din T1H i T1L ).

3. Aspecte teoretice ale proiectului:


- funcionarea automatului:
Automatul finit este un model de comportament compus din stri, tranziii i aciuni. O stare stocheaz
informaii despre trecut, adic reflect schimbrile intrrii de la iniializarea sistemului pn n momentul de
fa. O tranziie indic o schimbare de stare i este descris de o condiie care este nevoie s fie ndeplinit
pentru a declana tranziia. O aciune este o descriere a unei activiti ce urmeaz a fi executat la un anumit
moment. Sunt dou tipuri de automate: automate Mealy si automate Moore.

Automatul va funciona conform urmtoarelor ecuaii de comand:

Tranziia ntre stri se face n funcie de valoarea intrrii i trebuie s detectm irul 1011 n
starea 4.

- elemente de OrCAD
OrCAD 16.2 este o suit de programe produse de Cadence, care conine Capture ( i variaiile
acestuia ), utilitarul specializat pe desenarea schemelor electronice, Layout, utilitarul specializat n
proiectarea placilor electronice imprimate ( PCB ), PSpice ( i variaiunile acestuia ), utilitarul n care
se pot simula scheme electronice sub diveri parametri.
PSpice poate simula circuite analogice n domeniul timp ( regim tranzitorilu ), n domeniul
frecven ( AC Sweep ), poate calcula PSF-ul ( punctul static de funcionare ) al circuitului, sub
diveri parametri de testare. De asemenea, se pot simula i circuite digitale, dar i variaiuni ale
circuitelor analogice cu cele digitale.

- elemente ale microcontrolerului PIC:


PIC este microcontrolerul produs de Microchip Technology. PIC-ul are 3 familii de
microcontrollere: familia de 8 bii, de 16 bii i familia de 32 de bii. Cele mai cunoscute i frecvent
utilizate microcontrolere sunt PIC-urile pe 8 bii, ele fiind o solutie ieftin i eficient. PIC-ul are
foarte multe module i protocoale cum ar fi: oscilatorul intern, Timere-le, convertoare AnalogDigital, UART, I2C, One-Wire, SPI, Real Time Clock sustenabil pe baterie, i suport o gam foarte
larg de dispozitive ( LCD-uri, GLCD, senzori, etc ) precum i oscilator extern.
Microchip pune la dispoziie dou versiuni de C i o versiune de assembler, dar tere pri pun
la dispoziie o serie de alte limbaje: alt versiune de C, Pascal, Basic, etc.

4. Simularea OrCAD:
Schema implementat cu bistabili J-K i pori SAU-NU i inversoare.

n urma simulrii am obinut urmtoarele semnale:

5. Implementarea automatului pe microcontroler:

- schema logic a programului:

- programul pentru implementare:

;Automatul are 5 stari


;STATE0 = stinge orice LED aprins = citeste InputI
;-

dac este 0, seteaz STATE0

;-

dac este 1, seteaz STATE1

;STATE1 = citeste InputI


;-

dac este 1, seteaz STATE1

;-

dac este 0, seteaz STATE2

;STATE2 = citeste InputI


;-

dac este 0, seteaz STATE0

;-

dac este 1, seteaz STATE3

;STATE3 = citeste InputI


;-

dac este 0, seteaz STATE2

;-

dac este 1, seteaz STATE4

STATE4 = aprinderea LED-ului D6


;-

dac este 0, seteaz STATE2

;-

dac este 1, seteaz STATE1

;InputI este un microswitch extern, care se va lega la GP5, iar SW1, legat la GP3,
;va determina prin apsare intrarea n starea urmtoare Cablarea celor trei comutatoare se realizeaz
astfel nct prin apsarea lor s genereze 0 logic pe pinul microcontrolerului iar relaxarea lor s
genereze 1 logic.

list

p=12f675

#include

<p12f675.inc>

errorlevel -302
fisierul list

;Directiva de definire a procesorului

;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 fiierul 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
;CPD_OFF

- Master CLeaR Enable

- Data Code Protection

;Adresele acestor biti se gsesc n fisierul p12f675.inc

;Definirea unor registre specifice aplicatiei cu directiva CBLOCK

cblock

0x20

STATE_COUNTER
STATE_DEBOUNCE

;Registru de numrare a strilor automatului


;Registru de numrare a strilor debounce

CountH
CountL
DEBOUNCE

;CountH si CountL sunt registre utilizate n subrutina

FLAGS
endc

;Definirea variabilelor de program pentru comanda LED-ului D6 cu directiva DEFINE

#define TRIS_D6_D7
valoarea ei binara

B'00111001' ;Definirea variabilei TRIS_D6_D7 prin

#define TRIS_D6_D7_OFF B'00111111'


#define D6_ON
D6_ON (LED-OK aprins)

B'00000100' ;Atribuirea valorii binare variabilei

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

ORG

0x000

nop
goto

Initialize

ORG

0x004

;Adresa vectorului de interupere

Timerl_Interrupt
movlw 0x3C
movwf TMR1H

;Reinitializam TMR1H cu valoarea de inceput

movlw 0x0B0
movwf TMR1L
btfss

FLAGS,6

;Testare bitul de stare al ledului din registrul FLAGS

goto

LED_D6_ON ;Salt la subrutina de aprins ledul D6

bcf

FLAGS,6

bsf

STATUS,RP0

;Resetare flag D6

movlw TRIS_D6_D7_OFF
movwf TRISIO
bcf

;Stingere led D6

STATUS,RP0

movwf GPIO
goto

RET_I ;Salt la subrutina de resetare a flagului de ntreruperi

LED_D6_ON
bsf

FLAGS,6

bsf

STATUS,RP0

; Setare flag 06

movlw TRIS_D6_D7
movwf

TRISIO

; Activare D6 D7

bcf

STATUS,RP0

movlw D6_ON
movwf

GPIO ; Aprindere led D6

bcf

STATUS,RP0

bcf

PIR1,TMR1IF ; Resetare flagului de ntreruperi a circuitului Timerl

RET_I

retfie
Initialize

; call 0x3FF

;Restabilirea factorului de calibrare


; instructiune comentariu necesar n cazul

utilizrii simulatorului
bsf

STATUS,RP0

movwf OSCCAL
de calibrare

;Selectare Bank 1
;ncrcarea registrului OSCCAL cu valoarea factorului

movlw 0x7f
movwf OPTION_REG

;Validare Weak pull-up general

movlw B'00111111'
movwf TRISIO

;Configurarea pinilor l/O ca intrri

movwf WPU
clrf

ANSEL

bcf
clrf

STATUS,RP0

;Dezactivare convertor A/D - setare intrri/ieiri digitale

;Selectare Bank 0

GPIO

movlw B'00000111'
movwf CMCON

;Dezactivare comparator - setare intrri/ieiri digitale

movlw B'10000111'
movwf OPTION_REG

;Setare functie Timer (T0CS=0), cu prescaler (PSA=0)


;factor de divizare 1/256 (PS2=PS1=PS0=1)

bsf

STATUS,RP0

clrf

VRCON

; Setare Vref Off

bsf

PIE1,TMR1IE ; Validare intreruperi generate de Timerl

bcf

STATUS,RP0

movlw 0x07
bsf

INTCON,PEIE

; Se activeaza ntreruperile generate de catre periferice

bcf

PIR1,TMR1IF ; Rcsctarc flag ntreruperi Timerl

bsf

INTCON,GIE

; Activare ntreruperi generale

movlw 0xBE
movwf TMR1H

; incarcare registre Timerl cu valorile iniiale pentru a obine


; frecventa de 30Hz

movlw 0xE6
movwf TMR1L
clrf

STATE_COUNTER ; Resetarea registrelor folosite de ctre program

clrf

STATE_DEBOUNCE

clrf

CountH

clrf

CountL

clrf

FLAGS

;State_Machine: Implementeaz un automat finit cu 5 stri


State_Machine

call

Button_Press ;Apelare de subrutin

movf STATE_COUNTER,w
andlw B'00000111' ;Se mascheaz ultimii trei bii din STATE_COUNTER

addwf PCL, f

;Program Counter (PCL) este ncrcat cu adresa stii curente


; prin intermediul acumulatorului

(WORKREGISTER)

goto

State0

goto

State1

goto

State2

goto

State3

goto

State4

State0

;Stinge LED-uri si execut citire InputI


;Seteaz trecerea la starea urmtoare (State1) dac InputI = 1 sau rmne n State0 dac este 0
clrf
bsf

T1CON
STATUS,RP0

movlw b'00111111'
movwf TRISIO
bcf

btfss
InputI=1

STATUS,RP0

GPIO,4

;Citete InputI i sare instruciunea urmtoare dac

goto

State_Machine

incf

STATE_COUNTER,f ;Seteaz State1

goto

State_Machine

State1

;Seteaz trecerea la starea urmtoare dac InputI = 0, sau rmne n STATE1 dac este 1

bsf

STATUS,RP0

movlw b'00111111'
movwf TRISIO
bcf

STATUS,RP0

;Configurarea pinilor l/O ca intrri

btfsc

GPIO,4

;citeste InputI

goto

State_Machine

incf

STATE_COUNTER,f ;Seteaz State2

goto

State_Machine

State2

;Execut citire InputI


;Seteaz State0 dac InputI = 0 si State3 pentru InputI = 1

bsf

STATUS,RP0

movlw b'00111111'
movwf TRISIO
bcf

STATUS,RP0

movlw 0x0
movwf STATE_COUNTER ;Preseteaz State2
btfss

GPIO,4

goto

State_Machine

;Citeste InputI

movlw 0x3
movwf STATE_COUNTER
goto

State_Machine

State3

;Execut citire InputI


;Seteaz trecerea la starea urmtoare (OK) dac InputI = 1 sau seteaza State2 dac este 0
bsf

STATUS,RP0

movlw b'00111111'
movwf TRISIO
bcf

STATUS,RP0

movlw 0x2
movwf STATE_COUNTER ;Preseteaz State2
btfss

GPIO,4

goto

State_Machine

;Citeste InputI

movlw 0x4
movwf STATE_COUNTER
goto

State_Machine

State4

;Stare OK: aprinde LED6 si seteaz State0

movlw TRIS_D6_D7
movwf TRISIO ; Configurarea pinilor pentru aprinderea ledului D6 BANKO
movlw 0x1
movwf T1CON ; Activarea circuitului Timerl movlw
movlw 0x2
movwf STATE_COUNTER ;Preseteaz State2
btfss

GPIO,4

goto

State_Machine

movlw 0x1
movwf STATE_COUNTER
goto

State_Machine

;Citeste InputI

0x0

;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

STATE_DEBOUNCE,0

goto

Debounce_1

goto

Debounce_2

Debounce_1

bcf

STATUS, RP0

btfsc

GPIO,3

goto

Debounce_1

;Nu, salt la Debounce_1

incf

STATE_DEBOUNCE, f

;Da, incrementeaz STATE_DEBOUNCE

;SW este apsat?

Temp
movlw 0x21
temporizare
movwf CountH

;ncepe initializarea registrelor folosite pentru


;Se ncarc registrul CountH cu constanta 33D

M1
movlw 0x63
movwf CountL

;Se ncarc registrul CountL cu constanta 99D

M2
decfsz CountL,f

;Se execut decrementarea registrului CountL


;Cnd continutul acestuia ajunge la 00H,

se sare instruciunea
;urmtoare (goto M2)

goto M2
0, se execut salt la M2
decfsz CountH,f
registru este 00H

;Dac continutul lui CountL este diferit de


;Decrementare CountH pn cnd coninutul acestui
;situatie n care se sare instruciunea

urmtoare (goto M1)


goto

M1

;Temporizarea obtinut cu aceast secven de program este


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

btfss

STATE_DEBOUNCE,0

goto

Button_Press

retlw 0
acumulatorului egal 0

;ntoarce n programul principal cu continutul

Debounce_2

bcf

STATUS,RP0

btfss

GPIO,3

goto

Debounce_2

clrf

STATE_DEBOUNCE

goto

Temp

end

;SW este relaxat?

;Nu, salt la Debounce_2


;Da, reseteaz registrul STATE_DEBOUNCE

;directiva 'end' a programului

S-ar putea să vă placă și

  • Curs 4
    Curs 4
    Document7 pagini
    Curs 4
    Iulian Pavaloiu
    Încă nu există evaluări
  • ASC 1 Introducere
    ASC 1 Introducere
    Document10 pagini
    ASC 1 Introducere
    Mops Light
    Încă nu există evaluări
  • Imagini Histograma
    Imagini Histograma
    Document55 pagini
    Imagini Histograma
    Iulian Pavaloiu
    Încă nu există evaluări
  • Curs 3
    Curs 3
    Document9 pagini
    Curs 3
    Iulian Pavaloiu
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document5 pagini
    Curs 9
    Iulian Pavaloiu
    Încă nu există evaluări
  • Curs 2
    Curs 2
    Document6 pagini
    Curs 2
    Iulian Pavaloiu
    Încă nu există evaluări
  • Curs 8iuli
    Curs 8iuli
    Document5 pagini
    Curs 8iuli
    Iulian Pavaloiu
    Încă nu există evaluări
  • Cap1 AACEP
    Cap1 AACEP
    Document12 pagini
    Cap1 AACEP
    iuleana
    Încă nu există evaluări
  • Curs 14
    Curs 14
    Document2 pagini
    Curs 14
    Iulian Pavaloiu
    Încă nu există evaluări
  • Circuite de Esantionare Si Memorare
    Circuite de Esantionare Si Memorare
    Document8 pagini
    Circuite de Esantionare Si Memorare
    Ovidiu Stoian
    Încă nu există evaluări
  • CVF
    CVF
    Document8 pagini
    CVF
    Alexandru Albu
    Încă nu există evaluări
  • Eii
    Eii
    Document1 pagină
    Eii
    Iulian Pavaloiu
    Încă nu există evaluări