TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cmontoya en 22 de Diciembre de 2013, 01:39:03
-
Hola Amigos
Tengo unos problemas con 2 proyectos que tengo hechos con un Pic 16f628A el primero está funcionando con un cristal de 8MHz pero cuando lo pongo a funcionar a veces funciona y otras no me toco prenderlo apagarlo varias veces para que vuelva a funcionar o resetearlo.
Con el otro proyecto tengo casi el mismo problema, primero hice una rutina que se activa con un swits, primero lo probé en la protoboard y funciono bien, después diseñe la PCB y no funciona me toca oprimir reset y oprimir el swits varias veces para que coja la rutina, este pic está configurado con el oscilador interno (4MHz), solo tiene rutinas sencillas (if, else), el swits lo probé con otros pines para descartar posibles daño del pin pero siguió teniendo esta misma falla, para ambos proyectos tiene su propia fuente y su respectivo regulador.
La verdad no sé por qué pasa eso Alguna solución??
-
Tiene pinta de que el MCLR o los pines del cristal no hacen buen contacto.
-
tienes bien habilitado/deshabilitado el wdt? has habilitado el fuse PUT? condensadores de 100nf para interferencias de la alimentacion? NOBROWNOUT habilitado para evitar resets por caidas de tension? o de lo contrario tienes el reset por caida de tension habilitado?
lo mejor es que pusieras mas informacion asi como imagenes del circioto para descartar posibles problemas....
-
tienes bien habilitado/deshabilitado el wdt? has habilitado el fuse PUT? condensadores de 100nf para interferencias de la alimentacion? NOBROWNOUT habilitado para evitar resets por caidas de tension? o de lo contrario tienes el reset por caida de tension habilitado?
lo mejor es que pusieras mas informacion asi como imagenes del circioto para descartar posibles problemas....
Hola
Pues en el codigo si los tengo como dices
#include <16f628A.h>
#fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
#include <fonts.h>
#include <string.h>
#define clock PIN_A1
#define strobe PIN_A2
#define dato PIN_A0
#define size_matriz_col 8
#define COLUMNAS 8
#define matriz_num COLUMNAS/size_matriz_col
Anexo tambien la fuente con la cual esta diseñado
-
un 1uF para la salida ,es muy poco, deberia como minimo 10uF o 47uf aparte poner condensadores de desaclopo de 100n tantos en la entrada como en la salida de la alimentacion y tambien podria en la entrada del pic eso dependiendo como este hecho tu placa, revisa y lee bien todos los comentarios que te explicamos aqui y si no resuelve el problema deberia ser en otras cosas, pero deberia explicar con exactitud como lo tiene montados todos, asi podriamos descartar cosas.
Un Saludos
-
lo que también puedes probar es usar otra versión del compilador, no sería la primera vez que fuera culpa de el
-
un 1uF para la salida ,es muy poco, deberia como minimo 10uF o 47uf aparte poner condensadores de desaclopo de 100n tantos en la entrada como en la salida de la alimentacion y tambien podria en la entrada del pic eso dependiendo como este hecho tu placa, revisa y lee bien todos los comentarios que te explicamos aqui y si no resuelve el problema deberia ser en otras cosas, pero deberia explicar con exactitud como lo tiene montados todos, asi podriamos descartar cosas.
Un Saludos
Hola
Segun tu opinion la fuente quedaria como en el diagrama??
Saludos y Feliz Navidad
-
Exacto,pero aseguraste que el convertidor soporte el amperaje para todos lo que vaya a usar con el y que te esta dando 5 voltio a su salida,puede ser 4,90VCC, si te da mas es posible que la corriente de entrada es demasiado para el regulador, lo digo porque esos problemas que comenta me han sucedido a mi.
Saludos y Felices Fiestas
-
Exacto,pero aseguraste que el convertidor soporte el amperaje para todos lo que vaya a usar con el y que te esta dando 5 voltio a su salida,puede ser 4,90VCC, si te da mas es posible que la corriente de entrada es demasiado para el regulador, lo digo porque esos problemas que comenta me han sucedido a mi.
Saludos y Felices Fiestas
Hola
Pues la verdad probé cambiando el condensador de 1uf a 47uf y anexarles los otros condensadores pero lamentablemente sigue igual con el mismo problema y midiendo con el multímetro me mide 5.01v o 4.99vdc, puede con esto descartar La fuente y pues los fuses y configuración está bien será que es un problema de los los pic???
Felices Pascuas
-
¿Cómo está conectado el pin MCLR? ¿Colocaste los capacitores para el cristal? Sería bueno que subas un esquema.
-
Pues como te dice el amigo AngelGris, es mejor que suba el Esquema. estoy seguro que es un Fallo tuyo o mala Conexion.
o si no tiene el Esqema hecho, pon de algunos donde te ha guiado.
-
Hola Amigos
Tengo unos problemas con 2 proyectos que tengo hechos con un Pic 16f628A el primero está funcionando con un cristal de 8MHz pero cuando lo pongo a funcionar a veces funciona y otras no me toco prenderlo apagarlo varias veces para que vuelva a funcionar o resetearlo.
Con el otro proyecto tengo casi el mismo problema, primero hice una rutina que se activa con un swits, primero lo probé en la protoboard y funciono bien, después diseñe la PCB y no funciona me toca oprimir reset y oprimir el swits varias veces para que coja la rutina, este pic está configurado con el oscilador interno (4MHz), solo tiene rutinas sencillas (if, else), el swits lo probé con otros pines para descartar posibles daño del pin pero siguió teniendo esta misma falla, para ambos proyectos tiene su propia fuente y su respectivo regulador.
La verdad no sé por qué pasa eso Alguna solución??
Hola.
Controla con el tester las pistas y conecciones de los componentes.
Saludos.
-
Hola amigos
Este es el diagrama el cual utilice para la simulación y para la PCB
Algún daño??
-
Hola Amigos
Tengo unos problemas con 2 proyectos que tengo hechos con un Pic 16f628A el primero está funcionando con un cristal de 8MHz pero cuando lo pongo a funcionar a veces funciona y otras no me toco prenderlo apagarlo varias veces para que vuelva a funcionar o resetearlo.
Con el otro proyecto tengo casi el mismo problema, primero hice una rutina que se activa con un swits, primero lo probé en la protoboard y funciono bien, después diseñe la PCB y no funciona me toca oprimir reset y oprimir el swits varias veces para que coja la rutina, este pic está configurado con el oscilador interno (4MHz), solo tiene rutinas sencillas (if, else), el swits lo probé con otros pines para descartar posibles daño del pin pero siguió teniendo esta misma falla, para ambos proyectos tiene su propia fuente y su respectivo regulador.
La verdad no sé por qué pasa eso Alguna solución??
Pones muy poca información, para tratar de ayudarte hay que adivinar :(.
¿Cómo está conectada la entrada? ¿tienes resistencia de pull-up/down en dicha entrada? ¿qué hace la rutina?
-
Pues como dice Geo, es como que estamos adivinando... Sube tu programa, tal vez allí se encuentre la falla. ¿Los pines RA0 a RA2 son entradas o salidas? Si son entradas, ¿deshabilitaste los comparadores?
-
cmotoya
Como te dicen los amigos para mi, sino es problema de hardware, los fallos deben estar en el software por la manera herratica en como te falla el programa, eso suele suceder. Asi que si quieres mas ayuda y resolverlo rapido pon tu codigo para revisarlo y probarlo :mrgreen:
Felices fiestas!!!
-
Hola amigos
El primer código es un código que una matrix que compartió el compañero Cryn
El segundo código yo lo hice porque tuve la necesidad de hacer andar una lavadora de los 80´s con un programa de lavado sencillo que está en el manual de la lavadora (llena, lava por 20 minutos, centrifuga 4 minutos, llena de nuevo, enjuaga por 10 minutos, centrifuga 5 minutos, y listo) aparte de eso anexe la posibilidad con el pin A0 de lavar 10 minutos no más lo curiosos es que esta rutina si funciona de una pero la otra no toca chancletearla , prácticamente trate de desarrollar el código sencillo y basado en la información del manual de la lavadora, aparte de eso la lavadora no funciona con condensador si no con la fase.
Codigo de Cryn
#include <16f628a.h>
#fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
#include <fonts.h>
#include <string.h>
#define clock PIN_A1
#define strobe PIN_A2
#define dato PIN_A0
#define size_matriz_col 8 //cantidad de columnas por matriz
#define COLUMNAS 40 //Defino cantidad de columnas a usar
#define matriz_num COLUMNAS/size_matriz_col //numero de matrices usado
#byte portb=6
int matriz[matriz_num+1][size_matriz_col]={"\0"}; //Almacena los datos a mostrar en el cartel
int Fila; //Fila actual a refrescar
int VSync; //Indica si es momento correcto de modificar lo que se esta mostrando...
int Inhibit; //Impide que se produzcan cambios en el cartel.
const int mensaje[1][32]={"Feliz Navidad y Feliz 2014!!..."};
const int num_msj=1;
const int msj_length[num_msj]={31};
int carries[6],msj,letra,desplazos;
void ShowFila(void);
void cargar(int datob);
void desplazar_izq(void);
void load_letra(int caracter);
//Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
#int_TIMER0
void TIMER0_isr(void){
ShowFila(); //Mostremos la fila actual...
Fila++;
if(Fila==8){
Fila=0;
VSync=1;
if(Inhibit!=0)
Inhibit--;
else
desplazar_izq();
}
else
VSync=0;
}
void main(void){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
enable_interrupts(INT_TIMER0);
clear_interrupt(INT_TIMER0);
enable_interrupts(GLOBAL);
setup_comparator (NC_NC_NC_NC);
//setup_adc(adc_off);
//setup_adc_ports(no_analogs);
set_tris_a(0);
set_tris_b(0);
output_b(0xFF); //Apago cartel
output_low(CLOCK); //Aseguro inicialmente clock en bajo
output_low(STROBE);
Fila=0; //Comienzo por la 1er fila
Inhibit=5;
VSync=1; //Indico que comienzo con sync.
desplazos=0;
msj=0;
while(true){}
}
void cargar(int datob){
int contador;
output_low(clock);
delay_cycles(2);
output_low(strobe);
for(contador=0;contador<8;contador++){
output_bit(dato,(datob & 0x1));
datob>>=1;
output_high(clock);
delay_cycles(1);
output_low(clock);
}
output_high(strobe);
delay_cycles(1);
output_low(strobe);
}
void ShowFila(void){
int i;
output_b(0xFF);
for(i=0;i<5;i++){
cargar(matriz[i][Fila]);
}
bit_clear(portb,fila);
}
void desplazar_izq(void){
int i,j,a;
if(desplazos==8 || desplazos==0){
load_letra(mensaje[msj][letra]);
desplazos=0;
}
for(i=0;i<8;i++){
for(j=0;j<6;j++){
a=matriz[j][i];
carries[j]=shift_left(&a,1,0);
matriz[j][i]=a;
}
for(j=0;j<6;j++){
if(j!=5)
matriz[j][i]|=carries[j+1];
else
matriz[j][i]|=carries[0];
}
}
Inhibit=5;
desplazos++;
if(desplazos==8){
letra++;
if(letra>msj_length[msj])
letra=0;
}
}
void load_letra(int caracter){
int i,j;
if(isalnum(caracter)){
if(isalpha(caracter)){
if(isupper(caracter)){
switch(caracter){
case 'A': i=0; break;
case 'B': i=1; break;
case 'C': i=2; break;
case 'D': i=3; break;
case 'E': i=4; break;
case 'F': i=5; break;
case 'G': i=6; break;
case 'H': i=7; break;
case 'I': i=8; break;
case 'J': i=9; break;
case 'K': i=10; break;
case 'L': i=11; break;
case 'M': i=12; break;
case 'N': i=13; break;
case 'O': i=14; break;
case 'P': i=15; break;
case 'Q': i=16; break;
case 'R': i=17; break;
case 'S': i=18; break;
case 'T': i=19; break;
case 'U': i=20; break;
case 'V': i=21; break;
case 'W': i=22; break;
case 'X': i=23; break;
case 'Y': i=24; break;
case 'Z': i=25; break;
}
for(j=0;j<8;j++){
matriz[5][j]=letrasM[i][j];
}
}
else{
switch(caracter){
case 'a': i=0; break;
case 'b': i=1; break;
case 'c': i=2; break;
case 'd': i=3; break;
case 'e': i=4; break;
case 'f': i=5; break;
case 'g': i=6; break;
case 'h': i=7; break;
case 'i': i=8; break;
case 'j': i=9; break;
case 'k': i=10; break;
case 'l': i=11; break;
case 'm': i=12; break;
case 'n': i=13; break;
case 'o': i=14; break;
case 'p': i=15; break;
case 'q': i=16; break;
case 'r': i=17; break;
case 's': i=18; break;
case 't': i=19; break;
case 'u': i=20; break;
case 'v': i=21; break;
case 'w': i=22; break;
case 'x': i=23; break;
case 'y': i=24; break;
case 'z': i=25; break;
}
for(j=0;j<8;j++){
matriz[5][j]=letras_m[i][j];
}
}
}
else{
for(j=0;j<8;j++){
matriz[5][j]=numeros[caracter-'0'][j];
}
}
}
else{
switch(caracter){
case ' ': i=0; break;
case '!': i=1; break;
case '"': i=2; break;
case '#': i=3; break;
case '$': i=4; break;
case '%': i=5; break;
case '&': i=6; break;
case '´': i=7; break; //este es el acento
case '(': i=8; break;
case ')': i=9; break;
case '*': i=10; break;
case '+': i=11; break;
case ',': i=12; break;
case '-': i=13; break;
case '.': i=14; break;
case '/': i=15; break;
case ':': i=16; break;
case ';': i=17; break;
case '>': i=18; break;
case '=': i=19; break;
case '<': i=20; break;
case '?': i=21; break;
case '[': i=22; break;
case ']': i=23; break;
case '^': i=24; break;
case '_': i=25; break;
case '{': i=26; break;
case '|': i=27; break;
case '}': i=28; break;
case '@': i=29; break;
case 'ñ': i=30; break; // esta es la enie
case '\f': i=31; break;
}
for(j=0;j<8;j++){
matriz[5][j]=chars[i][j];
}
}
}
Codigo de lavadora
#Include <16F628A.h>
#Fuses INTRC_IO, NOWDT, PUT, NOBROWNOUT, NOCPD, NOPROTECT, MCLR
#use delay(clock=4000000)
#Use Fast_Io(B)
#Use Fast_Io(A)
#define run PIN_b3
#define izq PIN_b1
#define der PIN_b2
#define swit PIN_b0
#define llenado PIN_b4
#define lavado PIN_b5
#define centrifigado PIN_b6
#define final PIN_b7
#define presos PIN_a0
unsigned char paso;
void main(void)
{
setup_comparator (NC_NC_NC_NC);
//setup_adc_ports(NO_ANALOGS);
set_tris_A(0x0b1111110);
set_tris_B(0x00);
output_b(0x00);
output_a(0x00);
while(true)
{
if (input(PIN_A1) == 1)
{
do
{
output_high(llenado);
delay_ms(700);
while (input(PIN_A4) != 1); //espera al presostato
output_low(llenado);
delay_ms(11000);
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
////////////20minutos Lavando////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
/////////////////////////////////
output_b(0x00);
delay_ms(60000);
delay_ms(60000);
/////////////Centrifugado/////////////////
output_high(centrifigado);
delay_ms(1000);
output_high(der);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(der);
output_low(swit);
///////////////////////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////////////////////
output_b(0x00);
delay_ms(10000);
paso--;
}
while (pasadas > 0);
output_high(llenado);
delay_ms(700);
while (input(PIN_A4) != 1); //espera al presostato
output_low(llenado);
delay_ms(11000);
//////////////////////lavado/////////////////
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
/////////////Enjuagado///////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(60000);
delay_ms(60000);
/////////////Centrifugado/////////////////
output_high(centrifigado);
output_high(final);////////////////////////////
delay_ms(700);/////////////bit////////////////
output_low(final);///////////////////////////
delay_ms(1000);
output_high(der);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(der);
output_low(swit);
////////////////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(10000);
paso--;
}
pasadas = 1;
/////////////////////////////////////////anexo1/////////////////////////////////////////////////////
if (input(PIN_A0) == 1){
delay_ms(1000);
//////////////////////lavado/////////////////
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
//////////lavado 10 minutos//////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(5000);
}
}
}
-
En el segundo programa en la parte de anexo1 quieres leer el pin RA0 y sin embargo RA0 supuestamente está configurado como salida.
¿Está bien como estás configurando el TRISA, 0x0b11111110? Yo supondría que lo lógico sería 0xaa para el caso de un valor en hexa y/o 0baaaaaaaa para un valor en binario
-
Hola,, buenos dias a todos. Espero hayan tenido unas lindas fiestas y comiencen un mejor 2014.
Si me permiten una duda y perdonan mi poco conocimiento quisiera preguntar si: ¿funciona bien en la protoboard y falla en la placa diseñada y hecha?, al menos así lo expresa, eso me parece más error de diseño o fabricación de la placa, o me equivoco en el concepto. De ser correcto el problema quizá desaparezca resoldando componentes. Yo comenzaría resoldando todo y veo que pasa. Un abrazo