Go Down

Topic: Codigo medidor de consumo se me cuelga en attiny85 (Read 7236 times) previous topic - next topic

maxid

Como te dije es problema de la libreria.
La verdad que no se como cambiarlo, pero dejame verlo en unos dias te cuento.
El que pregunta aprende, el que responde aprende a responder.

maxid

Me ouse a leer la evolucion de cambios y llegue al final donde dice esto que es muy importante.
Quote

version 1.27 Reinstated VWutil/crc16.h for the benefit of other platforms such as Teensy.
Testing on Teensy 3.1. Added End Of Life notice. This library will no longer be maintained
and updated: use RadioHead instead.


Por lo que entiendo no la mantienen mas y ahi va a quedar y resolvieron otra mejor

http://www.airspayce.com/mikem/arduino/RadioHead/
El que pregunta aprende, el que responde aprende a responder.

mirasu

#17
Aug 02, 2014, 10:32 am Last Edit: Aug 02, 2014, 10:35 am by mirasu Reason: 1
Hola

Maxid La verdad es que sabie que virtualwire ya no tenia mas apollo :-( Pero aun asi la eleji por que es la que conocia un poco y tiene mucha informacion por la red. :-D ademas creo que hace menos de un año que ya no lo tiene. y todo lo que uso es mas antiguo.

Probare portar el codigo a la nueva libreria, que ahora que la miro no parece tan diferente.

sobre virtualwire CREO que si usas millis cambia el timer solo.
Code: [Select]
/*=============================================================================
  Assume there are only two timers.  One for millis and one for everything
  else.
=============================================================================*/

#if TIMER_TO_USE_FOR_MILLIS == 0
#define TIMER_TO_USE_FOR_USER                    1 /este era 1
#elif TIMER_TO_USE_FOR_MILLIS == 1
#define TIMER_TO_USE_FOR_USER                     0 / este era 0
#else
#error Unexpected condition in UserTimer.h.
#endif

 Porque probe virtualwire y el ejemplo del fader led y no funciona. Y creo que si usara el timer0 no seria capaz de mandar 4 veces el voltaje correctamente y luego cuelgarse.
Tampoco entiendo porque si quito y acorto el codigo int variableA =  emon1.Vrms; sin pasar antes por float no se cuelga pero solo recibo 0.0.0.0 . cuando con arduino nano va ok.

Me podrias ayudar a optimizar el codigo para bajar el uso de ram?

Yo voy a probar emonlib con el segundo codigo y verlo por softserial a ver si pueda ser lo que falla y por eso manda 0.0.0.0

Gracias :-)



mirasu

Hola

Bueno la prueba emonlib con el segundo codigo y puerto serie va super bien. ASi  el problema si esta en cuando manda. es una pena que no puedo poner las 3 librerias para ver por serial lo que pasa :-(

sobre la nueva libreria de RF no compila en mi attiny85 tira este error el ide

Code: [Select]

In file included from ask_transmitter.pde:10:
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h: In static member function 'static byte SPIClass::transfer(byte)':
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:56: error: 'SPDR' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:57: error: 'SPSR' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:57: error: 'SPIF' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h: In static member function 'static void SPIClass::attachInterrupt()':
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:63: error: 'SPCR' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:63: error: 'SPIE' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h: In static member function 'static void SPIClass::detachInterrupt()':
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:67: error: 'SPCR' was not declared in this scope
C:\arduino-1.0.5-r2\libraries\SPI/SPI.h:67: error: 'SPIE' was not declared in this scope


Parece que no tiene puerto SPI :-( he probado con una libreria spi (llamada TinyWireM)para attiny pero claro no usa los mismos nombres.... no compila.

no se que mas probar :-(

Saludos

maxid

con tan pocos pines no le puedes pedir tambien spi!!!! ya mas no cabe.
Lo de enviar 0 puede ser por un truncado propio de C, todo numero cercano lo redondea
El que pregunta aprende, el que responde aprende a responder.

mirasu

Hombre con 6 pines sobra para dedicar 2 a spi, no? :-) bueno no seria deficar por que son configurables. Pero el precio del chip....

Lo que no entiendo es por que dicen que es compatible con attiny85 si es necesario usar una libreria incompatible con este...

Probare multiplicar la variable por 100 a ver :-)

Gracias

maxid

i2c son 2 lineas. Spi son 4 con chipselect o 3 sin.
para transmitir datos es mejor siempre como enteros. menos calculos y mas facil de sacar un crc.
El que pregunta aprende, el que responde aprende a responder.

maxid

Me rectifico, el attiny85 si tiene spi, no se si Arduino lo soporta pero el hardware si está. la libreria TinyWireM, es para usar bus i2c, no spi.
Pero no entiendo para que quieres usar estos buses si lo que quieres hacer es enviar serialmente por rf datos.
Si solo ban a transmitir hasta puedes evitar usar librerias y hacer tu mismo el transmisor de bits, hay muchos ejemplos de como hacerlo. Si usas virtualwire por el protocolo tambien puedes hacer el tuyo.
El que pregunta aprende, el que responde aprende a responder.

mirasu

Yo no quiero usar spi. Lo importa el ejemplo de rafiohead y no lo puedo quitar. He bajado otra libreria spi para attiny y tampoco compila el ejemplo.

Yo no tengo ni de lejos conocimientos suficientes para hacer un protocolo :-(.
Crees que si lo conecto a un pin tx serie y en el otro arduino a un pin rx serie funcionaria?

Maxid por que crees que en el primer codigo manda lecturas de voltaje y se cuelga y con el segundo no manda mas que ceros.
Probe un ejemplo de codigo para saber en teoria la ram libre. Y la mando por rf. Pero los valores van desde -27000 a +30000. Creo que tampoco es compatible con attiny :-( por cierto ese codigo lo meto en el codigo que solo mandaba 0.

Saludos :-)

maxid

Quote

Yo no quiero usar spi. Lo importa el ejemplo de rafiohead y no lo puedo quitar. He bajado otra libreria spi para attiny y tampoco compila el ejemplo.

Creo que hay que usar esta instancia de la clase. No lei todo, ahora estoy en otra cosa que me demanda mas tiempo.
http://www.airspayce.com/mikem/arduino/RadioHead/classRH__Serial.html

Quote

Yo no tengo ni de lejos conocimientos suficientes para hacer un protocolo :-(.
Crees que si lo conecto a un pin tx serie y en el otro arduino a un pin rx serie funcionaria?

Tampoco que un protocolo es algo tan sofisticado, Con conectar al pin rx-tx tx-rx anda siempre que respetes tensiones de 5v.
Es lo que aconsejo antes de poner un modulo rf, asegurarse que los datos llegan o salen bien.
Con respecto al protocolo es tan simple como poner un encabezado, datos, mas verificacion. El serial solo envia 8 bits mas 1 bit de arranque.
Un protocolo simple es enviar los datos + 2bytes de CRC (Ejemplo suma de bytes y complemento de 2)
En definitiva es esto lo que hace la VirtualWire.


Quote

Maxid por que crees que en el primer codigo manda lecturas de voltaje y se cuelga y con el segundo no manda mas que ceros.
Probe un ejemplo de codigo para saber en teoria la ram libre. Y la mando por rf. Pero los valores van desde -27000 a +30000. Creo que tampoco es compatible con attiny :-( por cierto ese codigo lo meto en el codigo que solo mandaba 0.

Creo que se cuelga porque se solapan datos al usar ambos el mismo timer0. Si usando el SoftwareSerial no se cuelga, primero debes enviar numeros conocido, pon un contador que incremente un valor de 0 a 255 y te aseguras que los datos llegan.
Despues usas tu programa de lecturas.
Si usas Serial.print() debes convertir a string para enviar.
Si usas Serial.write() debes enviar el puntero a los datos, ya que 30000 ocupa 2 bytes.
quizas envia solo ceros porque envia los bis menos significativos o  está truncando a cero
El que pregunta aprende, el que responde aprende a responder.

mirasu

Hola maxid

Perdon por tardar. Pero queria tener algo antes.

Bueno he probado la libreria manchester y parece que ocupa menos y funciona con emonlib. Solo no manda strings o no se como hacerlo.
Pero bueno por lo menos puedo mandar int.

Gracias por todo. Ya comentare cuando lo tenga funcionando unos dias.


Go Up