Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. marcoMD
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    marcoMD

    @marcoMD

    0
    Reputation
    3
    Posts
    179
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    marcoMD Follow

    Best posts made by marcoMD

    This user hasn't posted anything yet.

    Latest posts made by marcoMD

    • RE: Cannot flash atmega328 on new custom board

      Hi,
      I did a comparable design before (Link) and might be able to give some hints.

      At first, I dont know if it is part of your current problem but your schematic lacks of a capacitor that "transforms" the DTR signal of the FTDI-programmer into your RESET signal for your ATMEGA.
      See C3 in my schematic below.

      0_1558944580327_atmegaCircuit.PNG

      Instead you are routing the DTR-signal of the FTDI directly to the RESET pin which will not work.

      Although I had my reset circuitry right, I also had some issues to program those boards at first.
      The following approach worked fine for me:

      • Install "Sensebender Mirco" board definitions into Arduino IDE and select the 8MHz variant
      • Connect USBasp programmer (with selected 3.3V supply if NRF24 is allready applied)
      • Select USBasp as programmer and click on Burn Bootloader
      • disconnect USBasp and install FTDI
      • upload some sketch as usual

      The last step might not work with your missing capacitor but maybe you can just tinker a bit with the cable that connects your FTDI to you board to insert this capacitor in your signal line.

      By the way, if you FTDI programming is problematic but USBasb works fine, you can also use the USBasp directly to uplaod your scipt with the "upload with programmer" feature of the IDE.

      And one last piece of experience: You wrote, that you have not soldered the NRF24 on the board so far to not interfere with the SPI lines for the ATMEGA flashing. According to my experience this was never an issue. I have my NRFs applied right from the start and I burned bootloaders and programmed the processor with the USBasp directly a hundret times and never had issues.

      Regards,
      Marco

      posted in Hardware
      marcoMD
      marcoMD
    • RE: MY_SOFTSPI on Sensebender-Micro Derivate

      Hi @scalz ,

      thanks for the rapid reaction. Sure. Let's try this.
      Here is my code:

      /* --- Bathroom Environment Data Logging Node --- */
      
      // +-+-+-+-+-+-+-+-+ DECLARATION +-+-+-+-+-+-+-+-+
      
      // --- MYSENSORS DEFINITIONS ---
      // sketch
      #define SKETCH_NAME        "EnvBad"
      #define SKETCH_VERSION     "1.1"
      // debug prints
      #define MY_BAUD_RATE              (115200)
      #define MY_DEBUG
      #define MY_DEBUG_VERBOSE_RF24
      // soft SPI settings
      #define   MY_SOFTSPI
      #define   MY_SOFT_SPI_SCK_PIN     12 // (usually at pin 13)
      #define   MY_SOFT_SPI_MISO_PIN    13 //(usually at pin 12)
      #define   MY_SOFT_SPI_MOSI_PIN    11
      // NRF24
      #define MY_RADIO_NRF24
      #define MY_RF24_PA_LEVEL          (RF24_PA_HIGH)
      #define MY_RF24_CE_PIN            9
      #define MY_RF24_CS_PIN            10
      #define MY_RF24_IRQ_PIN           2   // need to be enabled using the solder jumper at the top side of the PCB    
      // LEDs
      #define MY_DEFAULT_TX_LED_PIN     6
      #define MY_DEFAULT_RX_LED_PIN     5
      #define MY_DEFAULT_ERR_LED_PIN    7 
      #define MY_WITH_LEDS_BLINKING_INVERSE
      // node ID
      #define MY_NODE_ID                (100)
      // child IDs
      #define CHILD_ID_TEMPERATURE      (0)
      #define CHILD_ID_HUMIDITY         (1)
      #define CHILD_ID_LIGHT            (2)
      
      // --- CONSTANTS ---
      // pin definitions
      const uint8_t phResistorEnPin = 4;
      const uint8_t PHOTO_RESISTOR_PIN = A0 ;
      // Timing constants
      const uint32_t ENV_VARS_CHECK_PERIOD_MS = 60UL*1000UL;
      const uint32_t LIGHT_CHECK_PERIOD_MS = 1UL*1000UL;
      
      // --- LIBRARIES ---
      #include <MySensors.h>
      #include <SHT3x.h>            // temp and humidity sensor
      
      // --- Objects
      SHT3x Sensor;
      
      // ------------------------------------------------------------------------
      //                                S E T U P
      // ------------------------------------------------------------------------
      void setup()
      {  
        Serial.println(F("-- " SKETCH_NAME " " SKETCH_VERSION));
        Sensor.Begin();
      }
      
      // ------------------------------------------------------------------------
      //                                L O O P
      // ------------------------------------------------------------------------
      void loop()
      {
        float tSHT;
        float hSHT;
        static uint8_t lightLev = 0, lightLevPrev = 200;
        static uint32_t t1 = millis(), t2 = 0;
        
        readPhRest(&lightLev);
        if ( abs(lightLevPrev - lightLev) >= 2 ) {
          lightLevPrev = lightLev;
          send( MyMessage(CHILD_ID_LIGHT,           V_LIGHT_LEVEL).set(lightLev) );
        }
        
        if ( t2 - t1 >= ENV_VARS_CHECK_PERIOD_MS ) {      
          readSHT3x(&tSHT, &hSHT);
          send( MyMessage(CHILD_ID_TEMPERATURE,     V_TEMP).set(double(tSHT), 2 /*#decimals*/) );
          send( MyMessage(CHILD_ID_HUMIDITY,        V_HUM).set(double(hSHT), 2 /*#decimals*/) );
          t1 = t2;
        }    
        wait(LIGHT_CHECK_PERIOD_MS);
        t2 = millis();
      }
      
      // ------------------------------------------------------------------------
      //                      SUB - ROUTINES
      // ------------------------------------------------------------------------
      // ----------------------- presentation --------------------------
      void presentation()
      {
        Serial.println(F("-- Init MySensors"));
        sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
        Serial.print(F("NodeID: "));
        Serial.println(getNodeId());
      
        present(CHILD_ID_TEMPERATURE,     S_TEMP,         "Bad_Temp");
        present(CHILD_ID_HUMIDITY,        S_HUM,          "Bad_LuFeu");
        present(CHILD_ID_LIGHT,           S_LIGHT_LEVEL,  "Bad_Hell");
      }
      
      // ----------------------- readSHT3x --------------------------
      void readSHT3x(float *_tSHT, float *_hSHT){
        Sensor.UpdateData();
        *_tSHT = Sensor.GetTemperature();
        *_hSHT = Sensor.GetRelHumidity();
        Serial.print("Temperature: ");
        Serial.print(*_tSHT);
        Serial.write("\xC2\xB0"); //The Degree symbol
        Serial.println("C");
        Serial.print("Humidity: ");
        Serial.print(*_hSHT);
        Serial.println("%");
      }
      
      // ----------------------- readPhRest --------------------------
      void readPhRest(uint8_t *_lLevel) {
        pinMode(phResistorEnPin,OUTPUT);
        digitalWrite(phResistorEnPin,LOW);
          
        *_lLevel = 100 - (uint8_t) ( ( (float)analogRead(PHOTO_RESISTOR_PIN) /10.24 ) + 0.5 ) ;
        
        pinMode(phResistorEnPin,INPUT);
        
        Serial.print  ("PhotoResistor: ");
        Serial.print  (*_lLevel);
        Serial.println();
      }
      

      and here my debug print:

       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.0
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,VER=2.3.0
      26 TSM:INIT
      28 TSF:WUR:MS=0
      30 RF24:INIT
      30 RF24:INIT:PIN,CE=9,CS=10
      34 RF24:WBR:REG=0,VAL=14
      43 RF24:WBR:REG=3,VAL=3
      45 RF24:WBR:REG=4,VAL=95
      47 RF24:WBR:REG=5,VAL=76
      49 RF24:WBR:REG=6,VAL=37
      53 RF24:WBR:REG=16,VAL=115
      55 RF24:WBR:REG=29,VAL=4
      57 RF24:RBR:REG=6,VAL=0
      61 !RF24:INIT:SANCHK FAIL
      63 !TSM:INIT:TSP FAIL
      65 TSM:FAIL:CNT=1
      67 TSM:FAIL:DIS
      69 TSF:TDI:TSL
      71 RF24:SLP
      71 RF24:WBR:REG=0,VAL=12
      10074 TSM:FAIL:RE-INIT
      10076 TSM:INIT
      10078 RF24:INIT
      10080 RF24:INIT:PIN,CE=9,CS=10
      10082 RF24:WBR:REG=0,VAL=14
      10090 RF24:WBR:REG=3,VAL=3
      10092 RF24:WBR:REG=4,VAL=95
      10096 RF24:WBR:REG=5,VAL=76
      10098 RF24:WBR:REG=6,VAL=37
      10102 RF24:WBR:REG=16,VAL=115
      10104 RF24:WBR:REG=29,VAL=4
      10108 RF24:RBR:REG=6,VAL=0
      10110 !RF24:INIT:SANCHK FAIL
      10115 !TSM:INIT:TSP FAIL
      10117 TSM:FAIL:CNT=2
      10119 TSM:FAIL:DIS
      10121 TSF:TDI:TSL
      10123 RF24:SLP
      10125 RF24:WBR:REG=0,VAL=12
      

      Moreover, I tried to re-programm an otherwise well-performing node (one with a DIP NRF24) by adding these lines to the program:

      #define   MY_SOFTSPI
      #define   MY_SOFT_SPI_SCK_PIN     13
      #define   MY_SOFT_SPI_MISO_PIN    12
      #define   MY_SOFT_SPI_MOSI_PIN    11
      

      ... and i got identical errors. So it really might be a limit of the softSPI to not use the hardware SPI pins.

      And considering the hint with the manual rewiring: Well, yes, I would consider this for one board but I want to deploy between 15 and 20 of those boards in our flat for varios types of sensors. I guess if software can't fix it I would bite the bullet an order a new PCB pile.

      Regards....

      posted in Development
      marcoMD
      marcoMD
    • MY_SOFTSPI on Sensebender-Micro Derivate

      Hi,

      The Background
      I have a simple question regarding the MY_SOFTSPI functionality. I designed my own pcb for a Sensebender Micro derviate that is utilizing a ATMEGA328-MMH chip (the 4x4mm SMD version) and mainly 0402 SMD parts.

      Here some impressions:
      1_1547118617381_IMG_4950.JPG 0_1547118617380_IMG_4949.JPG

      The PCBs are equipped with both footprints for the DIP and the SMD version of the NRF24 modules. However, I made a stupic mistake when wiring the SMD footprint and swapped the MISO and SCK connections.

      Here the thing (grrrrrr):
      0_1547118966906_Unbenannt.PNG

      The Issue
      I hoped to resolve this stupid mistake with these lines of code to swap the connections again:

      #define   MY_SOFTSPI
      #define   MY_SOFT_SPI_SCK_PIN    12
      #define   MY_SOFT_SPI_MISO_PIN   13
      #define   MY_SOFT_SPI_MOSI_PIN   11
      

      ... but it doesn't work out.

      The serial outputs is:

       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.0
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,VER=2.3.0
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 !TSM:INIT:TSP FAIL
      36 TSM:FAIL:CNT=1
      38 TSM:FAIL:DIS
      40 TSF:TDI:TSL
      10045 TSM:FAIL:RE-INIT
      10047 TSM:INIT
      10053 !TSM:INIT:TSP FAIL
      10057 TSM:FAIL:CNT=2
      10059 TSM:FAIL:DIS
      10061 TSF:TDI:TSL
      

      If I unsolder the NRF24-SMD version, plug the DIP version in (edit: and modify the code so that the hardware-SPI is used again), it is working instantly.

      So my guess is that it is not possible to use the native SPI pins as softSPI pins. Is this correct?

      Regards from cold Germany,
      Marco

      posted in Development
      marcoMD
      marcoMD