Sunteți pe pagina 1din 4

#define sus PORTA.

f3
#define jos PORTE.f0
#define stanga PORTA.f2
#define dreapta PORTE.f1
#define stanga_sus PORTC.f2
#define stanga_jos PORTE.f2
#define dreapta_sus PORTA.f1
#define dreapta_jos PORTA.f0
#define centru PORTA.f5
#define LED_stanga LATD.f0
#define LED_centru_stanga LATD.f1
#define LED_dreapta LATD.f3
#define LED_centru_dreapta LATD.f2
#define servo_baza LATD.f7
#define servo_sus LATD.f6
#define servo_gripp LATD.f4
#define servo_ultim LATD.f5

//--------------------------------DESCRIERE------------------------------------//
/*Platforma robotica mobila comandata prin microswitch-ri si 3 grade de libertate.
Alimentarea sistemelor electronice componente se realizeaza la o tensiune de 5V,
tensiune obtinua prin stabilizare pozitiva de tensiune de la o sursa externa de
5-18V. Miscarile baratelor platformei robotice se realizeaza prin intermediul
servomecanismelor RC.*/
//-------------------------CONECTIVITATE si MODULE ELECTRONICE-----------------//
/*1). INTRARI DIGITALE :
RA0 = tasta dreapta jos;
RA1 = tasta dreapta sus;
RA2 = tasta stanga;
RA3 = tasta sus;
RA5 = tasta centru;
RE0 = tasta jos;
RE1 = tasta dreapta;
RE2 = tasta stanga jos;
RC2 = tasta stanga sus;
2). IESIRI LED-uri indicatoare:
RD0 = LED stanga;
RD1 = LED centru stanga;
RD2 = LED centru dreapta;
RD3 = LED dreapta;

3). IESIRI SERVOMECANISME :


RD4 = SERVO GRIPP;
RD5 = SERVO ULTIM;
RD6 = SERVO CENTRAL;
RD7 = SERVO BAZA; */
//----------------------------------------------------------------------------//
void main() {
//---------setari registri clock---64Mhz => 61.2 ns/ instruction (measured with
oscilloscope)------//
// OSCILATORUL ESTE SETAT PE INTERNAL OSCILATOR 64 Mhz
// 1). Din seterile "project-edit project" se seteateaza tipul oscilatorului (setat pe internal
RC oscillator) din registrul CONFIG1H;
// a). Registrul CONFIG1H<3:0> = bitii FOSC<3:0> = "1000" ( modul = INTIO2
internal RC oscillator);
// b). Registrul CONFIG1H<4> = PLLCFG = "1" (1 = Oscillator is multiplied by 4);
// 2). Registrul OSCTUNE <6> = PLLEN = "1" (Frequency Multiplier PLL Enable bit =
enable);
// 3). Registrul OSCCON <6:4> = bitii IRCF<2:0> = "111"(111 = HF-INTOSC output
frequency is used (16 MHz)) - tipul oscilaatorului intet folosit
// 4). Registrul OSCCON <1:0> = bitii SCS<1:0> = "00"(Default primary oscillator
(OSC1/OSC2 or HF-INTOSC with or without PLL. Defined by the FOSC<3:0>
Configuration bits, CONFIG1H<3:0>)
//----------------------------------------------------------------------------------------------------------
-----//
OSCCON = 0b01110000;
OSCTUNE.f6 = 1;
//------------------------setari TRIS-reg directivitate-----------------------//
TRISA = 0b00101111;
TRISC = 0b00000100;
TRISB = 0b00000000;
TRISD = 0b00000000;
TRISE = 0b00000111;
ANCON0=0; // Canalele AN0-AN7 de IN = digitale
ANCON1=0; // Canalele AN8-AN14 de IN = digitale
//----------------------SETARE INTRERUPERE PE TIMER1--------------------------//
INTCON.GIE = 1; //enable all un-masked interrupts
INTCON.PEIE = 1; //Set PEIE
T1CON = 1; //enable Timer1
PIR1.TMR1IF = 0; //clear interrupt flag
TMR1H = 0b11111111; // SET INITIAL START TIMER VALUE-High (step =
0.114 ms cu osciloscopul = pas de timer)
TMR1L = 0b11110111; // SET INITIAL START TIMER VALUE-Low
PIE1.TMR1IE = 0; // disable Timer1 interrupt
//----------------------------------------------------------------------------//
LATD = 0; // iesirile pe LED-uri =0;

for (;;){
//--------------------------------------------------servo baza = stanga-dreapta
while (stanga){
servo_baza= 1;
Delay_us(900);
servo_baza = 0;
Delay_ms(40);
LED_stanga = 1;
}

while (dreapta){
servo_baza= 1;
Delay_us(2000);
servo_baza = 0;
Delay_ms(40);
LED_dreapta = 1;
}
//-------------------------------------------------------------------servo gripp
while (dreapta_sus){
servo_gripp= 1;
Delay_us(900);
servo_gripp= 0;
Delay_ms(18);
LED_centru_stanga =1;
LED_centru_dreapta =1;
}

while (dreapta_jos){
servo_gripp= 1;
Delay_us(2100);
servo_gripp= 0;
Delay_ms(18);
LED_centru_stanga =1;
LED_centru_dreapta =1;
}
//----------------------------------------------------------------servo superior
while (sus){
servo_sus= 1;
Delay_us(900);
servo_sus = 0;
Delay_ms(40);
LED_centru_stanga =1;
}
while (jos){
servo_sus= 1;
Delay_us(1700);
servo_sus = 0;
Delay_ms(40);
LED_centru_dreapta =1;
}
//--------------------------------------------------------------servo sus ultim
while (stanga_sus){
servo_ultim= 1;
Delay_us(800);
servo_ultim = 0;
Delay_ms(30);
}
while (stanga_jos){
servo_ultim= 1;
Delay_us(2200);
servo_ultim = 0;
Delay_ms(30);
}
LED_centru_dreapta =0;
LED_centru_stanga =0;
LED_dreapta =0;
LED_stanga =0;
}
}

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