Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Siempre es difícil empezar en programación, y más cuando no sabes si las herramientas que tienes funcionan correctamente.
He generado un código en un PIC16F676 que hace parpadear un led en el pin RC5 (Pin 5 del micro).
Este es el código hexadecimal (codigo HEX) que debéis copiar en un fichero:
:0C000000830100308A0004288301EC2BEF
:1007D80083168712831220308706FF30A000AF30BF
:1007E800A100210820040319EE2BA0080319A10376
:0607F800A0030000F52B38
:00000001FF
Este código funciona correctamente y los fuses ya vienen configurados de la siguiente manera:
-Oscillator Internal (No CLK out)
-Watchdog: OFF
-Power Up timer: OFF
-Master Clear enable: internal
-Brown Out Detect: ON
-Code Protect: OFF
-Data EE Read protect: OFF
Para que funcione el PIC hace falta:
- Conectar GND en el pin 14 ( Vss)
- Conectar VCC de 5v en el pin 1 (Vdd)
- Conectar un diodo y una resistencia de 330 ohm entre el pin 5 (RC5) y GND. Cuidado con el ánodo y catodo del diodo.
Si lo programas correctamente y haces este pequeño montaje debes obtener un parpadeo del led de 1Hz.
No hace falta conectar el reset a +Vcc ni poner un oscilador externo, pues usa el oscilador interno de 4MHz.
Para la gente interesada en el código:
void main (void)
{
unsigned int j;
TRISC=TRISC & 0b11011111;
while (1)
{
RC5=RC5^1;
j=0xAFFF;
while(j) { j--; asm("NOP");}
}
}
Espero que sirva de ayuda a la gente que empieza.
Suerte!!
Jajaja... cuando era novato a mi me pones esto como ejemplo para empezar a programar y abandono directamente....
Los que somos programadores al ver esto
while (1)
{
RC5=RC5^1;
j=0xAFFF;
while(j) { j--; asm("NOP");}
}
}
podemos traducir unos mejor que otros... yo he tenido que fijarme bien para comprobar que haces un bucle de espera hasta que j llega a 0, y cada ciclo ejecutas un comando en ensamblador que es NOP o lo que es lo mismo... gastar un ciclo de programa... y la forma de conmutar el led no la habia visto nunca...
Para los que hayan tenido esa impresión quizá les tranquilice un poco saber que este programa hace lo mismo.
while (true) { //bucle infinito
output_high(PIN_C5); //enciende led
delay_ms(1000); //espera 1 segundo (1000 milisegundos = 1 segundo)
output_low(PIN_C5); //apaga led
delay_ms(1000); //espera 1 segundo
}
es mas legible no solo por los comentarios, los propios comandos tienen traducción directa del ingles al español.
Por otro lado me ha encantado que uses tambien un pic con oscilador interno, en el proyecto Tarribot uso un PIC12F629 que tambien lo tiene incorporado, muy practico ya que te ahorras el cristal y los dos condensadores.
Saludos.
furri.
Yo tampoco habia visto nunca esa manera de generar el parpadeo... curiosa y simple, desde luego...
una pregunta que puede no tener que ver mucho con el tema... a que frecuencia oscila el interno? supongo que vendra en el data... luego lo miro.
el interno del 12F629 va a 4Mhz, roboticsBCN tambien pone esa frecuencia como la usada por el del 16F676.
Si quieres usar el oscilador interno tienes que tener precauciones... hay que tener cuidado si no usas el ICD2 de microchip, yo que uso un programador TE20 tengo que apuntar el valor del OSCAL (calibración del oscilador) que es individual en cada micro y al grabar tengo que regrabar dicho valor constantemente... como esto no lo conocia al empezar con estos micros les tengo que meter la calibración estandar aconsejada por microchip, alguno he medido y tiene un desfase de un 15%... jajaja pero en el caso de TarriBot 1.0 que no usa timers ni temporizaciones da igual este desfase, eso si, yo no aconsejaria usar estos micros sin cristal para controlar servomotores que necesitan unos pulsos muy exactos.
furri.