TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rferrero en 03 de Abril de 2004, 12:02:00
-
Hola a todos. Llevo un tiempo intentando que el convertidor A/D del 16f873 me muestre en unos leds (a modo de codificación) el valor de la tensión de salida de dicho convertidor, pero no hay manera. El dispositivo conectado es un gp2d12 (que da salida analógica), pero no consigo hacer que funcione de ninguna de las maneras.
Usando sentencias en C, se pone dato=read_adc(); y ya está?? Cómo se comprueba que termina de adquirir el dato?? No se pone nada?? No se testea el bit adif?? Dato debe ser entero o float??
Socorro!!!!!!!!!!!!! cualquier ayuda será bien recibida y agradecida de antemano. Un saludo.
-
El gp2d12 no lo conozco,¿como funciona?
Mostrar el resultado de la conversión en LEDs y que se enciendan más o menos LEDs dependiendo de un potenciómetro (por ejemplo) conectado a su entrada analógica, es fácil.
Si quieres pega en programa y lo revisamos.
Un saludo
-

Ya funciona!! El gp2d12 es un sensor de infrarrojos, muy útil para robots, como es mi caso. El asunto es que me gustaría sacar el resultado por una pequeña pantalla lcd, pero no consigo que funcione!!! En C, con el CCS-PCW. EL comando setup_lcd no me lo reconoce y la rutina de ejemplo es bastante liosa. Me podrías echar un cable?? 
Gracias. Un saludo.
-
Lo intentaré, pero sin ver el programa es un poco complicado.
El comando setup_lcd no lo he usado nunca, según pone en el manual es para inicializar el controlador 923/924. La LCD que yo uso lleva el controlador 44780 de Hitachi.
Qué es lo que te funciona? ... el encendido de los LEDs?
Lo dicho, pon el programa y expon tus dudas acerca de cosas concretas.
Un saludo
-
El problema es, usando las directivas que adjunto, cómo sacar un dato por pantalla. Por ejemplo, un int que contiene un dato de 8 bits. Me da lo mismo el formato de salida. Es que soy incapaz con estas instrucciones!!! Si no, con qué otro compilador podría?? Gracias. Un saludo.LCD_LOAD() Sintaxis: lcd_load(buffer_pointer, offset, length);Parámetros: buffer_pointer -> apunta a un dato de usuario para enviar al LCD. offset -> desplazamiento dentro del segmento de memoria del LCD para escribir el dato. length -> número de bytes a transferirRequerimientos: Las constantes están definidas en el archivo devices.hFunción: Cargará longitud en bytes desde buffer_pointer en área de datos del segmento LCD 923/924, empezando por el offset (0-15). Lcd_symbol proporciona una manera más sencilla de escribir el dato en el segmento de memoria.Ejemplo: lcd_load(buffer,0,16);LCD_SYMBOL()Sintaxis: lcd_symbol(symbol, b7_addr, b6_addr, b5_addr, b4_addr, b3_addr, b2_addr, b1_addr, b0_addr);Parámetros: symbol -> constante de 8 bits. bX_addr -> bit de direcciones representando la localización del segmento a ser usado para el bit X de symbol.Función: Carga 8 bits dentro del segmento de área de datos para el LCD con cada bit de dirección especificado. Si el bit 7 en símbolo está a 1, el segmento en la dirección B7 está a 1 también. De otra forma, está a 0. Lo mismo es cierto para todos los otros bits en símbolo. B7_addr es un bit de direcciones en la RAM del LCD.Requerimientos: Las constantes están definidas en el archivo devices.hEjemplo: byte CONST DIGIT_MAP[10]= {0X90,0XB7,0X19,0X36,0X54,0X50,0XB5,0X24}; #define DIGIT_1_CONFIG COM0+2,COM0+4COM05,COM2+4,COM2+1,COM1+4,COM1+5 for(i=1;i<=9;i++) { LCD_SYMBOL(DIGIT_MAP,DIGIT_1_CONFIG); delay_ms(1000); }SETUP_LCDSintaxis: setup_lcd(mode, prescale, sements)Parámetros: mode -> puede ser una de estas constantes del archivo devices.h: LCD_DISABLED, LCD_STATIC, LCD_MUX12, LCD_MUX13, LCD_MUX14. prescale -> puede ser de 0 a 15 para los segmentos de reloj del LCD. Puede ser cualquiera de las siguientes constantes o varias a la vez: SEGO_4, SEG5_8, SEG9_11, SEG12_15, SEG16_19, SEGO_28, SEG29_31, ALL_LCD_PINS.Requerimientos: Las constantes están definidas en el archivo devices.hEjemplo: setup_lcd(LCD_MUX14|STOP_ON_SLEEP,2,ALL_LCD_PINS);
-
Mira es más sencillo que todo eso. Lo mejor será que te ponga un pequeño ejemplo de como sacar un entero por LCD.
Voy a buscarlo.
-
En el subforo de ejemplos para simular he dejado un ejemplo sencillo de un voltímetro con representación en LCD.
La representación en LCD es con float, para tener decimales en la tensión, si lo quieres sin decimales, como entero de 8 bits (16 bits), tienes que poner %u (%lu).
Espero que ahora puedas representar en la LCD.
Un saludo
-
Siento tener que volverte a dar la lata, pero no me compila. Me aparece error en la librería lcd.c, concretamente en boolean, que no lo reconoce. Lo cambio por int1, pero más abajo me dice que a byte const ... le falta (.
Qué versión de compilador usas?? La mía es:
ide version 3.14
pcb version 3.094
pcm version 3.094
-
La librería no la tienes porque tocar, a no ser que quieras cambiar la asignación de pines a la LCD. Si no estas seguro de lo que haces no la modifiques.
Aquí en la librería no tendría porqué aparecer errores.
La versión del compilador para este programa en concreto, no tiene nada que ver, siempre y cuando esté bien instalado.
Un saludo
-
Al compilar, me aparece
A #device required before this line. Y aparece en la línea donde está
struct lcd_pin_map { // This structure is overlayed
BOOLEAN enable; // on to an I/O port to gain
BOOLEAN rs; // access to the LCD pins.
BOOLEAN rw; // The bits are allocated from
BOOLEAN unused; // low order up. ENABLE will
int data : 4; // be pin B0.
} lcd;
justo al principio del fichero lcd.c He probado a poner #device PIC16F873 y me aparece otro error. Es lo único que he tocado y no aparece nada más. Para hacer una prueba, me puedes mandar el hex o decirme qué compilador y versión usas??
Muchas gracias. Un saludo.
-
Vale te envio todos los ficheros resultantes de la compilación por privado.
-
Perdona que te maree, de verdad. He usado el .hex, el original y demás, compilado y nada. Se iluminan mucho unos leds, parpadeando (siempre los mismos) y no aparece nada en la pantalla.
En lcd_init() no hace falta inicializarla o poner algún parámetro?? Dónde se ponen las salidas de los puertos como entrada o salida??? Me refiero a "tris_".
GRACIAS. 
-
LEDs? qué LEDs?
Qué tipo de LCD estas usando y a qué pines del PIC la estás conectando?
En lcd_init() no debes poner nada.
No hace falta definir los tris_