Mostrando entradas con la etiqueta lcd3310. Mostrar todas las entradas
Mostrando entradas con la etiqueta lcd3310. Mostrar todas las entradas

domingo, 21 de febrero de 2016

Arduino power low. Termómetro máximos y mínimos con gráfica DS18B20 LCD Nokia PCD8544.

Página principal


Arduino
Termómetro máximos y mínimos con gráfica
DS18B20
LCD Nokia PCD8544
Atmega328 power low

Estaba realizando otro montaje para predecir el tiempo atmosférico y me salio este montaje, un termómetro con máximos y mínimos con gráficos. Debía crear una gráfica en un LCD PCD8544 para determinar la probabilidad de lluvia, y como sabeis me gusta realizar mis propias rutinas, y evitar cálculo con comas flotantes, además de intentar reducir lo máximo el tamaño del programa. Lo de reducir el tamaño del programa viene de lejos, cuando programaba micros y había que exprimir la poca memoria que había. La tendencia de la programación  de este tiempo, es utilizar librerías donde no se entiende lo que hacen, pero por lo contraría reducen el tiempo de desarrollo del proyecto aumentando considerablemente el tamaño del programa.
También he querido reducir lo máximo el consumo del circuito, para poder alimentarlo mediante pilas o baterías. Para esto he revisado dos de mis anteriores montajes , http://seta43.duckdns.org/ardurab.html  y  http://seta43.duckdns.org/arduraa.html  ,donde explico formas para poner en bajo consumo al arduino.
Como en muchos de mis montajes he querido poner todo el conjunto del programa en un único fichero, de esta forma no se necesita ninguna librería aparte.

El programa funciona de la siguiente manera:
  • Al iniciar el programa se realiza una toma de temperatura, colocando la temperatura máxima y mínima a dicho valor.
  • Se ponen a cero todos los valores de la gráfica.

En el bucle principal:
  • Se toma una temperatura, se muestra en el LCD.
  • Se compara con las temperaturas de máximos y mínimos par cambiar si es el caso.
  • Se calcula la diferencia  con el anterior valor de temperatura para añadirse a los valores de la gráfica.
  • El arduino se pone en modo de dormir hasta el próximo despertar, que está puesto a 1S.


Esquema del circuito.


Montaje de circuito. Fig. 1


Montaje de circuito. Fig. 2

void watchdogOn()

MCUSR = MCUSR & B11110111;
WDTCSR = WDTCSR | B00011000;
//WDTCSR = B00000101; //0.5S
WDTCSR = B00000110; //1S
//WDTCSR = B00100001; //8S

// Activa the watchdog timer interupt.
WDTCSR = WDTCSR | B01000000;
MCUSR = MCUSR & B11110111;
}
Si queremos modificar el tiempo en el cual el arduino se despierta para realizar una toma de temperatura,
modificamos la rutina watchdogOn() , donde existe 3 posibilidades 0,5mS , 1S y 8 Segundos.


Modelo
Voltios
Consumo
Arduino nano
3,31V
4,31mA
Arduino mini
2,4V
1mA
Arduino mini 3,3V
1,67mA(picos 8mA)
Arduino mini 5V
3,3mA(picos de 17mA)
Arduino mini 3V
1,4mA

Podemos observar que el consumo del arduino mini a 2,4V es de 1mA , aunque creo que podría ser menor si se quitan todos lo componentes que tiene el propio arduino.
Aún así alimentado el montaje con dos pilas de 1,5V y 1500mA, y haciendo una media de 1.2 mA, la autonomía es de alrededor de 52 días.

PROGRAMA

Saludos.
Juan Galaz


Bibliografía:
http://seta43.duckdns.org/ardurab.html
http://seta43.duckdns.org/arduraa.html
http://www.gammon.com.au/forum/?id=11497
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
http://blog.dosbotones.com/2011/09/reducir-el-consumo-de-arduino.html
http://www.sparkfun.com/tutorials/309
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
http://www.engblaze.com/hush-little-microprocessor-avr-and-arduino-sleep-mode-basics/
http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
http://jeelabs.org/2009/05/16/power-consumption-more-savings/

jueves, 8 de enero de 2015

Arduino-Radio RDA5807 con RDS-LCD Nokia 3310- Botones


Página principal
Arduino
Radio RDA5807 con RDS
LCD Nokia 3310
Parte 2


Este montaje es una radio hecha con el chip RDA5807 y con  la visualización en un LCD 3310.
Es la continuación de mi anterior montaje radiofm.html , ahora el control se hace mediante botones.
Le añadido un menú con varias opciones:
  • Búsqueda de emisoras.
  • Volumen del audio.
  • Información de la señal.
  • Sintonía.
Para el control mediante botones he utilizado el método de variar el voltaje en el pin A0 mediante resistencias y botones.
Es un método bastante sencillo y práctico, que permite mediante dos hilos, poder tener controlados bastantes botones.


Esquema del circuito.




Montaje de circuito.


Imagen del LCD

Se puede ver diferentes datos en el LCD, como pueden ser:

  • Nivel de señal.
  • Señal stereo o mono.
  • Volumen del audio.
  • Menú actual.
  • Frecuencia.
  • Nombre de la emisora.
  • Información que proporciona la emisora.

Señal de RDS.

Para el tipo de grupo solo he utilizado el  0000=Información básica de sintonía.



Primer menú de información.

Esta información se toma del código PI que transmite la emisora.




Segundo menú de información.



La cuestión de los datos que proporciona la emisora mediante el RDS es un tanto heterogénea.
La mayoría de las emisoras solo transmite en nombre de la emisora y las frecuencias alternativas.
En los datos que proporciona como frecuencias alternativas,  la mayoría carga una serie de frecuencia por defecto, las cuales solo 2 o 3 te sirvan.
El dato de hora y fecha es un tanto irregular, la mayoría no la transmite bien, y para colmo lo hace en modo de hora UTC, y la fecha en modo Juliano.
En la única emisora que pude implementar bien la hora, estaba adelantada en 5 minutos. Y en otras mandaban los datos erróneos.
Para la cuestión de la fecha, debías hacer unas cuantas operaciones en numero flotante, y he creído no necesario hacer complicado el programa.
El que quiera implementar el pasar la fecha de formato Juliano a modo DD/MM/YY  , puede ver el anexo G del  Maintenance of the RDS standard IEC 62106.

No he implementado la detección de errores en la señal RDS, por lo cual pueden aparecer datos erróneos.

El programa hecho en arduino esta lleno de comentarios y debug que me han ayudado para desarrollarlo.
No he querido eliminarlos debido a que sirven de ayuda para posibles cambios.

PROGRAMA


Saludos.
Juan Galaz


Bibliografía:

http://arduino.vom-kuhberg.de/index.php
http://seta43.duckdns.org/ardura.html
RADIO DATA SYSTEM- RDS- Por: Aitzol Zuloaga Izaguirre.
http://www.rds.org.uk/2010/Overview.htm



domingo, 28 de diciembre de 2014

Arduino-Radio RDA5807- RDS-LCD3310

Página principal


Arduino
Radio RDA5807 con RDS
LCD Nokia 3310

Este montaje es una radio hecha con el chip RDA5807 y con  la visualización en un LCD 3310.
La sintonía y el volumen se realizan mediante dos potenciometros, lo he querido así, aunque hubiese sido más fácil mediante tres pulsadores, pero eso es otro tema.
El chip RDA5807 también dispone de RDS, solo he implementado el nombre de la emisora, aunque se puede incluso ver la hora y otras muchas cosas, pero eso es otro tema.
Existen una librerías: Adafruit_GFX y  Adafruit_PCD8544 para manejar el LCD, pero tienen un problema, no funcionan con versión 1.0.5, que es la que tengo instalada, por lo que he utilizado otra forma. En la página oficial de arduino existe un ejemplo, http://playground.arduino.cc/Code/PCD8544 , el cual le he adaptado a mi programa.Como podemos observar en las características del LCD 3310, debe funcionar a 3.3V, y las salidas del arduino funcionan a 5V. He visto varios montajes utilizando resistencias, pero  en uno  decía que el LCD podía funcionar a 5V, pero el Led de iluminación solo se podía poner a 3.3V, y eso es lo que he hecho. A pesar de lo que dice el fabricante funciona a 5V, no se por cuanto tiempo.
El RDA5807 funciona entre 1.8 to 3.3 V , por lo cual la alimentación la tomo de 3.3V del arduino. El RDA5807 viene montado en un modulo RRD-102V2.0 que se puede adquirir por menos de 2€.
Hemos de pensar que el ATMega328 funciona perfectamente a 3V, por lo cual podemos alimentar todo el conjunto con baterías de 3V.


Esquema del circuito.


Montaje del circuito.

La sintonía y el volumen se realizan mediante dos potenciómetros.
Existen dos modos de sintonía que se varía en el programa mediante la línea  #define SINTONIA 1.
El potenciómetro  de sintonía debe ser de calidad en el modo de  SINTONIA 0.
// SINTONIA 0 Debes terner un potenciómetro muy fino para 205 valores. Guarda la frecuencia.
// SINTONIA 1 Ajuste preciso de frecuencia por tramos de potenciómetro. No guarda la frecuencia.

Hubiese sido bastante más barato y fácil hacer todo con 3 pulsadores, pero eso es otra historia.



Visualización del LCD.

En el LCD se pueden ver varios datos:
 Intensidad de la señal.
 Si la emisión es mono o stereo.
 El volumen que tenemos en el potenciómetro.
 Frecuencia de sintonía.
 Nombre de la emisora que se obtiene de la señal RDS.


Señal de RDS.

Para el tipo de grupo solo he utilizado el  0000=Información básica de sintonía.



PROGRAMA

Saludos.
Juan Galaz


Bibliografía:

http://arduino.vom-kuhberg.de/index.php
http://seta43.duckdns.org/ardura.html

RADIO DATA SYSTEM- RDS- Por: Aitzol Zuloaga Izaguirre.