Pages: [1]   Go Down
Author Topic: consumo pantalla LCD con y sin tensión  (Read 1758 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenos días a todos.
estoy haciendo un proyecto que consiste en utilizar el arduino como un dataloger, leyendo las entradas analógicas y grabando los resultados cada X segundos en una memoria SD.
Para hacer autónomo el equipo estoy usando una batería.
He puesto todo en una caja y en el frontal he colocado una pantalla LCD2x16 para visualizar el estatus del equipo.
Para aumentar la autonomía del equipo sin estar conectado a la red, he puesto un interruptor para cortar la alimentación de la pantalla LCD.
Para mi sorpresa, cuanto le quito tensión a la pantalla LCD, esta se queda medio iluminada. Pasé de un interruptor unipolar a uno bipolar (corto el positivo y el negativo) y la pantalla ya no se ilumina.
Pero se me ocurrió medir el consumo de todo y cual fue mi sorpresa que consume más la pantalla estando apagada que estando encendida. Encendida consumo unos 30mA y apagada unos 60mA.
Los pines que quedan son los 6 necesarios para comunicar entre el arduino y la pantalla.
¿alquien sabe que pasa?
He hecho pruebas cortando solo el positivo o solo en negativo, pero los consumos siguien altos. No quiero tener que desconectar todos los cables cada vez que quiera apagar la pantalla.
También podría utilizar un pin 0/1 extra para activar las instrucciones de visualización, pero ando muy justo de entradas digitales en mi proyecto.
¿alquien sabe si hay que desconectar algún otro pin de la pantalla LCD además de la alimentación para que deje de consumir?
Agradezco vuestra ayuda
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prueba a usar el lcd conectandola mediante I2C, usando una salida y un mosfet pueder cortar la tension de alimentacion del lcd o directamente como lo estas haciendo con un interruptor.

El codigo de ejemplo
Code:
/*
LCD  PCF8574
---------------
4    10
6     9
11    4
12    5
13    6
14    7

LCD PINES
=====================
1 GND
2 VCC
3 CONTRASTE
5  RW(GND)
15  +LED
16  -LED
*/
// include the library code:
#include <Wire.h>
#include <PCFCrystal.h>

byte buffer = 0;
// initialize the library with the numbers of the interface pins
// rs, en, d0, d1, d2, d3, address, buffer
// 4 bits
PCFCrystal lcd(B00100000, B00010000, B00000001, B00000010, B00000100, B00001000, 0x20, &buffer);
// 8 bits
//PCFCrystal lcd(B00100000, B00010000, B10000000, B01000000, B00100000, B00010000, B00000001, B00000010, B00000100, B00001000, 0x21, 0x20, &data, &buffer);

void setup() {
  Wire.begin();
  lcd.begin(16, 2);
  }
long counter = 0;

void loop() {

  counter++;

  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 0);
  // print the number of seconds since reset:
  lcd.print("Contador");
  lcd.print(counter);
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print("Contador");
  lcd.print(counter+1);
delay(1000);

}

Esquema


Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

me parece una buena idea para liberar salidas del arduino. No conocía ese integrado. De todos modos para este proyecto no quiero meter ninguna placa más.
sigo intrigado con lo del consumo de la pantalla LCD. Siempre pensé qeu el consumo principal era la iluminación.
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Al cortar los 5V del lcd y del PCF8574 el consumo tiene que pasar a ser cero.
Seguramente tengas consumo porque internamente el lcd se alimente a traves de los pines de datos.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

al final me decidí y monté el integrado PCF8574AP.
después de horas perdidas que no funcionaba, comprobar cables, cargar varios programas, librerías varias,... (ya estaba por tirarlo todo), no se como veo en una página de internet que no es lo mismo el PCF8574 y el PCF8574A. Resulta que no se direccionan igual.
Veo el datasheet y siguiéndolo cambio la dirección 0x20 por 0x70 y tampoco iba. Vuelvo a buscar por internet y resulta que la dirección correcta es la 0x38 (el el datasheet está mal el corchete de la dirección).
Ahora va y bien. tengo pendiente comprobar el consumo. smiley-grin
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 112
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Misión cumplida:
-consumo de Arduino+tarjeta SD+DS1307+sonda Luxes+LCD con PCF8574AP = 75/80mA
-Consumo con la pantalla apagada: 30/35mA

Autonomía de registrado con una pila 7,2V 5400mAh con consumo de 35mA  ;= 154hora (6,4 días), que no está nada mal. ;D
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no sabes que direccion tiene un esclavo I2C, usa este codigo y te aparecera.
Code:
/**
 * I2CScanner.pde -- I2C bus scanner for Arduino
 *
 * 2009, Tod E. Kurt, http://todbot.com/blog/
 *
 */

#include "Wire.h"
extern "C" {
#include "utility/twi.h"  // from Wire library, so we can do bus scanning
}

// Scan the I2C bus between addresses from_addr and to_addr.
// On each address, call the callback function with the address and result.
// If result==0, address was found, otherwise, address wasn't found
// (can use result to potentially get other status on the I2C bus, see twi.c)
// Assumes Wire.begin() has already been called
void scanI2CBus(byte from_addr, byte to_addr,
                void(*callback)(byte address, byte result) )
{
  byte rc;
  byte data = 0; // not used, just an address to feed to twi_writeTo()
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1);
    callback( addr, rc );
  }
}

// Called when address is found in scanI2CBus()
// Feel free to change this as needed
// (like adding I2C comm code to figure out what kind of I2C device is there)
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " found!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}


byte start_address = 1;
byte end_address = 100;

// standard Arduino setup()
void setup()
{
    Wire.begin();

    Serial.begin(19200);
    Serial.println("\nI2CScanner ready!");

    Serial.print("starting scanning of I2C bus from ");
    Serial.print(start_address,DEC);
    Serial.print(" to ");
    Serial.print(end_address,DEC);
    Serial.println("...");

    // start the scan, will call "scanFunc()" on result from each address
    scanI2CBus( start_address, end_address, scanFunc );

    Serial.println("\ndone");
}

// standard Arduino loop()
void loop()
{
    // Nothing to do here, so we'll just blink the built-in LED
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
}
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@pacojarcia: el datasheet del PCF8574AP está perfecto, además que la dirección es programable, por lo que no es un número fijo.
0x38 es una de las posibles direcciones a elegir.

Un saludo
« Last Edit: December 25, 2010, 11:00:00 am by chiva » Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Pages: [1]   Go Up
Jump to: