TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Pedro2007 en 07 de Diciembre de 2023, 13:09:03

Título: Consulta de programacion en C con PIC 12F675
Publicado 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
Título: Re:Consulta de programacion en C con PIC 12F675
Publicado por: DominusDRR en 07 de Diciembre de 2023, 13:17:59
Tal vez te falta configurar el registro  CMCON o ANSEL:

(https://pbs.twimg.com/media/GAwhLBFXwAE02JG?format=png&name=small)
Título: Re:Consulta de programacion en C con PIC 12F675
Publicado por: Eduardo2 en 07 de Diciembre de 2023, 22:29:06
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:
Código: [Seleccionar]
    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)
Título: Re:Consulta de programacion en C con PIC 12F675
Publicado por: Pedro2007 en 11 de Diciembre de 2023, 16:40:48
Gracias a ambos por las respuestas. Quedo solucionado con sus recomendaciones ahora el Pic hace lo que se esperaba.

Saludos,