2011_P22
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
Download
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;