¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
ABIERTO EL PLAZO DE INSCRIPCIÓN: DEL 1 AL 15 DE JUNIO.

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 439314
#721
Buenas noches.

He visto que el nuevo CAO compila con W7. Solo me ha dado tiempo de poner las direcciones de los sensores y poco mas.

Gran trabajo, Antonio. Este fin de semana prometo estudiarme los menús y te digo algo.

Las temperaturas deberían salir por pantalla?.

Saludos
#722
(02-10-2014, 10:50 PM)william escribió: ok yo quiero eso solo dimeo de led con el reloj sin lcd sin ph sin ventilador sin nada porque no tengo eso tengo en mente comprar tres censores de temperatura nada mas pero cuando tenga esto en marcha

Ok, ahora estoy atendiendo varias cosas que tengo en marcha, pero haré una versión aún más simple que el Dimmer1C. Será un miniCAO en fase larvaria. ;-)

Mientras tanto céntrate en el hardware, en los bricos, y en ir aprendiendo algo de programación. Cualquier cosa que necesites pregúntalo.
#723
(03-10-2014, 12:33 AM)xavi escribió: Buenas noches.

He visto que el nuevo CAO compila con W7. Solo me ha dado tiempo de poner las direcciones de los sensores y poco mas.

Gran trabajo, Antonio. Este fin de semana prometo estudiarme los menús y te digo algo.

Las temperaturas deberían salir por pantalla?.

Saludos

Muchas gracias Xavi.

Respondiendo a tu pregunta; durante la fase de inicialización, debería reconocer los sensores. Finalizada la inicialización aparecerá en pantalla del LCD la fecha, la hora y la temperatura. Si tuvieras sensor de pH también mostraría algún valor, pero habría que calibrar la sonda que se hace desde el menú.

El arranque por defecto se hace en modo rápido pero hay un instante en el que te da opción a hacer un arranque más lento. Te lo pregunta al principio del todo y solo hay que pulsar un botón y luego confirmar. El arranque lento muestra más información.

Inicialmente tenía pensado publicar una guía de instalación, una guía de usuario y una guía de programación, pero voy a unirlo todo y lo publicaré en formato electrónico, bajo licencia Creative Commons, y al precio mínimo que me permita Amazón.

No os voy a hacer esperar más ni os voy a hacer que os gastéis ni un euro. Os dejo un borrador del libro en formato PDF. Falta alguna cosilla que estoy terminando, pero todo lo importante ya está incluido.

[attachment=1114]

Lo considero de lectura obligada para los interesados en CAO1. Espero que lo disfrutéis. Smile

NOTA:
Debí suprimir el capítulo "Recomendaciones de seguridad" porque aún contiene errores importantes no corregidos.
Inicialmente recomendaba conectar GND a tierra y ahora sé que eso no es correcto. Seguro que más de uno lo hace.

No hay nada como escribir un libro para aprender un montón de cosas, je, je.
#724
ok a la espera y muchas gracias una cosa y te preguntare mas jajaj esto que quiere decir lcd.noBlink();
#725
104 páginas. Descargado y me pongo a leerlo.
#726
(03-10-2014, 10:36 AM)william escribió: ok a la espera y muchas gracias una cosa y te preguntare mas jajaj esto que quiere decir lcd.noBlink();

Creo recordar que consiste en anular el parpadeo del cursor cuando está activo.

(03-10-2014, 10:36 AM)xavi escribió: 104 páginas. Descargado y me pongo a leerlo.

Solo recordarte la nota que acabo de añadir. Debí suprimir el capítulo "Recomendaciones de seguridad" porque aún contiene errores importantes no corregidos.

Inicialmente recomendaba conectar GND a tierra y ahora sé que eso no es correcto.
#727
Sobre los sensores de temperatura, no me acaba de quedar claro cuantos sensores usas

Tienes en el despacho un sensor?.

Yo, en mi caso, con el arranque lento, vía serial, tomo nota de las definiciones de los sensores, y substituyo las tuyas, TEMP_LEDS y TEMP_ACUA, no?.
#728
hola Antonio una cosa que tengo en mente que estaría bien es que la pantalla por ejemplo un dia a la semana fue ce nublado que no sea todos los días la misma intensidad de led que te parece
#729
(03-10-2014, 12:36 PM)xavi escribió: Sobre los sensores de temperatura, no me acaba de quedar claro cuantos sensores usas

Tienes en el despacho un sensor?.

Yo, en mi caso, con el arranque lento, vía serial, tomo nota de las definiciones de los sensores, y substituyo las tuyas, TEMP_LEDS y TEMP_ACUA, no?.

No, solo hay dos sensores. 1)Temperatura de agua de acuario y 2) Temperatura de LEDs.

Lo del despacho como si no existiera, es para pruebas de despacho con una segunda placa.

(03-10-2014, 02:34 PM)william escribió: hola Antonio una cosa que tengo en mente que estaría bien es que la pantalla por ejemplo un dia a la semana fue ce nublado que no sea todos los días la misma intensidad de led que te parece

Todo se puede hacer, introduce algo de complicación y no le veo mucho sentido. Tendría más sentido modular la luz nocturna con arreglo a las fases lunares y no lo he hecho.
#730
Buenas tardes.

Tengo un problema con los sensores de temperatura.

Inicio el programa en "arranque lento", para tomar nota de los sensores, en mi caso pone:
Código:
Ini().Sens Temp.
Ini. busqueda de
dispositivos OneWire
Buscar Sensor N=0
Sens0 DS18B20 en
28A1.7A81.0500.00C6
Buscar Sensor N=1
Sens1 DS18B20 en
287B.5682.0500.009C
Buscar Sensor N=2
Tot.sens.DS18x20=2
Num.Sens.Temp.=2
NO Sens.Temp.Acuario
Sens=Ac Desconect
OK Sens.Temp.LEDs
28A1.7A81.0500.00C6
1) ???SENS.TEMP???
Calibracion de PH
Erronea o ausente
V.Analog y TimeStam
en EEPROM (PH7:PH4)
V.A PH7:4(-1:-1)
TS 0:0
NO Sens.PhAn.Acuar.
Sens=PH Desconect
Sens=Le AlarmSonor
Sens=Le Desconect
Sensor=Le:C  Min=0 Low=0  High=0 Max=0 Hist=0

En el submodulo CAO_1.h, hago las siguientes substituciones:

Código:
#ifdef ACU150L
#define _LOCATION "ACU 150L"
#define ADDR_DS18X20_TEMP_LEDS  "28A1.7A81.0500.00C6" // ======cambio por 28A1.7A81.0500.00C6
#define ADDR_DS18X20_TEMP_ACUA  "287B.5682.0500.009C" // ======cambio por 287B.5682.0500.009C
// #define ADDR_DS18X20_TEMP_ACUA  "28B0.A4CF.0500.00A3" // ACUARIO 150l (sonda pegamento PVC)
#else
#define _LOCATION "DESPACHO"
#define ADDR_DS18X20_TEMP_LEDS  "28A1.7A81.0500.00C6" // ======cambio por 28A1.7A81.0500.00C6
#define ADDR_DS18X20_TEMP_ACUA  "28B0.A4CF.0500.00A3" // ======cambio por 287B.5682.0500.009C
#endif

El resultado es:

[Imagen: IMG_20141003_153803_zpsqgtjupri.jpg]

Los sensores funcionan bien, con cualquier otro código marcan bien la tempertatura.

¿Tengo que hacer mas substituciones?.

Gracias
#731
Hola Antonio ...
Perdona , pero te voy ha hacer una pregunta .... que seguro que ya has contestado, pero reconozco estar muy perdido ahora mismo -glare.gif

Estoy intentando hacer funcionar la demo de la botonera ... que ya pusiste hace mucho tiempo ... pero eso es lo que me falta a mi ...-fisch.gif

En fin ... Estoy con ello y me da un error de compilación ... en la demo_lcd20x4.cpp

Me sale error en la linea ...

Fmt_PrLn_LcdBeep(true, false, strrchr(__FILE__ , '/')+1);



Demo_Lcd20x4.cpp: In member function 'void Demo_Lcd20x4::Ini(char*)':
Demo_Lcd20x4.cpp:45: error: invalid conversion from 'const char*' to 'char*'
Demo_Lcd20x4.cpp:45: error: initializing argument 3 of 'void Demo_Lcd20x4::Fmt_PrLn_LcdBeep(boolean, boolean, char*, ...)'


Que puedo tener yo mal para que sea el unico al que no le compila bien ???

posiblemente una libreria de LCD incorrecta???

Un saludo y gracias de antemano

EDITO: ... Ya he visto que en el mensaje 207 , Juanma comentaba lo mismo Blush
me lo salte sin querer ... y la solución posterior que dabas tu ...
Voy a probarlo ...

Si ... ya compila y se ven cosas en el monitor serie Smile

Un saludo
#732
(03-10-2014, 04:41 PM)xavi escribió: Buenas tardes.

Tengo un problema con los sensores de temperatura.

Inicio el programa en "arranque lento", para tomar nota de los sensores, en mi caso pone:
Código:
Ini().Sens Temp.
Ini. busqueda de
dispositivos OneWire
Buscar Sensor N=0
Sens0 DS18B20 en
28A1.7A81.0500.00C6
Buscar Sensor N=1
Sens1 DS18B20 en
287B.5682.0500.009C
Buscar Sensor N=2
Tot.sens.DS18x20=2
Num.Sens.Temp.=2
NO Sens.Temp.Acuario
Sens=Ac Desconect
OK Sens.Temp.LEDs
28A1.7A81.0500.00C6
1) ???SENS.TEMP???
Calibracion de PH
Erronea o ausente
V.Analog y TimeStam
en EEPROM (PH7:PH4)
V.A PH7:4(-1:-1)
TS 0:0
NO Sens.PhAn.Acuar.
Sens=PH Desconect
Sens=Le AlarmSonor
Sens=Le Desconect
Sensor=Le:C  Min=0 Low=0  High=0 Max=0 Hist=0

En el submodulo CAO_1.h, hago las siguientes substituciones:

Código:
#ifdef ACU150L
#define _LOCATION "ACU 150L"
#define ADDR_DS18X20_TEMP_LEDS  "28A1.7A81.0500.00C6" // ======cambio por 28A1.7A81.0500.00C6
#define ADDR_DS18X20_TEMP_ACUA  "287B.5682.0500.009C" // ======cambio por 287B.5682.0500.009C
// #define ADDR_DS18X20_TEMP_ACUA  "28B0.A4CF.0500.00A3" // ACUARIO 150l (sonda pegamento PVC)
#else
#define _LOCATION "DESPACHO"
#define ADDR_DS18X20_TEMP_LEDS  "28A1.7A81.0500.00C6" // ======cambio por 28A1.7A81.0500.00C6
#define ADDR_DS18X20_TEMP_ACUA  "28B0.A4CF.0500.00A3" // ======cambio por 287B.5682.0500.009C
#endif

El resultado es:

[Imagen: IMG_20141003_153803_zpsqgtjupri.jpg]

Los sensores funcionan bien, con cualquier otro código marcan bien la tempertatura.

¿Tengo que hacer mas substituciones?.

Gracias

Te comento tu salida Serial

Código:
Buscar Sensor N=0
Sens0 DS18B20 en
28A1.7A81.0500.00C6 <- Encuentra este sensor
Buscar Sensor N=1
Sens1 DS18B20 en
287B.5682.0500.009C <- Encuentra este otro sensor
Buscar Sensor N=2
Tot.sens.DS18x20=2
Num.Sens.Temp.=2
NO Sens.Temp.Acuario <- No identifica a ningún sensor como sensor de temperatura del acuario
Sens=Ac Desconect
OK Sens.Temp.LEDs   <- Identifica el sensor de temperatura de LEDs.
28A1.7A81.0500.00C6
1) ???SENS.TEMP???

Te comento con arreglo al código original. No el que has modificado tú.

En esta versión se ha comentado la línea // #define ACU150L
Eso significa que

Código:
#ifdef ACU150L
#define _LOCATION "ACU 150L"
#define ADDR_DS18X20_TEMP_LEDS  "2821.1AD0.0500.006A" // ACUARIO 150l
#define ADDR_DS18X20_TEMP_ACUA  "282B.24D0.0500.0083" // ACUARIO 150l (sonda pegamento termofusible)
// #define ADDR_DS18X20_TEMP_ACUA  "28B0.A4CF.0500.00A3" // ACUARIO 150l (sonda pegamento PVC)
#else
#define _LOCATION "DESPACHO"
#define ADDR_DS18X20_TEMP_LEDS  "2821.1AD0.0500.006A" // ACUARIO 150l
#define ADDR_DS18X20_TEMP_ACUA  "28CB.ECBD.0400.0010" // Despacho sonda metalica
#endif
Todo eso el preprocesador lo va a transformar en

Código:
#define _LOCATION "DESPACHO"
#define ADDR_DS18X20_TEMP_LEDS  "2821.1AD0.0500.006A" // ACUARIO 150l
#define ADDR_DS18X20_TEMP_ACUA  "28CB.ECBD.0400.0010" // Despacho sonda metalica

Observa que la primera parte ni siquiera la compila.
La verdad es que aquí se está asumiendo que se entiende lo que hace este código porque hay que adaptarlo. Por ejemplo


#define _LOCATION "ACU.XAVI"
#define ADDR_DS18X20_TEMP_LEDS "28A1.7A81.0500.00C6" // LEDS
#define ADDR_DS18X20_TEMP_ACUA "287B.5682.0500.009C" // Temp.Agua

Podría estar ocurriendo algo raro porque detecta dos sondas y muestras susdirecciones, pero luego solo reconoce una. Es como si una de ellas estuviera mal escrita.

Si la dirección parece correcta y no la reconoce, yo probaría a borrarla completamente y a escribirla de nuevo porque podría haberse colado algún caracter extraño en la cadena de caracteres.

Como segunda medida yo forzaría un arranque lento y me mandas lo que salga por pantalla.

Como mínimo la sonda detectada debería poder funcionar pero solo si ha sido activado desde el menú de parámetros.

Creo que en la versión actual los sensores se habilitan por defecto pero tienes que verificarlo porque quizás tenías en la EEPROM parámetros de una versión anterior. Desde que se inicializa la EEPROM con parametros en la primera ocasión, no vuelven a tomarse otros valores por defecto a menos que se indique expresamente desde el menú de parámetros.

En otras palabras, los parámetros por defecto solo se usan cuando la EEPROM está vacía. Para mayor seguridad entra en la opción de los parámetros y selecciona la opción de "Restaurar parámetros por defecto". Esto limpia la EEROM y permite coger los parámetros por defecto de código actual.

Puedes hacer ciertas comprobaciones:
Comprueba que el parametro EnaTmpAcu y el parámetro EnaTmpLed tienen valor 1 (0=falso, 1=cierto) y si no es así ponlo a 1.
Accede al menú de los sensores para mirar en que estado se encuentran.
#733
(03-10-2014, 10:40 PM)Namiga escribió: Hola Antonio ...

EDITO: ... Ya he visto que en el mensaje 207 , Juanma comentaba lo mismo Blush
me lo salte sin querer ... y la solución posterior que dabas tu ...
Voy a probarlo ...

Si ... ya compila y se ven cosas en el monitor serie Smile

Un saludo
-good.gif

Ok. Smile
#734
OK, mañana me pongo en ello, que no tengo el PC a mano.

Una pregunta sobre la memoria EPROM, creo haber leído que no es bueno "limpiarla" constantemente, por que se puede degradar permanentemente; es esto cierto?, o acabo de decir una bobada?.

Bueno, veo que Namiga está haciendo pruebas con tu programa; mejor, entre todos aprenderemos mas. La verdad es que es una suerte tener al programador dispuesto a solucionar dudas, no es lo habitual.

Saludos.

Uf, que difícil es leer y escribir en un teléfono...
#735
La limpieza de la EEPROM en nuestro caso no consiste en limpiar una serie de posiciones. Solo borra un dato de cabecera de toda la zona de parámetros en la EEPROM.

Sobre la caducidad de la EEPROM por sobreuso, en CAO1 lo normal es que un usuario necesite variar algún parámetro de forma ocasional. Concretamente pocas veces al año. Ni siquiera un uso diario editando parámetros supondría el menor problema.

Las memorias EEPROM soportan un cierto número de operaciones de escrituras a cero
por cada bit que estuviera previamente a uno porque esta es una operación destructiva.

En Arduino este número de escrituras destructivas son 100.000. Es un número muy elevado cuando se usa con un mínimo de cuidado. En un uso diario de los parámetros nos daría para 100.000 días.

Ten en cuenta que por ejemplo según lo que acabamos de decir, escribir siempre el
mismo dato en la misma posición de la memoria tampoco la desgastaría porque no se destruye ningún dato.

Cuando un bit se agota por superar el límite de escrituras destructivas, el resto
de los bits puede seguir funcionando, y cuando un byte se ve afectado por ello,
no afectará a otros bytes. Si una posición EEPROM deja de funcionar, bastará con
usar una zona diferente de la memoria.

Usuarios navegando en este tema: 7 invitado(s)


Salto de foro: