Kastriot Rexhaj

Vecka 9: Uppdatering

Vi inleder vecka 9 med att ha kommit igång med både kretskort och mjukvarulösning till badsensorenheten. Vi har även mottagit den sista av våra planerade komponentbeställningar innehållandes bland annat solpanel och kondensatorer (för att lagra ström). Blogginlägget kommer inte vara av den längre sorten då fortsättningsarbetet bestått av dem åtagandet som redan nämnts i tidigare inlägg. Lite mer fokus kommer ligga på den utvalda temperatursensorn och programmeringen av denna.

Temperatursensorn DS18B20 kommunicerar genom dallas wire protokollet. Detta protokoll har till skillnad från I2C, inte en speciellt imponerande datahastighet men däremot en längre räckvidd och potentiellt mindre strömförbrukning. En annan fördel är att den kan spara plats i ett elektronikprojekt genom att den endast kräver en datapinne och jord för att fungera. Detta då enheten innehåller en kondensator som lagrar laddning och strömförsörjer enheten när datakommunikationen är igång. Dessa egenskaper gör dallas protokollet användbart i IOT tillämpningar.

Dallas One Wire är ett typiskt Master – slave kommunikationsgränssnit där mikrokontrollern skickar kommando och efterfrågar data från enheten (temperatursensorn). Datapinnen bör alltid vara HIGH vid standardläge. Mikrokontrollern startar kommunikationen till temperatursensorn genom att sätta pinnen till LOW för 8 tidspulser på 60 mikrosekunder. Om en enhet finns på bussen så kommer den att svara med en puls tillbaka för att visa att den är tillgänglig.

STM32 kan läsa av en pinnes status även när dessa sätts till att agera som output. Detta som kan ses enligt bild. Vi kommer programmera pinnen till push-pull så att pinnen är HIGH och så att vi kan sätta den till LOW i fördefinierat tidsintervall för att väcka enheten.

Varje enhet har en hårdkodad adress som unikt identifierar just den enheten och som man måste anropa för att enheten ska reagera.

Kodexempel.

Vi sätter pinnen som är kopplad till vår temperatursensor till LOW i 480 mikrosekunder. Vi låter sedan i andra kodstycket pinnen gå till HIGH för att invänta en lågpuls från vår DS18B20-enhet. Den tredje raden strax efter TM_GPIO_GetInputPinValue(OneWireStruct->GPIOx, OneWireStruct->GPIO_Pin) läser av ingången och sätter antingen en “etta” eller “nolla” till en variabel som vi sedan använder för att bedöma om vår temperatursensor överhuvudtaget fungerar.

Sedan så följer en uppsättning bytes som man ska skicka för att sensorn ska återge temperaturvärdet tillbaka. Det ska också implementeras CRC-funktion för att bedöma ifall temperaturvärdet som man fått tillbaka är korrekt eller korrupterats.

Ovannämnda följer i nyare inlägg då dessa blir mer utforskade och arbetet hunnit längre.

Tack för läsningen och på återseende.

/Jonas, Viktor, Kastriot