Salidas del PIC 12f675

#1
Saludos, tengo un problema no se si es con el mikro c o con el proteus,
Lo que pasa es que nunca me enciende ni la salida GP5 ni la GP4...
Intente probando con este programa y nada:

Código:
void main() {
ANSEL = 0; // Configure AN pins as digital
CMCON = 7; // Turn off the comparators
TRISIO = 0; // designate GPIO as output
GPIO = 0x00; // initialize GPIO

do {
GP5_bit = 1; // *********************
delay_ms(100); // *********************
GP5_bit = 0; // si le cambio por GP0_bit, GP1_bit o GP2_bit si funciona!
delay_ms(100); // *********************
} while(1);
}
Me podrian ayudar a ver que es lo que esta mal o que es lo que le falta?

Les agradezco de antemano!
 
#2
Revisa el tipo de oscilador.

Para usar esos pines como Entrada/Salida general debes usar oscilador interno.Definelo en tu programa.

Saludos!
 
#3
Segun yo, vienen predefinidos de fabrica, y tengo entendido que para usar otro oscilador eso si hay que definir...
Ademas que tiene que ver el oscilador interno con el uso de las I/O GP4 o GP5????
y por que si funciona con las demas Gp0 GP1 y GP2?

Saludos..
Gracias
 
#4
Primero.

deberias especificar antes si las pruebas eran en fisico o en simulador.

----------------

Ahora que dices que con proteus funcionan los pines ,excepto gp4 y gp5.

GP4 y GP5 estan multiplexadas con el oscilador.
En la hoja de especificaciones del pic , viene toda esta info que te digo.

Si en tu programa no defines que vas a utilizar el oscilador interno esos pines no tendran otra funcion más que Osc_In y Osc_Out.
 
Última edición:
#5
mejor utiliza el micro code estudio que es mas facil de programar

Ejm. este es el programita para subir y bajar el seguro de un automovil,(micro code estudio)estos pic no nesesita tienen ya osilador interno


;Práctica con el PIC12F629 0 12F675
CMCON=%111 ;apaga comparadores de voltaje
ANSEL=%0000 ;apaga C.A/D todos los pines del GPIO digitales
sube var byte
baja var byte

encen:
if gpio.0 =0 then subuseguros
GOSUB encen
subuseguros:

for sube =1 TO 1
high gpio.4: pause 200
low gpio.4 : pause 200
next
encen1:
if gpio.1 =0 then bajaseguros
goto encen1

bajaseguros:
for baja =1 TO 2
high gpio.5: pause 200
low gpio.5 : pause 200
next
goto encen
end
 

Adjuntos

Última edición:
#6
Primero.
GP4 y GP5 estan multiplexadas con el oscilador.
En la hoja de especificaciones del pic , viene toda esta info que te digo.

Si en tu programa no defines que vas a utilizar el oscilador interno esos pines no tendran otra funcion más que Osc_In y Osc_Out.
Creo que por default se asigna el oscilador interno,
es mas, creo que ya lo estoy usando porque ya lo he probado en el protoboard, un programa que hice, uso casi todos los pines:
TRISIO = 0b011010;
ANSEL = 0b001010;

GP1 y GP4 como entradas analogicas.
GP0 y GP2 como salidas digitales.
GP3 lo uso como MCLR

hasta ahi me funciono bien!... lo probe y todo, GP4 funciona como entrada analogica muy bien, en proteus y en proto...
Ahora necesito usar GP5 para generar una onda cuadrada
segun yo GP5 con esas configuraciones esta como salida digital,
intento prender y nada... en proteus me sale el puntito gris :cry:

Alguna sugerencia?
 
#7
Ver si ayuda:



Código:
void main() {
  CMCON  = 7;    // Comparador OFF.
  ANSEL  = 0;    // Convertidor A/D OFF. Ahora tenemos operaciones en el IO digital.
  TRISIO = 0x08; // Todos los pines son las salidas, excepto GP3.
  GPIO  = 0x00; // Todos los pines se apagan inicialmente.

   while (1) {
    
        GPIO = 55;
         delay_ms(2000);
        
        GPIO = 0;
         delay_ms(2000);
        
        GPIO = 1;
         delay_ms(2000);
        
        GPIO = 2;
         delay_ms(2000);
        
        GPIO = 4;
         delay_ms(2000);
        
        GPIO = 16;
         delay_ms(2000);
        
        GPIO = 32;
         delay_ms(2000);
         
         GPIO = 33;
         delay_ms(2000);
         
         GPIO = 20;
         delay_ms(2000);
        
        GPIO = 0;
         delay_ms(2000);
   }
}
Proyecto

Otro código para el mismo proyecto:

Código:
void main() {
  CMCON  = 7;  
  ANSEL  = 0;   
  TRISIO = 0x08; 
  GPIO    = 0x00; 

   while (1) {
   
       GPIO.F0 = 1;        //Liga GP0.
        Delay_ms(200);     //Aguarda 200ms.
         GPIO.F0 = 0;      //Desliga GP0.
          Delay_ms(200);   //Aguarda 200ms.

       GPIO.F1 = 1;        // lo mismo con GP1.
        Delay_ms(200);
         GPIO.F1 = 0;
          Delay_ms(200);

       GPIO.F2 = 1;        // lo mismo con GP2.
        Delay_ms(200);
         GPIO.F2 = 0;
          Delay_ms(200);

       GPIO.F4 = 1;       // lo mismo con GP4.
        Delay_ms(200);
         GPIO.F4 = 0;
          Delay_ms(200);

       GPIO.F5 = 1;       // lo mismo con GP5.
        Delay_ms(200);
         GPIO.F5 = 0;
          Delay_ms(200);

   } 
}
Enlace del proyecto:
http://picforum.forumeiros.com/t194...-parte-i-os-primeiros-passos-e-dicas-valiosas

Algunas aclaraciones sobre el oscilador interno del modelo de microcontrolador:
http://picprojects.org.uk/projects/piccal.htm

Saludos.
 
#8
Gracias... muchas gracias... y aunque copie literalmente el codigo y genere el archivo hex, no me salia, me salia unos puntitos grises, en donde deberia haber puntitos rojos o azules (proteus)...

En cambio con tu .hex funciona perfectamente!!!! :aplauso:

La verdad es que no se porque sucede esto...

Llegue al punto de revisar detalladamente cada uno de los archivos .hex letra por letra... y los dos eran igualitos, excepto por dos digitos:
en el tuyo estaba:
:02400E00F4318B (en la penultima linea)

en el mio habia:
:02400E00F2318D (en la penultima linea)

cambie estos dos digitos en mi .hex y ahi si funciono! :unsure:

Que raro... sera por la forma en que creamos los proyectos?
como tu creas los proyectos en mikro C?

Una vez mas, gracias por la ayuda!
 
#11
Buen día hermano. Mire estoy empezando en el mundo de los microcontroladores y quisiera hacer un tacómetro digital + shif light con leds y quisiera que me oriente algo. :unsure:
 
Última edición por un moderador:
Arriba