TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: el_indio en 20 de Noviembre de 2012, 21:40:04

Título: Problema 16F628A
Publicado por: el_indio en 20 de Noviembre de 2012, 21:40:04
Hola Amigos!!!.. mes presento soy Pablo. Soy programador Oracle PL/SQL y hace poco me dispuse a volver con la electronica y que mejor que de la mano de los micros asi combino programacion + electronica. Les comento mi caso, estuve leyendo y me puse a hacer mi primer test. Buen lo que hice fue crear este codigo:

#include <16f628a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay (clock=1000000)
#use fast_io(b)
void main (void)
{
   set_tris_b(0xfe);
   disable_interrupts(GLOBAL);
   do
   {
      output_low(PIN_B0);
      delay_ms(5000);
      output_high(PIN_B0);
    }
    while(TRUE);
}


Cree el .hex con el picc-compiler y luego lo subi con el pickit2. Ya probe que se grabe bien, incluso lo grabe y luego lo lei al micro para ver de que este todo bien. PERO el tema... es que no hace nada.. o sea.. medi la pata del pin RB0 y está siempre a 2V con respecto a masa... y asi todas las patas del puerto B, que puedo estar haciendo mal ???.. tambien hice mas sencillo que ponia a CERO todo el puerto B y tampoco... siempre con 2V todas las patas. Bueno espero que me puedan ayudar.

PD: Aclaro que conecte la pata MCLR(negado) a +5V, VSS a GND y VDD a +5V... El todo sin conectar salvo la salida RB0.

PD2: Ahh algo que me acordé es que tambien probe con el crystal de 4mhz y los dos capacitores (por si era eso, pero nada).

Gracias y saludos!!

Pablo.-
Título: Re: Problema 16F628A
Publicado por: KALLITOS en 20 de Noviembre de 2012, 21:44:46
Hola el_indio mirando tu programa, el estado en cero dura 5000 milisegundos pero el estado en 1 dura algo mas de 10us por decir a groso modo colocale una pausa despues de poner a 1 el pin y prueba  ;-).

saludos
Título: Re: Problema 16F628A
Publicado por: el_indio en 20 de Noviembre de 2012, 22:55:38
Hola Kallitos.. tenes razon!!.. ni bien termina de ponerlo en 1 al toque lo pone en 0. Te comento que tambien le puse un delay de 5 segundos pero tampoco anda. Incluso como puse arriba, hice la prueba de poner a cero todas los pines del PORTB. O sea hice un

do
{
   output_b(0x00);
}
while(TRUE);


pero nada.... siempre que mido todas las patas tienen 2V... puede ser que esté quemado el micro porque la primera vez lo conecté mal al grabador ???.. (o sea puse mal los pines).. pero es raro porque ya te digo.. cuando le doy a READ me lee bien el programa.. o sea que lo graba bien.

Saludos!!

Pablo.-
Título: Re: Problema 16F628A
Publicado por: Nubbeo en 20 de Noviembre de 2012, 23:27:39
Hola,
el programa esta bien.
Es muy raro que midas 2V. Ponele una resistencia a masa para medirlas. Aunque el programa las pone como salidas, parece que no esta corriendo y estan como entradas.
Si pones mal los pines en la grabación se puede llegar a quemar el pin al cual conectaste erroneamente Vpp ya que pone 12V. O si conectas la alimentacion al revés. Pero como decis vos, si lo graba y lo lee pareceria que no esta quemado. Tenes un osciloscopio para medir si el cristal oscila? Saludos
Título: Re: Problema 16F628A
Publicado por: KALLITOS en 20 de Noviembre de 2012, 23:51:44
Hola, coloca el trisb a 0 para que todos los pines esten como salida.

prueba con estos fuses, a mi me trabaja bien, sin oscilador.

Código: C
  1. #include <16f628A.h>
  2. #fuses INTRC_IO                                                    
  3. #fuses NOMCLR
  4. #fuses NOWDT
  5. #fuses NOPROTECT
  6. #fuses NOPUT                                                                          
  7. #fuses NOBROWNOUT                  
  8. #fuses NOLVP                                                                                                    
  9. #use delay(clock = 4000000)
Título: Re: Problema 16F628A
Publicado por: gera en 21 de Noviembre de 2012, 00:14:54
Seguro que tiene un cristal de 1MHz? Usualmente se le pone un cristal de 4MHz, de este modo el micro trabaja a 1MIPS.
Estaria bueno que nos comentes como has armado el circuito, asi te podemos ayudar mejor.
Saludos!!
Título: Re: Problema 16F628A
Publicado por: el_indio en 21 de Noviembre de 2012, 21:55:43
Gente!.. gracias por las respuestas finalmente el programa me quedo asi:

#include <16f628A.h>
#fuses NOMCLR
#fuses NOWDT
#fuses NOPROTECT
#fuses NOPUT
#fuses NOBROWNOUT
#fuses NOLVP
#fuses XT
#use delay(clock=4000000)
#use fast_io(b)
void main (void)
{
  set_tris_b(0x00);
  disable_interrupts(GLOBAL);
  do
  {
    delay_ms(5000);
    output_b(0x00);
    delay_ms(5000);
    output_b(0xff);
  }
  while(TRUE);
}


Conclusión: Puse los fuses que me dijo kallitos solo que le saque el fuse que anula el oscilador ya que estoy usando un crystal de 4mhz y el USE DELAY se lo puse en 4000000 como dijo gera.

Muchas gracias por todo.. voy a empezar a ponerme con esto y cuando tenga mi marquesina (que es lo que quiero hacer) lo posteo!!!

Saludos!!!

Pablo.-