como controlar el tiempo en 16F84(mikroC)

hola como estan. espero que bien..

Nesecitaba su ayudas porque quiero realizar un secuenciador con el pic 16F84A y como recien comienzo con mikroC me sale muchos errores.

les cuento cual es mi proyecto.

Quiero utilizar Porta F0 a F3 para entrada (F0, F1 manejar el tiempo, F2,F3 manejar los juegos de luces) y Portb para manejar los led(F0,F7).

comence por diseñar como manejar el tiempo por las entradas F0 reduce la velocidad, F1 aumenta la velocidad..

cree un variable "t" que ira aumentando y reduciendo su valor y mandando ese valor por parametro a la funcion Delay_ms(t), pero me sale un error y no se de que se trataria..

unsigned short int t;

void main(void)
{
TRISA=1;
TRISB=0;
t=100;
while(1)
{
if (PORTA.F0==1)
{
t=t+100;
if(t=2000)
t=2000;
}
if(PORTA.F1==1)
{
t=t-100;
if(t=100)
t=100;
}
Delay_ms(t);
PORTB=0x01;
}
}

ese es el codigo..

y les coloco imagenes de lo que quiero armar asi me dan una manito con la programacion...

desde ya muchas gracias..

saludos
 

Adjuntos

  • ARREGLO.png
    ARREGLO.png
    9.1 KB · Visitas: 18
  • SECUIADOR CON PIC.png
    SECUIADOR CON PIC.png
    41.3 KB · Visitas: 44
tengo el mismo problema amigo.. pareciera que la funcion delay_ms() no acepta como argumento una variable, solo una constante... yo estoy tratando de controlar un motor paso a paso unipolar con un 16f628a y mi programa lo hago en mikroc.. y no consigo hacer retardos variables... ojala alguien mas experimentado pueda sacarnos la duda,... un abrazo
 
un amigo me ayudo a controlar el tiempo sin el Delay_ms().

Lo solucione configurando interrupciones..

Delay_ms(250); //
/////////////////
// Luego configuro Timer0 para interrupciones
// Si Timer0 1:128 Scaler - Desborda cada 128*4 ciclos de reloj
// esto a 4Mhz es aprox 128 useg
OPTION_REG = 0x06; //Timer0 1:128
// Ahora tengo que habilitar las interrupciones
INTCON.T0IE = 1; //Habilito Interrupciones por desborde de Timer0
INTCON.GIE = 1; //Habilito Interrupciones generales

espero que puedan solucionar sus problemas como solucione el mio
 
yo habia echo con bucle pero a la hora de probar tenia q esperar q termine una secuencia para q haga el cambio de tiempo. x eso me ayudaron con la interrupciones ya q lo hace en el acto
 
gente ya solucione el problema y quedo andando todo a la perfeccion, por si a alguien le interesa es sobre el control de un potor paso a paso unipolar con un pic 16f628a y un IC ULN2003, use el compilador CCS (los fuses los configuro directamente en el winpic800).. Si alguien quiere aportar alguna mejora la tendre muy en cuenta, porque recien empiezo con esto y soy muy inexperto.. saludos

codigo:

#include <16F628A.h>
#use delay (clock=4000000)
int t;
void main() {
set_tris_b(0x00);
set_tris_a(0xFF);
t=3000;
while(1)
{

if((input(PIN_A0)==1)&&(t>10))
t=t-10;


if((input(PIN_A1)==1)&&(t<6000))
t=t+10;


if(input(PIN_A3)==0)
{
delay_ms(t);
output_high(PIN_B6);
output_low(PIN_B2);
output_low(PIN_B0);
output_low(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_high(PIN_B2);
output_low(PIN_B0);
output_low(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_low(PIN_B2);
output_high(PIN_B0);
output_low(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_low(PIN_B2);
output_low(PIN_B0);
output_high(PIN_B1);
}
if(input(PIN_A3)==1)
{
delay_ms(t);
output_high(PIN_B6);
output_low(PIN_B2);
output_low(PIN_B0);
output_low(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_low(PIN_B2);
output_low(PIN_B0);
output_high(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_low(PIN_B2);
output_high(PIN_B0);
output_low(PIN_B1);
delay_ms(t);
output_low(PIN_B6);
output_high(PIN_B2);
output_low(PIN_B0);
output_low(PIN_B1);

}
}
}
 
Atrás
Arriba