Selbstbau Funkthermometer 433Mhz

Begonnen von matlen67, 28 April 2016, 09:59:57

Vorheriges Thema - Nächstes Thema

juergs

#120
Die Standard Narcoleptic geht für mich auch nicht zu kompilieren,
deshalb hatte ich auch meine Version beigegegeben:

Das hier fehlte noch im Original in Narcoleptic.cpp:

// mod to support attiny85
#if defined(__AVR_ATtiny85__)
#define WDTCSR WDTCR
#endif


Dann funktioniert Narcoleptic mit Digispark!


KölnSolar

#121
Hmm, das ist aber nicht die Version, die ich meinte ;-(
Zitat#ifdef BODSE
  // Turn off BOD in sleep (picopower devices only)
  MCUCR |= _BV(BODSE);
  MCUCR |= _BV(BODS);
#endif
ist ín Deiner Version gar nicht enthalten  :( Unter dem Link von mir gibt es irgendwie 3 Versionen. 1(14.7.10) und 1a(15.7.10) unter downloads, die sehen aber ganz anders aus als die Version, die ich mir über den Source link heruntergeladen hab. Die scheint identisch mit https://github.com/rcook/narcoleptic vom 21.10.10. Diese bekam ich nicht kompiliert. Ne Menge Register-Bits, die nicht definiert waren, weil wohl für den attiny85 nicht vorhanden. Hab ich dann alle mit ifdef "auskommentiert". Auch das WDTCSR(heißt im Attiny WDTCR). Dann ließ es sich kompilieren. Nun schaue ich morgen mal weiter, was die Bits zu bedeuten haben. Tw. sind es wohl nur mehrfach vorhandene Funktionen bzw. im attiny nur einfach vorhanden. Hab ich geflucht....
Aber so lernt man dazu  ::)
Kannst ja mal gucken, ob Du mit der beigefügten Fassung schon was anfangen kannst/möchtest.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KölnSolar

So, ich gebs wohl erst einmal auf mit Lacrosse  >:( Ich kann mittlerweile problemlos IT V3 senden. Wird am CUL mit a-culfw und dem RFXTRX auch empfangen und entschlüsselt. Aber das Lacrosse zeigt sich nirgends. Habe mittlerweile verschiedene firmwares ausprobiert, u.a. die 1.66 im Original, aber nix kommt an. Hab keine Idee mehr, woran es liegen könnte. Mehrere Werte zu senden hätte mir besser gefallen, als nur ein einfaches an oder aus mit IT-Protokoll  :(
Ähm, letzte blöde Idee: Lacrosse ist doch wohl autocreate-fähig ?
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

#123
Hallo Markus,

wie gesagt mit "autocreate" + CUL433 (nicht a-culfw) kein Problem bei mir. Hab jetzt einige Sensoren am "funken".

Hast Du evtl. Probleme mit den Fuse-Einstellungen des ATtiny. Wenn Du da falsch liegst,
dann geht natürlich im Timing auch nichts ...  ;)

Meine Standalone Tinies (also nicht Digispark) laufen mit 8 MHz internal Clock - Fuse gesetzt.

Die Digispark-Dinger laufen mit 16,5 MHz mit einer PLL-Clock-Einstellung und die "divide by 8" abwählen nicht vergessen!

Du kannst das Timing auch prüfen, wenn Du mal einen Portpin toggeln lässt (Intervall z.B. delay(2000) ) dann kannst Du das ja kontrollieren.

Hast Du in der LaCrosse.cpp auch die richtige LaCrosseID gesetzt/definiert?

Grüße,
Jürgen

KölnSolar

Hi Jürgen,
da hast Du mich aber jetzt wieder ordentlich verunsichert  ;) Aber an die Fuses hatte ich auch schon gedacht. Hab also jetzt nochmal geprüft und tatsächlich L:0xE1. Also auf E2 gesetzt und wieder probiert. Nix. Mit meinem IT-Sketch probiert. Ging jetzt auch nicht mehr. Mit attiny85, 8MHz internal kompiliert und die Hex auf dem Rpi geflashed. Auch nix. Und nun verstehe ich wenigstens, was ich heute morgen noch in meinem digispark-Thread zum Besten gab, nicht wissend, wie der Zusammenhang ist: die L-fuse muss mit dem gewählten Board/Taktfrequenz fürs kompilieren übereinstimmen, sonst klappt das Timing nicht. Also müsste L:0xE1 stimmen, wenn ich mit digispark 16,5 kompiliere, was ja durch das Funktionieren mit IT-V3 bestätigt wird. Warum nur nennen die das 16,5 und nicht 16 ?
Aus dem Internet hab ich "toggelt der DigiSpark schnellstmöglich, aber an dem Pin liegen (bei 8 MHz Prozessortakt) nur schlappe 62 kHz an, weil das Toggeln 2 * 8 µs dauert" als Information. Also ein grundsätzliches Problem des digispark ? Eher nicht, denn die kleinste Pulslänge ist beim IT_V3 260 µs und Lacrosse sogar 500.
Jetzt widme ich mich erst mal meinen Projekten, aber irgendwann gehe ich der Ursache auf den Grund. Fazit bleibt für mich: Für einen µC Anfänger ist es besser mit Steckbrett und ISP zu beginnen :'(
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

#125
Yep, oder man hat Spaß an Suchen ...
Ohne passendes "Werkzeug" geht halt nichts ... ;)

Falls Du 2 Arduinos hast -> xOszillo mal den Sende/Tx pin checken.
Vielleicht liegt das Problem bei Dir ganz woanders? Dallas-Sensor z.B. ?
http://hackaday.com/2011/05/21/xoscillo-turns-arduino-in-an-oscilloscope/
Scopino .. besser
http://physudo.blogspot.de/2013/08/arduino-als-logic-analyzer.html
Ok, Windows, könnte aber auch unter dem RASPi (Mono) gehen. 
Mal schauen ob ich Dir fürs WoE ein Compile machen kann ... (;-))

Dabei stößt man wiederum auch auf das hier: arduino-i2c-sniffer


KölnSolar

I C H   g l a u b     e s   n i c h t ! ! ! ! !
Nachdem mein Projekt auch nicht so recht wollte, hab ich natürlich den digispark im Verdacht. Also noch mit L:0xE2 und in der IDE mit "Digispark - 8 MHz ohne USB" geflashed. LED leuchten geht, IT-V3 geht,nur Lacrosse geht nicht. Abweichung bei einer min. narcolptics war ca. +8%. Guck ich zum 1.000ten mal in den Lacrosse-Code
Zitat#include <Arduino.h>
#include "LaCrosse.h"

#ifndef PIN_SEND
#define   PIN_SEND    2  //set TX to Arduino-D4 on PIN 3 
#endif
und weil ich im main
Zitat#include "Narcoleptic.h"
#include "LaCrosse.h"
#define TX_433_PIN          1   // Pin 6 = PB2
#define PIN_SEND             TX_433_PIN      //--- where digal pin 433 Sender is connected PB0 on ATtiny-85 pin 5 = PB0
stehen hab, ändere ich im Lacrosse die Pin_SEND auf 1. Den Gedanken hatte ich schon zig mal, aber immer wieder verworfen, weil für mich doch eindeutig der Sendepin auf 1 gesetzt ist und im Lacrosse doch nur überschrieben wird, wenn noch nicht definiert. Pustekuchen. Lacrosse funktioniert und vorher hab ich wohl immer über PB2 gesendet. Hab ich da was falsch am Programmcode verstanden/interpretiert ?  :-\
Außerdem kann ich nun klarer Aussagen treffen zum digispark und timing treffen. Hatte vorher nachgelesen und festgestellt, dass der attiny85 über den USB auf 16,5 MHz kalibriert wird. Nun: Neben der 8MHz-Variante funktioniert auch die 16,5MHz-Variante mit L:0xE1 problemlos. Der über digspark geflashte attiny auch problemlos ohne digispark an Stromquelle != USB. Meine Herren, was für eine Geburt  ::)
Nun meine 2. Frage: Interessant im Lacrosse-Code fand ich ja die Berechnung der Quellspannung. Wird bei mir mit 0,2 übertragen. Was soll mir das sagen ?
Ah und noch ne Info: der RFXTRX empfängt mit eingestelltem Lacrosse-Protokoll: nix. Der CUL-V3 sowohl mit culfw 1.66, als auch a-culfw 1.21
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

#127
ZitatHast Du in der LaCrosse.cpp auch die richtige LaCrosseID gesetzt/definiert?

.. und auch den Portpin ?   :-[    Ok, mia Culpa.

Manche Dinge setzt man einfach als gesetzt voraus, was aber wohl nicht immer und bei jedem klappt...

Betriebsspannung: nimm mal den Code aus dem Bodenfeuchtesensor, der funktioniert sehr gut und ist schon länger bei mir im Betrieb....

Quintessenz: Nicht immer geht nur Copy&Paste  :-\ und Code verbessern und hier wieder einstellen  ;)

Bei Gelegenheit schau ich noch mal über den Code drüber und versuche die "Hürden" zu glätten ...
Jürgen


// -------------------------------------------------------------------- -
//--- Helpers
//---------------------------------------------------------------------
long readVcc(void)
{
//--- read 1.1V reference against AVcc
//--- set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0);
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
ADMUX = _BV(MUX3) | _BV(MUX2);
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif 

delay(2); // Wait for Vref to settle

ADCSRA |= _BV(ADSC); // Start conversion
while (bit_is_set(ADCSRA, ADSC)); // measuring

uint8_t low = ADCL; // must read ADCL first - it then locks ADCH 
uint8_t high = ADCH; // unlocks both

long result = (high << 8) | low;

/***************************************************************************************
*  Berechnung/Skalierung mit manueller Messung der Betriebsspannung:
*
*        internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function)
*                       = 1.1 * 5126 / 5258 => 1.09 ==> 1.09*1023*1000 = 1097049
****************************************************************************************/

result = 1042494L / result;

  //result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000

//result = 1097049L / result; // korrigierter Wert bei 3V3 muss fuer jeden Controller bestimmt werden, obiger Wert scheint allgemeiner zu sein.

return result; // Vcc in millivolts
}


Schaue Dir dazu aber auch die UserReading-Transformation dazu an ...

Hier die "ohne" Userreading-Variante:
//--- Betriebsspannung auslesen 
vcc_reading   = readVcc();
 
//float controllerVCC = 1.1 * 1023 / vcc_reading;
float controllerVCC =  vcc_reading / 1000.0;   // mV in Volt
       
        LaCrosse.t = float(bodenfeuchte)/1000;
LaCrosse.sendTemperature();
LaCrosse.sleep(1); //--- 1 second, no power-reduction! see impact on powersave
LaCrosse.h = controllerVCC; //--- alias humidity;
LaCrosse.sendHumidity();


ZitatAh und noch ne Info: der RFXTRX empfängt mit eingestelltem Lacrosse-Protokoll: nix. Der CUL-V3 sowohl mit culfw 1.66, als auch a-culfw 1.21
Also doch ... (;-))

RFXTRX habe ich nicht, deshalb auch keine Aussage dazu ...


KölnSolar

#128
Hab den Bodenfeuchte-Thread 3mal rauf und runter. Wo kann ich mir denn das ominöse Userreading ansehen ?Hab jetzt nur noch Humidity=03.3 bei berechnetem     result = 907431L / result;  in read_Vcc() und float controllerVCC = vcc_reading / 1000.0;   :-[
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs


KölnSolar

Ähhhm,
erst Bodenfeuchte-Sensor, jetzt Luftdruck
und was hat das Luftdruck-Userreading nun mit Vcc zu tun ? Was hab ich übersehen oder nicht verstanden ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

ZitatWas hab ich übersehen oder nicht verstanden ?

Beides ...  :)  ;) :D

ArduPino

#132
Was genau geht denn bei dir nicht ?
Auslesen am Attiny/Digispark funktioniert ?

Die Spannung kann eigentlich nur per eigenem Sensor übertragen werden und dann als Temperatur oder Feuchte.
Ich lasse das einfach als Temperatur laufen, so wie sie aus dem Attiny raus kommt, 3,5 Grad C und das ist dann meine Spannung.
Oder das Lacrosse Protokoll kann das und macht das anders...weiß ich nicht, wenn ja, meinen Text einfach ignorieren  ;D


EDIT:
@juergs
Ich habe das per sleep und watchdog gemacht.
Also ist das ja eigentlich egal, ob ich eine Library wie Nacroleptics (was für ein Name!) oder eben "von Hand".
Benutze die längste Zeit und den höchsten Modus PWR_DOWN.
Ist die Zeit vorbei, wird sleep() direkt wieder aufgerufen. Das sind dann nur millisekunden (wenn überhaupt) die der Attiny dann wieder wach ist.
Da die Zeit limitiert ist auf 8 Sekunden, wird das die Library sicher auch so machen.

juergs

#133
@Ardupino
ich glaube er bekommt noch keine Werte überhaupt geliefert.

Das Problem: LaCrosse wird ja benutzt um TEMP+HUM Werte zu übertragen.
Die liegen meist im Bereich 0..100 Grad/% etc...
ReadVcc liefert den Wert in mV als uint z.B. 5V sind 5000mV, dass passt natürlich nicht ins Protokoll.
Dann muss man skalieren, am besten mit float-cast und z.B. einer Division durch 1000.
Das kann man dann per UserReading, wenn man es braucht, wieder zurückbiegen.
Wie ich es z.B. beim Luftruck (ca. 700...1200 mBar) gemacht habe.
Ebenfalls sind negative Werte zu vermeiden, das geht mit Offset-Addition vor dem Versenden und hinterher in FHEM wieder zurückwandeln.
Also eigentlich recht einfach, wenn man weiß wie es geht ...  :D

Aber im Ernst, auch bei mir kann sich mal ein Fehler im Code einschleichen, den kann man ja verbessern ...
Außerdem habe ich ja mehrere Sensoren umgesetzt und bei jeden Projekt kommt immer ein Stückchen mehr
an Funktionalität dazu. Das ist aber eigentlich normal.
Man darf aber nicht den Fehler begehen, nur auf eine Version zu schauen,
man muss wie so oft in der IT auch mal rechts und links der Autobahn schauen ...  8)
Vor allem darf man nichts als endgültig gesetzt ansehen.
Das liegt natürlich auch ein "kleines" bisschen an der Erfahrung die man damit hat....
und wie man damit umgehen kann.

Grüße
Jürgen
 

KölnSolar

Zitatich glaube er bekommt noch keine Werte überhaupt geliefert
ich bin er ? Ich schrieb doch
ZitatHumidity=03.3
::)
ZitatDa die Zeit limitiert ist auf 8 Sekunden, wird das die Library sicher auch so machen.
tut sie. Hat aber weitere Optionen über power_down hinaus, wie z.B. BOD abzuschalten. Wenn ich so weit bin, beschreibe ich das ausführlicher in einem separaten Thread.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt