2011_P22

Table of contents

1. Results [edit]

2. Download [edit]

Semafor

Project Description

Am ales sa realizez si sa implementez o placuta de circuit care sa simuleze functionalitatea a 2 semafoare. Simularea se va face prin programarea PIC16F628A.

Project Requirements

Vei folosi placa cu PIC16F628A. La PIC am conectat 2 leduri rosii. 2 leduri galbene si 2 leduri verzi.

De la placa EV/Z3 vei primii cate un caracter prin seriala cu starea curenta a becurilor. 100100 -> aceasta stare indica faptul ca 2 leduri sunt aprinse iar  celelalte 4 sunt stinse. PIC-ul va updata starea porturilor la care sunt conectate led-urile.

Pe placa EV/Z3 va functiona un program care va simula circulatia prin intersectie. O stare de mers trebuie sa dureze minim 5s.

User Flow

Required components

Componentele pe care le-ati folosit:

-6 leduri: 2 rosi, 2 galbene si 2 verzi;

-PIC16F628A;

-MAX232;

-5 condensatori de 1uF;

-2 condensatori de 22pF;

-LM7805;

-3 rezistente de 4.7k;

-1 cuartz de 20MHz;

-3 rezistente de 100k;

-6 rezistente de 330 Ohmi;

-2 mufe DB9 TATA;

-1 buton;

-1 placa de circuit.

 

Software Design

Programul in C care imi genereaza schimbul de lumini :

#INCLUDE<16F84A.H>

#USE DELAY(CLOCK=32768) //CRISTALUL DE CUART ARE 32768 HZ

#FUSES LP,NOWDT // SE FOLOSESTE UN REZONATOR DE TIP LOW POWER CRYSTAL, NOWDT = DEZACTIVEAZA WATCHDOG
int perioade,sw,a; //variabile globale pentru a fi recunoscute si in functia main si in functia timer_int
#INT_TIMER0void timer_int() //va fi apelata de catre mcu cand timer-ul va genera intrerupere

{ perioade++;

if(perioade>=15 && perioade <=21 )

{ if(sw==0) //este cale libera pentru cei de la semaforul 2 dar mai e putin timp si se face rosu

{ //ledul galben de la semaforul 2 se aprinde si se stinge semn ca urmeaza rosu

if(a==0)

{output_bit(PIN_B2,1); //se aprinde galben semafor 2;                          a=1;

}

else

{output_bit(PIN_B2,0);  //se stinge galben semafor 2;

a=0;

}

}

else //este cale libera pentru cei de la semaforul 1 dar mai e putin timp si se face rosu

{ //ledul galben de la semaforul 1 se aprinde si se stinge semn ca urmeaza rosu

if(a==0) {output_bit(PIN_A3,0); //se stinge galben semafor 1;                              a=1;

}

else     {output_bit(PIN_A3,1); //se aprinde galben semafor 1;

a=0;

}       }    }

else       if(perioade>21)

{  if(sw==1)

{ output_bit(PIN_A2,0); // se stinge verde semafor 1; output_bit(PIN_B0,1); // se aprinde verde semafor 2; output_bit(PIN_A4,1); // se aprinde rosu semafor 1;

output_bit(PIN_B4,0); // se stinge rosu semafor 2;

sw=0; //cale libera pentru cei care sunt la semaforul 2

}

else { output_bit(PIN_A2,1); // se aprinde verde semafor 1; output_bit(PIN_B0,0); // se stinge verde semafor 2;

output_bit(PIN_A4,0); // se stinge rosu semafor 1;

output_bit(PIN_B4,1); // se aprinde rosu semafor 2;

sw=1; //cale libera pentru cei care sunt la semaforul 1

} perioade=0;  //se reia ciclul perioadelor }

}

void main(){
perioade=0;

a=0;  //folosit pentru aprinderea si stingerea culorii galben de la cele doua semafoare
set_tris_a(0x00); //toti pinii portului A sunt setati ca iesireset_tris_b(0x00); //toti pinii portului B sunt setati ca iesireoutput_b(0);

//initial totii pinii portului A au valoarea 0 (ledurile sunt stinse)output_a(0); //initial totii pinii portului B au valoarea 0 (ledurile sunt stinse)
sw=1; // este cale libera pentru cei de la semaforul 1 => se seteaza semafoarele
output_bit(PIN_A2,1); //se aprinde verde semafor 1

output_bit(PIN_A3,0); //se stinge galben semafor 1

output_bit(PIN_A4,0); //se stinge rosu semafor 1
output_bit(PIN_B0,0); //se stinge verde semafor 2

output_bit(PIN_B3,0); //se stinge galben semafor 2

output_bit(PIN_B4,1); //se aprinde rosu semafor 2
setup_timer_0(T0_INTERNAL|T0_DIV_32); //se seteaza timerulset_timer0(0); //se incarca timerul cu valoare 0enable_interrupts(INT_TIMER0);        //se valideaza intreruperile timeruluienable_interrupts(GLOBAL); //se valideaza bitul GIE = Global Interrupt Enable
while(1);
}

Results [edit]

Download [edit]

Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.

Arhiva va contine 2 directoare (1 singur pentru proiecte doar software)

Hardware design - schema uC + codul folosit pentru a genera fisierul .HEX

Software design - template-ul Open Watcom folosit

Status

Pasii de lucru la acest proiect:

-18 aprilie - achizitionare componente;

- 30 aprilie -relizarea programului in C a simulatorului;

-  2 mai -realizarea schemei de principiu in Proteuss;

- 6 mai - lipirea unora dintre piese: socluri PIC si MAX232; lipirea rezistentelor si condensatoarelor;

- 14 mai -lipirea si realizarea conexiunii dintre mufele DB9 si PIC si MAX232;