Autor Tema: 12f675, GPIO? TRISIO? ADC?  (Leído 6427 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ricardog

  • PIC10
  • *
  • Mensajes: 5
12f675, GPIO? TRISIO? ADC?
« en: 19 de Abril de 2010, 19:53:21 »
buen día, tengo un programa, muy sencillo, leer el ADC. Si esta dentro del rango y dependeiendo del valor se establce un retardo proporcional, el problema es que cuando lo compilo me marca errores, como Undefinid Identifier GPIO, valores fuera de rango, etc.
Es el primer programo que intento hacer, alguien me podría decir en que estoy mal,  y explicar los registros GPIO, TRISIO, ADC, probablemente los estoy usando mal o no los estoy inicializando correctamente. Gracias.
Código: [Seleccionar]
#include <12f675.h>
#device adc=10;
#FUSES NOWDT, INTRC_IO, PROTECT, CPD, NOMCLR, PUT, NOBROWNOUT
#use delay (clock = 4000000)

void main () {
int16 val;
int16 retraso;
int i;

GPIO = 0b11111011
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);

while(true) {

set_adc_channel(0);
delay_us(20);
val=read_adc();
 if (val>423){ //voltaje mayor
              if(val>=488 && val<=717)  {
                      retraso=read_adc();
                      retraso= 717-retraso;
                      retraso= retraso*0.45;
                      for(i=0; i<= retraso, i++)
                      { output_high(GP2);
                        delay_ms(65535);
                      }
                      output_low(GP2); //Desactiva el Relay
                      for (i=0; i<=4; i++){//Esperar 5 minutos
                            delay_ms(65535);
                            }
                      }
              else { output_low(GP2);
                    }
               
            }
else {  //VOltaje menor
         if(val>=244 && val<=358)  {
                      retraso=read_adc();
                      retraso= 358-retraso;
                      retraso= retraso*0.9;
                      for(i=0; i<= retraso, i++)
                      { output_high(GP2);
                        delay_ms(65535);
                      }
                      output_low(GP2);  //Desactiva Relay
                      for (i=0; i<=4; i++){//Esperar 5 minutos
                            delay_ms(65535);
                            }
                      }
              else { output_low(GP2);}
       }
 
 }
 }



Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #1 en: 19 de Abril de 2010, 20:21:04 »
Usalo como TRISB

Si tienes dudas de las definiciones abre el archivo de cabecera *.h


Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #2 en: 20 de Abril de 2010, 00:42:13 »
Hola ricardog, para el 12f675 el GPIO viene configurado como el porta, es así como está configurado en la cabecera.

saludos.

Desconectado ricardog

  • PIC10
  • *
  • Mensajes: 5
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #3 en: 20 de Abril de 2010, 12:05:24 »
Gracias, ya le modifique algunas cosas y ya logre compilarlo, el compilador me marca error cuando en delay_ms() le pongo un numero mayor 5279 ¿por que?, intente simularlo en proteus pero le tuve quitar la linea de #fuse ¿por que?,  si no se las quitaba, me marcaba error. Pero ya compilado y simulado, no hace lo esperado, más bien no hace nada,  Gracias.


Código: [Seleccionar]
#include <12f675.h>
#device adc=10;

#use delay (clock = 4000000)

#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
int16 val;
int16 retraso;
int i;


void main () {

SET_TRIS_A(0b001011);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_ANALOG|VSS_VDD);
set_adc_channel(0);
delay_us(20);

while(true) {

val=read_adc();
 if (val>423){ //voltaje mayor
              if(val>=488 && val<=717)  {
                      retraso=read_adc();
                      retraso= 717-retraso;
                      retraso= retraso*0.45;
                      for(i=0; i<= retraso; i++)
                      {
                        output_high(pin_a2);
                        delay_ms(65200);
                      }
                     
                      output_low(pin_a2); //Desactiva el Relay
                      for (i=0; i<=4; i++){//Esperar 5 minutos
                            delay_ms(65200);
                            }
                      }
              else {
                            output_low(pin_a2);
                    }

            }
else {  //VOltaje menor
         if(val>=244 && val<=358)  {
                      retraso=read_adc();
                      retraso= 358-retraso;
                      retraso= retraso*0.9;
                      for(i=0; i<= retraso; i++)
                      {
                     
                      output_high(pin_a2);
                        delay_ms(65200);
                      }
                      output_low(pin_a2);  //Desactiva Relay
                      for (i=0; i<=4; i++){//Esperar 5 minutos
                            delay_ms(65200);
                            }
                      }
              else {
              output_low(pin_a2);}
       }

 }
 }



Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #4 en: 20 de Abril de 2010, 12:39:10 »
ricardo, yo lo compilé y no me aparece ningún error y al depurarlo funciona aparentemente bien, obviamente sin comprender tu aplicación, será talvez tu compilador o la versión que utilizas, yo trabajo con MPLAB 8.3 que tiene como compilador asociado CCS 4.057

saludos.

Desconectado ricardog

  • PIC10
  • *
  • Mensajes: 5
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #5 en: 20 de Abril de 2010, 13:18:20 »
Gracias Diego, como te comento es el primer programa que hago en C para pic, por lo que también es la primera vez que uso el CCS version 3.242, ( el único que conseguí) y tampoco lo se usar muy bien. La aplicación es simular un cargador de baterias, lee el valor de la bateria, dependiendo de este se activa un relevador que "carga" la bateria. El tiempo es proporcional a 7200 segs, 2 horas aprox. Al menos sé que funciona, seguiré peleandome con el compilador. Gracias. Podrias poner el *.HEX que genera??, gracias.
« Última modificación: 20 de Abril de 2010, 13:39:23 por ricardog »

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #6 en: 20 de Abril de 2010, 14:10:13 »
Acá está el archivo hex.

saludos.

Desconectado ricardog

  • PIC10
  • *
  • Mensajes: 5
Re: 12f675, GPIO? TRISIO? ADC?
« Respuesta #7 en: 20 de Abril de 2010, 19:39:03 »
Gracias Diego, ya baje una version mas reciente y ya no tengo problemas, Gracias.