Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Página 1 de 5. • Compartir •
Página 1 de 5. • 1, 2, 3, 4, 5 
Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Hola a todos
Primero que nada agradecer a arcachofo por su libreria de ADC ,Bastante bueno su aporte.
Me tomado la libreria de ADC y la he probado en un PIc 16F876, y
monte un voltimetro digital de 0 a 50V. aunque estoy recien conociendo
SDCC, gracias a algunos conocimientos de C ( en la universidad ) he
podido adaptarme..
Se los dejo para que lo vean.
Ademas le dejo este video.
hay un pequeño error en el nombre del pic ... me equivoque .. jajaj es pic 16F876... pero dije pic 16F786 (upssss)
Ademas les dejo el esquema de este circuito

atte. Risanti
Primero que nada agradecer a arcachofo por su libreria de ADC ,Bastante bueno su aporte.
Me tomado la libreria de ADC y la he probado en un PIc 16F876, y
monte un voltimetro digital de 0 a 50V. aunque estoy recien conociendo
SDCC, gracias a algunos conocimientos de C ( en la universidad ) he
podido adaptarme..
Se los dejo para que lo vean.
- Código:
/*************************************************************************** */
/* Voltimetro_7seg_876.c Enero 4 del 2009 */
/*---------------------------------------------------------------------------*/
/* Ejemplo Voltimetro 0-50Vdc con Microcontolador Pic16F876A */
/* Con Display 7 Seg Multeplexado a traves de RA1,RA2,RA3 */
/*---------------------------------------------------------------------------*/
/* Ricardo Santibañez */
/*---------------------------------------------------------------------------*/
/* Desarrolado con SDCC. */
/*****************************************************************************/
#include <pic16f876a.h>
#include <delay.h>
#include <adc.h> /*Funcion para uso ADC gracias arcachofo PIc Linux*/
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_ON &
_BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF &
_DEBUG_OFF & _CP_OFF;
/* Declaracion de Variables */
char display[10]={0x01,0x4f,0x12,0x06,0x4c,0x24,0x60,0x0f,0x00,0x0c}; //Valores que representa numeros en display 7 seg.
char ingres=1;
long int digito1,digito2,digito3;
long int medida;
long int medida1;
/*Rutina de Interrupciones, en este caso por Desborde de Timer 0*/
void isr() interrupt 0 {
switch (ingres) //Selecciono que Display Activar y que valor cargar
{
case 1:
RA3=1;
RA2=1;
RA1=0;
PORTB=display[digito1];
ingres=2;
break;
case 2:
RA3=1;
RA1=1;
RA2=0;
PORTB=display[digito2];
ingres=3;
break;
case 3:
RA2=1;
RA1=1;
RA3=0;
PORTB=display[digito3];
ingres=1;
break;
}
T0IF=0; // Borro Bandera de Desborde
TMR0=150; // cargo valor en TMR0
}
void main() {
TRISA=1; // Puerta.0 como entrada y el resto como salida
TRISB=0; // Todo el Puerto B como Salida
TMR0=150; // inicio Tmr0 =150
OPTION_REG=5; //Configuro preescaler de TMRO
T0IE=1; // activo Int. por Tmr0
GIE=1; // Habilito Interrupciones
PORTB=0; // inicio Portb
adc_init(FOSC_2, A1_R0, INT_OFF); //Uso de Rutina ADC de PIC, iniciacion
while (1)
{
medida=adc_read(0); // Leer canal 0
medida1=((medida*500)/1023);//Escalar Variable de 0 a 500
/*Determinar Valores para cada digito del Display*/
digito1=(medida1/100);
digito2=(medida1-(digito1*100))/10;
digito3= medida1-(digito1*100+digito2*10);
delay_ms(200);
}
}
Ademas le dejo este video.
hay un pequeño error en el nombre del pic ... me equivoque .. jajaj es pic 16F876... pero dije pic 16F786 (upssss)
Ademas les dejo el esquema de este circuito


atte. Risanti
Última edición por Risanti el Mar 6 Ene 2009 - 20:37, editado 3 veces

Risanti- Asiduo del Foro

- Mensajes: 168
Fecha de inscripción: 07/12/2008
Edad: 27
Localización: La Serena Chile
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Muy bueno el ejemplo... buen aporte.
Se puede ver tanto el uso de la librería ADC, como el uso de displays de 7 segmentos con SDCC; además muy bién explicado, con código, esquema y video.... completito.
Por cierto, hay una nueva versión de la librería ADC escrita directamente en ASM, las funciones cambian un poco, pero todo con la idea de minimizar el tamaño del código generado: http://pic-linux.foroactivo.net/sdcc-f23/sdcc-driver-para-adc-pic16f87x-t43.htm
Si te animas a probarla y comprobar que funciona y de paso comprobar que el tamaño del .hex generado es menor que con la librería escrita en C seguro que arcachofo te lo agradece.
Se puede ver tanto el uso de la librería ADC, como el uso de displays de 7 segmentos con SDCC; además muy bién explicado, con código, esquema y video.... completito.
Por cierto, hay una nueva versión de la librería ADC escrita directamente en ASM, las funciones cambian un poco, pero todo con la idea de minimizar el tamaño del código generado: http://pic-linux.foroactivo.net/sdcc-f23/sdcc-driver-para-adc-pic16f87x-t43.htm
Si te animas a probarla y comprobar que funciona y de paso comprobar que el tamaño del .hex generado es menor que con la librería escrita en C seguro que arcachofo te lo agradece.
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Felicitaciones por el proyecto y gracias por compartir.
Solo un comentario: ¿no podrías poner una captura del esquema un poco más grande?
.
Solo un comentario: ¿no podrías poner una captura del esquema un poco más grande?
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Oye... me alegro de que le hayas sacado probecho a las funciones para ADC, has hecho un buen trabajo con ellas.
Estoy deacuerdo con Geo en que es una pena que el esquema no se aprecie mejor, si me mandas el esquema por mail lo podría subir al box y poner un link para su descarga... si te parece bien.. claro.
Por cierto... con qué programa has hecho el esquema?
Estoy deacuerdo con Geo en que es una pena que el esquema no se aprecie mejor, si me mandas el esquema por mail lo podría subir al box y poner un link para su descarga... si te parece bien.. claro.
Por cierto... con qué programa has hecho el esquema?

arcachofo- Participante Activo

- Mensajes: 91
Fecha de inscripción: 26/11/2008
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
gracias por sus comentarios:
Estoy trabajando para terminar este proyecto, es para un amigo que esta armando una fuente de poder, pienso cambiar el PIc 16F876 por un PIC 16F88 ( es mas barato y quiero utilizar el oscilador interno),cuando tenga un avance lo publico.
además he subido el esquema mas grande, esta hecho en eagle 5.2, lo descargas desde la pagina ftp://ftp.cadsoft.de/eagle/program/

Cualquier observación es bien recibida.
atte.
Risanti
Estoy trabajando para terminar este proyecto, es para un amigo que esta armando una fuente de poder, pienso cambiar el PIc 16F876 por un PIC 16F88 ( es mas barato y quiero utilizar el oscilador interno),cuando tenga un avance lo publico.
además he subido el esquema mas grande, esta hecho en eagle 5.2, lo descargas desde la pagina ftp://ftp.cadsoft.de/eagle/program/

Cualquier observación es bien recibida.
atte.
Risanti

Risanti- Asiduo del Foro

- Mensajes: 168
Fecha de inscripción: 07/12/2008
Edad: 27
Localización: La Serena Chile
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Gracias por el esquema
.
Yo estuve haciendo unas pruebas con un 16f88, el cual conseguí en lugar de un 16f628 precisamente por el oscilador interno, aunque al momento de reprogramarlo, en ocasiones mi programador no reconoce al PIC
.
Yo estuve haciendo unas pruebas con un 16f88, el cual conseguí en lugar de un 16f628 precisamente por el oscilador interno, aunque al momento de reprogramarlo, en ocasiones mi programador no reconoce al PIC
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Yo estuve haciendo unas pruebas con un 16f88, el cual conseguí en lugar
de un 16f628 precisamente por el oscilador interno, aunque al momento
de reprogramarlo, en ocasiones mi programador no reconoce al PIC.
Si... algunos programadores que no controlan Vpp independientemente tienen problemas con PICs con oscilador interno; también algunos softwares de grabación de PICs.
Estos PICs necesitan que Vpp suba antes de Vdd para entrar en modo programación, si el programador o el software no es capaz de hacer esto, entonces puede dar fallos.
El problema es sobre todo cuando se configura el pic con oscilador interno y mclr desactivado.

arcachofo- Participante Activo

- Mensajes: 91
Fecha de inscripción: 26/11/2008
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
La programacion del pic 16f88 es dificil porque se debe borar antes de escribir, se bora 32 palabras de 14 bits y se programa 4 palabras cada vez
Con un programmador, se debe verificar que se borra toda la memoria del pic antes de grabar
Si quieres usar un monitor(bootloader) y grabar con el puerto serie , tengo un monitor aqui :
http://per.launay.free.fr/pik_digor/moniteur/monitor88A/
ver tambien http://pic-linux.foroactivo.net/programadores-f12/grabar-con-un-bootloader-a-traves-el-puerto-serie-o-el-usb-t55.htm#177
Per
Con un programmador, se debe verificar que se borra toda la memoria del pic antes de grabar
Si quieres usar un monitor(bootloader) y grabar con el puerto serie , tengo un monitor aqui :
http://per.launay.free.fr/pik_digor/moniteur/monitor88A/
ver tambien http://pic-linux.foroactivo.net/programadores-f12/grabar-con-un-bootloader-a-traves-el-puerto-serie-o-el-usb-t55.htm#177
Per
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Hola a todos..
continuando con mi proyecto del voltímetro de 0 a 50V (puede ser mas o menos solo hay que cambiar el divisor de tension y el escalamiento en el programa) lo he realizado con el PIC 16F88, utilizando oscilador interno y ademas probe las funciones adc. de arcachofo.
el programa original no le he realizado muchos cambios solo las palabras de configurarcion para este pic y ademas de seleccionar la velocidad del pic en el registro OSCCON (BIt : IRCF;IRCF1;IRCF2;) y como trabaja el porta con el registro ANSEL. ademas cambia un poco como se llama las banderas de desborde de TMR0 ya que para el 16F88 ,se llama TMR0IF.
se los dejo para que lo vean.
__________________________________________________________________________________________
atte.
Risanti.
continuando con mi proyecto del voltímetro de 0 a 50V (puede ser mas o menos solo hay que cambiar el divisor de tension y el escalamiento en el programa) lo he realizado con el PIC 16F88, utilizando oscilador interno y ademas probe las funciones adc. de arcachofo.
el programa original no le he realizado muchos cambios solo las palabras de configurarcion para este pic y ademas de seleccionar la velocidad del pic en el registro OSCCON (BIt : IRCF;IRCF1;IRCF2;) y como trabaja el porta con el registro ANSEL. ademas cambia un poco como se llama las banderas de desborde de TMR0 ya que para el 16F88 ,se llama TMR0IF.
se los dejo para que lo vean.
- Código:
/*************************************************************************** */
/* Voltimetro_7seg_88.c Enero 20 del 2009 */
/*---------------------------------------------------------------------------*/
/* Ejemplo Voltimetro 0-50Vdc con Microcontolador Pic16F88A */
/* Con Display 7 Seg Multeplexado a traves de RA1,RA2,RA· */
/*---------------------------------------------------------------------------*/
/* Ricardo Santibañez */
/*---------------------------------------------------------------------------*/
/* Desarrolado con SDCC. */
/*****************************************************************************/
#include
#include
#include
typedef unsigned int word;
word at _CONFIG1 CONFIG1 = _WDT_OFF & _PWRTE_ON & [b]_INTRC_IO[/b] & _MCLR_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _DEBUG_OFF & _CCP1_RB0 & _CP_OFF;
word at _CONFIG2 CONFIG2 = _FCMEN_ON & _IESO_ON;
/* Declaracion de Variables */
char display[10]={0x01,0x4f,0x12,0x06,0x4c,0x24,0x60,0x0f,0x00,0x0c}; //Valores que representa numeros en display 7 seg.
char ingres=1;
long int digito1,digito2,digito3;
long int medida;
long int medida1;
/*Rutina de Interrupciones, en este caso por Desborde de Timer 0*/
void isr() interrupt 0 {
switch (ingres) //Selecciono que Display Activar y que valor cargar
{
case 1:
RA3=1;
RA2=1;
RA1=0;
PORTB=display[digito1];
ingres=2;
break;
case 2:
RA3=1;
RA1=1;
RA2=0;
PORTB=display[digito2];
ingres=3;
break;
case 3:
RA2=1;
RA1=1;
RA3=0;
PORTB=display[digito3];
ingres=1;
break;
}
[b]TMR0IF=0[/b]; // Borro Bandera de Desborde
TMR0=150; // cargo valor en TMR0
}
void main() {
IRCF0=0;
IRCF1=1;
IRCF2=1;
TRISA=1; // Puerta.0 como entrada y el resto como salida
[b]ANSEL=1[/b];
TRISB=0; // Todo el Puerto B como Salida
TMR0=150; // inicio Tmr0 =150
OPTION_REG=5; //Configuro preescaler de TMRO
[b]TMR0IE[/b]=1; // activo Int. por Tmr0
GIE=1; // Habilito Interrupciones
PORTB=0; // inicio Portb
adc_init(FOSC_2,A1_R0, INT_OFF); //Uso de Rutina ADC de PIC, iniciacion
while (1)
{
medida=adc_read(0); // Leer canal 0
Determinar_Display();
}
}
void Determinar_Display ()
{
/*Determinar Valores para cada digito del Display*/
medida1=((medida*500)/1023) ;//Escalar Variable de 0 a 500
digito1=(medida1/100);
digito2=(medida1-(digito1*100))/10;
digito3= medida1-(digito1*100+digito2*10);
delay_ms(200);
}
__________________________________________________________________________________________
atte.
Risanti.

Risanti- Asiduo del Foro

- Mensajes: 168
Fecha de inscripción: 07/12/2008
Edad: 27
Localización: La Serena Chile
Re: Voltimetro de 0 a 50V, usando Pic 16f876 con SDCC
Hola, he visto que usas la libreria delay.h.... como hiciste para usarla?,al ponerla me saca error cuando compilo gracias, disculpa si ya se hablo de esto pero busque y no encontre nada...
ciber_hormaza- Nuevo Usuario

- Mensajes: 1
Fecha de inscripción: 14/02/2009
Página 1 de 5. • 1, 2, 3, 4, 5 
Temas similares» Grabar DVD's usando IMGBurn
» Hackear usando telnet
» Conectar a internet usando la PDA
» Crear link con popup usando función OnClick
» redireccionar un link usando tu foro!
» Hackear usando telnet
» Conectar a internet usando la PDA
» Crear link con popup usando función OnClick
» redireccionar un link usando tu foro!
Página 1 de 5.
Permiso de este foro:
No puedes responder a temas en este foro.




