PDF de programación - Un Termómetro Digital o Comunicarte en I2C Con Tu Microcontrolador Atmel

Imágen de pdf Un Termómetro Digital o Comunicarte en I2C Con Tu Microcontrolador Atmel

Un Termómetro Digital o Comunicarte en I2C Con Tu Microcontrolador Atmelgráfica de visualizaciones

Actualizado el 23 de Julio del 2017 (Publicado el 17 de Julio del 2017)
975 visualizaciones desde el 17 de Julio del 2017
597,6 KB
9 paginas
Creado hace 19a (01/03/2005)
LinuxFocus article number 365
http://linuxfocus.org

Un Termómetro Digital o Comunicarte en
I2C Con Tu Microcontrolador Atmel

por Guido Socher (homepage)

Sobre el autor:

A Guido le gusta Linux
porque es realmente un buen
sistema para desarrollar tu
propio hardware.

Traducido al español por:
Gabriela González
<tradugag(at)yahoo.com>

Introducción

Resumen:

El microcontrolador Atmega8 de Atmel presenta muchos circuitos digitales
y análogos de entrada/salida. Es el dispositivo ideal para desarrollar
cualquier clase de equipo de medición.

En este artículo vemos cómo interconectar el microcontrolador a un
ordenador Linux sobre una interfaz física RS232 sin el chip extra MAX232.

_________________ _________________ _________________

Un prerequisito para este artículo es que tengas instalado el entorno de
programación GCC AVR como se describió en mi artículo ("Programando el
microcontrolador AVR con GCC, libc 1.0.4") "Programming the AVR
microcontroller with GCC, libc 1.0.4". Si quieres evitar dificultades con la
instalación, por supuesto, puedes usar el CD de progamación AVR de
http://shop.tuxgraphics.org/

Cuando utilizas un dispositivo tan avanzado como un microcontrolador para medir
señales análogas o digitales, por supuesto, quieres interfaces para evaluar los datos o
enviar comandos al microcontrolador. En todos los artículos presentados aquí
anteriormente siempre utilizamos comunicación rs232 con el UART
(Receptor/Transmisor Universal Asíncrono)que se encuentra incluido en el microcontrolador. El problema es
que esto requiere un chip MAX232 adicional y 4 condensadores extra. Atmel también sugiere la requisición
de un oscilador de cristal externo para que la comunicación UART funcione de modo confiable. En todo caso,
se trata de muchas partes extra... ¡y podemos evitarlo!

1/9

La cantidad de datos a transferir entre el ordenador y el microcontrolador es generalmente muy pequeña (sólo
unos pocos bytes). La velocidad, por lo tanto, no nos preocupa. Esto hace que el bus/protocolo I2C sea
apropiado para esta tarea.

I2C (pronunciación "eye−square−see" o "I cuadrado C" en español) es una interfaz de comunicación
bidireccional de dos cables. Fue inventada por Philips y el nombre se encuentra protegido. Esta es la razón por
la cual otros fabricantes utilizan otro nombre para el mismo protocolo. Atmel lo llama I2C "two wire
interface" (TWI) o "interfaz de dos cables".

Muchos de ustedes podrían ya estar utilizando I2C en sus ordenadores sin saberlo. Todas las placas madres
modernas tienen un bus I2C para leer temperaturas, la velocidad del ventilador, información acerca de la
memoria disponible... toda clase de información sobre hardware. Este bus I2C lamentablemente no se
encuentra en la parte externa del ordenador (no hay una conexión física). Por lo tanto, tendremos que inventar
algo nuevo.

Pero primero veamos cómo la "interfaz de dos cables" (=TWI = un nombre alternativo para I2C) funciona.

Cómo Funciona I2C/TWI

La hoja de datos de Atmega8 (ver referencias) ya cuenta con una descripción muy detallada que comienza en
la página 160. Por lo tanto yo sólo presentaré un resumen aquí. Después de este resumen, tú podrás

2/9

comprender la descripción en la hoja de datos.

En el bus I2C siempre tienes un dispositivo maestro y uno o varios dispositivos esclavo. El maestro es el
dispositivo que inicia la comunicación y controla el reloj. Los dos cables de este bus se llaman SDA (línea de
datos) y SCL (línea de reloj). Cada uno de los dispositivos del bus deben recibir energía en forma
independiente (lo mismo que sucede con la comunicación tradicional rs232). Las dos líneas del bus se
encuentran normalmente conectadas vía resistencias ascendentes 4.7K pullup a, logicamente, "High" ("Alto")
(+5V por 5V ICs). Esto da una conexión eléctrica "or" ("o") entre todos los dispositivos. Un dispositivo
simplemente extrae una línea a GND cuando quiere transmitir un 0 o lo deja en "Alto" cuando envía un 1.

El maestro comienza una comunicación enviando un patrón llamado "start condition" ("condición de inicio")
y luego se dirige al dispositivo con el que quiere hablar. Cada dispositivo del bus tiene una dirección 7 bit
única. Luego de esto, el maestro envía un bit que indica si quiere leer o escribir datos. El esclavo ahora
reconocerá que ha comprendido al maestro enviando un bit de reconocimiento. En otras palabras, ahora
hemos visto 9 bits de datos en el bus (7 bits dirigidos + bit de lectura + bit de reconocimiento):

| start | 7−bit slave adr | read_data bit | wait for ack | ... data comes here

¿Qué Sigue Ahora?

Ahora podemos recibir o transmitir datos. Los datos son siempre un múltiplo de 8 bits (1 byte) y deben ser
reconocidos por un bit de reconocimiento. En otras palabras, siempre veremos paquetes de 9−bit en el bus.
Cuando la comunicación ha finalizado, el maestro debe transmitir una "stop condition" ("condición de
finalización"). En otras palabras, el maestro debe saber cúantos datos vendrán cuando lea datos de un esclavo.
No obstante, esto no es un problema dado que puedes transmitir esta información dentro del protocolo del
usuario. Usaremos, por ejemplo, el byte cero al final de una cadena para indicar que no hay más datos.

Los datos en el cable SDA son válidos mientras que el SCL es 1. Resulta así:

SDA H −\ /−−−\ /−−−\ /−−−\
L \−−−−−/ \−−−/ \−−−−−−−−/ \−−−−−−....

SCL H −−−−\ /−\ /−\ /−\ /−\ /−\
L \−−−/ \−−−−−/ \−−−/ \−−/ \−−/ \−....

| START | 1 | 1 | 0 | 1 | 0 |

Una de las mayores ventajas de este protocolo es que no necesitas una señal de reloj precisa y síncrona. El
protocolo aún funciona cuando hay un pequeño soplido de un magnetrón en la señal del reloj.

Exactamente esta propiedad es la que hace posible implementar el protocolo I2C en una aplicación de espacio
de un usuario sin necesidad de un controlador del núcleo o hardware especial (como un UART). Fantástico,
¿no?

El Plano

Como se comentó anteriormente, no podemos utilizar el bus I2C interno del ordenador pero podemos usar
cualquier interfaz externa donde podamos enviar y recibir datos bits individuales. Simplemente utilizaremos la
interfaz de hardware RS232 de nuestro ordenador. En otras palabras, nuestra interfaz de comunicación sigue
siendo la misma de artículos anteriores pero ahorramos el hardware MAX232, condensadores, etc...

La parte difícil es, por supuesto, implementar el protocolo I2C del scratch. Me llevó 5 semanas aprenderlo y

3/9

depurarlo pero ahora ya está hecho y tú simplemente puedes copiarlo :−). Espero que recuerdes el valor de
este código cuando lo uses.

Como ejemplo de aplicación vamos a construir un termómetro. Puedes, por supuesto, medir algo más o
simplemente prender y apagar luces. Depende de tí.

En un segundo artículo, vamos a agregar una pantalla local LCD. En otras palabras, tendrás un termómetro en
donde podrás leer la temperatura directamente de la pantalla y/o leerla con tu ordenador Linux. La pantalla la
veremos en un segundo artículo a fin de no sobrecargar éste.

NTCs son pequeños,
económicos y lo
suficientemente
apropiados

El Sensor de la Temperatura

Ya es posible conseguir sensores calibrados de temperatura (algunos ya se comunican con I2C ;−) pero son
bastante caros. Los NTCs son más baratos y casi tan buenos aún sin calibración individual. Si los calibras un
poco, entonces es posible alcanzar la precisión detrás del punto decimal.

Un problema con los NTCs es que son no lineales. Sin embargo, esto es solamente un tema de física
semiconductora encontrar la fórmula correcta para corregir la curva no lineal. El microcontrolador es una
pequeña computadora por lo cual las operaciones matemáticas no son un problema. Los NTCs son resistencias
que dependen de la temperatura. El valor R del NTC a una temperatura dada es:

4/9

T o Tc es el valor de temperatura que estamos buscando. Rn es el valor de resistencia del NTC a 25'C. Puedes
comprar NTCs 4k7, 10K, ... entonces Rn tendrá este valor.

El Circuito

Diagrama del circuito. Haz click en el diagrama para obtener una vista detallada.
Ahora tenemos todo lo que necesitamos para construir un termómetro digital. Agregamos dos sensores NTC,
uno para la temperatura interior y otro para la exterior. Si quieres, puedes agregar más (conn3, pin PC2 por
ejemplo, es gratuito). En el diagrama de circuito yo ya agrego los cables necesarios para la conexión de una
pantalla LCD porque no quiero que construyas un circuito nuevo completo para el próximo artículo.

5/9

También hay conectado un LED (diodo emisor de luz). No cuesta mucho es realmente útil para una
depuración básica. Yo lo usé, por ejemplo, para depurar la máquina de estado I2C cuando desarrollé la
comunicación I2C entre el ordenador y el microcontrolador. Durante la operación normal, simplemente
podemos dejarlo parpadeando para indicar que las mediciones son tomadas.

De otro modo el circuito es directo. El análogo al adaptador digital en el microcontrolador se utiliza para
medir el voltage en el NTC el que entonces será convertido en un valor de temperatura.

El Atmega8 tiene dos opciones en lo que se utiliza como referencia de voltage para el análogo al adaptador
digital. Puede utilizar tanto el 5V (AVcc) como una referencia interna 2.56V. Para las temperaturas internas
no necesitaremos un rango de temperatura que sea tan grande como para el sensor externo. +10'C a +40'C
normalmente debería ser suficiente. Por lo tanto podemos usar la referencia 2.56V cuando midamos el sensor
interno. Esto proporciona una alta precisión ya que los 1024 valores digitales posibles sólo se expanden sobre
0−2.56V con lo que obtenemos una resolución de 2.5mV (¡más precisa que en la mayoría de los voltímetros
digitales!).

El CD−pin en RS232 es una línea de entrada y se encuentra conectada a SDA en el bus I2C. Lo utilizamos
para leer datos del microcontrolador. DTR y RTS son líneas de salida. Cuando el ordenador coloca datos
  • Links de descarga
http://lwp-l.com/pdf5463

Comentarios de: Un Termómetro Digital o Comunicarte en I2C Con Tu Microcontrolador Atmel (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad