Autor Tema: PIC12C671 Programa sencillo en C  (Leído 4538 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
PIC12C671 Programa sencillo en C
« en: 15 de Abril de 2008, 11:56:31 »
Hola soy nuevo en PICs,
quiero hacer un programita en C que use el oscilador interno de 4MH, y
que lea el pin GP5, si esta HIGH por mas de 5 milisegundos, que ponga en HIGH el GP1 por 2 milisegundos y
que luego de una espera de 35 milisegundos repita 5 veces poner en HIGH el GP1 con los intervalos de 35 milisegundos.
vuelva a poner el contador en 0.

Lo que hice hasta ahora, por lo que pude ver, no se si esta bien:


#include <12C671.h>
#define XTAL_FREQ 4MHZ
#define GP0 PIN_B0
#define GP1 PIN_B1
#define GP2 PIN_B2
#define GP3 PIN_B3
#define GP4 PIN_B4
#define GP5 PIN_B5

void main() {
int contador = 0;

if (input(GP5)){
contador = 0 ;
while (contador < 5) {
output_high(GP1);
delay_ms(2);
output_low(GP1);
delay_ms(35);
contador = contador + 1;
}
}
}






Muchas gracias.

NOQUIES
« Última modificación: 15 de Abril de 2008, 23:01:19 por noquies »

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #1 en: 16 de Abril de 2008, 06:16:16 »
Hola.

El programa no tiene en cuenta que debe de hacer lo de dentro del while solo si el pin GP5 está HIGH por mas de 5 milisegundos. Lo hace nada más arrancar (si GP5=1)

Un saludo

No te faltará también lo del #use delay ?

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
Re: PIC12C671 Programa sencillo en C
« Respuesta #2 en: 16 de Abril de 2008, 16:29:45 »
Muchas gracias,
OK, entendi lo del GP5.
Lo del use delay no esta ya definido con # XTAL_FREQ 4MHZ ?

Codigo nuevo hasta ahora

#include <12C671.h>
#define XTAL_FREQ 4MHZ
#define GP0 PIN_B0
#define GP1 PIN_B1
#define GP2 PIN_B2
#define GP3 PIN_B3
#define GP4 PIN_B4
#define GP5 PIN_B5

void main() {
int contadorveces = 0;
if (input(GP5=1)){
delay_ms(5);
if (input(GP5=1)) {
contadorveces = 0 ;
while (contadorveces < 5) {
output_high(GP1);
delay_ms(2);
output_low(GP1);
delay_ms(35);
contadorveces = contadorveces + 1;
}
}
}
}

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #3 en: 17 de Abril de 2008, 08:13:47 »
Ahora ya tendría en cuenta lo de los 5ms.

Ese PIC no lo he usado nunca, ten bien a mano el datasheet.

Creo que te faltan en tu programa algunas cosas más.

El #define XTAL_FREQ 4MHZ no lo usas en el programa, por lo tanto no hace nada.

Faltan los FUSES (teniendo en cuenta al oscilador interno)

En el programa tendrás que añadir algo como setup_oscillator(OSC_4MHZ | OSC_INTRC)

Simulálo con PROTEUS ó pruebálo físicamente y nos cuentas.

Un saludo

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
Re: PIC12C671 Programa sencillo en C
« Respuesta #4 en: 17 de Abril de 2008, 10:52:19 »
Asi estara mejor ?

#include <12C671.h>
#fuses INTRC                     //oscilador interno
#use delay (clock=4000000)            //Fosc=4Mhz
#define GP0 PIN_B0
#define GP1 PIN_B1
#define GP2 PIN_B2
#define GP3 PIN_B3
#define GP4 PIN_B4
#define GP5 PIN_B5
void main() {
int contadorveces = 0;
if (input(GP5=1)){
delay_ms(5);
if (input(GP5=1)) {
contadorveces = 0 ;
while (contadorveces < 5) {
output_high(GP1);
delay_ms(2);
output_low(GP1);
delay_ms(35);
contadorveces = contadorveces + 1;
}
}
}
}

Creo que el delay_ms(5) se podría cambiar por un timer no?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #5 en: 17 de Abril de 2008, 15:42:25 »
Dependiendo de la precisión que quieras lo puedes cambiar por un TMR, aunque con este programa de prueba no es necesario.

¿No añades más fuses? quizá no sea necesario. Compruebalo.

Prueba con ese FUSE, si no te va, prueva con el fuse INTRC_IO (mira en el datasheet)

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
Re: PIC12C671 Programa sencillo en C
« Respuesta #6 en: 27 de Abril de 2008, 19:14:11 »
Me sale el siguiente comentario. Que significa? Estoy usando el MPLAB.
"Build aborted.  The project contains no source files."

Mucha gracias.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #7 en: 28 de Abril de 2008, 01:04:17 »
Esto es lo que me sale a mí:

Clean: Deleting intermediary and output files.
Clean: Deleted file "Int.ESYM".
Clean Warning: File "C:\Documents and Settings\Administrador\Escritorio\Nueva carpeta\Int.o" doesn't exist.
Clean: Deleted file "Int.ERR".
Clean: Done.
Executing: "C:\Archivos de programa\PICC\Ccsc.exe" +FM "Int.c" +DF +LN +T +A +M +Z +Y=9 +EA
>>> Warning 201 "Int.c" Line 12(1,1): Assignment inside relational expression   PIN_B5
*** Error 12 "Int.c" Line 12(14,15): Undefined identifier
*** Error 12 "Int.c" Line 14(14,15): Undefined identifier   PIN_B5
*** Error 12 "Int.c" Line 17(16,17): Undefined identifier   PIN_B1
*** Error 12 "Int.c" Line 19(15,16): Undefined identifier   PIN_B1
      4 Errors,  1 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Mon Apr 28 05:58:43 2008


¿Has instalado el plugin de CCS para MPLAB?

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
Re: PIC12C671 Programa sencillo en C
« Respuesta #8 en: 28 de Abril de 2008, 10:14:33 »
Supongo que si. Fui a : http://www.ccsinfo.com/downloads/setup_mplab_plugin.exe y lo instale. Ahora esta el plugin en la carpeta c:/archivos de programa/PIC y el MPLAB en la carpeta C:/MPLAB tiene algo que ver o esta bien.
volvi a correr el programa y me sale:


Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\MPLAB\Proyectos\PIC12C671.mcs".
Clean: Done.
Build aborted.  The project contains no source files.
BUILD FAILED: Mon Apr 28 10:09:18 2008.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #9 en: 28 de Abril de 2008, 15:01:46 »
¿Has creado un proyecto con Proyect Wizar? ... y le has añadido al proyecto tu fichero fuente .c

Desconectado noquies

  • PIC10
  • *
  • Mensajes: 6
Re: PIC12C671 Programa sencillo en C
« Respuesta #10 en: 28 de Abril de 2008, 17:44:26 »
No, pero ahora que me has indicado creo que si.

Executing: "C:\Archivos de programa\Microchip\Third Party\PICC\CCSC.EXE" +FM "PROGRAMACIONPIC\PIC12C671v2.c" +DF +LN +T +A +M +Z +Y=9 +EA

luego me aparece una ventanita que dice INVALID FILENAME, que sale arriba de otra ventanita que dice C Compiler CSS
 adentro PROJECT: PROGRAMACIONPIC/PIC12C671v2.C

como registered y username no hay ninguno. Tendrá algo que ver?

Muchas gracias POCHAR por tu dedicación.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: PIC12C671 Programa sencillo en C
« Respuesta #11 en: 29 de Abril de 2008, 00:46:04 »
Hola noquies.

Aquí te dejo una dirección donde podrás descargar unos videotutoriales sobre MPLAB que hizo LeonPic, un componente de este FORO:   http://www.micropic.es/index.php?option=com_remository&Itemid=27&func=select&id=47

Leyendo el primer videotutorial quizá resuelvas tu problema.

Un saludo

Desconectado tecnic

  • PIC10
  • *
  • Mensajes: 26
Re: PIC12C671 Programa sencillo en C
« Respuesta #12 en: 16 de Diciembre de 2009, 21:21:44 »
Hola que tal, mira el error que tenes , es debido a que no tenes definido bien los puertos del pic, tenes que usar la palabra reservada #BIT variable = direccion , donde variable es por ejemplo el nombre del puerto GP1, direccion es la direccion fisica del puerto en tu caso para el pic 12x671 es la 0x05 , te muestro a continuacion como debiera quedarte.
#include <12C671.h>
#fuses INTRC,NOWDT,NOPROTECT
#USE DELAY(CLOCK=4000000)

#BIT GP0 = 0x05.0
#BIT GP1 = 0x05.1
#BIT GP2 = 0x05.2
#BIT GP3 = 0x05.3
#BIT GP4 = 0x05.4
#BIT GP5 = 0x05.5

#BIT RIS_GP1 =0x85.0
#BIT RIS_GP2 =0x85.1
#BIT RIS_GP3 =0x85.2
#BIT RIS_GP4 =0x85.3
#BIT RIS_GP5 =0x85.4
#BIT RIS_GP6 =0x85.5

saludos.


 

anything