FreeRTOS Create Task

Hur skapar man en task i FreeRTOS för Arduino.
Exempel:

#include <Arduino.h>
#include <Arduino_FreeRTOS.h>

// Declare tasks
void
ChargeTask( void *pvParameters );
void LedTask( void *pvParameters );

void ChargeFunction(void *pvParameters)
{
// Do some charge stuff
}

void LedTaskFunction(void *pvParameters)
{
// Do some LED stuff
}

void setup()
{
ChargeFunction
   ,  (const portCHAR *)”ChargeFunktion”   // A name just for humans
   ,  256  // This stack size can be  adjusted by reading the Stack Highwater
   ,  NULL
   ,  2  // Priority, with 3 (configMAX_PRIORITIES – 1) being the highest,                   and 0 being the lowest.
,  NULL );

void loop()
{
   for (;;){};// Nothing happens in loop. Everyting happends in deklared task-funktions
}

Filosofi ??

Under denna kategori kommer det att ligga inlägg av med filosofisk karaktär.

Till att börja med tänker jag på hur man väljer vilka project man skall jobba med. Som Elon Musk säger, man skall utvärdera vilken påverkan det kommer att göra, och på hur många människor. Om de har liten påverkan på få människor är det kanske inte så bra. Men om det är en liten förbättring för väldigt många så kan det vara bra att titta vidare på. Kan man hitta någonting som förbättrar dramatiskt för många människor är det naturligtvis det bästa. Men med risk att man drar igång ett ”save the world”-liknande projekt.

Laddning i garaget.

I går installerade jag ett nytt el-skåp i garaget. Den innehåller en huvudbrytare, Energimätare och automatsäkringar. Det skall även installeras en jordfelsbrytare. Den inköptes i dag. Så 2017-08-02 var energiförbrukningen 0KWh. Energimätaren har även en pulsutgång som jag tänker använda för att mäta med ex. en Arduino. När jag kopplar in Nät i garaget kan den logga direkt till en Web-sida där jag kan se förbrukningen i realtid. Tills dess kommer jag sätta upp en liten log-bok så att jag kan ha kontroll på hur mycket el jag förbrukar och när. Första natten laddade jag ca 45KWh.

SmedbyCharger 2.0

SmedbyCharger 2.0 är en specialversion av smedbycharger som ämnar att få en första version av laddaren som fungerar för att ladda CityEl:n. Det är relativt begränsad gällande funktionalitet men skall vara en laddare som startar när den kopplas in och skall kunna vara inkopplad i flera dagar utan att kopplas bort. Initiale versionen är för BlyBatterier. Test av stabilitet utförs på gamla blybatterier för att inte förstöra Litium batterier i onödan.

För att inte vara helt olik kommande versioner av mjukvara kommer följande prosesser att styra laddaren:

ChargeTask,    Ser till att laddaren laddar enligt de globala variablerna.
SerialTask,     Skickar data till serieporten och LogViewer för analys av pågående laddning. Kan disablas för att använda serieporten för debug.
AutoCharge,     Startar laddningen automatiskt och styr laddaren om ingen extern enher styr laddaren via CAN-Buss.
TempReader,     Startar alla temp-givare, läser av temperatur och uppdaterar globala variabler.

 

CityEl laddarens funktion.

Så för att få en bra fuktion på laddaren är det några saker man behöver fundera på.
Skall laddaren först se om batteriet är anslutet.
Skall laddaren detektera om batteriet kopplas bort. (lösningen är kanske att minska pwm utan delay).
Skall en Soft-start rutin implementeras. (ja Soft start men inte soft shutoff).

Är batteriet anslutet:
Prova om man kan få resistans i batteriet. Om ingenting är anslutet bör pwm begränsas så att när någonting ansluts så rusar inte strömmen. En ”CheckIfBatteryConnected”-rutin bör implementeras, och först efter att laddaren detekterat batteriet bör laddningen börja.

För att få en fungerade laddare relativt snabbt så begränsas funktionaliteten initialt.
Funktioner som skall implementeras:

Ver 2.0
Check battery connected.
integrerad autostart.
Softstart
Simple error detektion. ex. battery dissconnected.

I ver 2.1 splittar vi på ladd-inteligensen och styrningen av laddning.
Laddaren skall kunna styras via CAN-Buss. Autostart blir en separat process som detekterar om laddaren styrs via can-buss. Om den inte styrs via can-bus skall den ha möjlighet till ett defaulp-ladd-program.

Ver 2.1
CAN-Bus controlled.
Möjlighet till autostart av laddning. (Om ingen CAN-bus enhet styr laddaren).
Smartare error-detekt.
Möjlighet till att köra en primary och flera slave-laddare.

 

 

 

Produktifiering

När man skall skapa en produkt från all det test-kod och labb/prototyper man skapat, ställs men inför lite nya problem. Vad skall kortet (PCB) heta och hur skall det revideras. Vad skall mjukvaran heta och hur skall den revideras. Skall man ha ett produktnamn där kort och mjukvara ingår och vad skall den heta och hur mycket kan man revidera en produkt. Till sist när blir det en ny produkt. Ett serienummer kopplat till Produkten, Lådan eller PCB:n?
Jag gör så här:
P/N: SDC-30a (Smedby DC-speedkontroller 30 Amp rev a)
PCB: SDC-30a rev 1 (Samma namn som produkten + rev för kortet)
S/N: Skrivs på PCB och på ev. Låda. Ev. i Flash på microcontroller.
Mjukvara: DC-Controller ver 1.0. kompileras i flera versioner för att supporta olika hårdvara. Filen kommer att heta SDC-30a_DC-C-1_0.bin