TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nina en 13 de Septiembre de 2010, 22:14:59
-
Es el siguiente.
el siguiente programa no funciona en absoluto.
Estoy usando el 16F628 con el oscilador interno y una fuente de alimentación ATX (computadora).
Simula la belleza proteus y ta. al pulsar el botón, el LED se quede indefinidamente.
Sin embargo, al montar en la protoboard LED se ilumina sólo unos segundos. Es como estuviesse reseting del tiempo en tiempo.
Mi ccs es 4.032 y el mplab es 8.10.
si alguien tiene un led un 16F628 y un botón y puede simular en protoboard para mí. Estoy muy agradecido.
#include <16F628A.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD
#use delay(internal=4000000, PLENN)
#define botao PIN_A1
#define LED PIN_B3
void main() {
setup_oscillator(OSC_4MHZ);
output_low(LED);
while(TRUE)
{
if (input(botao) == 0)
{
output_high(LED);
}
}
}
Gracias
Muganga
-
Hola nina, podrias subir el esquemático de como tienes conectado el PIC en la protoboard? Por lo que comentas, si es posible que se esté reseteando. De todos modos debes revisar que tu fuente no sea la que esté produciento esto y que le tengas el capacitor de desacoplo en la alimentación del PIC. También debería tener una resistencia pullup en el pin del botón (A1).
Saludos!
-
RA----10K----5V
RA----BUTTON----TIERRA
B3----470R-----LED---TIERRA
VCC ----5V
GND ----TIERRA
ya sustituyó a la fuente de alimentación ATX (computadora) por una fuente de teléfono celular, pero también no funciona.
Podria hacer un teste con una batería de 9 voltios?
Muchas gracias por la respuesta
Nina
-
Pone una resistencia de pullup entre el boton y 5V
5V
/
\ 10K
/
RA-+--BUTTON----TIERRA
saludos!!
-
Gracias por su ayuda, entratanto, mismo poniendo incluso la resistencia (pull up) el problema continúa.
Nina
-
Hola nina haz lo siguiente y dime si te funciona, en fuses añade #FUSES NO_MCLR, #FUSES XT.
Luego saca el setup oscillator, cambia #use delay(internal=4000000, PLENN) por #use delay(clock=4000000)
Espero que te haya ido bien.
-
Otra cosa que yo haría es deshabilitar las entradas como analógicas. Ya que A1 por defecto es configurada como entrada analógica y no digital.
-
Ya he intentado al pin RB4 todavía no ha funcionado.
Muchas gracias
Nina
-
nunca hay q probar con fuentes switching (fuentes de pc ó cargadores de celulares ej.) porque meten mucho ruido al circuito por los armonicos que tienen esas fuentes, es mejor probar con fuentes lineales o pilas comunes, al programa yo le declararia los tris y las hubicaciones de los puertos.
#include <16F628A.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD
#use delay(internal=4000000, PLENN)
#define botao PIN_A1
#define LED PIN_B3
#byte porta=5 //digo en que parte del mapa de memoria se encuentra los puertos a y b
#byte portb=6
void main() {
setup_oscillator(OSC_4MHZ);
output_low(LED);
set_tris_a(0x02);
set_tris_b(0x04);
while(TRUE)
{
if (input(botao) == 0)
{
output_high(LED);
}
}
}
hay aveces cuando no haces esas declaraciones que el micro te puede hacer cualquier cosa
espero poder ayudarte con eso
-
El pic esta ejecutando?? Hace un programita que haga titilar el led para corroborar.
Si no funciona proba con esta configuracion de fuses:
#fuses NOWDT,INTRC_IO, PUT, NOPROTECT, NOMCLR, NOLVP, NOCPD
#use delay(clock=4000000)
De paso hago una preguntita: para q sirve poner PLENN en esta linea?
#use delay(internal=4000000, PLENN)
saludos!!
-
De paso hago una preguntita: para q sirve poner PLENN en esta linea?
#use delay(internal=4000000, PLENN)
Ya somos dos! :)
Hola nina, si estás usndo estos fuses como lo indica tu código:
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD
Entonces quiere decir que tienes el pin MCLR activo (pin 4). En ese caso debes tener una resistencia conectada a +5V en el pin 4 (MCLR) o si no se te va a estar reseteando todo el tiempo.
Te recomiendo un código con encabezados más completos para que te evites confusiones:
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#define botao PIN_A1
#define LED PIN_B3
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
output_low(LED);
while(TRUE)
{
if (input(botao) == 0)
{
output_high(LED);
}
}
}
Saludos!
-
primeiramente gostaria de agradecer a todos pela ajuda.
o problema fue neste ponto:
"Entonces quiere decir que tienes el pin MCLR activo (pin 4). En ese caso debes tener una resistencia conectada a +5V en el pin 4 (MCLR) o si no se te va a estar reseteando todo el tiempo."
o resto do programa continuou o mesmo:
#include <16F628A.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD
#use delay(internal=4000000)
#define botao PIN_A1
#define LED PIN_B3
void main() {
output_low(LED);
while(TRUE)
{
if (input(botao) == 0)
{
output_high(LED);
}
}
}
muchas gracias
nina
-
Hola de nuevo nina, ya hiciste la prueba en el protoboard? Con que hiciste la programación? Acabo de ver este programa (http://www.todopic.com.ar/foros/index.php?topic=32057.0) y me parece que alli tienes (tenemos) el mismo error, por lo que me parece que la sugerencia que te hace gera es la correcta:
... Si no funciona proba con esta configuracion de fuses:
#fuses NOWDT,INTRC_IO, PUT, NOPROTECT, NOMCLR, NOLVP, NOCPD
#use delay(clock=4000000)
Saludos!