Programas hechos en MPLAB

que tal, apenas estoy adentrandome al mundo de la programacion en ccs, y me esta gustando y da gusto saber de foros como estos, estaba probando el programa de interrupciones, pero la verdad si es mucha informacion para mi caburarla, les cuento mi problema tengo que hacer un programa con el cual cuente los pulsos de entrada, algo muy sencillo pero que por mas que le leo y leo no logro entenderlo bien espero me puedan asesorar muchas gracias
 
hola robotec

puedes utilizar la interrupcion por pin, en el caso de un16fxxx la mayoria, el rb0, y cada vez q ingrese a la interrupcion pues q incremente una variable,,,, la funcion de interrupcion es como otra funcion, lo unico es que se ejecuta cuando haya un cambio en dicho pin,,

mas o menos seria asi, pues no estoy en casa para colaborarte con el program en el momento..

incluir las archivos de cabecera

long var=0;

#INT_EXT
void nombre_funcion()
{var++;}

void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);

WHILE(TRUE)
{//bucle infinito}

}

bueno lo demas q necesites hacer, ...

saludos,,,
 
muchas gracias einnerc voy a trabajar con lo que me pusiste y ya te dire de mis avances

robotec dijo:
muchas gracias einnerc voy a trabajar con lo que me pusiste y ya te dire de mis avances
agrego el codigo con el cual me estoy basando, lo simulo y nada
#include <16F876a.h>
#use delay (clock=4000000)
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP //ordenes para el programador
#include<lcd.c> //libreria manejo lcd

#use fast_io(a)

int count=0;

void main()
{

set_tris_a(0xFF);

lcd_init();
lcd_putc("\f");

setup_timer_0 ( RTCC_EXT_L_TO_H|RTCC_DIV_1); //los impulsos por RA4/T0CKI
set_timer0(56); //si optoacoplador impulsos 100Hz, cada 2sg ++count
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);


while(TRUE){
delay_ms(500);
printf(lcd_putc, "\f%u impulsos", count);
}
}


#INT_TIMER0
void wave_timer() {

set_timer0(56);
++count;

}
 
Última edición:
Hola amigos me parece interesante todo de lo que han planteado hasta el momento, me gustaria que me ayuden en hacer un programa para controlar un motor paso a paso. Gracias!!!

ahhh se me olvidaba con el PIC16F877 y el puerto serie(RS232) con una interfaz en VB.NET
 
Última edición:
Gracias amigo, pero sabes ese no es tanto el problema(VB.NET) por el momento, lo que quierop antes es crear el programa que manipule el firmware del PIC16F877 para controlar motores usando el programa PIC C de CCS, gracias, se te agradece.Feliz Día:D
 
HOYA
COMO LE PUEDO HACER PARA CAMBIAR EL GIRO DE UN MOTOR CD ESTOY USANDO EL PWM DEL PIC ESTE ES MI PROGRAMA

#include <16F887.h>
#fuses INTRC,NOPROTECT,NOLVP,NOWDT
#use delay(clock=8000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7)


int duty1=40;
int duty2=40;

void main()

{
char caracter;
output_low(PIN_C1);
output_low(PIN_C2);

setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);

setup_timer_2(T2_DIV_BY_16, 124, 1); // 500 Hz


while(1)
{
caracter=getc();
set_pwm1_duty(duty1);
set_pwm2_duty(duty2);

if (caracter=='a')
{
delay_ms(32);
duty1 += 1;
}

if (caracter=='b')
{
delay_ms(32);
duty1 -= 1;
}



}
}
 
Hola, de los que allan probado los ejemplos usb de las anteriores paginas, es normal que al ejecutar cada aplicacion se pidan unos drivers que no estan por ningun lado? donde se consiguen?
Gracias.
 
Hola, de los que allan probado los ejemplos usb de las anteriores paginas, es normal que al ejecutar cada aplicacion se pidan unos drivers que no estan por ningun lado? donde se consiguen?
Gracias.

que raro....cual ejemplo estas probando de las paginas anteriores, ya que procuro subir todo...todos los archivos necesarios para probar el ejemplo...si me puedes decir cual para ayudarte...a lo mejor se me paso en ese ejemplo...:)

HOYA
COMO LE PUEDO HACER PARA CAMBIAR EL GIRO DE UN MOTOR CD ESTOY USANDO EL PWM DEL PIC ESTE ES MI PROGRAMA

#include <16F887.h>
#fuses INTRC,NOPROTECT,NOLVP,NOWDT
#use delay(clock=8000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7)


int duty1=40;
int duty2=40;

void main()

{
char caracter;
output_low(PIN_C1);
output_low(PIN_C2);

setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);

setup_timer_2(T2_DIV_BY_16, 124, 1); // 500 Hz


while(1)
{
caracter=getc();
set_pwm1_duty(duty1);
set_pwm2_duty(duty2);

if (caracter=='a')
{
delay_ms(32);
duty1 += 1;
}

if (caracter=='b')
{
delay_ms(32);
duty1 -= 1;
}



}
}

Tendras que usar un multiplexor y un solo canal PWM....el multiplexor puedes usar el 74LS138 y el driver para motores el clasico l293...

Simula en proteus el circuito 74LS138 para que veas el funcionamiento y captaras rapidamente la idea ...:cool:
 
Última edición:
hola pollo rangel

si es necesario dejar un modulo pwm libre, quizas para otra funcion, es buena la idea de george, pero si definitivamente lo necesitas solo para controlar dicho motor, seria mejor q utilizaras ambos para no tener circuiteria extra, hay q aprovechar al maximo la potencia de estos dispositivos, y el l293 q te recominenda es el perfecto para estos casos, basicamente es un puente h.
saludos
 
que tal george.manson.69 estaba siguiendo el ejemplo que subiste del reloj con interupciones y la verdad no puedo simularlo al momento de correrlo sencillamente no hace nada, y con ese me estoy basando para lo de las interrupciones ya que tengo que hacer un programa el cual pueda escoger la hora y de ahi se valla para atras como un cronometro saludos
 
george.manson.69 amigo..:apreton:
Necesito usar el puerto c del 16f877
detectando un pulsador en cada pin on_off:oops:
la sentencia switch, case, puede ser usada para leer cada pin del portc?
Es para no usar tantos if_ else..
 
Última edición:
que raro....cual ejemplo estas probando de las paginas anteriores, ya que procuro subir todo...todos los archivos necesarios para probar el ejemplo...si me puedes decir cual para ayudarte...a lo mejor se me paso en ese ejemplo...:)

Hola george.manson.69, gracias por responder, la verdad no me funciona ninguno, excepto el USB_BULK_TRANSFER que trae su driver, reinstale los drivers del proteus (7.7 SP2) pero nada, tambien cambie el usb_desc_cdc.h a 0:LOL:8,0x04 y 0x0A,0x00 y nada, tambien probe con el driver de microchip mchpcdc.inf y tampoco..es un lio de drivers parece o ...no se cual es:confused:.
Ademas tampoco me funcionaron los proyectos con el puerto serie..asi que no se si sera el proteus...
Te agredeceria si podes me cuentes como es el lio este..o que tengo mal. Gracias y saludos.
 
Última edición:
Hola george.manson.69, gracias por responder, la verdad no me funciona ninguno, excepto el USB_BULK_TRANSFER que trae su driver, reinstale los drivers del proteus (7.7 SP2) pero nada, tambien cambie el usb_desc_cdc.h a 0:LOL:8,0x04 y 0x0A,0x00 y nada, tambien probe con el driver de microchip mchpcdc.inf y tampoco..es un lio de drivers parece o ...no se cual es:confused:.
Ademas tampoco me funcionaron los proyectos con el puerto serie..asi que no se si sera el proteus...
Te agredeceria si podes me cuentes como es el lio este..o que tengo mal. Gracias y saludos.

Mmm no puede ser, ni idea de que podria ser , ya que los exemplos que he subido los pruebo y funcionan, lo que podria ser es que, seria muy remotamente que a la simulacion le pongas que este corriendo a 20Mhz el micro...podria ser eso, si es que lo tienes asi...sera otra cosa...al simular no hace nada de nada,, ni aparece un error ni nada?...tienes windows tienes,, ya que mpusbapi.dll no funciona en window VISTA ni 7, solo funciona si esta actualizado el DLL, pero otra cosa lo de puerto serie usando el USB ese debe de funcionar corrrectamente...

Pasos para usar el usb...

1.-Arma el circuito tal como esta el exemplo...o si quiere simplemente abrir el circuito de algun ejemplo que use USB modo CDC (puerto serie)
2.-Despues te pedira unos drivers de los cuales en el exemplo que hallas abierto en la misma carpeta debe de contenerlo o cuando bajaste el archivo por ahi debe de andar, despues de que te pida los driver buscalos en la carpeta correpondiente, he instalalos...y automaticamente estara listo, despues si el exemplo que que bajaste contiene el programa para hacer la accion como manipular 8 led o el que controlas el LCD o no se...(solo para puerto serie), busca el COMx que fue creado despues que hallas intalado los drivers, sino sabes donde ve a buscar los drivers instalados en tu computadora y debde de anda ahi el USB-SERIE y el COMx disponible, ahora conociendo que COMx esta disponible buscalo en el programita y ponle conectar, y el led prendera verde cuando se conecte al programita...


Ahora si es con el BULK es practicamente lo mismo, buscar drivers mmm...instalarlos y executar el porgrama que correponde a la simulacion, y ya!!!...yy Sin NADA de Nada...me avisas....

nota...simulalo sin cambiar el programa, solo bajalo, descomprimelo, y simula.

george.manson.69 amigo..:apreton:
Necesito usar el puerto c del 16f877
detectando un pulsador en cada pin on_off:oops:
la sentencia switch, case, puede ser usada para leer cada pin del portc?
Es para no usar tantos if_ else..


Mi idea seria ser

variable=PORTC; //lee puerto

Código:
switch(varieble){
    case 0x01: acccion; break;
    case 0x02:
    case 0x03:
    ......
}

dependiendo si las resistencias van al ground

espero que te sriva la idea
 
Última edición:
hola robotec

yo por ahi hace un tiempo hice un cronometro up/down, con start,reset,stop y u/d, ademas pues si era descendente el conteo se podia indicar donde iniciaba, con hh:mm:ss, esto con un teclado 4x4, pero lo realize en asembler, un poco mas complejo, si de algo te sirve.

claro q no le veria problema pasarlo a c, estoy algo ocupado pero en cuanto pueda lo realizo y lo subo

ssaludos...
 
Mmm no puede ser, ni idea de que podria ser , ya que los exemplos que he subido los pruebo y funcionan, lo que podria ser es que, seria muy remotamente que a la simulacion le pongas que este corriendo a 20Mhz el micro...podria ser eso, si es que lo tienes asi...sera otra cosa...al simular no hace nada de nada,, ni aparece un error ni nada?...tienes windows tienes,, ya que mpusbapi.dll no funciona en window VISTA ni 7, solo funciona si esta actualizado el DLL, pero otra cosa lo de puerto serie usando el USB ese debe de funcionar corrrectamente...

Gracias george.manson.69, urgando y reinstalando y con lo que me dijiste al final funciono, de vuelta gracias y saludos.
 
No seas malo ayudame a aprender a programar en c los microcontroladores...

mplab....ya lo descarge

se que no tiene compilador en c, tambien ya lo descarge.

ahora ya los instale en mi compu...pero...eso es suficiente...?

como escribo? como programo??

he hecho pruebas con programas cortos, como el tuyo por ejemplo, pero y despues que hago??

gracias por tu ayuda!!
 
@elzytacogelona: No es que nadie te quiera enseñar a programar , lo que pasa es que nadie te puede dedicar todo su tiempo solo para enseñarte a vos a programar todos tenemos cosas que hacer y no siempre se trata de electrónica, sino de la vida de cada uno ...
Lo que te recomiendo es que primero antes de querer programar cualquier cosa es leer...
C es un lenguaje estructurado ...por lo tanto antes de empezar a programar hay que aprender bien las estructuras.
Luego hay que aprender las funciones básicas como while....for....do while .....etc.
Y recien luego podrías estar empezando a aprender a programar con los ejemplos que a puesto el amigo george.manson.69
Y por último te vuelvo a reiterar....tenes que leer mucho y aprender sobre el lenguaje que vallas a usar antes de ponerte a programar ...de lo contrario te resultará muy complejo...

Una recomendación: Leer algún libro de programación de C para PC y luego ponerte con el C para los PIC ...ya que basicamente son lo mismo ...con las diferencias propias de cada plataforma (PC o PIC)
 
Atrás
Arriba