TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: akira_ve en 04 de Octubre de 2007, 01:26:27
-
Hola amigo termine un diseño con un 16F877, su funcion es capturar datos digitales y analogicos y enviarlos serialmente al pc, pero para probar los puertos de entrada y salida digital encendiendo y apagando LED pero sucede algo curioso.
El pic al encender funciona bien pero los LED gradualmente se van disminuyendo de brillo hasta quedar apagados, y la alimentacion del pic esta bien. presiono el pulsador de reset un minuto y vuelve a pasar al solter el pulsador de Reset, por cierto uso un resonador de 4 MHZ y 2 condensadores ceramicos de 22 pF.....espero que me ayuden.
-
podrias pegarnos tu programa?? asi por encima no se decirte, parece que el bucke principal no se cumpla siempre pero pasanos el programa y le echamos un vistazo.. un saludo.
-
?...............ahora te muestro el programa veras que no es la cosa del otro mundo ademas lo simule en el Proteus, y el Pic Simulator IDE y funciona bien
list p=16f877A
#Include "P16F877A.INC"
errorlevel -302
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
cblock 0x20
dato_1,dato_2,tm0,REG1,REG2,REG3
endc
org 0x00
goto ini_cf
ini_cf:
clrf PORTA
bsf STATUS, RP0
movlw 0x80
movwf TRISC
clrf TRISD
bcf STATUS, RP0
bsf PORTD, 7
bsf PORTD, 6
bcf PORTD, 5
bcf PORTD, 4
bcf PORTD, 1
;.......................................................................
inicio:
clrf PORTB
btfsc PORTC, 7
goto port_a
goto port_b
port_a:
bcf PORTD, 1
bsf PORTC, 6
call t_1seg
bsf STATUS, RP0
movlw 0xFF
movwf TRISB
bcf STATUS, RP0
bcf PORTD, 7
movf PORTB, W
movwf dato_1
bsf PORTD, 7
bcf PORTD, 6
movf PORTB, W
movwf dato_2
bsf PORTD, 6
bsf STATUS, RP0
clrf TRISB
bcf STATUS, RP0
movf dato_1, W
movwf PORTB
bsf PORTD, 5
bcf PORTD, 5
movf dato_2, W
movwf PORTB
bsf PORTD, 4
bcf PORTC, 6
bcf PORTD, 4
call t_1seg
goto inicio
port_b
bcf PORTC, 6
bsf STATUS, RP0
clrf TRISB
bcf STATUS, RP0
movlw b'01010101'
movwf PORTB
bsf PORTD, 1
bsf PORTD, 5
bsf PORTD, 4
bcf PORTC, 6
bcf PORTD, 5
bcf PORTD, 4
call t_1seg
movlw b'10101010'
movwf PORTB
bcf PORTD, 1
bsf PORTD, 5
bsf PORTD, 4
bcf PORTC, 6
bcf PORTD, 5
bcf PORTD, 4
call t_1seg
goto inicio
t_1seg
call t_05seg
call t_05seg
return
t_05seg
MOVLW B'00100000'
NOP
MOVWF REG3
N3
MOVWF REG2
N2
MOVWF REG1
NOP
N1
NOP
DECFSZ REG1,1
GOTO N1
DECFSZ REG2,1
GOTO N2
DECFSZ REG3,1
GOTO N3
NOP
NOP
RETURN
-
Pos lo que desscribes, dice que es problemas de hardware. Estas con PCB o Protoboard?
-
Jajajaja amigo..eso lo se...pues en los simuladores que uso funciona bien y si vez el programa no es gran cosa.....esta en un pcb para prototipos...........
El problema lo tengo desd ayer.............plo publique para ver si alguien ha sufrido de eso..........estoy revisando todo de nuevo.......todos los integrados estan montados en bases, para poder removerlos, los quitare todos y dejare solo el pic, tan pronto logre algo se los hare saber, por si acaso a alguien le pasa lo mismo
-
?...............ahora te muestro el programa veras que no es la cosa del otro mundo ademas lo simule en el Proteus, y el Pic Simulator IDE y funciona bien
Viendo muy por arriba tu código no he visto nada raro, de todas formas que funcione en el simulador no es garantía 100% de que funcione en el hardware real. Una de las principales cosas a tener en cuenta son los tiempos, algo que corre en unos segundos en el simulador puede que sean solamente unos milisegundos en la vida real (depende de la complejidad del hardware que le hayas armado al simulador, tardará mas o menos).
Lo que comentas pudiera ser porque cada vez refresques más lento tus pines de los leds o bien porque se pierda el hardware en alguna tarea. ¿cómo es tu hardware? ¿qué leds le has puesto y que resistencias? ¿tiene resistencias?
Saludos
-
si vez el programa el puertoC,7.............cuando esta en uno logico, el Puerto C,6 parpadea a rason de uno por segundo y los valores que se toman por 2 integrados ( 74ls244) son guardado y luego son enviado a 2 registros transparentes ( 74LS373) asi se logran 2 puertos digitales de 8 bit, si pasas el puerto a cero logico ( el puerto C,7 ) cambia todo......los registros transparentes muestran un valor digital 10101010 y luego 01010101 y ahora parpadea el Puerto D,1 lo que hice fue colocar un LED muy pequeño un una resistencia de 470 ohmios ( justamente para no absorber mucha corriente ) y bueno sucede lo que explique..............arranca y ese led va disminuyendo de brillo hasta apagarse...............por ultimo al presinar reset..............y soltarlo..........sucede lo mismo......
-
Amigos...................encontre el problema era el PCB simplemente compre un para armar prototipos....y funciono, saldre del diseño y lo pondre a funcionar como se requiere, y luego vere en si que sicedio, por que la oscilacion del PIC era amortiguada pues esta falla es bas tante interesante.................me dio ideas para podteriores aplicaciones
-
Hola akira_ve. Yo estoy armando un circuito y lo monte en un protorboard y no lo pude simular correctamente, ya que tiene tanto ruido eléctrico, que no anda. Ahora lo voy a montar en un PCB y de todas maneras, le agregaré los condensadores a cada CI. Te aconsejo que hagas lo mismo.
Saludos. :-/ :-/
-
amigo..............eso nunca dejo de ponerlo..al pic y los 4 TTl a cada uno le coloque el respectivo condensador...........de 10 voltios....0,1 uF para absorber las perturbaciones creadas por los mismosd componentes digitales.............en realidad era una falla en el pcb, al parecer habia una pequeña cantidad de cobre entre algunas pistas.pues cambie el PCB para hacer prototipos.y se resolvio
-
¡¡¡¡¡aaaaaaaaaaaaaaahhhhhhhhhhh!!!!! Okey. Me alegro que lo allas solucionado.
Saludos. :-/ :-/
-
si como resultado se crea un oscilacion amortiguada..y por eso se detiene el funcionamiento del pic
-
en realidad era una falla en el pcb, al parecer habia una pequeña cantidad de cobre entre algunas pistas.pues cambie el PCB para hacer prototipos.y se resolvio
Buenisimo, crimen resuelto , pic funcionando, Microchip exonerado de la causa :mrgreen:
-
una anécdota que me pasó a mi, que de chiripas no quemo una memoria, precisamente por unos pelos miniaturas que hacian corto en el pcb. Al principio no funcionaba, y a simple vista el layout se veia correcto, solo con una lupa y un tester de continuidad me dijeron la verdad :roll:
-
Pos lo que desscribes, dice que es problemas de hardware. Estas con PCB o Protoboard?
Ya decia yo que era Hardware.. FELICITACIONES!!!
-
Pos lo que desscribes, dice que es problemas de hardware. Estas con PCB o Protoboard?
Ya decia yo que era Hardware.. FELICITACIONES!!!
jeje, fuiste algo así como el Sherlock Holmes del caso. :mrgreen:
-
jeje, fuiste algo así como el Sherlock Holmes del caso. :mrgreen:
Cierto que si!!!!!!!
SALUDOS!! :wink:
-
Hola a todos!!!
Mi problema es similar al que uds. ya resolvieron y consiste en lo siguiente:
Tengo en protoboard un proyecto con el pic 16F873 y que al igual que akira·ve
uso el puerto análogo y en vío datos al pc vía RS232, la diferencia entonces es que el
pic apaga :z), no lo hace de apoco ni con parpadeos, ni tampoco tiene problemas
con los tiempos asignados sino que funciona excelente por un par de minutos y se apaga.
Espero que me ayuden, entrego el proyecto en un par de semanas más :8}.
Saludos....
-
Hola doteiza,
Pon el código para que le podamos echar un vistazo.
Si fuera un 18F diría que sin querer tenías el WDT activado y al par de minutos te reiniciaba el PIC, pero, siendo un el 16F873... no se.
Prueba a dejar solo la comunicación RS232 (anula la parte de las conversiones) o observa si se cuelga. También lo puedes hacer al reves (anula el RS232 y deja sólo las conversiones) así podrás acotar un poco el problema.
Esperamos noticias.
Un saludo desde Alicante.
-
Hola azicuetano!!!
Gracias porla respuesta expedita...
Aviso que yo programo en "c" y quizas está un poquito largo pero ahí va...
#include <16F873A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#byte PuertoB = 0x06
#byte PuertoC= 0x07
int a=0,h=0,m=0,s=0,d,g,f=0,i=0,cont=1,p=0,tiempo;
int ciclo,temp;
long t[5];
void toma_muestra(); //declaración de procedimientos.
void ejecucion_dia();
void ejecucion_noche();
void ejecucion1_dia();
void ejecucion1_noche();
void fotoperiodo();
#INT_TIMER2 //Rutina de interrupcion por timer 2,
void timer2() //Funcion que es llamada por la interrupcion
{ //del timer para conformar el reloj
a++; // de horas miniutos segundos y dias de operacion
if(a>24) //Contador de interrupciones
{
if(s<59) //Contador de segundos
{
s++;
}
else
{
if(m<59) //Contador de minutos
m++;
else
{
if(h<23) //Contador de horas
h++;
else
{
h=0;
}
m=0;
}
s=0;
}
a=0;
}
}
void main()
{
setup_port_a(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_2(T2_DIV_BY_16,250,10); //Configurando la duracion de
set_timer2(0); //cada interrupcion del timer
set_tris_b(0x01); //declaración de los puertos,
set_tris_c(0x00); //puerto B de salida menos RB0
enable_interrupts(GLOBAL); //y puerto C de salida.
enable_interrupts(INT_TIMER2);
do
{
if(s%2==0)
{
toma_muestra(); //ciclo eterno, que ejecuta los procedimientos
fotoperiodo(); //de cada una de las variables ambientales
temp=(t[0]+t[1]+t[2])/3; //y las envía al pc.
if(bit_test(PuertoB,0))
{
ejecucion_noche();
ejecucion1_noche();
if(tiempo<24)
{ciclo=1;}
else
{ciclo=0;}
}
else
{
ejecucion1_dia();
ejecucion_dia();
ciclo=1;
}
printf("%u%2U%u\r\n",g,d,ciclo);
delay_ms(1000);
}
}while (true);
}
void Toma_Muestra(void) //Funcion que toma las muestras de voltaje entregadas
{ //por los sensores
for(i=0;i<6;i++)
{
if(i==0)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x00);
}
if(i==1)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x02);
}
if(i==2)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x04);
}
if(i==3)
{bit_clear(PuertoB,4);
bit_set(Puertob,5);
output_b(0x06);
}
if(i==4)
{bit_clear(PuertoB,4);
bit_set(Puertob,5);
output_b(0x08);
}
if(i==5)
{bit_clear(PuertoB,4);
bit_set(PuertoB,5);
output_b(0x0A);
}
set_adc_channel(0);
delay_us(50);
t=Read_ADC();
delay_us(50);
}
}
void ejecucion_dia()
{
bit_clear(PuertoC,3); //ejecuta las acciones a tomar segun temperatura
delay_us(2);
bit_clear(PuertoC,4);
delay_us(2);
if(temp<19)
{
bit_set(PuertoC,3);
delay_us(50);
}
else
if(temp>23)
{
bit_set(PuertoC,4);
delay_us(50);
}
d=temp;
}
void ejecucion_noche()
{
bit_clear(PuertoC,3);
delay_us(2);
bit_clear(PuertoC,4);
delay_us(2);
if(temp<17)
{
bit_set(PuertoC,3);
delay_us(50);
}
else
if(temp>21)
{
bit_set(PuertoC,4);
delay_us(50);
}
d=temp;
}
void ejecucion1_dia() //ejecuta las acciones a tomar segun humedad.
{
bit_clear(PuertoC,5);
delay_us(2);
if(t[3]<73)
{
bit_set(PuertoC,5);
delay_us(50);
}
g=t[3];
}
void ejecucion1_noche()
{
bit_clear(PuertoC,5);
delay_us(2);
if(t[3]<83)
{
bit_set(PuertoC,5);
delay_us(50);
}
g=t[3];
}
void fotoperiodo() //procedimiento a cargo de la cuenta de horas y encendido
{ //de las luces.
tiempo=tiempo+(s/s)+cont;
if (tiempo>50)
tiempo=25;
if(bit_test(PuertoB,0))
if(tiempo<24)
{
bit_set(PuertoC,2);
}
else
{
bit_clear(PuertoC,2);
}
else
{
bit_clear(PuertoC,2);
f++;
if(f==1)
tiempo=0;
}
}
Mañana sin falta pruebo lo que me dices...
Gracias nuevamente.... Saludos :-/.
-
Hola doteiza,
He visto un par de cosas que me resultan un poco extrañas.
#fuses HS,NOWDT,NOPROTECT,NOLVP
Utilizas un cristal de 4Mhz y para ello en lugar de poner HS tienes que poner XT.
Mira a ver si así te funciona bien.
Yo creo que el problema viene por la comunicación. Para ver si estoy en lo correcto necesito que hagas una prueba. No enganches a ningún sitio los pines C6 y C7 y ten el sistema encendido durante mucho tiempo. Me temo que es posible que sufras algún tipo de colisión y que por eso se te queda el PIC parado. Si no tienes esos pines (C6 y C7) enganchados a ningún sitio las colisiones no se producirán y podras saber a la perfección que ese es tu problema.
Mira esto:
http://www.todopic.com.ar/foros/index.php?topic=19026.msg134904#msg134904
Ya nos dices algo.
Un saludo desde Alicante.
-
hola de nuevo!!
Corregí lo que me dices, xt (que tonta no me di cuenta!!) y lo dejé sin comunicación...
Pero se sigue apagando!!!! :cry:
sabes??, es como si le afectara la estática, me muevo y se apaga... si lo dejo solito dura
un poco más pero se sigue apagando... buuuuu.
porfa, he probado todo, sigo sin imaginar cual es el problema...
Salu2....
-
doteiza porque no haces un soft simple que solo configures los puertos y enciendes un led. Ten cuidado de verificar que esté desactivado el WDT y verificas si enciende bien el led.
Si te acercas y anda mal no se en qué puede intervenir la estática, ahora si lo que dices es que si tocas con un dedo el cristal éste hace cosas raras bueno, eso es normal. Le estás induciendo ruido de 50Hz o 60Hz (depende de la zona donde vivas).
Revisa que todos los pines de GND estén unidos a masa, al igual que los pines de vcc
También que el MCLR esté bien filtrado, y no solamente una resistencia a 5v.
-
Haz lo que te comenta maunix (sabios consejos) y también puedes probar a poner los fuses:
PUT y NOBROWNOUT
Esto es sólo para ver si funciona. Suponiendo que lo haga bien... avísanos para que podamos pulir un poco más el diseño electrónico.
Ya nos dices algo.
Un saludo desde Alicante.
-
Hola!!!!
quiero llorar!!!
pero de alegría!!!! :D :D
lleva 20 min y ningun pare!!!!
el problema simplemente era que había dejado al aire la patilla MCRL(como decía maunix)
llevo muy poquito tiempo trabajando con pic's(4 meses) y esa era una de las cosas que no
sabía... :?
de todas maneras ahora que lo he podido ver trabajar en plenitud le encontré un detalle
pero creo que es un problema de código que creo poder solucionar.
No me queda más que agradacerles y espero poder ser de ayuda para quien lo necesite
asi como uds lo hicieron conmigo... :g)
Nuevamente gracias...
Salu2...
-
hola
he tenido este mismo problema en un par de placas, se apagaba el pic quedandose sin hacer nada , entonces me di cuenta que algunos 7805 se apagaban y encendian continuamente cada vez mas lento esto a penas se notaba con el polimetro pero con el osciloscopio se veia que habia caidas de tension cada x de esta forma se veian los leds iluminar mucho menos cada vez hasta morir, le puse un disipador al 7805 y mejor no acercarse que quema. Pero ya no se apaga hasta que lo tenga que cambiar.
un saludo espero te sirva
-
doteiza me alegro que te haya funcionado.
No me queda más que agradacerles y espero poder ser de ayuda para quien lo necesite
asi como uds lo hicieron conmigo... :g)
Cuando puedas y sepas la respuesta a alguna pregunta de un forero, respóndele con paciencia y tratando de explicarle tus conocimientos. Esa es la mejor forma de agradecer 'al foro' :)
he tenido este mismo problema en un par de placas, se apagaba el pic quedandose sin hacer nada , entonces me di cuenta que algunos 7805 se apagaban y encendian continuamente cada vez mas lento esto a penas se notaba con el polimetro pero con el osciloscopio se veia que habia caidas de tension cada x de esta forma se veian los leds iluminar mucho menos cada vez hasta morir, le puse un disipador al 7805 y mejor no acercarse que quema. Pero ya no se apaga hasta que lo tenga que cambiar.
Sí, con los reguladores lineales hay que tener en cuenta algunas cosas, solo por citar las más simples.
1) El máximo voltage que puede aceptar, en este punto tratar siempre de usar el más pequeño posible respetando el valor del punto 1 . A mayor voltage , el regulador disipará más y se calentará más.
2) La tensión de dropout (la tensión mínima que necesita entre entrada y salida para poder funcionar). Ej. si la tensión de dropout es de 2V y el regulador es de 5V, deberemos usar al menos 7V en la entrada.
3) Usar los capacitores de compensación de .1uF en la entrada y salida del regulador para evitar que oscile.
4) Si calienta usar el disipador para evitar que deje de funcionar.
5) Respetar el consumo, estos reguladores permiten entregar 0.5A o 1A en forma típica. Si uno no aclara, te dan siempre los de menor corriente (porque son los más económicos).
-
Hola maunix, ¿entendí bien? ¿el mismo 7805 hay de 0.5 A y 1A?, porque yo tengo entendido que paara bajo consumo está el 78L05
-
Hola maunix, ¿entendí bien? ¿el mismo 7805 hay de 0.5 A y 1A?, porque yo tengo entendido que paara bajo consumo está el 78L05
No, lo que quise decir es que si vas a la tienda y dices "dame un 7805" lo más seguro es que te den uno de 0.5 o de 1A , pero no de 1.5A
Si quieres de más amperes hay que aclararlo, pero sin aclararlo seguro te enchufan uno de 0.5 o 1A
-
No lo sabía. Que bueno que me lo aclaraste, estoy por hacer una fuente y me viene como anillo al dedo.