Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/12/2011 #21


Proba asi


Código:
#include <16f877a.h>
 #fuses hs,nowdt,noput,nolvp
 #device adc=8
 #use delay(clock=20M)
 #define LCD_DATA_PORT getenv("SFR:PORTB")
 #define LCD_ENABLE_PIN PIN_B2
 #define LCD_RS_PIN PIN_B0
 #define LCD_RW_PIN PIN_B1
 #include <lcd.c>

 int8 q;
 double p=0;
 //****************** defino funcion ADC ***************
 void modulo_adc();

 //***************** programa principal ***************

 void main(){

 SETUP_ADC_PORTS(AN1); // defino el pin analogo a usar
 setup_adc(ADC_CLOCK_INTERNAL); // define el tipo de clock a usar
 lcd_init(); // inicializo el lcd

 while(true){
 modulo_adc();


 lcd_gotoxy(4,1);
 printf(lcd_putc,"VOLTS:%1.3f",p);



 }
 } 
 //*********** funcion ADC****************

 void modulo_adc()
 { set_adc_channel(1);
 delay_us(20); // tiempo de conversion
 q= read_adc(); // lectura del valor
 p=50.0*q/127.5; // conversion adc
 }
05/12/2011 #22


no amigo me marca error en el AN1
05/12/2011 #23


apocalypsys dijo: Ver Mensaje
no amigo me marca error en el AN1
Perdona no programo en CSS por eso no puedo ayudarte mucho, proba cambiando esta linea y poniendo asi..

setup_adc_ports( AN0_TO_AN1 );


y sino proba asi

setup_adc_ports(AN0_AN1_AN3);
06/12/2011 #24


gracias amigo me funciono de maravilla


otra pregunta como puedo poner dos programas en el mismo pic es decir el programa anterior y otro


gracias
06/12/2011 #25


apocalypsys dijo: Ver Mensaje
gracias amigo me funciono de maravilla


otra pregunta como puedo poner dos programas en el mismo pic es decir el programa anterior y otro


gracias
De nada, que bueno que te haya funcionado.. y que otro programa queres agregarle? no podes mexclar 2 programas asi nomas, tenes que hacer uno que haga lo que hacen esos 2 programas.
19/08/2012 #26


Una consulta quiero hacer que el pic muestre hasta 380 v en el lcd acá dejo mi programa para obtener ayuda vuestra
Código:
#include <16f877.h>
#device  adc=10
#fuses   xt,nowdt
#use  delay(clock=4M)
#define LCD_ENABLE_PIN  PIN_E0
#define LCD_RS_PIN      PIN_E1
#define LCD_RW_PIN      PIN_E2
#define LCD_DATA4       PIN_D4
#define LCD_DATA5       PIN_D5
#define LCD_DATA6       PIN_D6 
#define LCD_DATA7       PIN_D7
#include  <lcd.c>

void main()
{
lcd_init();

int16 a;
float b;

setup_adc(adc_clock_div_8);
setup_adc_ports(an0);

   for(;;)
   {
   set_adc_channel(0);
   delay_us(20);
   a=read_adc();
   b=a*380/1024.0;
   
   printf(lcd_putc,"\fVoltage=%fV",b);
   delay_ms(200);
   
     
      }
   }
El problema es que en el lcd no muestra el avance que quiero
09/10/2012 #27


Voltimetro con pic 16f887
Hola a todos, tengo una duda... programe el pic 16f887 por medio de CCS para que mida tensión por medio de la entrada analógica AN0 . Pero no estoy seguro si solo puede medir la tensión de su propia fuente o si puede medir la tensión de fuentes externas, dado que lo simulo en proteus y corre perfecto...

En el caso que solo pueda medir tensión de su propia fuente, como puedo hacer que mida de fuentes externas?
Archivos Adjuntos
Tipo de Archivo: rar Estacion de mantenimiento.rar (15,5 KB (Kilobytes), 201 visitas)
09/10/2012 #28

Avatar de VEGATRONICA

Por supuesto que puede medir otro tipo de tensiones, pero para eso tienes que acondicionar la entrada, ya que como recordaras al ser un circuito digital solo puede trabajar con tensiones de 5V, mas de eso destruirías el PIC, lo mas común es usar un divisor de tensión en la entrada, saludos
10/10/2012 #29


Como dice Somacruz, claro que es posible realizar esa medición; yo a tensiones superiores de 5 voltios uso amplificadores operacionales para estabilizar la tensión de 0 a 5 voltios.

Un saludo
11/10/2012 #30


Podes leer cualquier tensión siempre y cuando este en el rango de los 5V; por ejemplo, si quisieras medir una tensión máxima de 8V podrías poner un divisor resistivo 10K-10K de modo que la tensión máxima en la pata del pic sea de 4V (se puede mejorar, puse 10K-10K para evitar los cálculos ) y después hacer regla de 3 simple dentro del pic para ver que tensión estas leyendo.

Con respecto a lo de las fuentes externas, como todo circuito para que mida tiene que tener las referencias de 0V (masa) conectadas entre sí.
13/10/2012 #31


Gracias a todos! ya lo probe y funciona ... hice el divisor de tensión para que llegue al pic y salio perfecto, ya que mi propósito era medir el voltaje de una fuente externa de 12 voltios.
18/10/2012 #32

Avatar de VEGATRONICA

erickmarcelo dijo: Ver Mensaje
Gracias a todos! ya lo probe y funciona ... hice el divisor de tensión para que llegue al pic y salio perfecto, ya que mi propósito era medir el voltaje de una fuente externa de 12 voltios.
Erick, que bueno que te funciono, ojala y pudiera compartir tu codigo y esquema y asi sea de utilidad a otros usuarios, saludos
10/01/2013 #33


Hola soy nuevo en este foro, he estado probando un programa de un voltímetro que han colgado en este foro y he hecho algunas modificaciones, lo he simulado en proteus y corre de maravilla, pero al montarlo en el protoboard solo aparece en la segunda fila unos cuadrados blanco y no registra ningún valor, no se si es el pic,
el programa, o algún error en la programación.
Aquí dejo el código fuente:

Código:
#include <16f877a.h>
#device adc=10
#fuses NOWDT,BROWNOUT,XT,NOLVP,,NOPROTECT
#use delay (clock=4M)
#define use_portb_lcd TRUE //define portb lcd
#include <lcd.c> 
//
//Programa Principal
//
void main()
{
   unsigned long valor=0;//Declaracion de variables
   float voltaje;        //Variable que contendra el resultado
//
//Se habilita el A/D y se declara el PORT a usar//
//
   setup_adc( ADC_CLOCK_INTERNAL );            
   setup_adc_ports(AN0);
   set_adc_channel(0);
//
//Se inicia la LCD//
//     
   lcd_init();
lcd_gotoxy(4,1);
lcd_putc("Iniciando");
delay_ms(2000);
lcd_gotoxy(3,2);
lcd_putc("PABLO OJEDA");
delay_ms(1000);
lcd_putc("\f" ) ;
lcd_gotoxy(2,1);
lcd_putc("VOLTIMETRO DC");
      
   do
   {
Funciona en proteus pero no me arroja ningún resultado armándolo.
Estoy usando el pic16f877a, el cristal es de 4 Mhz y los condensadores de 27pf

---------- Actualizado después de 6 minutos ----------

Estoy un poco estresado, llevo días probando cual ha sido el error, el pic lo grabo y lo regrabo y no me arroja ningún error al momento de cargar el programa en el pic con el icprog.
10/01/2013 #34


¿Estas usando una resistencia en pull up para el pin MCLR (pin 1 del micro)?
En caso de que la respuesta sea no, agrega una resistencia de 10k entre el pin 1 y Vcc.

En caso contrario, probá con los siguientes FUSES:
#fuses NOWDT,BROWNOUT,XT,NOLVP,NOPROTECT,NOPUT,NODEBUG,NO LVP,NOCPD,NOWRT

Fijate también que el cristal, junto con sus capacitores, esté lo más cerca posible del micro. Para ese micro y ese cristal yo usé capacitores de 15pF, la configuración de fuses que escribí mas arriba, [#use delay(clock=4000000)] y la resistencia en pull up y no tuve ningún problema.
10/01/2013 #35
Moderador

Avatar de D@rkbytes

pablov dijo: Ver Mensaje
Funciona en proteus pero no me arroja ningún resultado armándolo.
Si tu código no tiene ninguna instrucción para leer el ADC ¿Como quieres obtener un resultado?

Adjunto una modificación realizada de rápido para un sencillo voltímetro hasta 50V, con el código que posteaste.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar Voltímetro.rar (35,6 KB (Kilobytes), 313 visitas)
11/01/2013 #36


holas arme el circuito y hice las modificaciones que me dijeron pero no puse la reistencia de 10k en el pin1 del masterclear y ul pulsador mas para reiniciar cambie los condensadores de 27p a 22p pero no obtube algun cambio alguno no se si es el pic que esta danado o otra cosa por que use el codigo hex de D@rkbytes para asegurarme y nada.pero al momento de la grabacion en el pic no me da ningun error
bueno graciasp or la ayuda a una cosa mas al momento de pulsar en le pulsador el lcd no reinicia el programa no hay cambio alguno en la pantalla del lcd,gracias por la ayuda que me pudieran dar
Imágenes Adjuntas
Tipo de Archivo: jpg Snapshot_20130111_1.JPG (76,7 KB (Kilobytes), 90 visitas)
Archivos Adjuntos
Tipo de Archivo: rar reenviar.rar (727,0 KB (Kilobytes), 100 visitas)
11/01/2013 #37


El pin 1 de este micro, es el pin MCLR (Master Clear), a menos que se lo configure de otra forma, que lo que hace, justamente, es reiniciar el procesador. Al estar en alto activa el procesador y el programa se ejecuta; al estar en bajo detiene el procesador. Por este motivo es necesario ponerlo con una resistencia de 10K a Vcc (+5V).
Si la resistencia no está puesta, el pin recibe cualquier ruido eléctrico del ambiente, lo que hace que el procesador se active y/o desactive aleatoreamente.

Cabe recordar que este microcontrolador tiene alimentación de ambos lados, por lo que tenes que fijarte que estén ambas conectadas.
11/01/2013 #38
Moderador

Avatar de D@rkbytes

2cool2you dijo: Ver Mensaje
El pin 1 de este micro, es el pin MCLR (Master Clear), a menos que se lo configure de otra forma, que lo que hace, justamente, es reiniciar el procesador.
Saludos.
En este PIC el pin 1 MCLR/Vpp solamente funciona como reset del microcontrolador.
No se puede configurar de otra forma, incluso no existe el fuse MCLR ó NOMCLR (_MCLR_OFF/ON)
Aunque el compilador PCWHD permita establecerlos y compilar sin errores (Bug del compilador).
En otros compiladores esto no sucede, y si generan error al encontrar esos fuses declarados.
Existen PICs que si tienen esa posibilidad, y se puede usar ese pin como entrada, con el fuse MCLR en OFF
Si no se desea resetear el PIC, se puede conectar directamente el pin 1 a VDD
pablov dijo: Ver Mensaje
hice las modificaciones que me dijeron pero no puse la reistencia de 10k en el pin1 del masterclear y ul pulsador mas para reiniciar cambie los condensadores de 27p a 22p pero no obtuve cambio alguno
Probablemente es porque no hiciste todas las modificaciones que se te dijeron.
2cool2you ya te había mencionado en el post #34 que verificaras la conexión del pin 1.

Adjunto el diagrama, y así es como debes hacer las conexiones.

Suerte.
Imágenes Adjuntas
Tipo de Archivo: jpg Diagrama.jpg (75,3 KB (Kilobytes), 161 visitas)
11/01/2013 #39


Acabo de verificar el datasheet y tenes razón, no me había dado cuenta que en ese micro es solamente MCLR o Vpp, perdón por la equivocación.
12/01/2013 #40


ok manes gracias hice las modificaiones que me dijeron, lo arme otra ves desde cero y funciona de maravilla es el primer trabajo que hago con pic y me lleno de emocion al ver que el pic estaba vivo jajaja
una consulta mas, este programa lo hice con el fin de ponerlo en una fuente simetrica pero no logro que lea el las lecturas de a/d

Código:
#include <16f877a.h>
#device adc=10
#fuses NOWDT,BROWNOUT,XT,NOLVP,PUT
#use delay (clock=4M)
#define use_portb_lcd TRUE //define portb lcd
#include <lcd.c> 
//
//Programa Principal
//
void main()
      {
//Declaracion de variables
float valor,voltaje,val,volt;        //Variable que contendra el resultado

//Se habilita el A/D y se declara el PORT a usar
   setup_adc( ADC_CLOCK_INTERNAL );            
   setup_adc_ports(AN0);
   set_adc_channel(0);
   set_adc_channel(1);
   
//Se inicia la LCD
   lcd_init();
   lcd_gotoxy(4,1);
   lcd_putc("Iniciando");
   delay_ms(2000);
   lcd_gotoxy(3,2);
   lcd_putc("PABLO OJEDA");
   delay_ms(1000);
   lcd_putc("\f");
   lcd_gotoxy(3,1);
   lcd_putc("VOLTIMETRO DC");
      delay_ms(1000);
   while (true)
   {
   valor = read_adc();
   delay_us(50);
   voltaje=(valor*50/930);
   lcd_gotoxy(3,2);
   printf(lcd_putc,"%04.2f P ",voltaje);
   delay_ms(100);
   val = read_adc();
   delay_us(80);
   voltaje=(valor*50/930);
   lcd_gotoxy(11,2);
   printf(lcd_putc,"%04.2f N ",volt);
   delay_ms(150);
   }
   
}
cunado pongo en setup_adc_ports(RA0_RA1_ANALOG); ESTE APARECE COMO ERROR no lo acepta el compilador y si pongo setup_adc_ports(AN1); el AN1 aparece como indefindo cual podria hacer pra que funcione otra entrada nalogica mas y hacer que en el lcd se muestre dos lecturas del voltaje pra ponerlo en una funete simetrica, gracias por las respectivas respuestas
Tema Cerrado
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.