How to add support for SAM D51/Cortex M4?
-
Hello,
my name is Karl-Heinz and I discovered MySensor a few days ago. I am very impressed and would like to use it for all my sensors.
I have 8bit and 32bit MCUs.
My latest MCU is an SAM D51 (Adafruit Itsybitsy M4).
I can use it when I make a minor modification to MySensors/hal/architecture/SAMD/MyHwSAMD.cpp.
When I try to compile Arduino IDE throws an error, that ADC is not defined in this context -> uint16_t hwCPUVoltage()
I have not much experience with programming. Therefore I commented all code lines in uint16_t hwCPUVoltage() and added hardcoded "return 3.3;"
Then I can compile at least what I tested so far for the SAM D51.Of course this is not a solution. Therefore I would like to ask what is the proper way to modify MySensors for use with the Cortex M4 processors.
Thanks a lot and keep the good work going!!
Sincerely
Karl-Heinz
-
Hello,
my name is Karl-Heinz and I discovered MySensor a few days ago. I am very impressed and would like to use it for all my sensors.
I have 8bit and 32bit MCUs.
My latest MCU is an SAM D51 (Adafruit Itsybitsy M4).
I can use it when I make a minor modification to MySensors/hal/architecture/SAMD/MyHwSAMD.cpp.
When I try to compile Arduino IDE throws an error, that ADC is not defined in this context -> uint16_t hwCPUVoltage()
I have not much experience with programming. Therefore I commented all code lines in uint16_t hwCPUVoltage() and added hardcoded "return 3.3;"
Then I can compile at least what I tested so far for the SAM D51.Of course this is not a solution. Therefore I would like to ask what is the proper way to modify MySensors for use with the Cortex M4 processors.
Thanks a lot and keep the good work going!!
Sincerely
Karl-Heinz
A (still incomplete but) less inelegant solution is to
return FUNCTION_NOT_SUPPORTED;As is done for esp32 for example: https://github.com/mysensors/MySensors/blob/6ffe29cb5fcfa33fa83133044c2d16ee45c66697/hal/architecture/ESP32/MyHwESP32.cpp#L119
-
Hallo Mikael,
thank you for your hint.I modified the hwCPUVoltage() part of MyHwSAMD.cpp like this. It works for me. Maybe it is not the best solution, however.
Sincerely
Karl-Heinz
uint16_t hwCPUVoltage() { #ifdef __SAMD51__ return FUNCTION_NOT_SUPPORTED; #else // disable ADC while (ADC->STATUS.bit.SYNCBUSY); ADC->CTRLA.bit.ENABLE = 0x00; // internal 1V reference (default) analogReference(AR_INTERNAL1V0); // 12 bit resolution (default) analogWriteResolution(12); // MUXp 0x1B = SCALEDIOVCC/4 => connected to Vcc ADC->INPUTCTRL.bit.MUXPOS = 0x1B ; // enable ADC while (ADC->STATUS.bit.SYNCBUSY); ADC->CTRLA.bit.ENABLE = 0x01; // start conversion while (ADC->STATUS.bit.SYNCBUSY); ADC->SWTRIG.bit.START = 1; // clear the Data Ready flag ADC->INTFLAG.bit.RESRDY = 1; // start conversion again, since The first conversion after the reference is changed must not be used. while (ADC->STATUS.bit.SYNCBUSY); ADC->SWTRIG.bit.START = 1; // waiting for conversion to complete while (!ADC->INTFLAG.bit.RESRDY); const uint32_t valueRead = ADC->RESULT.reg; // disable ADC while (ADC->STATUS.bit.SYNCBUSY); ADC->CTRLA.bit.ENABLE = 0x00; return valueRead * 4; #endif }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login