Pelletsövervakning.. igen... (BILD sida 3 och 5)

Berätta om dina pågående projekt.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av v-g »

Du kan ju köpa en fil annars ;) Faktiskt enklare än man tror att göra fyrkantiga hål (ja inte i massor då).
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Något enstaka går som sagt fint med fil, men flera blir sällan bra.. :humm:
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Nu har jag en fundering till!

Har ju som sagt tänkt att pressentera mängden återstående pellets som ett procenttal.
Först tänkte jag bara låta vissa "gångtider" på skruven motsvara olika procenttal, alltså jämföra räknaren med fasta värden för 100%, 90%,80% osv osv och skriva ut dessa..

Men det skulle ju vara snyggare å bara räkna om räknaren och på så sätt få ut rätt procenttal på en gång.. Presenterat med noggranheten ental, alltså 100%, sen 99% osv.
Har dock ingen bra idé för hur detta ska gå till..
Som det är nu så börjar jag på 0000 0000 och räknar uppåt, men jag skulle ju lika gärna kunna börja på 1111 1111 och minska detta värde för varje sekund skruven går..
alltså skulle 1111 1111 motsvara 100%..

Vet inte om jag skrivit det tididgare, men jag använder mig av PIC 16F690 och kodar i asembler..
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Icecap »

Det är ganska enkelt att få ut % faktisk.

Om ditt 16-bit värde "Åtgången Pellets" (X) räknas upp som vanligt, då har du ett kalibrerat värde som är 100% (Y), också på 16 bit.

Då kan man räkna ganska enkelt:
Åtgången procentdel = (100 * Y) / X.
Problemet med det är att Y ska multipliceras med 100 och då blir det sannolikt 24 bit och det är ganska onödigt.

Alltså gör vi om lite:
Åtgången procentdel = Y / (X / 100).

Procentdel kvar = 100 - Åtgången procentdel.

Då det inte är saker som måste räknas ut blixtsnabbt kan divisionen ordnas vid upprepande 16 bit subtraktioner.
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Okey, det blir såpass "enkelt" att göra det alltså.
Var inne på det spåret, men är inte riktigt vän -ännu- med att räkna på det sättet man måste göra i asembler, med upprepade divisioner osv osv.

Tack igen!
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Icecap »

Det enkla sättet att dividera är att subtrahera och räkna hur många gångar det går.

Men när man väl har gjort den korrekta divisionsrutin (finns helt säkert på PIClist) är det minst lika enkelt att använda den. En riktig divisionsrutin tar ung. samma antal steg att köra igenom oavsett vilka värden det rör sig om, en "upprepande subtraktion" varierar kraftigt med vilka värden som det räknas med.

Med en unsigned 16 bit divisionsrutin kan du enkelt göra 16-bit värden till decimalt till visning på LCD eller sändning på serieport.
Hitta en 16-bit multiplikationsrutin medan du är igång och livet blir så mycket enklare.

Lägg dom i var sin fil som du kan inkludera i olika projekt och du behöver bara göra det en enda gång.
janno
Inlägg: 431
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av janno »

Eller så räknar du ut hur stor andel 1% är (eller 5%, 10% beroende på vilken nogrannhet) så adderar du det värde från startvärdet beroende på om du vill räkna från 0-100 eller från 100-0 (ena hållet blir ett negativt tal). Varje gång du har ökat procentvärdet så adderarar du det talet till en global variabel så att du vet att när din räknare passerat det värdet så är det tid för att upprepa proceduren (öka procentvärdet).

/J
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Det där var ju faktiskt inte så dumt!

Om jag -som du säger- räknar ut vilket värde på räknaren som motsvarar 1% så är det ju bara att sätta räknaren på det värdet från början, och räkna ner till noll, och när jag når noll så drar jag ifrån 1 från variabeln som innehåller mitt procenttal och återställer räknaren till värdet för 1% igen!

Det ska testas i helgen!! :)
janno
Inlägg: 431
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av janno »

Låter som en bra förbättring på min idé. Räkna till noll i assembler är alltid enklast.

/J
Användarvisningsbild
MiaM
Inlägg: 12885
Blev medlem: 6 maj 2009, 22:19:19

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av MiaM »

En annan variant är att ha en tabell över de räknarvärden som motsvarar procenttalen du vill kunna visa, och jämföra räknevärdet med innehållet i tabellen och se var i tabellen du "ligger". Enklast är väl att ha en tabell där varje tal är lika stort som räknarens tal, men om man accepterar sämre noggrannhet och vill spara utrymme så kan man skifta runt räknarvärdet så att man får ett tal som fyller en byte så bra som möjligt, och sedan använde det för att titta i en tabell med 8-bit-tal. Valet mellan en sånhär lösning eller att räkna med division beror väl på hur gott/dåligt om minne man har och hur bra/dålig processorn är på att göra olika saker.

För övrigt så dividerar man väl med en konstant, och då kan man istället multiplicera med en annan konstant och gissningsvis få lättare kod.
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Sådär ja, då var första driftstoppet kommet.

Räknare1 stannade på 100 och räknare2 på 209.
Det innebär alltså att Räknare2 räknat till 255, hundra gånger och med ett överspill på 209 om man uttrycker sig så.

Ska bli intressant å se om det blir ungefär lika denna gången

Som det blev nu är ju perfekt! Det innebär att jag kan använda hela min räknarrutin som den är, men istället för att "räknare1" räknar upp från noll, så sätter jag den till 100, och räknar ner för varje gång räknare2 slagit runt!

Då kan jag helt enkelt skriva ut Räknare1 som mitt procenttal direkt.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av v-g »

Går det inte med skicklighet så går det med tur som jag brukar säga :D
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Ja, ibland ska man ha tur! :D

Det var som när jag flyttade över komponenterna från labplattan till veroboardet, allt fungerade på en gång, det brukar det heller aldrig göra! :wink:
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Variosboy »

Sådär ja, då har jag kommit på ännu ett problem som jag måste lösa på något vettigt sätt, nämligen strömreserv!
I natt hade vi strömavbrott hemma i en kvart, och givetvis fick detta räknaren att starta om.
Det är extremt ovanligt att vi har strömavbrott och sällan är det några längre stunder..

Strömavbrott innebär ju egentligen inget problem för anläggningen i övrigt, brännaren startar ju om av sig själv så det rullar ju på som vanligt..

Skulle vilja ha någon form av backup för PIC:en, LCD:en skiter jag i om den slocknar. det räcker väl att ha en ingång på PIC:en som talar om för programmet om huvudmatning försvinner så man kan initiera om displayen när strömmen väl är tillbaka och även skriva ut det som status på LCD:en, att strömmen brutits..

Så, ska man gå på en batterilösning, eller en kondensator modell större, eller vad säger ni!?!?

Gissningsvis har vi max ett avbrott per år och detta varar sällan mer än kanske en kvart ungefär..
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Pelletsövervakning.. igen... (BILD sida 3)

Inlägg av Icecap »

EEPROM!!! Finns ganska säkert i PIC'en redan!

Om du gör en timer som startas om varje gång doseringsmotorn kör och som "går ut" när det har gått mer än tiden mellan doseringarna, då använder du den till att spara status. Om strömmen går under en eldningscykel förlorar du bara den eldningscykel i värde, sedan tickar resten med.

En variation är att spara (om det finns någon ändring alls) var 10'nde minut.

Vid uppstart laddar du då räknaren med det sparade värde och saken är biff.

Detta sätt utgick jag ifrån att du redan använde... på det vis kan man enkelt kalibrera 100% och sedan med en enkel divisionsrutin få ut i % hela tiden.
Skriv svar