Bienvenido a los foros de FT81x Manía. Te invitamos a regístrate totalmente gratis. Disfruta de tu experiencia con un grandes amigos y Staff.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Thread Contributor: lightcalamarComo usar BUS I2C2

#1
0
Estoy usando mi placa STM32F407VET6 y necesito conectar un modulo con bus I2C, pero lo deseo poner en I2C2 por el problema de tolerancias.

En el I2C1 la lógica es a 3,3 voltios, como por ejemplo, modulo radio, memoria 24C32 etc y en el I2C2 quiero poner un LCD alfanumerico tipo 20x4 estoy usando la librería que modifique para STM32 concretamente esta; https://github.com/lightcalamar/LiquidCrystal_I2C_STM32

Pues no me funciona en el bus I2C2 siendo :
  • SDA = PB11
  • SCL = PB10
Alguna idea?, es un problema de la librería?
Repository initial for library GD23STM32 and more ...
Reply
#2
0
Es cuestión del core generico, en específico de la librería Wire. En el archivo Wire.ccp. Al final está definido sólo el acceso al bus 1 (i2C1)


#if defined(SDA) || defined(SCL)
    TwoWire Wire = TwoWire(I2C1, SDA, SCL);
#else
    TwoWire Wire = TwoWire(I2C1);
#endif


Me temo que hay que manipular la librería Wire para poder usar buses adicionales.

¿Y si empleas un conversor 3.3V/5V bidireccional? acá hacen referencia a este tipo de dispositivos

He usado el CD4050BE para conectar arduinos de 5V con dispositivos de 3.3V, pero creo que no es bidireccional.
Reply
#3
0
Estuve mirando el datasheet general del chip, señala que el bus i2C1 tiene tolerancia para 5V, p58/202

Sin embargo el datasheeet específico de la placa nos podría aclarar esto, ya que hay una nota aclaratoria:


FT = 5 V tolerant except when in analog mode or oscillator mode (for PC14, PC15, PH0 and PH1).
Reply
#4
0
Encontrando documentación localice esto;

Ejemplo como usar I2C2 STM32GENERIC


Donde revisando la librería Wire.cpp me encontré con las lineas donde el autor dice como poner una instancia;

#include "Wire.h"

void setup() {
   Wire.stm32SetInstance(I2C2);
   Wire.stm32SetSDA(sda);
   Wire.stm32SetSCL(scl);
   ...
   library.begin();
}

La instanacia stm32SetInstance viene de esta forma;

This method must be called before begin()!
stm32SetInstance(I2C_TypeDef *instance);

Set the alternative I2C instance (I2C1/I2C2/...) used by this object.

This method must be called before begin()!

Y este sería el ejemplo y probar;

#include <Wire.h>
#include <LiquidCrystal_I2C_STM32.h>

LiquidCrystal_I2C_STM32 lcd(0x3F, 20, 4);

# define sda_2 PB11   // I2C2 SDA
# define scl_2 PB10   // I2C2 SCL

void setup() {
 Wire.stm32SetInstance(I2C2);
 Wire.stm32SetSDA(sda_2);
 Wire.stm32SetSCL(scl_2);
    lcd.begin();

    lcd.backlight();
    lcd.print("Hello, world!");
}

void loop() {  }


Entonces tocará probar a versi funciona el LCD en el BUS I2C2.
Repository initial for library GD23STM32 and more ...
Reply
#5
0
Parece que no hay mucho por donde movernos con la actual librería Wire adaptada en el core de danieleff. El mismo ha dicho que solo ha hecho pruebas con i2C1, no ha probado 2 instancias a un tiempo. Debemos modificar la propia librería para que acepte el uso de i2C2, aparentemente la estructura de Wire.ccp contempla hasta i2C3 pero solo puede usar i2C1.

Estuve tratando de usar la secuencia que refieres con el escanner i2C, pero la pantalla se queda en negro, no responde.

Espero que estés usando el adaptador para LCD´s i2C, permite controlarlo con 4 hilos. Está por llegar adaptador de esos, creo que podría hacer algunas pruebas.

Logré conectar con éxito una tira de leds APA102C que funciona con lógica de 5V a la STM32F429ZI usando un 74AHCT125, la placa como sabes es de 3.3V (2.95V realmente, ya que su chip de regulación es poco eficiente).

Ese conversor tiene 4 canales de comunicación, dos están en uso con los leds APA102, puedo hacer pruebas con los dos restantes para conectar SDA y SCL del LCD al bus i2C1 de la F429I.

Dame un par de días para hacer la prueba.

Fé de erratas:

El CD4050BE sirve para lógica con dirección 5V a 3.3V

El 74AHCT125 sirve para lógica con dirección 3.3V a 5V
Reply
#6
1
Better response on post RE: Como usar BUS I2C2La opción de modificar la librería Wire no me funcionó.

Sin embargo el LCD 20x4 funciona sin adaptador de lógica de 5v a 3v3. Lo puse directamente a mi riesgo y funciona en el mismo bus I2C1 todos los modulos conectados, tales como el DS3231, 24C32 (EEPROM), Radio RDA5807M, BMP180
Repository initial for library GD23STM32 and more ...
Reply
#7
0
Genial, entonces queda confirmado que el bus "i2C1 es 5V tolerante", como lo señala el datasheet. Podemos conectar dispositivos de 5V en pines de 3.3V con esa característica. Me agrada que siga avanzando ese proyecto tuyo que se ha frenado por tantas circunstancias.

Para redondear la respuesta y dejarla como futura referencia: ¿la alimentación del LCD la tienes a 5V?

Al pendiente de las novedades. No me animo a aventurarme con los leds APA102 como lo has conseguido con el LCD, ya que el amperaje de trabajo de estos leds es abrumante, el regulador de 3.3V de la F429 va muy justo.

PD: ¿por cierto has probado el funcionamiento de esos paneles VFD recuperados?
Reply
#8
0
(16-11-2017, 14:27 40)TFTLCDCyg Wrote: Para redondear la respuesta y dejarla como futura referencia: ¿la alimentación del LCD la tienes a 5V?

PD: ¿por cierto has probado el funcionamiento de esos paneles VFD recuperados?

Efectivamente, el LCD como este;

?mage

alimentado a 5 Voltios y todos los demas modulos estan alimentados a 3v3 y compartiendo el bus I2C1 de la placa.
Puedes probarlo al menos en STM32F407xxx no hay problema.

Los VFD´s tambien funcionan. Pero no van al bus I2C, funcionan con pines autonomos, no usa el bus. La librería la modifiqué y está en este enlace de mi repositorio; https://github.com/lightcalamar/STM32_VFD_SAMSUNG
Repository initial for library GD23STM32 and more ...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)