Lectura de datos a través de GPIO

0

Acabo de aprender GPIO y he leído mucho en Internet. Como entendí, el puerto GPIO puede estar en uno de dos estados: out y in . En cualquier estado puede funcionar con 0 y 1 . Por ejemplo, si necesitamos encender un LED, cambiamos el estado a out y enviamos 1 . Pero no entiendo qué sucede cuando nos conectamos al sensor de temperatura GPIO. Está claro que cambiamos el estado a in . ¿Pero qué leemos de GPIO? 0 s y 1 ? ¿Cómo podemos obtener la temperatura? Por favor, explique.

P.S. Utilizo la placa Olinuxino A13 y actualmente no tengo ningún sensor. Solo quiero entender cómo funciona y comprar en general después de eso.

    
pregunta Pavel

2 respuestas

2

El Allwinner A13 no tiene entradas del convertidor analógico a digital (ADC).

Según el manual del usuario:

  

2.8 I2C y SPI bajo Debian
  I2C y SPI son compatibles con las últimas versiones de Debian. Hay soporte respectivo del kernel para ambos.   Hay un módulo de python llamado pyA13 que se puede encontrar aquí:    enlace Tiene I2C (también conocido como TWI) y SPI.

Los pines I2C se describen en la sección 6.3 Módulo UEXT del Manual del usuario

Por lo tanto, una forma sencilla de conectar el Olinuxino A13 a un sensor de temperatura es obtener un sensor de temperatura con una interfaz I2C incorporada, ejecutar Debian y acceder al sensor de temperatura de Python. Espero poder también obtener I2C desde C, pero no vi que se mencione)

Hay bastantes sensores de temperatura I2C. Varían según el voltaje de operación, la resolución y el paquete del dispositivo. Recomiendo intentar que las cosas funcionen de manera rápida y barata primero.

Por ejemplo, Sensores de temperatura del microchip Incluye dispositivos con un I2C / SMBus. Algunos de estos vienen en un paquete Dual-In-Line, que puede enchufar en una placa de pruebas, y por lo tanto, hacer que las cosas sean relativamente fáciles de probar. Las piezas de microchip son transportadas por una gran cantidad de distribuidores, por lo que no debería ser demasiado difícil conseguirlas (debería poder recoger una por aproximadamente 1GBP ($ 1.50))

Hay sensores de temperatura I2C de otros fabricantes que pueden tener beneficios. He usado los sensores Microchip I2C, son baratos y funcionaron.

Si realmente lo desea, puede comprar un ADC externo y conectarse a él. Son dispositivos ADC que proporcionan transferencia de datos en paralelo, por lo que podría experimentar con GPIO. Algunos apoyan SPI. Esto requeriría más electrónica que un sensor de temperatura I2C. Por lo tanto, recomiendo conseguir un par de sensores de temperatura I2C de todos modos. Deben facilitar la configuración de las cosas, y aún pueden ser útiles, para darle una manera de hacer una comparación de la temperatura (lo que puede ayudar a depurar el sistema) si decide ser analógico.

    
respondido por el gbulmer
5

Como está tratando con el sensor de temperatura aquí, necesita usar Analog to digital converter (ADC). Tendrá que poner valores en los registros ADC y luego leer los valores entrantes del canal ADC.

No ha mencionado en qué Micro controlador está enfocando, por lo que asumo Atmega32 . Tendrá que leer su hoja de datos para comprender los registros de ADC y tendrá que realizar una función para leer los valores provenientes del canal de ADC, y esos valores serán sus valores de temperatura.

Por ejemplo:

 //function to read adc value
 uint16_t adc_read(uint8_t ch)
{
    ch &= 0b00000111;  
    ADMUX = (ADMUX & 0xF8)|ch;    
    ADCSRA |= (1<<ADSC);
    while(ADCSRA & (1<<ADSC));
    return (ADC);
}

así que, en general, todo lo que necesita hacer es leer los valores utilizando la función anterior y almacenarlo en una variable.

int main()
{
  uint16_t adc_result0;
  while(1)
  {
    adc_result0 = adc_read(0); //reading values and storing it in variable for further processing.
  }
}

Nota : las funciones anteriores son solo para fines de demostración y pueden no dar el resultado real.

    
respondido por el Aircraft

Lea otras preguntas en las etiquetas