Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
kk02067K

kk02067

@kk02067
About
Posts
34
Topics
8
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • High current
    kk02067K kk02067

    The pinchange interupt works fine.

    I found the offending things on my board. It was a combination of a couple of things. First it was the BME280 that was constantly active. Change to forced mode dropped the consumption from 0.4mA to 0.1 mA. I stopped using the internal pullup for my windspeedsensor which is based on a reedswitch. I noticed when the switch was open the consumption dropped to 0.04mA so I mounted a 1Mohm resistor instead of the internal pullup. Turning off the ADC dropped a about 10-20 uA. And lastly it seems that my nimh batterys where bad. They could not keep the charge. Changed to 2 x aaa and now it looks better.

    Current now on average 0.035 mA in sleepmode

    I will buy new nimh's to see if my solar panel circuit will work as expected. I hope to keep it running for about 5 years without changing the battery.
    Only time will tell now.

    Troubleshooting

  • High current
    kk02067K kk02067

    @scalz

    The snippet of code in my previous post isn't the whole code. This is a bit more of the code (the loop section),

    
      while(!isTransportReady){   //kolla om allt ok för "sleep"
        _process();               //om inte så kör processen som styr biblioteket
      }
    
      transportPowerDown();   //Stäng ner radion
    //  Serial.print("Gonatt :");
      asm("cli");
      sleepcounter++;
      asm("sei");
    //  Serial.println(sleepcounter);
      Serial.flush ();    //vänta på serial skall bli klar
      WDTCSR=0b00011000;  //Starta watchdog timer interupt på 1s
      WDTCSR=0b01000110;
      SMCR=0b00000101;    //Välj powerdown mode
    sleep:
      asm("sleep");
      if (pinchange){     //Om pinchange är anledningen till vakna så sov igen
        pinchange=false;
        goto sleep;
      }
    // Här har det gått en sekund skicka nya data om det behövs
    
      asm("cli");
      TCNT1=0;            //Nollställ cykelräknaren 
      asm("sei");
      sendwind();
      sendbattery();
      sendtemp();
      sendrain();
      sendsolar();
      sendfail();
      asm("cli");
      cycle=TCNT1;
      asm("sei");
    //  Serial.print("Cykeltid: ");
    //  Serial.println(cycle*8);
    
    

    But it seems to consume to much power.

    The pinchange interupt fires fairly often but the mcu is mostly awake for about 120 cycles every second. So a drop of 0.2 Volts in battery in under 18 hours seems a bit high. This on a 3.3v pro mini at 8MHz.

    Troubleshooting

  • High current
    kk02067K kk02067

    @mfalkvidd
    I will look into using your suggestions when I have the time.

    Regarding using my code in the library I don't see it beeing an option. The reason is that I'm an amateur programmer and as such I dont know all the "rules" on how code should look. In swedish as you know we have the term "spagettikod" and thats kind of how my code looks. I'm from an assembler background and and there I'm used to "slap some thing together", poking in registers directly and such.

    Troubleshooting

  • High current
    kk02067K kk02067

    I'm having trouble with high current consumption in an battery operated node. I suspect the NRF beeing the offending part. How can I be sure I have put the radio to sleep? I don't use the sleep() command because I use pinchange interupt instead of INT0 or INT1. I put the cpu to sleep with my own code. But how can I be sure that the radio has been put to sleep?
    In the code as it is now I use,

    transportPowerDown();
    asm("SLEEP");
    

    But I'm not sure that the radio is put to sleep.

    Troubleshooting

  • MYSBootloader 1.3.0-beta.3
    kk02067K kk02067

    Excuse me for beeing an idiot. But how do you compile the bootloader from source? Do you do it from Atmel studio or from Arduino IDE. And how is it done? When I compile it in Atmel studio it gets an base adress of 0x0000 which is wrong.

    I am used to program in assembler in Atmel studio and when I program in C i don't touch anyting else than the .c file. So some form of tutorial kind of thing would be helpful.

    Thank you

    Development

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    @novicit If I remember correctly i put it here: https://github.com/mysensors/MySensors/blob/master/core/MyTransport.cpp#L463
    just to test that it worked. Then I removed the change to keep the library source original.

    I turned on debug again to get it working again.. The reason why I wanted to have debuging disabled was to keep the hexfile size down so the OTA update wouldn't take so long time. I hope this issue will be fixed in a more elegant manner in a future release.

    Domoticz

  • MYSBootloader 1.3pre2 testing
    kk02067K kk02067

    I have also problem with speed of the upload. I get about 1 packet per 3 seconds. Is there a something in the code for the bootloader that has a waitingtime of 3 seconds? And if so, because of what? From that info we might be able to tell if it's a reception problem of the node or the gateway.

    Development ota myscontroller mysbootloader

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    @mfalkvidd After Little more investigating and experimenting I am pretty sure I have found a bug in the library. I found that when debug is active all is working as expected. But if I commented out debug it starts to not work. I tried it about 10 times, once with debug and then without. And everytime debug is active it works, no debug it fails.
    I opened the transport sourcefile and added a delay(100) at the procedure where the debug message is sent. With that change it works everytime with or without debug. It seems that if the ackmessage is sent to quick it gets missed by the gateway. Any thoughts on this?

    Domoticz

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    Having checked the serial output from the new node at my computer I see that the library returns the command when a ACK i requested. I also looked in the sourcecode for the library and it seems that it handles the ackmessage.
    So it seems that the ACK message get missed in the recieving node. Why, is the next question.

    Investigation continues...

    Domoticz

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    I put together another node exactly the same but keeping it at my workbench roughly the same distance from the gateway. It works without any troubles so far. The only change in the sketch is the node id and no ds18b20 temperature reading.
    The log from myscontroller show that it works even if the node doesn't send back the same status as the command. Domoticz doesn't complain as it does with the first node. This behaviour was last night.

    Now this morning the replys from the new nodes is also present. They weren't last night. At least not in the logs from MYScontroller.

    When domoticz sends a switchcommand to the gateway it does so with with ACK flag set. Does mysensors library automatically reply?
    I haven't programmed in a replyfunction in my sketch so it seems like it. But in that case why doesn't my first node reply every time?

    Strange. Have to investigate this further.

    Domoticz

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    @mfalkvidd No. I'm controling a ledstrip with ws2812b led's. The radio is powered from one of those small adapterboards with integrated regulator and capacitor. All driven from a 15W 5V switchmode powersupply.

    It seems that Domoticz is expecting a reply from the node with the same status as the command. Every time it works there is a reply from the node. And when I get the error Idont get that reply. I have not programmed in any replyprocedures in the sketch, so when it works it must be the library that send that reply from the node. But if thats the case, why not every time.

    I tried to modify the sketch to count any failed transmission and send that value back to the gateway to see if I have problems with the transmission. But the value is still Zero. Maybe my sketch is coded wrong but I dont think so.
    And even when domoticz says it failed the node still executes what was ordered.

    So the problem I think lies in the fact that domoticz seems to be waiting for an answer back with the new status from the node. The node send that status sometimes but more often not.

    This is the sketch:

    #define MY_RADIO_NRF24
    #define MY_NODE_ID 200
    #define MY_REPEATER_FEATURE
    //#define MY_DEBUG
    
    #include <MySensors.h>
    #include <SPI.h>
    #include "FastLED.h"
    #include <OneWire.h>
    #include <avr/pgmspace.h>
    
    
    #define DATA_PIN    2
    #define LED_TYPE    WS2812B
    #define COLOR_ORDER GRB
    #define NUM_LEDS    232
    #define BRIGHTNESS  96
    CRGB leds[NUM_LEDS];
    
    char actRGBvalue[] = "FFFFFF";               // Current RGB value
    uint16_t actRGBbrightness = 0xFF ;         // Controller Brightness
    int actRGBonoff = 0;                      // OnOff flag
    
    
    MyMessage msg(1, V_RGB);
    MyMessage msgtemp(2, V_TEMP);
    MyMessage msgcputemp(3, V_TEMP);
    MyMessage msgcpuvolt(4, V_VOLTAGE);
    MyMessage msgfailcount(5, V_VAR1);
    
    
    
    void SendColor2AllLEDs(const CRGB lcolor)
    {
      for (int i = 0 ; i < NUM_LEDS ; i++) {
        leds[i] = lcolor;
      }
    }
    
    OneWire ds(8);
    
    void setup() {
      wait(3000); // 3 second delay for recovery
    
      pinMode(7, OUTPUT);
      digitalWrite(7, HIGH);
    
      // tell FastLED about the LED strip configuration
      FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
      //FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
    
      // set master brightness control
      FastLED.setBrightness(BRIGHTNESS);
    
      SendColor2AllLEDs(strtol(actRGBvalue, NULL, 16));
    
    }
    
    
    
    void presentation()
    {
    
      present(1, S_RGB_LIGHT, "200 RGB Led");
      wait(1000);
      present(2, S_TEMP, "200 Temperatur altan");
      wait(1000);
      present(3, S_TEMP, "200 Temperatur CPU");
      wait(1000);
      present(4, S_MULTIMETER, "200 Spänning CPU");
      wait(1000);
      present(5, S_CUSTOM, "200 Failcount");
      wait(1000);
      sendSketchInfo("Nod 200 - Altan", "V1.6");
      wait(1000);
    
    
    }
    
    
      unsigned int fail;
      
    void loop()
    {
    
    
      
      if(!send(msgtemp.set(getTemp(), 2)))
        {
        fail++;
        }
         
      wait(1000);
      if(!send(msgcputemp.set(GetTempCpu(),2)))
        {
        fail++;
        }
      
      wait(1000);
    
      if(!send(msgcpuvolt.set(readVcc(),3)))
        {
        fail++;
        }
      
      wait(30000);
    
      send(msgfailcount.set(fail));
    
      wait(1000);
    
    
    }
    
    
    void receive(const MyMessage &message)
    {
      if (message.type == V_RGB) {
        strcpy(actRGBvalue, message.getString());    // get the payload
        SendColor2AllLEDs(strtol(actRGBvalue, NULL, 16));
        Serial.println(F("RGB"));
        Serial.println(actRGBvalue);
      }
      else if (message.type == V_DIMMER) {
        actRGBbrightness = message.getByte();
        FastLED.setBrightness( actRGBbrightness );
        FastLED.show();
        Serial.println(F("DIMMER"));
        Serial.println(actRGBbrightness);
      }
      else if (message.type == V_STATUS) {           // if on/off type, toggle brightness
        actRGBonoff = message.getInt();
        FastLED.setBrightness((actRGBonoff == 1) ? actRGBbrightness : 0);
        FastLED.show();
        Serial.println(F("STATUS"));
        Serial.println(actRGBonoff);
      }
      //  FastLED.show();
    }
    
    
    float getTemp() {
      //returns the temperature from one DS18S20 in DEG Celsius
    
      byte data[12];
      byte addr[8];
    
      if ( !ds.search(addr)) {
        //no more sensors on chain, reset search
        ds.reset_search();
        return -1000;
      }
    
      if ( OneWire::crc8( addr, 7) != addr[7]) {
        Serial.println(PSTR("CRC is not valid!"));
        return -1000;
      }
    
      if ( addr[0] != 0x10 && addr[0] != 0x28) {
        Serial.print(PSTR("Device is not recognized"));
        return -1000;
      }
    
      ds.reset();
      ds.select(addr);
      ds.write(0x44, 1); // start conversion, with parasite power on at the end
    
      byte present = ds.reset();
      ds.select(addr);
      ds.write(0xBE); // Read Scratchpad
    
    
      for (int i = 0; i < 9; i++) { // we need 9 bytes
        data[i] = ds.read();
      }
    
      ds.reset_search();
    
      byte MSB = data[1];
      byte LSB = data[0];
    
      float tempRead = ((MSB << 8) | LSB); //using two's compliment
      float TemperatureSum = tempRead / 16;
    
      return TemperatureSum;
    
    }
    
    double GetTempCpu(void)
    {
      unsigned int wADC;
      double t;
    
      // The internal temperature has to be used
      // with the internal reference of 1.1V.
      // Channel 8 can not be selected with
      // the analogRead function yet.
    
      // Set the internal reference and mux.
      ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
      ADCSRA |= _BV(ADEN);  // enable the ADC
    
      wait(20);            // wait for voltages to become stable.
    
      ADCSRA |= _BV(ADSC);  // Start the ADC
    
      // Detect end-of-conversion
      while (bit_is_set(ADCSRA,ADSC));
    
      // Reading register "ADCW" takes care of how to read ADCL and ADCH.
      wADC = ADCW;
    
      // The offset of 324.31 could be wrong. It is just an indication.
      t = (wADC - 324.31 ) / 1.22;
    
      // The returned temperature is in degrees Celsius.
      return (t);
    }
    
    float readVcc() {
      // 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  
    
      wait(20); // 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
    
      float result = (high<<8) | low;
    
      result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
      result=result/1000;
      return result; // Vcc in millivolts
    }
    
    
    
    Domoticz

  • Error sending switch command, check device/hardware !
    kk02067K kk02067

    I have got a new problem that I haven't had before.

    When I try to switch a node on or off from domoticz I see in MYSController that the command gets sent to the node. But domoticz says "Error sending switch command, check device/hardware !"
    I also see that domoticz sends the command at least twice.
    If I try the switch a couple of times more the same thing happens. But sometimes it works, and when that happens I see in MYSController that I that time also get a response from the node.

    When it don't work it looks like this:

    14888	2016-09-30 16:47:08	TX	200	1 - 200 RGB Led	C_SET	YES	V_LIGHT	0
    
    14889	2016-09-30 16:47:10	TX	200	1 - 200 RGB Led	C_SET	YES	V_LIGHT	0
    

    When it works it looks like this:

    14957	2016-09-30 16:49:25	TX	200	1 - 200 RGB Led	C_SET	YES	V_LIGHT	0
    
    14958	2016-09-30 16:49:25	RX	200	1 - 200 RGB Led	C_SET	YES	V_LIGHT	0
    

    The node also sends some status values regulary. Voltage of the mcu, Temperature of a ds18b20 and temperature of the mcu. All those messages get received without problems. So it doesn't seem to be a problem of the radios.

    When I change the status of a switch in domoticz, does it expect a response from the node? And if so, does the mysensors library send the response automatically? It seems like it does from the logs. And if the library sends the response why doesn't the response get received as it should? The statusvalues doesn't seem to get missed.

    Domoticz

  • MYSBootloader 1.3 pre-release & MYSController 1.0.0beta
    kk02067K kk02067

    In the "firmware_config.csv" file, on the first line it says:

    Type,Name,Version,File,Comments
    

    I know that it is there to explain how to add new lines to the file.
    But I don't know what "Type" is used for.
    The two examples have the numbers 10 and 20. I added a 30 and it seems to work but I would like to know what it's for.

    Thanks

    Development ota myscontroller mysbootloader

  • Placing strings in flash
    kk02067K kk02067

    @AWI thanks for clarifying. I will read up on the subject. Strings i C is not my favourite subject.

    Troubleshooting

  • Placing strings in flash
    kk02067K kk02067

    @mfalkvidd
    The string in the gateway becomes unreadable.

    Troubleshooting

  • Placing strings in flash
    kk02067K kk02067

    Hi.

    This line in a sketch:

    sendSketchInfo("Nod 200 - Altan", "V1.3");
    
    

    places the string both in flash and in ram. And when doing this:

    sendSketchInfo(PSTR("Nod 200 - Altan"), "V1.3");
    

    Places the string only in flash but it don't seem to work.

    the line:

    #include <avr/pgmspace.h>
    

    is in the begining of the sketch.

    Would like to save the ramspace

    Any ideas?

    Troubleshooting

  • Switchcases?
    kk02067K kk02067

    Hi.

    I need a little advice on where I can get cases similar to these:

    http://se.rs-online.com/web/p/products/0583432/

    Cheaper would be better. If I get these cases the complete switching module gets as expensive as generic z-wave device. And then there is almost no point in making them myself.

    Hardware

  • [Solved] MySensors 2.0 Ethernet gateway (ENC28J60) restart / IP issue
    kk02067K kk02067

    @tekka Updated arduino to latest version 1.6.11 and downgraded to boarddefs 1.6.11 and now it seems fixed, at least with softspi for the radio.
    I have to try it with hwspi some other day. Have to stop for today.

    The version of arduino 1.6.9 would not let me downgrade to boarddefs 1.6.11, thats why it did not work when I tryed it before.

    Thanks for all your help.

    Troubleshooting

  • [Solved] MySensors 2.0 Ethernet gateway (ENC28J60) restart / IP issue
    kk02067K kk02067

    @tekka I found a sketch that identify the bootloader when googleing a bit. It reports bootloader as:

    CRC 2048b @ 0x7800 = 489C
    Boot loader: Duemilanove

    Troubleshooting

  • [Solved] MySensors 2.0 Ethernet gateway (ENC28J60) restart / IP issue
    kk02067K kk02067

    @tekka Don't know. Cheap chinese clone of arduino nano

    How do I check?
    This is what the arduino IDE spits out when uploading to the nano:

    avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2009 Joerg Wunsch
    
             System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
    
             Using Port                    : COM6
             Using Programmer              : arduino
             Overriding Baud Rate          : 57600
             AVR Part                      : ATmega328P
             Chip Erase delay              : 9000 us
             PAGEL                         : PD7
             BS2                           : PC2
             RESET disposition             : dedicated
             RETRY pulse                   : SCK
             serial program mode           : yes
             parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             ByteDelay                     : 0
             PollIndex                     : 3
             PollValue                     : 0x53
             Memory Detail                 :
    
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
               flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
               lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
    
             Programmer Type : Arduino
             Description     : Arduino
             Hardware Version: 2
             Firmware Version: 1.16
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: Device signature = 0x1e950f
    avrdude: reading input file "C:\Users\Tony\AppData\Local\Temp\build12bf64d7a85151b4ee71a15dfecff5f5.tmp/GatewayW5100.ino.hex"
    avrdude: writing flash (26964 bytes):
    
    Writing | ################################################## | 100% 7.51s
    
    avrdude: 26964 bytes of flash written
    avrdude: verifying flash memory against C:\Users\Tony\AppData\Local\Temp\build12bf64d7a85151b4ee71a15dfecff5f5.tmp/GatewayW5100.ino.hex:
    avrdude: load data flash data from input file C:\Users\Tony\AppData\Local\Temp\build12bf64d7a85151b4ee71a15dfecff5f5.tmp/GatewayW5100.ino.hex:
    avrdude: input file C:\Users\Tony\AppData\Local\Temp\build12bf64d7a85151b4ee71a15dfecff5f5.tmp/GatewayW5100.ino.hex contains 26964 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 5.58s
    
    avrdude: verifying ...
    avrdude: 26964 bytes of flash verified
    
    avrdude done.  Thank you.
    
    Troubleshooting
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular