Autor Tema: S.O.S Conversor A/D de 16F877  (Leído 3353 veces)

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

Desconectado jaybob

  • PIC10
  • *
  • Mensajes: 2
S.O.S Conversor A/D de 16F877
« en: 26 de Enero de 2007, 09:34:48 »
S.O.S Conversor A/D de 16F877

Buenas,estoy empezando un proyecto de un medidor de potencia optica y tngo que programar un pic 16F877 para realizar una conversion de un valor analogico que me da un sensor optico a uno digital para sacarlo por una pantalla LCD de 2 x 16.Hice una asignatura hace un par de años sobre este pic y me acuerdo de algo,cosas basicas,pero voy un poco perdido....

Para esto caso introduzco por una patilla del puertoA la entrada analogica a convertir,segun los valores a convertir ya configuro el puertoA cn las Vref´s,eso no hay problema..........

Despues saco el valor digital por el puertoB,no??.....El puertoE lo dejo para las 3 lineas de control del LCD,no??.....

Mis mayores dudas son las rutinas del LCD y como hacer para ver por la pantalla LCD los valores en este formato:

1.454---->unidades + 3 decimales.

Tb tndria que hacer un "hold" para mantener un dato en pantalla,dar los datos en dB´s y lineal.....Pero vamos por partes y vamos a empezar por lo basico....jajaja.No vamos a empezar la casa por el tejado.....

Espero vuestras respuestas y gracias por vuestra atencion..

Un saludo...Bye!!

ahhh se me olvidaba.......
si poneis algun programa si es en ensamblador mejor,es que cuando vi el pic utilize el mplab y es lo que mas controlo....
bye!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: S.O.S Conversor A/D de 16F877
« Respuesta #1 en: 27 de Enero de 2007, 15:07:01 »
La elección de los puertos es según tu gusto y criterio. 

De todas formas, si tu aplicación es así como dices no veo inconvenientes en los puertos que has elegido.

Respecto a lo demostrar el valor, bueno, he aquí algo que parece simple de decir pero no tan fácil de hacer que es el trabajar con números decimales o de coma flotante con pics en assembler.

Es algo complicado y si eres novato te sugiero hagas o resuelvas tu problema de otra forma.  Los pasos serían o bien llevar todo a una base decimal por ejemplo, en vez de poner 5V serían 5000mv y así te olvidas de los decimales o mejor dicho sabrás siempre que posición ocupará la coma, es decir después del 1er dígito.

Ahora bien, para hacer eso, tendrías que conocer la precisión con la que trabajarás.  Es decir 8 o 10 bits.

Supongamos 10 bits.

Tu valor A/D, de 10 bits será el que corresponda a  1023 * (Voltaje Medido / Vref )

O lo que es lo mismo, si hablamos de valores de A/D

Valor en Decimal en Milivoltios = 5 x 1000 x ValorAD / 1023


Acá ves que debes lidiar con multiplicaciones y divisiones, las cuales te llevaran a que tu resultado ocupará varios bytes.  Si no estas habituado al manejo de estas cosas en assembler estarás en problemas fácilmente.

Te sugiero, sinceramente, encares tu proyecto en C.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jaybob

  • PIC10
  • *
  • Mensajes: 2
Re: S.O.S Conversor A/D de 16F877
« Respuesta #2 en: 28 de Enero de 2007, 18:20:47 »
Podrias pasarme algun codigo para hacer la rutina de la LCD en C?....
Mi problema es que lo poco que se lo aprendi en ensamblado y no se bien como programar el pic en lenguaje C ni con que programas.......Podrias aconsejarme?
Pongo esto en el foro de C??
Gracias por tu respuesta..
Bye!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: S.O.S Conversor A/D de 16F877
« Respuesta #3 en: 28 de Enero de 2007, 21:40:22 »
Podrias pasarme algun codigo para hacer la rutina de la LCD en C?....
Mi problema es que lo poco que se lo aprendi en ensamblado y no se bien como programar el pic en lenguaje C ni con que programas.......Podrias aconsejarme?
Pongo esto en el foro de C??
Gracias por tu respuesta..
Bye!

Yo no uso el CCS, pero podrías pasarte por el subforo de Lenguaje C para microcontroladores y ahí hay ejemplos para el uso del LCD. 

He aquí el: Indice de temas destacados

Yo uso el C18 para los PIC18F y el código fuente viene con el compilador así que no hay necesidad de que te lo pase, simplemente al instalarlo ahí esta.  :)

Te hablé del CCS pero también podrías usar el Hitech o alguno otro compilador de C.

El C18 solo es para los PIC18xxx
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: S.O.S Conversor A/D de 16F877
« Respuesta #4 en: 28 de Enero de 2007, 23:16:34 »
no soy un experto del LCD, pero maneje uno en una aplicacion sencilla, lo que hice en CCS fue:

#include<16f877a.h>
#define use_portb_lcd TRUE         //definir portb para el lcd
#include <lcd.c>           //Libreria para el uso del LCD controlador HD44780
#fuses .....  // aca van los fuses

void main()
{ ... inicializacion
   ... i/o, etc.
   ...
   lcd_init(); // funcion para inicializar LCD
   while(true)
   {
      lcd_putc("\f");         //borra pantalla
      lcd_gotoxy(1,1);      //cursor para escribir mensaje, en gral:lcd_gotoxy(x,y) x= columna , y=fila
                                   //origen 1,1 en extremo superior izquierdo; pueden usarse tb variables que tu quieras
      lcd_putc("Hola Mundo");    // coloca desde el origen situado en 1,1 el mensaje Hola Mundo en el LCD.
   }
}

y creo que asi quedaria como un ejemplo sencillo, si cometi algun error, corrijanme los mas expertos, te recomiendo para que aprendas algo sobre los lcd en ccs ver los ejemplos de Vszener que dejo en el subforo de lenguaje c para micros (ahi busca los ejemplos con LCD en el indice): http://www.todopic.com.ar/foros/index.php?topic=4530.0

espero haberte ayudado. adios!.
.