Mensajes recientes

Páginas: [1] 2 3 4 5 6 7 8 9 10
1
PLC - Control Lógico Programable / Re:PLC MICRO1 DE IDEC IZUMI
« Último mensaje por fabio_stefania en 03 de Noviembre de 2026, 14:39:00 »
Hola, necesito conectarme a un FA-2Junior como el de shadowasdf. ¿Les funcionó el circuito con el conversor USB-TTL? Porque probé con un conversor distinto y no me responde el PLC. Tengo un conversor CH341A pero lo conecté directo sin transistor ni resistencias.

Gracias.
2
Video de prueba:
3
Conexión del módulo con el microcontrolador:
4
Módulo VK16K33 – Matrices LED 8x8 mediante I2C

Para finalizar las prácticas con el controlador VK16K33, se ha desarrollado y probado una librería en PIC18 Basic para controlar dos matrices LED de 8x8, formando una superficie gráfica de 16x8 píxeles.

La comunicación se realiza mediante I2C y se utiliza un framebuffer de 16 bytes que permite realizar operaciones gráficas antes de actualizar la pantalla.

Funciones de la librería:

Comunicación y actualización:
- VK16K33_Init(): inicializa el controlador.
- VK16K33_Cmd(): envía un comando al controlador.
- VK16K33_Write_Byte(): escribe un byte en la memoria local y en el controlador.
- VK16K33_Update(): transfiere el framebuffer completo a la pantalla.

Configuración y control:
- VK16K33_Display_On(): enciende la pantalla.
- VK16K33_Display_Off(): apaga la pantalla.
- VK16K33_Set_Blink(): configura el parpadeo (desactivado, 0,5 Hz, 1 Hz o 2 Hz).
- VK16K33_Set_Brightness(): ajusta el brillo entre 0 y 15.
- VK16K33_SetRotation(): selecciona la orientación de 0° o 180°.

Funciones gráficas:
- VK16K33_Clear_RAM(): borra únicamente el framebuffer.
- VK16K33_Clear(): borra el framebuffer y actualiza la pantalla.
- VK16K33_Fill(): enciende o apaga todos los píxeles del framebuffer.
- VK16K33_Invert(): invierte el estado de los píxeles.
- VK16K33_Pixel(): controla individualmente cada píxel.
- VK16K33_Row(): escribe una fila completa.
- VK16K33_Column(): escribe una columna completa.
- VK16K33_Test(): enciende todos los píxeles para comprobar el funcionamiento de las matrices.

Caracteres y desplazamiento de texto:
- VK16K33_PutC(): dibuja un carácter en las coordenadas indicadas.
- VK16K33_Print(): escribe una cadena de caracteres.
- VK16K33_ScrollReset(): reinicia la posición del desplazamiento.
- VK16K33_ScrollLeft(): desplaza circularmente una cadena de texto, un píxel por llamada, sin pausas internas.

Las funciones de texto utilizan la fuente Font_01 de 5x7 píxeles, con una columna adicional de separación entre caracteres.

Funciones adicionales de desplazamiento gráfico:
- VK16K33_RotateLeft(): desplaza circularmente todo el framebuffer un píxel hacia la izquierda.
- VK16K33_RotateRight(): desplaza circularmente todo el framebuffer un píxel hacia la derecha.

Estas dos últimas funciones permiten desplazar cualquier contenido gráfico, incluidos textos, símbolos y bitmaps. Los píxeles que salen por un extremo reaparecen por el contrario.

A diferencia de las funciones de texto, trabajan directamente sobre el contenido del framebuffer, independientemente de cómo se haya generado.

Archivos adjuntos:

5
Simuladores de circuitos / Osciloscopio del Proteus <-> Monitor de vídeo
« Último mensaje por PicMinor en 23 de Octubre de 2026, 03:53:48 »
¡Saludos al foro!

¿Sabe alguien de algún diseño donde se pueda visualizar algo parecido a una señal de vídeo en el osciloscopio del Proteus?

Por lo que he visto por ahí habría que ponerlo en modo X-Y, usar señales en diente de sierra, etc.

¡Gracias de antemano!
6
Módulo MAX31855, conversor digital de ±temperatura para termopar tipo K

El MAX31855 es un circuito integrado diseñado para realizar mediciones de temperatura mediante termopares. Está fabricado por Maxim Integrated (actualmente Analog Devices) y existen diferentes versiones dependiendo del tipo de termopar utilizado.

En esta práctica se utiliza un módulo comercial equipado con el MAX31855K, destinado a trabajar con termopares tipo K.

El circuito integra la conversión analógico-digital, compensación de unión fría y una interfaz serie compatible con SPI, lo que permite realizar mediciones de temperatura utilizando únicamente tres líneas de comunicación con el microcontrolador.

A diferencia del MAX6675, utilizado en una práctica anterior, el MAX31855 permite medir temperaturas tanto positivas como negativas y dispone de un sistema de diagnóstico más completo.

Características principales

- Compatible con termopares tipo K (versión MAX31855K).
- Rango de representación de temperatura del termopar: -270 °C a +1800 °C.
- Resolución de temperatura del termopar: 0,25 °C.
- Resolución de temperatura de la unión fría: 0,0625 °C.
- Compensación automática de unión fría.
- Interfaz serie compatible con SPI, únicamente de lectura.
- Transmisión de datos de 32 bits, comenzando por el bit más significativo.
- Detección de termopar desconectado.
- Detección de cortocircuitos a GND y VCC.
- Alimentación del circuito integrado entre 3,0 V y 3,6 V.

El rango de temperatura realmente utilizable depende del termopar instalado y de las condiciones de funcionamiento. La resolución de lectura tampoco debe confundirse con la precisión de medida.

Conexiones del módulo

La comunicación utiliza las siguientes señales:

Código: [Seleccionar]
VCC  - Alimentación del módulo
GND  - Masa
CS   - Chip Select
SCK  - Serial Clock
SO   - Serial Output (MISO)

La interfaz es únicamente de lectura, por lo que no se necesita una línea MOSI.

Para esta práctica se utiliza el PIC18F46K22 de la tarjeta HL-K18, funcionando a 64 MHz, con la siguiente asignación:

Código: [Seleccionar]
Symbol MAX31855_CS  = LATC.2
Symbol MAX31855_SCK = LATC.3
Symbol MAX31855_SO  = PORTC.5

Importante: El MAX31855 trabaja con alimentación de 3,3 V y sus entradas digitales no deben conectarse directamente a señales de 5 V. Si el microcontrolador trabaja a 5 V, deben adaptarse los niveles de CS y SCK. También es necesario comprobar si el módulo comercial incorpora regulador y adaptación de niveles.

Formato de los datos

En cada lectura, el MAX31855 transmite una palabra de 32 bits que contiene la temperatura del termopar, la temperatura de la unión fría y los indicadores de error.

Código: [Seleccionar]
D31........D18  Temperatura del termopar (14 bits)
D17              Reservado
D16              Indicador general de error
D15.........D4  Temperatura unión fría (12 bits)
D3               Reservado
D2               SCV
D1               SCG
D0               OC

Los dos valores de temperatura tienen signo, permitiendo representar temperaturas positivas y negativas.

La temperatura del termopar utiliza una resolución de 0,25 °C por bit:

Código: [Seleccionar]
Temperatura = Valor * 0.25

La temperatura de la unión fría utiliza una resolución de 0,0625 °C por bit:

Código: [Seleccionar]
Temperatura_interna = Valor * 0.0625

Para los valores negativos es necesario realizar la correspondiente extensión del bit de signo antes de efectuar la conversión.

Diagnóstico de errores

El MAX31855 dispone de tres indicadores de error:

Código: [Seleccionar]
OC  = Open Circuit
SCG = Short Circuit to GND
SCV = Short Circuit to VCC

En la librería se han definido las siguientes constantes:

Código: [Seleccionar]
Const MAX31855_ERROR_OC  = 0x01
Const MAX31855_ERROR_SCG = 0x02
Const MAX31855_ERROR_SCV = 0x04

El bit D16 indica que existe un fallo y los bits D2..D0 permiten identificarlo.

Estos indicadores se han mantenido en la librería con los nombres originales del fabricante, facilitando su identificación en el datasheet.

Comunicación SPI por software

Para esta práctica se ha utilizado una interfaz SPI implementada por software (bit-banging), evitando la necesidad de configurar el módulo SPI hardware del microcontrolador.

La secuencia de lectura consiste en seleccionar el MAX31855 mediante CS, recibir los 32 bits y liberar nuevamente el dispositivo.

La recepción se realiza desplazando los bits dentro de una variable de 32 bits:

Código: [Seleccionar]
SO_Input.0 = MAX31855_SO
data_raw = (data_raw << 1) | SO_Input

Una vez completada la recepción, la librería separa los campos correspondientes a las temperaturas y al diagnóstico.

El MAX31855 realiza las conversiones internamente, con un tiempo de conversión típico próximo a 100 ms. En el programa de prueba se ha establecido un intervalo de 500 ms entre lecturas.

Librería MAX31855

La librería se ha desarrollado para Oshonsoft PIC18 Basic Compiler v6.10 y utiliza únicamente dos funciones principales:

MAX31855_Init()

Configura las líneas de comunicación y establece su estado inicial.

MAX31855_Read(error_code, internal_temp)

Realiza la lectura de los 32 bits y devuelve directamente la temperatura del termopar en grados Celsius.

Además, actualiza los argumentos:

Código: [Seleccionar]
error_code     - Código de diagnóstico
internal_temp  - Temperatura de la unión fría

Cuando se detecta un error, la función devuelve -999.0 como valor especial de indicación de fallo.

Ejemplo de utilización:

Código: [Seleccionar]
Dim Temp_termopar As Single
Dim Temp_Int As Single
Dim Codigo_Error As Byte

MAX31855_Init()

Temp_termopar = MAX31855_Read(Codigo_Error, Temp_Int)

Si no se detectan errores, las variables contienen la temperatura del termopar y la temperatura interna del MAX31855.

Ejemplo de lectura y diagnóstico

El siguiente fragmento muestra la lectura y la presentación de los resultados por el puerto serie:

Código: [Seleccionar]
Temp_termopar = MAX31855_Read(Codigo_Error, Temp_Int)

If Codigo_Error != 0 Then

    If (Codigo_Error & MAX31855_ERROR_OC) != 0 Then
        UART_Write "Thermocouple disconnected", CrLf
    Endif

    If (Codigo_Error & MAX31855_ERROR_SCG) != 0 Then
        UART_Write "Short circuit to GND", CrLf
    Endif

    If (Codigo_Error & MAX31855_ERROR_SCV) != 0 Then
        UART_Write "Short circuit to VCC", CrLf
    Endif

Else

    UART_Write "Thermocouple: ", #Temp_termopar, " C", CrLf
    UART_Write "Cold junction: ", #Temp_Int, " C", CrLf

Endif

En este ejemplo los indicadores de error se comprueban independientemente, ya que están definidos como una máscara de bits.

Resultados de las pruebas

Se han realizado pruebas de funcionamiento con temperaturas positivas y negativas, así como comprobaciones de los indicadores de error.

El comportamiento del MAX31855 ha resultado especialmente satisfactorio.

Durante las pruebas se ha observado una lectura muy estable en todo el rango de temperaturas ensayado, tanto positivas como negativas, incluso presentando los resultados con un decimal.

Este comportamiento contrasta con el observado anteriormente utilizando un módulo MAX6675.

En las pruebas realizadas con el MAX6675 se apreciaban fluctuaciones de aproximadamente ±1 °C, e incluso superiores, por lo que se optó por presentar las temperaturas sin decimales.

La comparación práctica puede resumirse de la siguiente forma:

CaracterísticaMAX6675MAX31855
Temperaturas negativasNoSí
Resolución termopar0,25 °C0,25 °C
Compensación unión fríaSíSí
DiagnósticoCircuito abiertoOC, SCG y SCV
Estabilidad observadaFluctuaciones de ±1 °C o superioresLectura muy estable
Presentación utilizadaSin decimalesUn decimal

Es importante destacar que ambos circuitos tienen la misma resolución de 0,25 °C para la temperatura del termopar.

Por tanto, la diferencia de estabilidad observada no puede atribuirse simplemente a una mayor resolución del MAX31855.

Los resultados corresponden a los módulos y condiciones utilizados en estas prácticas y no deben interpretarse como una comparación metrológica entre ambos circuitos integrados.

Conclusiones

El MAX31855 ha demostrado ser un dispositivo sencillo de utilizar y con un comportamiento muy satisfactorio durante las pruebas realizadas.

La estabilidad de las lecturas, la posibilidad de trabajar con temperaturas negativas y positivas, la compensación de unión fría y el diagnóstico de errores hacen que resulte especialmente interesante para experimentar con termopares.

En comparación con el MAX6675 utilizado anteriormente, el MAX31855 ha proporcionado lecturas considerablemente más estables, permitiendo presentar los resultados con un decimal sin las fluctuaciones observadas en el módulo anterior.

No obstante, la presentación de un decimal no implica una precisión de 0,1 °C, ya que la resolución real de la medida del termopar es de 0,25 °C.

Como ocurre con otros módulos comerciales económicos, los resultados obtenidos durante las prácticas no garantizan que puedan utilizarse directamente en cualquier aplicación real. La precisión final depende del termopar, las conexiones, el diseño de la placa, las condiciones ambientales y las características de la instalación.

Para realizar prácticas con microcontroladores, el MAX31855 constituye una solución muy interesante, tanto por su sencillez de comunicación como por la información adicional que proporciona sobre el estado del sensor.

Observación sobre la compensación de unión fría

Durante las pruebas se ha observado que, al enfriar considerablemente el circuito integrado MAX31855, la temperatura indicada por el termopar puede resultar incorrecta, aunque la temperatura del extremo de medida permanezca constante.

Este comportamiento puede producirse cuando existe una diferencia de temperatura entre el circuito integrado y los terminales de conexión del termopar, ya que el MAX31855 utiliza su sensor interno para realizar la compensación de unión fría.

Por tanto, es importante evitar gradientes térmicos entre el MAX31855 y las conexiones del termopar. Esta precaución debe tenerse en cuenta tanto ante fuentes de calor como de frío próximas al circuito.

La observación no implica que el MAX31855 sea incapaz de funcionar a bajas temperaturas, sino que una compensación correcta requiere que la temperatura medida internamente represente adecuadamente la temperatura de la unión fría.

Diagrama de conexión del módulo usado y archivos necesarios:

7
Funciones de la librería

La librería se ha simplificado al máximo y solamente dispone de dos funciones:

MAX6675_Init()

Configura los pines utilizados para la comunicación con el MAX6675 y establece sus niveles lógicos iniciales.

MAX6675_Read(MAX6675_ERROR_THERMOCOUPLE)

Realiza la lectura del MAX6675 y devuelve el valor entero de la temperatura en grados Celsius.

El argumento MAX6675_ERROR_THERMOCOUPLE se pasa por referencia y permite conocer el estado del termopar:

Código: [Seleccionar]
MAX6675_ERROR_THERMOCOUPLE = 0   ' Thermocouple connected
MAX6675_ERROR_THERMOCOUPLE = 1   ' Thermocouple disconnected

Ejemplo:

Código: [Seleccionar]
Dim temperature As Integer
Dim MAX6675_ERROR_THERMOCOUPLE As Byte

temperature = MAX6675_Read(MAX6675_ERROR_THERMOCOUPLE)

Para una lectura correcta de 60 °C, obtendremos:

Código: [Seleccionar]
temperature = 60
MAX6675_ERROR_THERMOCOUPLE = 0

Si el termopar está desconectado, la función devuelve:

Código: [Seleccionar]
temperature = -99
MAX6675_ERROR_THERMOCOUPLE = 1

El valor -99 se utiliza únicamente como indicación de error, ya que se encuentra fuera del rango de medida del MAX6675.

Nota: el rango de 0 a 1024 °C corresponde al MAX6675. El termopar tipo K suministrado con estos módulos económicos puede tener un rango de utilización considerablemente menor, dependiendo de su construcción y aislamiento. Si se necesitan medir temperaturas elevadas, debe utilizarse un termopar tipo K específicamente certificado para dicho rango.

Archivos necesarios, conexionado del módulo usado y termopar del kit:
8
Módulo sensor de temperatura MAX6675 con termopar tipo K de amplio rango

El MAX6675 es un integrado bastante sencillo de manejar y muy adecuado para experimentar con termopares. Está diseñado específicamente para termopares tipo K y realiza internamente la amplificación, compensación de unión fría y conversión A/D.

Es ideal para iniciarse en el manejo de la comunicación serie SPI debido a la simplicidad de la comunicación con el MAX6675.


Características principales

CaracterísticaMAX6675
SensorTermopar tipo K
Rango de medida0 a +1024 °C
Resolución0,25 °C
Conversión12 bits
InterfazSerie compatible con SPI, solo lectura
Alimentación3,0 a 5,5 V
Consumo típico0,7 mA
Tiempo de conversión170 ms típico, 220 ms máx.
Frecuencia SCK máxima4,3 MHz
Detección de termopar abiertoSí
Temperatura de funcionamiento del IC−20 a +85 °C

Un detalle importante es distinguir resolución de precisión. Aunque entrega pasos de 0,25 °C, eso no significa una precisión de ±0,25 °C.

Por ejemplo, para 0...700 °C, a 25 °C de temperatura ambiente, la hoja de datos especifica un error del termopar/conversión de hasta ±8 LSB a 3,3 V, equivalente a unos ±2 °C; además existe el error asociado a la compensación de unión fría.


Funcionamiento

Un termopar K genera una tensión muy pequeña dependiente de la diferencia de temperatura entre la unión de medida y sus conexiones. El MAX6675 mide esa señal y además mide internamente la temperatura de la denominada unión fría, realizando la compensación necesaria antes de proporcionar el resultado digital.

Esto simplifica muchísimo el circuito: básicamente tenemos:

Termopar K → MAX6675 → SPI → PIC

El fabricante recomienda además un condensador de 0,1 µF entre VCC y GND, próximo al integrado.


Interfaz con el microcontrolador

Solo intervienen tres señales digitales:

  • CS — Chip Select.
  • SCK — Reloj generado por el PIC.
  • SO — Salida de datos del MAX6675 hacia el PIC.
No existe MOSI porque el MAX6675 no recibe comandos. Es esencialmente un dispositivo SPI de solo lectura.

Cuando CS pasa a 0, desde el MAX6675 al PIC se desplaza una palabra de 16 bits.

Cuando se realiza la lectura serie del MAX6675, el chip entrega una trama única y fija de 16 bits de datos a través del pin SO (Serial Output). Esta lectura se realiza desde el bit más significativo (MSB) hasta el bit menos significativo (LSB) de manera consecutiva.

El formato es:

Código: [Seleccionar]
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
 |   |------------------------------------|  |  |  |
 |            temperatura 12 bits            |  |  +-- tri-state
 |                                           |  +----- Device ID
 |                                           +-------- termopar abierto
 +---------------------------------------------------- 0

A continuación, se detalla la función de cada uno de los bits que componen los 2 bytes transferidos:

BitsNombreDescripción / Función
Bit 15Bit DummyBit de relleno. Siempre tiene un valor de 0. No contiene información de temperatura.
Bits 14 al 3Datos de temperaturaLos 12 bits útiles. Contienen el valor entero de la medición de temperatura en formato binario directo (MSB en Bit 14, LSB en Bit 3). Su resolución es de 0,25 °C por unidad.
Bit 2Entrada del termopar abiertoBit de estado (fallo).
0: El termopar está correctamente conectado.
1: El termopar está suelto o desconectado.
Bit 1ID del dispositivoBit de identificación. Generalmente se lee como 0, aunque la hoja de datos especifica que puede ser utilizado como identificador del chip. No afecta a la lectura de temperatura.
Bit 0Tri-StateBit de estado del bus. El chip lo sitúa en alta impedancia inmediatamente antes de finalizar la comunicación cuando el pin CS vuelve a nivel alto.


En la práctica, la información de temperatura ocupa D14...D3. Por tanto, una vez leídos los 16 bits hay que realizar un desplazamiento para eliminar los bits de estado del MAX6675:

Código: [Seleccionar]
Temperatura = ((Dato >> 3) & 0x0FFF) × 0.25

Por ejemplo, si obtenemos:

Código: [Seleccionar]
Valor temperatura = 400

entonces:

Código: [Seleccionar]
T = 400 × 0.25 = 100.00 °C

Siendo realistas, teniendo en cuenta la precisión aproximada de ±2 °C del MAX6675 y su amplio rango de medida, en esta práctica se ha optado por expresar la temperatura en grados Celsius enteros, sin decimales.

Aunque el dispositivo proporciona una resolución de 0,25 °C, mostrar esta resolución puede dar una falsa sensación de precisión y hace más evidentes las pequeñas variaciones entre lecturas consecutivas. Así que, para aplicaciones donde no es necesaria una precisión inferior al grado y se necesita un amplio rango de temperaturas, es una opción muy aceptable.

Quedando el cálculo de la lectura como sigue:

Código: [Seleccionar]
Temperatura = ((Dato >> 3) & 0x0FFF) / 4

Esto permite utilizar prácticamente cualquier PIC para realizar la lectura.


Un detalle importante para la librería

La conversión se realiza mientras CS está a nivel alto. Al llevar CS a nivel bajo se detiene la conversión y comienza la lectura serie. Por eso no conviene realizar lecturas demasiado rápidamente.

Con un tiempo máximo de conversión de 220 ms, para una aplicación normal podríamos actualizar la temperatura cada 250 ms, por ejemplo.

Hay que tener en cuenta que el MAX6675 solamente mide temperaturas del termopar a partir de 0 °C.


El módulo usado es el de Hailege

Estos módulos suelen sacar directamente las señales necesarias para el microcontrolador, por lo que encontrarás algo parecido a:

Código: [Seleccionar]
VCC
GND
SCK
CS
SO

y una bornera con dos bornes marcados con polaridad para conectar el termopar tipo K:

Código: [Seleccionar]
T+
T-

La alimentación del propio MAX6675 puede ser de 3,0 a 5,5 V, por lo que para las pruebas con PIC a 5 V encaja perfectamente.

Este tipo de módulos básicos están pensados principalmente para realizar prácticas con un mínimo de componentes. Dependiendo de la aplicación real y del entorno donde se instalen, puede ser necesario añadir componentes adicionales para mejorar la estabilidad y fiabilidad de la lectura.

Para un diseño definitivo es recomendable consultar las hojas de características y las notas de aplicación facilitadas por el fabricante.


Lectura del MAX6675

La lectura del MAX6675 es relativamente sencilla, ya que el dispositivo no recibe comandos ni necesita que el PIC le envíe datos. La comunicación es únicamente de salida desde el MAX6675 hacia el microcontrolador.

El MAX6675 entrega una palabra de 16 bits, comenzando por el bit más significativo (MSB). En este ejemplo la lectura se realiza por software, utilizando una variable de 16 bits como registro de desplazamiento.

El procedimiento utilizado es el siguiente:


1. Inicio de la comunicación

Se selecciona el MAX6675 poniendo CS = 0 y se mantiene inicialmente la señal de reloj a nivel bajo (SCK = 0). Ambas señales son controladas por el PIC.

Se introduce además una pequeña pausa antes de comenzar la lectura.

Código: [Seleccionar]
Low MAX6675_CS
Low MAX6675_SCK
WaitUs 2


2. Lectura de los 16 bits

Se ejecuta un bucle de 16 ciclos, uno por cada bit recibido desde el MAX6675:

Código: [Seleccionar]
CFor (i = 0; i < 16; i++)

En cada ciclo se pone la señal de reloj a nivel alto:

Código: [Seleccionar]
High MAX6675_SCK

Se introduce una pequeña pausa para asegurar que la señal de datos se encuentre estable:

Código: [Seleccionar]
WaitUs 1

A continuación se lee el estado de la salida serie SO del MAX6675:

Código: [Seleccionar]
input_SO.0 = MAX6675_SO

El MAX6675 transmite primero el bit más significativo, por lo que los bits recibidos se van introduciendo en data_raw mediante desplazamientos hacia la izquierda.

Antes de incorporar el nuevo bit, se desplaza el contenido de data_raw una posición y se añade el estado recibido:

Código: [Seleccionar]
data_raw = (data_raw << 1) Or input_SO

De esta forma, después de los 16 ciclos, data_raw contiene la palabra completa recibida desde el MAX6675.

Durante la lectura también se comprueba el bit utilizado por el MAX6675 para indicar que el termopar está desconectado. En este bucle corresponde a i = 2:

Código: [Seleccionar]
If i = 2 Then thermocouple_error = input_SO

Después de leer cada bit se devuelve la señal de reloj a nivel bajo:

Código: [Seleccionar]
Low MAX6675_SCK
WaitUs 1

y se continúa con el siguiente ciclo:

Código: [Seleccionar]
Cnext


3. Finalización de la lectura

Una vez recibidos los 16 bits, se pone CS = 1 para finalizar la comunicación. Esta transición también permite al MAX6675 iniciar una nueva conversión de temperatura, que puede necesitar hasta aproximadamente 220 ms para estar lista para una nueva lectura:

Código: [Seleccionar]
High MAX6675_CS

Por tanto, el funcionamiento puede resumirse de forma sencilla como:

Seleccionar el MAX6675 → generar 16 pulsos de reloj → leer un bit en cada ciclo → formar la palabra de 16 bits → deseleccionar el MAX6675.

Posteriormente, a partir de data_raw, pueden extraerse por separado el valor de temperatura y el indicador de termopar desconectado.

Para una lectura de 61.00ºC se han obtenido las siguientes lecturas:
9
Salida de lecturas serie RS232:
10
Módulo VEML7700, sensor digital de luz ambiental I2C

El VEML7700 es un sensor digital de luz ambiental de 16 bits, fabricado por Vishay y con interfaz de comunicación I2C.

Integra fotodiodo, amplificador de bajo ruido y conversor A/D interno. El sensor trabaja con una tensión de alimentación de 2,5 V a 3,6 V, aunque muchos módulos comerciales incorporan regulador y adaptación de niveles para poder utilizarlos directamente en sistemas de 5 V.

Su dirección I2C de 7 bits es fija:

Código: [Seleccionar]
0x10

Pines habituales del módulo

Código: [Seleccionar]
Pin     Función
---------------

VCC     Alimentación
GND     Masa
SCL     Reloj I2C
SDA     Datos I2C

En el encapsulado original del sensor, Vishay identifica estos pines como SCL, VDD, GND y SDA.

Registros principales

Código: [Seleccionar]
Registro       Dirección     Función
------------------------------------

ALS_CONF       0x00          Configuración
ALS_WH         0x01          Umbral alto
ALS_WL         0x02          Umbral bajo
ALS            0x04          Lectura de luz ambiental
WHITE          0x05          Canal de luz blanca
INTERRUPT      0x06          Estado de interrupción

El VEML7700 utiliza registros de 16 bits accesibles mediante I2C. Los códigos de comando utilizados están comprendidos entre 0x00 y 0x06, quedando reservada la dirección 0x03.

Configuración básica

Para una primera práctica puede utilizarse:

Código: [Seleccionar]
ALS_CONF = 0x0000

Con esta configuración el sensor trabaja en modo normal, con ganancia x1 y un tiempo de integración de 100 ms.

Conversión aproximada a lux

Con ganancia x1 y un tiempo de integración de 100 ms, la resolución utilizada para la conversión es:

Código: [Seleccionar]
lux = lectura_ALS * 0,0576

Para evitar operaciones en coma flotante, en la librería se realiza el cálculo utilizando aritmética entera:

Código: [Seleccionar]
lux = CLong als_count * 576 / 10000

El uso de `CLong` evita el desbordamiento de 16 bits durante la multiplicación intermedia.

Con esta configuración puede utilizarse un intervalo de unos 150 ms entre lecturas, dejando margen suficiente respecto al tiempo de integración de 100 ms.
Salida de datos por puerto serie.

Ejemplo de lectura

Código: [Seleccionar]
Dim Lux as Word

Lux = VEML7700_Read_Lux()

UART_Write #Lux, " Lux aprox.", CrLf

Este módulo es una alternativa mucho más precisa y cómoda que una LDR cuando se necesita medir la iluminación. Al disponer de conversión A/D interna proporciona directamente una lectura digital proporcional a la luz ambiental.

Puede resultar interesante para prácticas con I2C, medida de iluminación, regulación automática del brillo de displays, estaciones ambientales y aplicaciones de bajo consumo.

Conexionado y archivos adjuntos necesarios:

Programa de test: Test VEML7700.bas
Líbreria básica para VEML7700:  VEML7700Lib.bas
I2C Librería hardware: _I2CLib.bas
Configuración rápida Pic18F46K22: _Pic18F46K22Lib.bas

Páginas: [1] 2 3 4 5 6 7 8 9 10