Autor Tema: inicio  (Leído 6635 veces)

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

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
inicio
« en: 20 de Agosto de 2008, 20:13:37 »
Hola amigos del foro. quiero implemetar un adquisidor de datos para mostralos en una pc al mismo tiempo que estan siendo leidos por el micro. Quiero emplear un PIC 16f873A, la señal es analógica y en principio sería una obtenida de un pote ( entre 0 y 5 Volts). Desearía saber como tengo que configurar el micro donde tengo que alojar los valores leidos y en fin como sería mas o menos el programa. desde ya muchas gracias. Lo que deseo hacer no parece tan complicado. en caso contrario algun link para estudiar el tema.
Muchas gracias   

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #1 en: 21 de Agosto de 2008, 12:28:34 »
Hola.

Revisa aqui 7 segmentos con int Timer0. Esta todo lo que necesitas.

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #2 en: 21 de Agosto de 2008, 13:58:05 »
GRacias MLO estudiaré el programita. Quisiera colaboración con este que conseguí, es practicamente lo que quiero hacer . resulta que cuando lo compilo me arroja 3 errores en el driver LCD.c y ellos son lo siguiente
*** Error 12 "C:\ARCHIV~1\PICC\drivers\lcd.c" Line 91(29,30): Undefined identifier  -- set_tris_d
*** Error 12 "C:\ARCHIV~1\PICC\drivers\lcd.c" Line 103(30,31): Undefined identifier  -- set_tris_d
*** Error 12 "C:\ARCHIV~1\PICC\drivers\lcd.c" Line 133(28,29): Undefined identifier  -- set_tris_d
el programa estaba para un f877a la unica modificación que hice es cambiar #include <16F873a.h>
Que puede estar pasando?
muchas gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: inicio
« Respuesta #3 en: 21 de Agosto de 2008, 14:12:25 »
Saludos!

Es muy sencillo ncoliv, aunque tal vez cuando uno comienza no sean tan obvios los errores, así que no te preocupes.

El micro que tú estás usando, con el que estás compilando el programa, no posee PortD, así que en esas líneas donde aparece el TRISD (el registro que configura portd como entrada o salida) te da el error. Simplemente quita esas líneas y si no hay otro error debe compilar bien.

Por cierto, te recomiendo el Microcursillo en C, que está en el subforo de C en los "Hilos destacados"... allí encontraras muchos ejemplos, entre ellos enviar datos a la PC, leer el puerto analógico, etc...busca y encontrarás lo que necesitas.
Si te trancas aquí se te ayudará.

Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #4 en: 21 de Agosto de 2008, 22:29:07 »
Hola.

Debes colocar antes del #include "LCD.C" : #define use_portb_lcd TRUE y listo, queda activado el puertoB para la LCD.

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: inicio
« Respuesta #5 en: 22 de Agosto de 2008, 12:27:25 »
Tienes razón Miguel! No me había fijado que el error está en el archivo driver LCD.C  :D  :D  :D
Eso me pasa por no leer bien, yo nada más me fijé en lo que decía el error.
O sea que el LCD.C configura por defecto el PORTD para el LCD no? Eso sí no lo sabía, yo siempre uso el flexlcd.c  :)
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #6 en: 22 de Agosto de 2008, 18:13:59 »
muchas gracias por las respuestas, compilo con esa modificación y da 0 error y 0 warning Hast aahra todo oK! .Siguiendo con esta modificación las conexiones del puerto B al lcd serían como las del puerto D ?serian de esta forma :
B0----E
B1----RS
B2----RW
B4----D4
B5----D5
B6----D6
B7----D7

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #7 en: 23 de Agosto de 2008, 15:49:25 »
Hola.

Si amigo Fire, el LCD.C asigna la estructura al puerto D, pero es muy simple modificarla, claro que trabaja con el puerto completo.

Ncoliv, en la libreria estan las conexiones ... la estructura se define:
Código: C#
  1. struct lcd_pin_map {                
  2.            BOOLEAN rs;               //pin 0 del puerto
  3.            BOOLEAN rw;              //pin 1 del puerto, etc
  4.            BOOLEAN enable;
  5.            BOOLEAN unused;
  6.            int     data : 4;
  7.         } lcd;

de esta manera tu puedes modificar los pines de asignacion para la LCD, pero ten en cuenta que solo pueden estar en el mismo puerto.

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #8 en: 23 de Agosto de 2008, 20:35:57 »
Ok, muchachos, hice las conexiones segubn las describí y y anda bárbaro, muestro el valor de voltaje del cursor del pote en el lcd . les paso el programa con las modificaciones para el pic 16f8773A.
#include <16F873a.h>
#include <STDLIB.H>

#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#byte portb=6
#define use_portb_lcd TRUE
#include <lcd.c>

void main(void)
{
float const resoluc=5.0/256.0;
int8 valor=0;
float kk=0;


set_tris_b(0x00);
set_tris_a(0xFF);
portb=0x00;

lcd_init();
lcd_gotoxy(1,1);

setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(20);

while(true)
{

valor=read_adc();
kk=valor*resoluc;
lcd_gotoxy(1, 1);
printf(lcd_putc,"fconv: %d",valor);
lcd_gotoxy(1, 2);
printf(lcd_putc,"medida: %f",kk);
delay_ms(500);
}
}
 
Surge otra consulta . Que tendría que agregar en el programa para que se muestre el valor medido (KK) en la PC alguna idea tengo pero como lo harían UDS.
 

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #9 en: 24 de Agosto de 2008, 12:23:41 »
Hola.

Pues debes usar alguno de los puertos del PC para comunicarse con el micro. Se usa mucho el puerto serial, para esto debes colocar:
Código: [Seleccionar]
#use rs232(baud=9600, xmit=pin_b6, rcv=pin_b7, parity=N, bits=8)

y asignar la variable de salida con:
Código: [Seleccionar]
printf("%f [v]", kk);

La configuracion en el PC del hyperterminal del puerto debe ser la misma que la del micro.

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #10 en: 25 de Agosto de 2008, 16:22:40 »
Gracias MLO, lo probaré. Hasta ahora todo marcha a la perfección, de a poco va tomando color. Tengo una pregunta. El PIC 16F873A tiene ADC 5 canales de 10bits cada uno. En el programa que les envio la resolución la da la cuenta  5volts/ 256. estos 256 salen de 2 a la 8. si divido por 1024 que correspondería a 2 a la 10 tendría que realizar alguna modificación en las  variables del programa. De hecho hice este ccambio y no tengo la maxima excursión de tensión en el pote. solo veo en el lcd 1,5 cuando tengo el pote en su recorrido total.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #11 en: 25 de Agosto de 2008, 17:58:17 »
Hola.

El numero correspondiente a la conversion AD esta entre 0 y 1024 (2^n), si tu Vref es 5v, la resolucion sera de 4.88mV. Para convertir el valor binario al analogico nuevamente para visualizarlo, debes multiplicar esa resolucion por el valor leido de la conversion.

Hay que colocar al inicio:
Código: [Seleccionar]
#device adc=10

Para que las conversiones sean a 10 bits y la variable donde guardas la conversion debe ser de mas de 8 bits, asi que valor debe ser un int16.

Saludos.
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #12 en: 25 de Agosto de 2008, 23:32:34 »
Ok. Gracias por la cooperación. Cuando compilo de acuerdo a la modificación me aparece este error :
*** Error 128 "analo3.c" Line 1(8,14): A #DEVICE required before this line
      1 Errors,  0 Warnings.
a que se debe::::

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #13 en: 26 de Agosto de 2008, 00:05:07 »
Hola

Debes colocar la linea de codigo que te di despues del #include<16F873A.h>

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #14 en: 26 de Agosto de 2008, 09:50:17 »
Cuando cambio la variable valor int8 por una int16 , esta parte de muestra por el display
la hago de esta manera printf(lcd_putc,"fconv: %lu",valor);   cambio %d por %lu
esta correcto ese cambio.