Autor Tema: PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)  (Leído 859238 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re:PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)
« Respuesta #825 en: 08 de Abril de 2026, 21:03:35 »
Conexión electrica del módulo HW-084 con el Pic18F46K22:
« Última modificación: 25 de Abril de 2026, 05:30:02 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re:PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)
« Respuesta #826 en: 04 de Mayo de 2026, 08:46:13 »
🔧 Módulo GY-21 (I²C) con sensor HTU21D para lectura de temperatura y humedad relativa

Comparto librería desarrollada para trabajar con el módulo GY-21, basado en el sensor digital HTU21D, para lectura de temperatura y humedad relativa mediante bus I²C.

Se incluyen:
✅ Librerías de soporte
✅ Ejemplos de prueba
✅ Lectura en modo Hold Master y No Hold Master

Versión probada con:
    • Microcontrolador: PIC18F46K22 @ 64 MHz
    • Tarjeta entrenadora: HL-K18
    • Entorno de desarrollo: PIC18 Basic Compiler v6.10

📌 Sobre el sensor HTU21D
El HTU21D es un sensor digital calibrado en fábrica, de bajo consumo y buena precisión, muy utilizado en aplicaciones embebidas.

Rango de medida
Temperatura:
    • -40°C a +125°C (±0.3).
Humedad relativa:
    • 0 a 100 %RH (±3%).

📡 Dirección I²C
Dirección base de 7 bits:
0x40
Direcciones equivalentes de 8 bits:
Escritura: 0x80   ' (0x40 << 1) + 0
Lectura  : 0x81   ' (0x40 << 1) + 1

⚙️ Modos de funcionamiento
El HTU21D permite trabajar en dos modos:
1️⃣ Hold Master Mode
Comandos:
Temperatura: 0xE3
Humedad   : 0xE5
En este modo:
    • El maestro envía el comando de medición.
    • El sensor puede mantener la línea SCL a nivel bajo mientras realiza la conversión interna.
    • El bus I²C queda temporalmente bloqueado.
    • Cuando finaliza la conversión, el sensor libera la línea SCL y la lectura continúa.
Este mecanismo se conoce como:
Clock Stretching (estiramiento de reloj)
⚠️ Para usar este modo, la librería I²C debe soportar clock stretching.

2️⃣ No Hold Master Mode
Comandos:
Temperatura: 0xF3
Humedad   : 0xF5
En este modo:
    • El maestro envía el comando de medición.
    • El sensor realiza la conversión internamente.
    • El bus I²C permanece libre.
    • El maestro debe esperar el tiempo de conversión o realizar ACK polling antes de leer.
Tiempos máximos de conversión (máxima resolución)
    • Temperatura (14 bits): ~50 ms
    • Humedad (12 bits): ~16 ms

📦 Formato de los datos
El sensor devuelve:
    • 2 bytes de datos
    • 1 byte CRC opcional
Los dos bits menos significativos contienen bits de estado y deben ponerse a cero antes de aplicar las fórmulas:
rawValue = rawValue And 0xFFFC
Donde rawValue contiene inicialmente el valor sin procesar entregado por el sensor.

🧮 Fórmulas de conversión
Temperatura
T = -46.85 + (175.72 * rawValue / 65536)
Humedad relativa
RH = -6 + (125 * rawValue / 65536)

🔌 Conexión usada
Módulo GY-21 con PIC18F46K22
VCC → 3.3V/5V*
GND → GND
SDA → RC4 (MSSP)
SCL → RC3 (MSSP)
⚠️ El chip HTU21D trabaja hasta 3.6V máximo.
Si se alimenta el módulo a 5V, conviene verificar que el módulo usado incorpora regulación y adaptación de niveles.

📚 Librerías necesarias

_I2CLib.bas  → Librería I²C hardware para el módulo MSSP del PIC.
_HTU21DLib.bas  → Librería específica para el sensor HTU21D.

Funciones principales:

Inicialización
HTU21D_Init()

Lectura en No Hold Master
HTU21D_RequestMeasurement(cmd)
temperature = HTU21D_ReadTemp(...)
humidity = HTU21D_ReadHum(...)

Lectura en Hold Master
Clock_Stretch_I2C(timeout)
temperature = HTU21D_ReadTemp(...)
Clock_Stretch_I2C(timeout)
humidity = HTU21D_ReadHum(...)
Clock_Stretch_I2C(0)

⚠️ Clock_Stretch_I2C() pertenece a la librería I²C.

💻 Ejemplo de uso

No Hold Master
HTU21D_RequestMeasurement(HTU21D_CMD_TEMP)
WaitMs 50
temperature = HTU21D_ReadTemp(HTU21D_CMD_TEMP)
HTU21D_RequestMeasurement(HTU21D_CMD_HUM)
WaitMs 16
humidity = HTU21D_ReadHum(HTU21D_CMD_HUM)

Hold Master
Clock_Stretch_I2C(50) ' The slave can lock the clock for up to 50 ms.
temperature = HTU21D_ReadTemp(HTU21D_CMD_TEMP_HM)
Clock_Stretch_I2C(16) ' The slave can lock the clock for up to 16 ms.
humidity = HTU21D_ReadHum(HTU21D_CMD_HUM_HM)
Clock_Stretch_I2C(0) ' Disable

📂 Archivos incluidos
    • Test_HTU21D.bas → Programa principal de prueba
    • _Pic18F46K22Lib.bas → Configuración del PIC
    • _I2CLib.bas → Librería I²C hardware
    • _HTU21DLib.bas → Librería específica del sensor

Los resultados se muestran por UART.

Diagrama de conexiones:
« Última modificación: 04 de Mayo de 2026, 13:13:03 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re:PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)
« Respuesta #827 en: 04 de Mayo de 2026, 08:51:25 »
Lecturas HTU21D:
« Última modificación: 04 de Mayo de 2026, 08:56:09 por dogflu66 »
Saludos desde Granada, España.


 

anything