Hola RedPic!
Tengo una consulta:
He modificado el codigo minimamente como para probar la placa controladora de una pata de mi robot (4 servos), tal como te copio mas abajo, pero los servos ni se mueven.....
Podrias (si tienes tiempo) mirar el tema de los fuses, etc, a ver que pasa?
Estoy usando un 16F627A, con los servos en B0, B3, B4 y B5, pin RESET a +V a travez de un diodo y resistencia de 4k7, nada conectado a ninguno de los otros pines del micro.
Las tensiones en la placa son correctas, 5V, GND, tengo en el reset 4.97V, etc.
Este es el codigo:
#include <16F627A.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use standard_io(a)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
#define PIN_SERVO1 PIN_B0
#define PIN_SERVO2 PIN_B3
#define PIN_SERVO3 PIN_B4
#define PIN_SERVO4 PIN_B5
const int AJUSTE_FINO_DE_RTCC = 30;
const int ticks_PULSO_MINIMO = 31;
const int ticks_PULSO_MEDIO = 93;
const int ticks_PULSO_MAXIMO = 155;
int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int1 flagSERVO2 = 0;
int1 flagSERVO3 = 0;
int1 flagSERVO4 = 0;
int tSERVO1 = ticks_PULSO_MEDIO;
int tSERVO2 = ticks_PULSO_MEDIO;
int tSERVO3 = ticks_PULSO_MEDIO;
int tSERVO4 = ticks_PULSO_MEDIO;
char Keypress=0x00;
void eco_servos(void);
#int_rda
void rda_isr() {
Keypress=0x00;
if(kbhit()){
}
}
#int_RTCC
RTCC_isr(){
++contRTCC;
if(contRTCC==4){
set_TIMER0(AJUSTE_FINO_DE_RTCC);
}
if(contRTCC==5){
flagRTCC=1;
contRTCC=0x00;
}
}
void main() {
int ValTIMER0;
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
enable_interrupts(int_rda);
enable_interrupts(global);
printf("\r\n\SERVO Commander\r\n\r\n"); eco_servos();
set_TIMER0(0);
enable_interrupts(INT_RTCC);
do {
// DISPARO DEL PULSO PWM
if(flagRTCC==1){
flagRTCC=0;
output_high(PIN_SERVO1);
flagSERVO1=1;
output_high(PIN_SERVO2);
flagSERVO2=1;
output_high(PIN_SERVO3);
flagSERVO3=1;
output_high(PIN_SERVO4);
flagSERVO4=1;
}
// CONTROL DE ANCHO DEL PULSO PWM
if(flagSERVO1==1){
valTIMER0 = get_TIMER0();
if(valTIMER0 > tSERVO1){
flagSERVO1 = 0;
output_low(PIN_SERVO1);
}
}
if(flagSERVO2==1){
valTIMER0 = get_TIMER0();
if(valTIMER0 > tSERVO2){
flagSERVO2 = 0;
output_low(PIN_SERVO2);
}
}
if(flagSERVO3==1){
valTIMER0 = get_TIMER0();
if(valTIMER0 > tSERVO3){
flagSERVO3 = 0;
output_low(PIN_SERVO3);
}
}
if(flagSERVO4==1){
valTIMER0 = get_TIMER0();
if(valTIMER0 > tSERVO4){
flagSERVO4 = 0;
output_low(PIN_SERVO4);
}
}
} while (TRUE);
}
void eco_servos(void){
}
(ya se...podria haber sacada mas cosas, los printF por ejemplo, pero como estoy empezando con CCS quise toquetear lo menos posible. GRACIAS!