Autor Tema: Tengo problemas con el PIC16F628A en CCS  (Leído 5574 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Luvus

  • PIC10
  • *
  • Mensajes: 4
Tengo problemas con el PIC16F628A en CCS
« en: 02 de Mayo de 2012, 17:03:21 »
Saludos a todos los usuarios del foro todopic

Estoy iniciando un pequeño proyecto con el PIC16F628A, consta de un LCD, tres pulsadores y un led.

Supongo que con el LCD no tengo problema, por que al hacer un código de prueva corre normal (como deberia ser), el inconveniente esta con el encendido del led, en el código testeo el pin al que esta conectado uno de los pulsadores, si esta a 1 entonces prender led, pero no prende, intente cambiando las formas de testeo y de activacion de pines, pero nada, no logro que se prenda el led.

Bueno, pongo los datos

aqui el esquematico


el código es el siguiente:

Código: [Seleccionar]
#include <16f628a.h>
#fuses XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
#use delay (clock=4000000)
//#use fast_io(a)
//#use fast_io(b)

#include <LCD2x16.c>
//#bit enter = 0x05.2
//#bit arriba = 0x05.0
//#bit abajo = 0x05.1
#bit led = 0x05.4
//#byte porta = 0x05

void main()
{
   set_tris_a(0b00000111);
   //set_tris_b(0x40);
   lcd_init();
   while (true)
   {
      lcd_putc("\f");
      printf(lcd_putc,"\f prueva lcd");
      delay_ms(2000);
      if (input(pin_A2)== 1)
      {
         output_high(pin_A3);
      }
   }
   
}


desde ya, muchas gracias por toda ayuda.
bb

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Tengo problemas con el PIC16F628A en CCS
« Respuesta #1 en: 03 de Mayo de 2012, 08:41:55 »
  Yo creo que el problema viene dado por la lectura de los pulsadores. Fijate en el datasheet que los pines RA0 a RA3 pueden ser utilizados como entradas analógicas para los comparadores. Por defecto dichos pines son entradas analógicas y si los quieres leer como digitales leeras un 0. Busca en la ayuda del compilador como hacer para deshabilitar los comparadores.
  En asm o ANSI C, sería suficiente como poner el valor 7 en el registro CMCON.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Luvus

  • PIC10
  • *
  • Mensajes: 4
Re: Tengo problemas con el PIC16F628A en CCS
« Respuesta #2 en: 03 de Mayo de 2012, 09:16:12 »
Muchas gracias por la respuesta amigo

revise en el la hoja de datos del pic éste, vi que se hace la configuracion de pines para que sean I/O mediante código ensamblador, puse en el compilador del CCS el codigo mediante las sentencias #asm y #endasm (esa forma esta en un libro), pero me sale error de todas las lineas que estan en asm, incluso de las declaraciones que hacen conocer que son codigo asm.

no entiendo que es lo que pasa, menudo microcontroladorsito,  :5]

antes, programe el mismo pic en PICBasicPro, no me dio ningun problema, lo hice con osc interno ademas, y pues los resultados fueron los esperados, pero con este compilador no se que pasa.

aqui pongo el código modificado:

Código: [Seleccionar]
#include <16f628a.h>
#fuses XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
#use delay (clock=4000000)


#include <LCD2x16.c>

#bit led = 0x05.4

#asm
clrf PORTA
movlw 0x07
movwf CMCON
bcf status, RP1
bsf status, RP0
movlw 0x17
movwf TRISA
#endasm
#zero_ram

void main()
{
 
   lcd_init();
   while (true)
   {
      lcd_putc("\f");
      printf(lcd_putc,"\f prueva lcd");
      delay_ms(2000);
      if (input(pin_A2)== 1)
      {
         output_high(pin_A3);
      }
   }
   
}

quite las lineas
Código: [Seleccionar]
#use_fast_io
set_tris_a
por que supongo que con el código en asm se hace la configuracion del puerto

muuchas gracias.

Desconectado Luvus

  • PIC10
  • *
  • Mensajes: 4
Re: Tengo problemas con el PIC16F628A en CCS
« Respuesta #3 en: 03 de Mayo de 2012, 09:43:28 »
bueno, me dio mi momento de  :shock:
 :lol: :lol:
puse el código de configuracion en asm dentro de void main()

ahora, me da un error,
Código: [Seleccionar]
clrf PORTA
movlw 0x07
me dice: Undefinied identifier PORTA

segun entiendo, primero tendria que declarar la direccion de memoria del puerto A para despues utilizar el termino "PORTA"

haber que tal me va

Desconectado Luvus

  • PIC10
  • *
  • Mensajes: 4
Re: Tengo problemas con el PIC16F628A en CCS
« Respuesta #4 en: 03 de Mayo de 2012, 10:33:32 »
bueeeno pues, reportando el codigo que tengo hasta ahora  :)

el anterior post, yo dije que tenía que configurar las direcciones de los puertos para poder utilizar el termino "PORTA", pues lo hice, el error dejo de estar en esa linea, pero luego paso a otro error, ahora con la sentencia CMCON, tambien le di la direccion de memoria, supuestamente es un registro  :lol: mm no se.
el error dejo de estar en esa parte, luego paso a la sentencia "status" y pues ya no mas  :5], ese código ya me lleno de piedritas.

Regrese al libro en el cual me estoy basando (Compilador CCS y sim. proteus para PIC, 2da edicion), por sierto, buen libro. Lo releí, encontre otra forma de configurar los puertos, bueno, algo similar a lo que se tenia en ASM, y es que puse lineas que permiten definir las direcciones de memoria de los puertos:

Código: [Seleccionar]
#byte TRISA = 0x85
#byte PORTA = 0x05

y luego el testeo de los puertos sería diferente, pues la configuracion de los puertos tendría que hacerse bit a bit y no con la linea siguiente:

Código: [Seleccionar]
set_tris_a(0b00100111);
sino con estas lineas de aca:

Código: [Seleccionar]
bit_set(TRISA,2);   //A2 como entrada
bit_clear(TRISA,3); //A3 como salida

bueno, con estas líneas logre hacer que se prenda el vendito led  :o, pero hay algunas cosas que no entiendo:
- las líneas anteriores me permiten configurar cada bit del puerto??, es decir, tendria otras líneas similares para los otros bits? :huh:
- despues de cambiar a todas esas líneas, pude detectar que el tiempo de retardo que le puse al lcd, ello para que se vea el mensaje que envía, no permitia que corra bien el programa, osea, ese retardo hacia que no detectase a tiempo el pulso que ingresa al bit correspondiente (RA2), quitando el retardo, todo marcha supuestamente normal, "supuestamente  :shocked:", por que ahora se presentaron problemas con el LCD, que todo el rato esta parpadeando sin mostrar bien el mensaje. ¿¿Cómo puedo arreglar ese error??

espero no cansar demasiado al apreciado lector, jeje

aqui el nuevo código:

Código: [Seleccionar]
#include <16f628a.h>
#fuses HS, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
#use delay (clock=4000000)


#include <LCD2x16.c>



#byte TRISA = 0x85
#byte PORTA = 0x05

#zero_ram

void main()
{

   bit_set(TRISA,2);   //A2 como entrada
   bit_clear(TRISA,3); //A3 como salida

   lcd_init();
   while (true)
   {
      lcd_putc("\f");
      printf(lcd_putc,"\f prueva lcd");
      //delay_ms(2000);   aqui se pone como comentario y va de maravilla el led
      if (bit_test(PORTA,2)== 1)
      {
         bit_set(PORTA,3);
      }else
         bit_clear(PORTA,3);
   }
   
}

muchas gracias    :|