Acuariofilia Madrid

Versión completa: Aula Arduino para principiantes.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
(29-06-2014, 10:07 PM)Antonio Castro escribió: [ -> ]Lo explico aquí

También aquí

Y aquí doy más detalles.
Pero antonio si yo todo eso lo he leido , la direccion del lcd es 0x27 y la del RTC 0x27, por eso te digo que si es necesario cambiar la direccion del RTC , el LCD funciona solo ya te lo mostre y el RTC Tambien funciona , pero juntos parece que no, y tu me dices que haga pruebas , pero yo no se como hacerlas , ademas cuando pongo el LCD solo , no me encuentra ninguna direccion.
Ahora me das algo más de información, pero no toda, como siempre.
Ya te comenté una posible causa que lo explica. Te estoy diciendo que pruebes directamente sin resistencias pull-up y también con resistencias de 10k pull-up. Mientras no me digas que has hecho ambas pruebas voy a suponer que no las has hecho.

Hay que asegurarse del funcionamiento del LCD con I2C y el tema de las resistencias no es algo trivial porque el valor ideal de estas no está claro, depende de muchas cosas.
http://www.glacialwanderer.com/_blog/blo...ircuit.jpg
Si a lo que te refieres es a esto, ya lo he comprobado con 2'2k ,10k y sin resistencias, y solo funcionaba sin resistencas, ¿te acuerdas?.
Si no es esto, perdoname, pero ya no doy para mas.
(29-06-2014, 11:08 PM)juanma1970 escribió: [ -> ]
(29-06-2014, 10:07 PM)Antonio Castro escribió: [ -> ]Lo explico aquí

También aquí

Y aquí doy más detalles.
Pero antonio si yo todo eso lo he leido , la direccion del lcd es 0x27 y la del RTC 0x27, por eso te digo que si es necesario cambiar la direccion del RTC , el LCD funciona solo ya te lo mostre y el RTC Tambien funciona , pero juntos parece que no, y tu me dices que haga pruebas , pero yo no se como hacerlas , ademas cuando pongo el LCD solo , no me encuentra ninguna direccion.

Esa fue una pregunta que yo hice hace mucho tiempo ... si el Bus I"C se comparte .... como sabia cada dispositivo cuales eran sus ordenes ?

Al final supuse que el trabajo lo haria cada libreria. La libreria del LCD se encargaría de asignar una dirección al LCD y lo mismo al RTC ... pero cada uno tienen ordenes diferentes ...
Asi que aunque compartiesen la misma dirección ... no entenderian las ordenes del otro si les llega, no??
(30-06-2014, 12:06 PM)Namiga escribió: [ -> ]
(29-06-2014, 11:08 PM)juanma1970 escribió: [ -> ]
(29-06-2014, 10:07 PM)Antonio Castro escribió: [ -> ]Lo explico aquí

También aquí

Y aquí doy más detalles.
Pero antonio si yo todo eso lo he leido , la direccion del lcd es 0x27 y la del RTC 0x27, por eso te digo que si es necesario cambiar la direccion del RTC , el LCD funciona solo ya te lo mostre y el RTC Tambien funciona , pero juntos parece que no, y tu me dices que haga pruebas , pero yo no se como hacerlas , ademas cuando pongo el LCD solo , no me encuentra ninguna direccion.

Esa fue una pregunta que yo hice hace mucho tiempo ... si el Bus I"C se comparte .... como sabia cada dispositivo cuales eran sus ordenes ?

Al final supuse que el trabajo lo haria cada libreria. La libreria del LCD se encargaría de asignar una dirección al LCD y lo mismo al RTC ... pero cada uno tienen ordenes diferentes ...
Asi que aunque compartiesen la misma dirección ... no entenderian las ordenes del otro si les llega, no??

Algunas librerías usan la I2C que habitualmente se asume para ese dispositivo, pero en otros dispositivos se pueden usar diferentes direcciones I2C y la librería para inicializar el dispositivo te exige que le proporciones la dirección I2C que debes conocer.

Para el LCD en mi programa yo hago lo siguiente:

Código:
#define LcdAddress          0x27    // Direccion I2C para el LCD
LiquidCrystal_I2C            lcd_i2c(LcdAddress, 20, 4);

Yo uso una versión modificada por mí de la RTClib de JeeLabs http://news.jeelabs.org/code/
y en ella se asume #define DS1307_ADDRESS 0x68

Es decir, que no te da opción a usar ninguna otra dirección porque no es lo habitual.

La dirección que usa ahora el RTC de Juanma parece que es la 0x27 y no le puede funcionar con esa librería. Bastaría con poner la dirección correcta en ese define de la librería pero esa ya estaría pillada por el LCD. Es lo que intentamos confirmar escaneando cada dispositivo por separado.

Tambien está el problema de las resistencias pull-up que sospecho están incluida en el modulo RTC y no en el LCD. Hasta no tener clara la situación no tiene sentido trabajar con esos dispositivos.
Entoces explicame como si tuviera 8 años que es lo que debo hacer antonio.
Algun codigo diferente o algun circuito especipificado.
(30-06-2014, 03:44 PM)juanma1970 escribió: [ -> ]Entoces explicame como si tuviera 8 años que es lo que debo hacer antonio.
Algun codigo diferente o algun circuito especipificado.

Eso es exactamente lo que vengo haciendo y no exagero. Ya no me vale que digas que no sabes hacerlo. Tendrás que explicarme tus dudas concretas porque ya no se que más explicarte. Me estoy repitiendo demasiado.

Rara vez haces lo que se te dice y yo no sé explicarme mejor, y ahora me pides que te trate como a un niño de 8 años. ¿Eso a mí en que me deja? ¿Soy tu niñera?

Se me está pasando por la cabeza una duda. Juanma, ¿que edad tienes?
(30-06-2014, 09:33 PM)Antonio Castro escribió: [ -> ]
(30-06-2014, 03:44 PM)juanma1970 escribió: [ -> ]Entoces explicame como si tuviera 8 años que es lo que debo hacer antonio.
Algun codigo diferente o algun circuito especipificado.

Eso es exactamente lo que vengo haciendo y no exagero. Ya no me vale que digas que no sabes hacerlo. Tendrás que explicarme tus dudas concretas porque ya no se que más explicarte. Me estoy repitiendo demasiado.

Rara vez haces lo que se te dice y yo no sé explicarme mejor, y ahora me pides que te trate como a un niño de 8 años. ¿Eso a mí en que me deja? ¿Soy tu niñera?

Se me está pasando por la cabeza una duda. Juanma, ¿que edad tienes?
Oye antonio , no quiero que te mosquees , solo te digo que si me lo has explicado no te entiendo lo que debo hacer , pongo el RTC con el LCD y me sale ese error en el display, me dices que busque por separado la direccion de cada uno, el RTC sale 0x27, si los pongo juntos me sale solo uno reconocido, el RTC, pongo el LCD y no me lo detecta , o no se como ponerlo para que me lo detecte,le pongo las resistecias de 2'2k y no funciona, le pongo las de 1ok y no funciona, se las quito y funciona todo menos la informacion de la fecha y hora ( 2165\165\165 165:165 ) los pruebo el lcd y el rtc por separado y funcionan,dame un codigo y un circuito que tu creas que funcionara, por que aparte de todo lo que hacemos aqui, yo me busco tambien la vida por otras paginas de internet a ver si alguien sabe algo del tema, y lo unico que encuentro es que soldando las seis patillas que estan al lado del regulador de contraste del rtc por parejas en vertical cambiamos la direccion del rtc y nos quedaria en 0x20, perdona pero vuelvo a decirte que si me lo has explicado no se ejecutarlo, para ti alomejor es facil, pero yo a veces no entiendo lo que me estas explicando, agradezco mucho tu gran ayuda, hasta ahora he seguido todos los pasos que me has dado y he comprado todo lo que me has dicho, incluso antes de comprarlo te he enviado el link para que me dieses el visto bueno, no me gusta ser pesado pero ya te dije desde el principio que soy novato en todo esto, perdona de nuevo.
Y lo de que me lo explicaras como si tuviera 8 años era una forma de hablar, no creo que sea para que te lo tomaras asi.
Cuando yo te pida que hagas un par de cositas no hace falta que me expliques el montón de cosas que has hecho, porque yo intento guiarte paso a paso y si tu no haces lo que te pido o haces otras cosas, no puedo seguir. Tamoco me estás dando la información correctamente. Me cuentas cualquier cosa menos lo que te pido. Un ejemplo: Cuando te dije que probaras el funcionamiento de los pulsadores no lo hiciste. Seguiste haciendo miles de pruebas inútiles y me hiciste perder tiempo porque eran los pulsadores lo que te estaba fallando en ese circuito tan sencillo. Te diste cuenta de ello un montón de mensajes después porque por fin me hiciste caso después de pedírtelo por enésima vez. Me pides que te explique las cosas como a un niño de 8 años pero un niño de ocho años coge un tester y saber probar un pulsador. No es cuestión de conocimiento. O me haces caso o voy a tener que dedicarme a cosas más productivas.

De toda la parrafada de incongruencias que pones me llama la atención lo siguiente.

"Los pruebo el lcd y el rtc por separado y funcionan"

No es verdad. El RTC no te funciona. Sale basura porque no funciona y sabemos por que. La librería no está preparada para esa dirección. Tus conclusiones son todas de ese tipo.

Otra frase genial.

"soldando las seis patillas que estan al lado del regulador de contraste del rtc por parejas en vertical cambiamos la direccion del rtc y nos quedaria en 0x20"

El RTC no tiene regulador de contraste eso es el LCD. Ni pones atención al hacer las cosas ni la pones al dar información.

Por enésima vez. Prueba con el escanner el LCD con I2C. Pruébalo solo y si no lo detecta prueba con resistencias pull-up de 2k2 o de 10k. Solo después de hacer eso y de decirme exáctamene lo que ocurre, sabré exactamente cual es el siguiente paso a comprobar. Tienes que decir si lo detecta o sino lo detecta con cada prueba qu hagas. Un resultado negativo también es un resultado. Haz lo que te pido y me lo cuentas todo
Chicos .... por favor ....

Antonio ... Nos estas ayudando a todos a base de bien -good.gif . No vayas a enfadarte ahora -fisch.gif
Juanma ... Comparto la impresión que tiene Antonio en que a veces no has hecho caso de lo que te ha dicho ... pero ... que bo llegue la sangre al río , por favor ...

Entre todos seremos más fuertes, más listos y mejores !!!! (que bien ha quedado -rofl.gif-rofl.gif-rofl.gif-rofl.gif )

Ahora ya en serio

Yo aun no he podido tener tiempo para ponerme en serio con RTC y LCD a la vez ...
Pero si recuerdo que tuve problemas con el reloj.

Lo probe todo ... y no habia forma de hacerlo funcionar .... PEEERO .... Llegó antonio y me paso un codigo que funciono.

inicializa el RTC

Es el primer codigo que pone. Probe varios codigos para ello, pero fue el unico que me funcionó -good.gif

Venga chicos ... sigamos con el tema -notworthy.gif
No estoy enfadado, pero he aumentado el tamaño de la letra en aquello que yo necesito para poder continuar ayudándo.

No debe interpretarse como gritar. Ocurre que lo he pedido ya de todas las formas imaginables.

Probaré ahora en negrita extra pequeña y color azul.

Por enésima vez. Prueba con el escanner el LCD con I2C. Pruébalo solo y si no lo detecta prueba con resistencias pull-up de 2k2 o de 10k. Solo después de hacer eso y de decirme exáctamene lo que ocurre, sabré exactamente cual es el siguiente paso a comprobar. Tienes que decir si lo detecta o si no lo detecta con cada prueba que hagas. Un resultado negativo también es un resultado. Haz lo que te pido y me lo cuentas todo

Esto lo pido porque hay pequeñas diferencias de uso entre distintos dispositivos que pueden complicarlo todo y necesito saber que tenemos.

El principio general es el uso de un bus paralelo tal como se ve en la siguiente imagen.

[Imagen: i2c_bus.png]

Las particularidades están a la hora de cargar el bus con un pull-up.

En la imagen siguiente se indi¡ca que las resistencias pull-up pueden ser 1k8, 4k7, o 10k y en algún caso habrá que dejar sin resistencia porque el dispositivo ya lo traerá incluido.

[Imagen: i2c_lcd_bb.png]

Cuando se ponen dos dispositivos en I2C, estos se ponen en paralelo y si quitas uno de ellos el otro quedará funcionando. Por ejemplo en la imagen siguiente.

[Imagen: DS1307_Arduino.jpg]

Ya puse una imagen anterior que ilustraba esto mismo. Era un dibujo cutre, pero no estoy diciendo nada que no explicara antes y si no se me proporciona una duda concreta, no puedo resolverla. Si ya se ha hecho una prueba con ambos dispositivos conectados y ha funcionado el LCD, no hay razón para que no funcione solo.

Necesito saber que dirección detecta el escanner.
Bueno ... aporto mi granito de arena ... para que veas Juanma que no es tan complicado Smile

He conectado el LCD al RTC , y este al arduino .

[Imagen: 20140702_072736_zps40b048bf.jpg]

Como ves , cables directos. No hay resistencias ni nada.

Cargo el programa que te comento Antonio y a esperar Smile

Abro el monitor serie ... y me detecta 3 dispostivos I2c ... en la 27, en la 50 y en la 68
La 27 es el LCD ... asi que me quedan dos que deben ser el reloj, pero es que hay dos relojes ????
O es que hay otro dispositivo en el bus I2C en la placa Arduino Mega??

O es que la placa del reloj puede tener dos relojes y por ello encuentra dos dispositivos ??

Un saludo
Gracias Namiga, por la foto. Te explico todo lo que yo veo.

Juanma comentaba que no sabía como escanear solo el LCD. En esta foto conectais el LCD a través de la plaquita del RTC. Eso no es lo habitual y tenéis que ver esa conexión como algo totalmente superfluo. El LCD no necesita del RTC para alcanzar el Aurduino que es donde realmente tiene que estar conectado. Si os funciona de esa forma y os gusta más como queda el cableado final no hay problema pero tenéis que tener claro que el bus I2C es un bus paralelo.

Las imágenes que yo aporté antes son muy claras.

El LCD suele usar 0x27 o 0x20. Dado que no aparece 0x20 probablemente 0x27 es el LCD.
El RTC suele usar 0x68 Dado que aparece está claro que es esa.
La dirección 0x50 probablemente es para programar la EEPROM.

Por lo que he podido averiguar, este modulo lleva un reloj DS1307, una memoria EEPROM de 32Kb 24C32AN y un soporte para pila de litio CR2032.

Según lo que yo creo Juanma debe de estar sacando conclusiones equivocadas por el hecho de escanear con ambos dispositivos juntos. Yo ahora dudo mucho que exista conflicto de direcciones I2C.

El RTC (0x68), el LCD(0x27), y la EEPROM(0x50).
Cada uno tiene cada una la suya.

He localizado un programa que prueba el funcionamiento del RTC directamente sin usar ninguna libreria salvo la librería Wire que es para todo lo que usas I2C.

Basta leer las dos primeras líneas para darse cuenta del que Tiny RTC I2C, al igual que la inmensa mayoría del los RTC, usa la direccion 0x68.

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // the I2C address of Tiny RTC

Programa para Tiny RTC I2C

En otras palabras Namiga. Tu LCD y el de Juanma usan la misma dirección I2C y ambos usáis el Tiny RTC I2C. La diferencia entre vosotros es la placa Arduino que usais.

El Arduino Mega que tu usas trae preparados para I2C otros pines que vienen conectados internamente con pull-up de 10k. Es una diferencia importante con Arduino UNO. Por eso le pido ahora a Juanma que pruebe con pull-up de 10k.

Yo no pido pruebas a lo loco y si Juanma no hace lo que le pido, me hace perder mucho tiempo. Supongo que tiene dudas, pero no me ha sabido transmitir dudas concretas y no puedo saber que hace mal, porque no me da toda la información relativa a lo que hace. El diablo está en los detallitos.
Gracias a ti Antonio -good.gif
Lo del conexionado ... lo hice asi por que los puntos de soldadura en el RTC estan en paralelo, asi que me pareció más "elegante" hacerlo asi -nosweat.gif

Gracias por confirmarme lo de la dirección 50 de la eprom. Ya creia que tenia un dispositivo fantasma ...

La foto la puse para que Junama viese que lo conectaba directamenete, sin resistencias ... pero no tuve en cuenta el modelo de Arduino que tenia él. El va a necesitar esas resistencias entonces.

Muchas gracias -good.gif