Como programar y conectar un PIC16F628A

Hola gente. Como andan? Queria preguntar como conectar un pic 16f628a. Yo hice un programa para prender y apagar un led utilzando como salida el RB0. Para programar utilice un JDM y el winpic800. El problema es que hice el circuito en protoboard pero no pasa nada. Yo creo que el problema esta en el oscilador. Si me puedieran ayudar seria espectacular. Gracias

JDM:
prograrir.jpg
 
Última edición:
deberias poner tu programa pues asi se podriamos ayudar mas pues podria no ser tu pogramador
 
Última edición:
hola, si el circuito que armastes es ese que se ve arriba te falta el oscilador, que puede ser de cristal de unos 4000 a 12000 Hz, o podes hacer uno con resistencia y capacitor. pro te recomiendo el primero. pones las patas del cristal en las patas 15 y 16 del pic y a cada pata a su vez las desacoplas a maza con unos condensadores de 22pf. eso es lo mas simple
 
ola que talasi como dice chapin deberías poner el código a lo mejor omitiste algo, ademas el circuito de arriba no es nada parecido a lo que dice que quieres hacer en la descripción
 
Ese es el circuito del programador JDM que usaste ?
Mejor pon el circuito que hiciste para para encender el Led y el codigo del PIC ya que supongo que grabaste el .hex con exito :unsure:
 
gente miren para los q me preguntaron si ese era el circuito: no ese no es. ese es el programador.

El codigo en basic es (para pic simulator IDE):

AllDigital
TRISB = 0

inicio:
PORTB.0 = 0
WaitMs 100
PORTB.0 = 1
WaitMs 100
Goto inicio

el circuito es:

led.jpg


quiza esto q les voy a decir tambien les pueda ayudar a ayudarme:
en el winpic800, si yo quiero usar el oscilador interno, que configuracion tengo q grabarle?
esta es la q tengo:

OSC: XT
WDTE: Sin tildar
PWRTE: Tildado
MCLRE: Sin tildar
BOREN: Tildado
LVP: Sin tildar
CPD: Sin tildar

CP: OFF

el programador funciona bien. con el winpic puedo grabar y leer sin problemas

Saludos
 
Buenos dias estoy realizando un diseño con el pic 16f628a en pbp donde se requiere utilizar todos los pines del pic, pero no logro hacer que el oscilador interno me funcione correctamente y pueda utilizar los pines RA6, RA7, RA5 como entradas, eh buscado por internet un ejemplo pero tampoco lo consigo.

que puedo estar haciendo mal?
alguien tiene un ejemplo para pbp?

El codigo es :

Código:
'****************************************************************
'*  Name    : control de nivel agua.BAS                                      *
'*  Author  : [Carlos a Navarrete]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18/08/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :  sistem controller                                                  *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo.-
@ DEVICE pic16f628A, WDT_OFF ' Watchdog Timer desconectado.-
@ DEVICE pic16f628A, PWRT_OFF ' Power-On Timer conectado.-
@ DEVICE pic16f628A, BOD_ON ' Brown-Out Detect conectado.-
@ DEVICE pic16f628A, MCLR_ON ' Master Clear Externo desconectado.-
@ DEVICE pic16f628A, LVP_OFF ' Low-Voltage Programming desconectado.-
@ DEVICE pic16f628A, CPD_OFF ' Data Memory Code Protect desconectado.-

DEFINE INTOSC

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

CMCON = 7
FOSC2 = 1
FOSC1 = 0
FOSC0 = 0


NVL1  VAR BYTE
NVL2  VAR BYTE
NVL3  VAR BYTE
NVL4  VAR BYTE
NVL5  VAR BYTE
NVL6  VAR BYTE
PRES VAR  BYTE
WATER_P VAR   BYTE






'--------------------------------CONFIG PUERTOS------------------------------
TRISA   =   %11111111
TRISB   =   %00000000

TNK_SUP :

IF NVL6  = 0  THEN  GOTO N5
             GOTO   MENSN6
N5:
IF  NVL5 = 0  THEN  GOTO N4
             GOTO   MENSN5

N4:
IF  NVL4 = 0 THEN GOTO TNK_SUP
              GOTO  MENSN4
              

MOTOR1:

IF NVL3 = 0 THEN GOTO N2
            GOTO  MENSN3

N2:
IF  NVL2 = 0 THEN GOTO N1
            GOTO MENSN2
            
N1:
IF  NVL1 = 0 THEN GOTO VACIOS
            GOTO  MENSN1
            

MOTOR_ON:

IF PRES = 0 THEN GOTO SPRES
               GOTO WATER
               
IF  WATER_P =  1 THEN GOTO LLENADO
               GOTO WATER
                

                
MENSN6:

PAUSE 500
LCDOUT $FE,1
LCDOUT         "MAXIMO NIVEL DEL"
LCDOUT $FE,$0, "TANQUE # 2 OK "
PAUSE  2000
GOTO  MOTOR1
GOTO TNK_SUP

MENSN5:

PAUSE 500
LCDOUT $FE,1
LCDOUT         " NIVEL MEDIO DEL"
LCDOUT $FE,$0,  " TANQUE # 2  "
PAUSE  2000
GOTO MOTOR1
GOTO TNK_SUP


MENSN4:


PAUSE 500
LCDOUT $FE,1
LCDOUT         " NIVEL BAJO DEL"
LCDOUT $FE,$0,  " TANQUE # 2  "
PAUSE  2000
GOTO MOTOR1
GOTO TNK_SUP

MENSN3:


PAUSE 500
LCDOUT $FE,1
LCDOUT         " MAXIMO NIVEL DEL"
LCDOUT $FE,$0,   " TANQUE # 1  "
PAUSE  2000
GOTO MOTOR1
GOTO TNK_SUP

MENSN2                
                

PAUSE 500
LCDOUT $FE,1
LCDOUT         " MEDIO NIVEL DEL"
LCDOUT $FE,$0,   " TANQUE # 1  "
PAUSE  2000
GOTO MOTOR1
GOTO TNK_SUP

MENSN1

PAUSE 500
LCDOUT $FE,1
LCDOUT         " BAJO NIVEL DEL"
LCDOUT $FE,$0,   " TANQUE # 1  "
PAUSE  2000
GOTO TNK_SUP

VACIOS:

PAUSE 500
LCDOUT $FE,1
LCDOUT         " TANQUES VACIOS"
LCDOUT $FE,$0,   " NO HAY AGUA  "
PAUSE  2000
GOTO TNK_SUP

SPRES:


PAUSE 500
LCDOUT $FE,1
LCDOUT           " SOBRE PRESION "
LCDOUT $FE,$0,  " ABRA UNA LLAVE  "
PAUSE  2000
PORTB.6 = 0
PORTB.7 = 1
GOTO TNK_SUP

WATER:

PAUSE 500
LCDOUT $FE,1
LCDOUT         " LLENANDO TANQUES "
LCDOUT $FE,$0,   " ESPERA UN RATO "
PAUSE  2000
PORTB.6 = 1
PORTB.7 = 1
GOTO TNK_SUP

LLENADO :

PAUSE 500
LCDOUT $FE,1
LCDOUT         "  TANQUES LLENOS "
LCDOUT $FE,$0,   " BUEN DIA "
PAUSE  2000
PORTB.6 = 1
PORTB.7 = 1
GOTO TNK_SUP

END




muchas gracias

.:confused: :cabezon:
 
Última edición por un moderador:
Hola muchachos!
Hice el mismo programa de intermitente en pin rb y tengo el mismo problema de ema95, pues el programa esta ya compilado en c compiler y simulado en proteus y funciona; en el momento de conectar el pic en la protobard le coloque el cristal en el pin y 17y despues de cada patilla del cristal conencte los dos condensadores de lenteja en serie a tierra, y de rb0 saque una resistencia de 330 a un led
pero no funciona, que debo hacer????. Muchas gracias por sus aportes
 
Hola muchachos!
Hice el mismo programa de intermitente en pin rb y tengo el mismo problema de ema95, pues el programa esta ya compilado en c compiler y simulado en proteus y funciona; en el momento de conectar el pic en la protobard le coloque el cristal en el pin y 17y despues de cada patilla del cristal conencte los dos condensadores de lenteja en serie a tierra, y de rb0 saque una resistencia de 330 a un led
pero no funciona, que debo hacer????. Muchas gracias por sus aportes

Hola...el pin? y el pin17 no son los del oscilador(adjunto la disposición de los pines..son el 15 y 16)...los capacitores si no estas seguro de la capacidad("lenteja" no es medida de capacidad) no le pongas nada ...el cristal de que frecuencia usaste? ; definiste los fusibles en el compilador y/o en el programador a la hora de programar?, ¿cuales fueron?; etc. pueden ser solo alguna de las causas por la que el circuito no te funcione pero recuerda que tú sabes lo que haces y nosotros solo lo que tú cuentas aquí.
Saludos.

Ric.
 

Adjuntos

  • 628.jpg
    628.jpg
    19.6 KB · Visitas: 71
cordial saludo,
de antemano agradezco su valiosa colaboración, si de hecho el cristal está entre el pin 15 y 16, el valor de los condensadores es de 22 pf, el cristal que utilize es de 4Mghz, el pin 6 (rb0/int) lo utilicé como salida para el led intermitente, y a continuación dejo la programación que utilicé para mi pic a disposición de ustedes, aclaro el programa fue compilado sin errores en c compiler y simulado en proteus (en proteus funciona correctamente el programa).

#include <16f628.h>
#fuses XT,NOWDT
#use delay(clock=4M)

void main()

{
while(true)
{

output_high(pin_b0);
delay_ms(500);
output_low(pin_b0);
delay_ms(500);
output_high(pin_b0);
delay_ms(100);
output_low(pin_b0);
delay_ms(100);}

}
 
Última edición:
cordial saludo,
de antemano agradezco su valiosa colaboración, si de hecho el cristal está entre el pin 15 y 16, el valor de los condensadores es de 22 pf, el cristal que utilize es de 4Mghz, el pin 6 (rb0/int) lo utilicé como salida para el led intermitente, y a continuación dejo la programación que utilicé para mi pic a disposición de ustedes, aclaro el programa fue compilado sin errores en c compiler y simulado en proteus (en proteus funciona correctamente el programa).
}

Hola, posiblemente te falte poner a nivel alto el pin MCLR (4)
 
gracias muchachos, efectivamente coloqué el pin mclr en alto (4), e inmediatamente funcionó el micro.
Me gustaría saber porque se necesita y si siempre se coloca en estado alto este pin para que funcione el micro o donde puedo buscar información al respecto, pues soy principiante y estoy interesado en el tema de programación ;) :)
 
gracias muchachos, efectivamente coloqué el pin mclr en alto (4), e inmediatamente funcionó el micro.
Me gustaría saber porque se necesita y si siempre se coloca en estado alto este pin para que funcione el micro o donde puedo buscar información al respecto, pues soy principiante y estoy interesado en el tema de programación ;) :)

Hola, es el pin de reset, si necesitas informacion mas detallada lee el datasheet
 
gracias muchachos, efectivamente coloqué el pin mclr en alto (4), e inmediatamente funcionó el micro.
Me gustaría saber porque se necesita y si siempre se coloca en estado alto este pin para que funcione el micro o donde puedo buscar información al respecto, pues soy principiante y estoy interesado en el tema de programación ;) :)

Eso pasa por no tomar en cuenta lo que te exprese en mi primer intervención " ; definiste los fusibles en el compilador y/o en el programador a la hora de programar?, ¿cuales fueron?"
El pin 4 es el MCLR y se puede usar o no dependiendo de la configuración de los fusibles si lo hubieras des-habilitador al colocarlos en tu programa, el compilador lo habría interpretado y estarían incluidos en el archivo "hex" generado o si lo hubieras puesto manualmente en el programador antes de programar el chip si tú no se lo indicas a ninguno de los dos se colocan como están por defecto que es habilitado y necesariamente deberás mandar ese pin a estado alto.
Acostumbrate a colocar los fusibles en el encabezado de tu programa si como la definicion del micro-controlador usado.
PHP:
Ej: en basic.... 

  Device = 16F628A
Config HS_OSC,WDT_OFF, LVP_OFF, BODEN_OFF, CP_ON,PWRTE_OFF,MCLRE_OFF
     Declare Xtal = 4 

en ASM
 list         p=16f84
    radix         hex
    __config     0x3FF1    ;'PWT_ON,WDT_OFF,OSC_XT,CP_OFF
Saludos.

Ric.
 
Última edición:
hola tambien soy nuevo en el foro estoy aprendiendo y tenia un problema similar
en un pic 16F628 trabajar con el osc interno y lo configure de acuerdo a este video
y me trabajo bien espero te sirva Link
 
hola gente, soy nuevo en esto de los pic, y necesito que alguien me de una mano.. tengo un problema con pic 16f628a..
Resulta que me compre el programador pickit2 (clon); y baje un .hex de la web que hace encender y apagar un led (1segundo en cada estado), lo unico que pretendo hacer con este programita es ver si el programador y el circuito funcionan bien( el circuito es muuy simple), pero tengo un tema:
-lo programo...
-lo leo y, efectivamente esta programado
-pero a la hora de probar si anda, pasan dos cosas:
1-si lo pruebo desde el programa pickit2 v2.6.. (programador mediante) activando vdd(5v) funciona genial, un segundo prendido, un segundo apagado; pero...
2- si lo conecto con una fuente externa, sin programador de por medio, o sea, como deberia funcionar el circuito de final NO anda, o queda encendido el led, o no enciende o "pira!"jeje

aclaro que estoy usando como "fuente externa" un cargador de celular con salida de usb(5v), y ese no es el problema...
talvez pueda ser algun problema con el clock, porq estoy usando el INTRC...

estoy entregado con todo esto de los pic.. y ya no me queda web ni tutorial por ver...
ayuda!!!:confused:
gracias.
desde uruguay, nico.
 
hola gente, soy nuevo en esto de los pic, y necesito que alguien me de una mano.. tengo un problema con pic 16f628a..
Resulta que me compre el programador pickit2 (clon); y baje un .hex de la web que hace encender y apagar un led (1segundo en cada estado), lo unico que pretendo hacer con este programita es ver si el programador y el circuito funcionan bien( el circuito es muuy simple), pero tengo un tema:
-lo programo...
-lo leo y, efectivamente esta programado
-pero a la hora de probar si anda, pasan dos cosas:
1-si lo pruebo desde el programa pickit2 v2.6.. (programador mediante) activando vdd(5v) funciona genial, un segundo prendido, un segundo apagado; pero...
2- si lo conecto con una fuente externa, sin programador de por medio, o sea, como deberia funcionar el circuito de final NO anda, o queda encendido el led, o no enciende o "pira!"jeje

aclaro que estoy usando como "fuente externa" un cargador de celular con salida de usb(5v), y ese no es el problema...
talvez pueda ser algun problema con el clock, porq estoy usando el INTRC...

estoy entregado con todo esto de los pic.. y ya no me queda web ni tutorial por ver...
ayuda!!!:confused:
gracias.
desde uruguay, nico.
Hola....sin circuito, foto o programa es solo cuestión de adivinar...si usas el oscilador interno esta bien y que hay del MCLR lo usas? y si es así el pin correspondiente(pin 4 RA5) esta a +5V por que si no no arrancara la ejecución del programa....
Saludos.

Ric.
 
este es el programita.. en c..

#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#byte TRISB=0x86
#byte PORTB=0x06

void main(void){
TRISB=0x00;
PORTB=0x00;
do{
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);
}while(TRUE);
}

me decis que si le saca el mclr de los fuses puede andar?



ya esta era eso nada más.. funcionó!!! muchas gracias..!!!
tengo más preguntas, no quiero ser molesto pero me gustaria que me ayudes con lo que realmente quiero hacer... se trata de leer las combinaciones de una linea de 8 "cablecitos" y dimerizar una luz en funcion del codigo que llegue por el cable...
en realidad el programa ya lo hice... pero no anda.. esta escrito en c queres que lo suba?
gracias..
 
Última edición:
Resuelto: (por si hay alguien buscando y encuentra este tema)
en los fuses puse :
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT,NOMCLR
Y ya no fue necesario alimentar la patita de MCLR con 5v basta con alimentar el pic(vdd y vss) para que el programa corra..
gracias de nuevo a Ric.!
saludos a todos!
 
Atrás
Arriba