TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Pedro2007 en 07 de Diciembre de 2023, 13:09:03
-
buenas tardes, soy nuevo en el foro y estoy retomando la programación de PIC después de varios años.
Espero haber colocado mi consulta en el foro correcto si no es asi disculpas agradeceré me avisen cual seria el foro correcto.
La consulta es la siguiente: estoy programando un PIC 12f675 quiero usar los 6 pines como digitales pero no me esta funcionando.
Puse en el Main que se enciendan y apaguen unos leds en el PIN_A2 y PIN_A4 pero ni eso funciona
el código es el siguiente no entiendo que estaría faltando
Uso el compilador CCS con un programador genérico (no es de marca)
#include <12F675.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
#use standard_io(a)
int8 ppulsa,lnoche,pulsa1,pulsa2;
/* **********PROGRAMA PRINCIPAL******** */
void main(){
Setup_adc_ports(no_analogs);
set_tris_A(0b101011); // GP2, GP4 salidas
output_bit( PIN_A2,1 );
output_bit( PIN_A4,1 );
delay_ms( 1000 );
output_bit( PIN_A2,0 );
output_bit( PIN_A4,0 );
lnoche=1;
ppulsa=2;
pulsa1=1;
pulsa2=1;
delay_ms( 100 );
while ( TRUE ) {
delay_ms( 300 );
pulsa2=pulsa1;
pulsa1=input(PIN_A5);
if (pulsa1==0 && pulsa2==1) {ppulsa=1;}
if (input(PIN_A3)==1 && ppulsa==1) {lnoche=0; output_bit( PIN_A4,0 );}
if (input(PIN_A3)==0) {
if (ppulsa==2) {output_bit( PIN_A4,1 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A4)==1) {output_bit( PIN_A4,0 ); output_bit( PIN_A2,1 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A2)==1) {output_bit( PIN_A2,0 ); output_bit( PIN_A4,0 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A2)==0 && input(PIN_A4)==0) {output_bit( PIN_A4,1 ); ppulsa=0;}
}
if (input(PIN_A3)==1 && lnoche==1) {
if (input(PIN_A1)==1 && input(PIN_A0)==1) {output_bit( PIN_A4,1 );}
if (input(PIN_A0)==0) {output_bit( PIN_A4,0 );}
}
}
// Ciclo infinito
}
Agradezco los comentarios
-
Tal vez te falta configurar el registro CMCON o ANSEL:
(https://pbs.twimg.com/media/GAwhLBFXwAE02JG?format=png&name=small)
-
Al declarar #use standard_io(a) , cada vez que leas el pin antes lo programará como entrada y como salida antes que lo escribas.
Por lo tanto en estas líneas:
if (ppulsa==2) {output_bit( PIN_A4,1 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A4)==1) {output_bit( PIN_A4,0 ); output_bit( PIN_A2,1 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A2)==1) {output_bit( PIN_A2,0 ); output_bit( PIN_A4,0 ); ppulsa=0;}
if (ppulsa==1 && input(PIN_A2)==0 && input(PIN_A4)==0) {output_bit( PIN_A4,1 ); ppulsa=0;}
Si por ejemplo PIN_A2=PIN_A4=0 te quedará PIN_A2 como entrada y PIN_A4 momentáneamente como entrada y luego salida.
Solución: Usar #use fast_io(a) en lugar de #use standard_io(a)
-
Gracias a ambos por las respuestas. Quedo solucionado con sus recomendaciones ahora el Pic hace lo que se esperaba.
Saludos,