TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: marioquartz en 28 de Junio de 2008, 09:00:56
-
Llevo bajados unos cuantos programas, revisado medio internet y soy incapaz de conseguir que un trozo de codigo tras ser compilado funcione en el pic simulator.
He buscado un compilador y tras mucha busqueda he encontrado uno que cogiendo un codigo que se supone que esta bien, no de error. Luego cogo el hex y lo cargo el el Pic Simulator. Pasa de mi. No se enciende ningun led y deberia.
Asi que pido:
- un ejemplo que este re-comprobado.
- Un compilador que funcione y no sea de pago o demo. Tiene que haberlo.
Yo he buscado y no lo consigo.
He probado de todo, he revisado, y vuelta a revisar. Estoy a punto de mandarlo todo a la mierda.
-
En que lenguaje de programacion estas compilando, para lenguaje ensamblador puedes usar MPLAB, tambien podrias poner el codigo para ver si tiene algun error.
Saludos
-
Pic: 16f84A
Lenguaje: CCS (es lo mas parecido a lo que conozco)
Compilador: PIC C Compiler
Codigo utilizado (sacado de este mismo foro)
#include <16F84.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=4000000)
#byte port_b=6
void main() {
int contador;
set_tris_b(0); //// declaramos el puerto B como salidas
port_b=0;
while (true) { //// bucle infinito
contador=200; //// retraso, 200 ciclos de 1000 microsegundos, o sea, 2 milisengundos
while(--contador!=0)
delay_us(1000);
port_b=0xff; //// activa todos los pins del puerto B
contador=200;
while(--contador!=0) //// retraso, 200 ciclos de 1000 microsegundos, o sea, 2 milisengundos
delay_us(1000);
port_b=0x00;}; //// apaga todos los pins del puerto B
}
Y perdon por el retraso, me entretuve con el chasis del tupperbot.
-
- un ejemplo que este re-comprobado.
Usa el buscador del foro, hay decenas de ejemplos para el CCS solo por citar un ejemplo.
- Un compilador que funcione y no sea de pago o demo. Tiene que haberlo.
El SDCC es el único que se me ocurre como no pago, el resto tiene un demo limitado o bien son pagos.
He probado de todo, he revisado, y vuelta a revisar. Estoy a punto de mandarlo todo a la mierda.
Antes que nada, modera tus palabras en el foro!
Tirando todo a donde dices no solucionas nada, leyendo, buscando y releyendo y muuuuuuucha paciencia te llevarán a donde quieres estar. En este mundo de lo embebido hay que tener mucha paciencia, te lo digo de antemano parq que no sientas frustrado. Si no le tienes paciencia a estas cosas, tal vez sea mejor que te replantees si es realmente lo que buscas.
-
Serenidad y paciencia mí querido caliman :D si no tienes conocimientos previos de programación te recomiendo que utilices pic Basic u otro compilador Basic para pic
El c no es precisamente muy fácil de entender y comienza con ejemplos aun mas simples el clásico blink enciende un led pausa apaga un led pausa y vuelta a empezar
En el foro de Basic encontraras lo que necesitas.
Aunque te aclaro que por aquí solo vas a encontrar demos de los programas cualquier otro artilugio esta prohibido.
Paciencia a mí encender y apagar un led me llevo 3 semanas
-
No funcionaba por un error en configurar el panel de leds de Pic Simulator. Tardaba un poco en encenderse pero funciona el codigo.
Ahora he estado mirando y el programa para el tupperbot es sencillo. Ya solo me falta comprobar el codigo, aunque no tiene nada raro.
Este es:
#include <16F84A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //para cristal de 4MHz
#FUSES PUT //power up timer habilitado
#FUSES NOPROTECT//lectura habilitada del codigo del pic
#use delay(clock=4000000)
#use fast_io(a)
void main()//bucle principal del programa
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//configuracion del timer0, trabaja con frecuencia del micro
//no usa prescaler.
set_tris_a(0xff);
set_tris_b(0x00);
output_b(0x00);
//limpiamos los pines del puerto B
output_high(PIN_B4); //traccion trasera
ouptut_high(PIN_B6); //Led, indica que esta en movimiento.
while(1) //bucle inifinito
{
if(input(PIN_A0 && input(PIN_A1) ) { // Impacto frontal, las dos antenas dan 1.
output_low(PIN_B4); //Paramos
output_low(PIN_B6); // Apagamos led, no hay movimiento.
}
if( input(PIN_A0) ) { // si hay un 1 en una antena
//giramos a la izquierda
output_high(PIN_B5); // led
//para ello necesitare dar pulsos al motor pap.
// los pulsos son con output_high(PIN_BX); siendo X entre 0 y 3
// B0 y B1 es un lado y B2 y B3 es otro.
//una vez girado apagar el led.
output_low(PIN_B5);
}
if( input(PIN_A1) ) { // si hay un 1 en la otra antena
//giramos a la derecha
output_high(PIN_B7); //led
//pulsos correspondientes
output_low(PIN_B7); //una vez girado apagar el led
}
}
}
}
-
No funcionaba por un error en configurar el panel de leds de Pic Simulator. Tardaba un poco en encenderse pero funciona el codigo.
Me alegro mucho, luego cuéntanos cómo te ha ido!
-
Felicitaciones Mario, enhorabuena! :-/
A que adivino cómo lo solucionaste... la fórmula del gran Manunix: PACIENCIA. :D
Siempre funciona! :lol: Después de mucho luchas, uno pacientemente analiza todo hasta que logra dar con el problema y solucionarlo.
Y ahí viene el suspiro y ese pensamiento de satisfacción: "lo he logrado, soy un genio" :D
Saludos, nos leemos! :mrgreen:
-
El segundo codigo no lo he probado todavía, antes necesitare saber mas de como funcionan los motores pap. ¿Para los pulsos como lo hago?
Opción 1:
output_high(PIN_BX);
delay_ms(Y);
output_low(PIN_BX);
Opción 2: alguna función especial?
-
La opción 1 no es muy óptima, porque no te permite hacer otra cosa con el micro mientras estás en la pausa...
Yo siempre uso para esos casos de pulsos que controlan algo, interrupciones al CPU por algún timer del micro.
Ese micro que estás usando por ejemplo, posee interrupción por timer 0. Para tener ejemplos de cómo manejar el timer puedes leer el manual de CCS y usar el buscador del foro.
Básicamente lo que tienes que hacer es configurar el timer0 (precarga, pre-escalador,etc) dentro del main y luego colocar antes de la rutina que atenderá la interrupción el comando: #INT_RTCC
Pues y eso es todo! :lol:
Es una nota trabajar usando interrupciones, y verás que no es tan difícil. Con C todo se hace más fácil.
Ok saludos, nos leemos! :mrgreen: