Sida 4 av 5
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 18 oktober 2011, 11:24:44
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å).
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 18 oktober 2011, 18:15:11
av Variosboy
Något enstaka går som sagt fint med fil, men flera blir sällan bra..

Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 20 oktober 2011, 13:49:26
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..
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 20 oktober 2011, 14:39:32
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.
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 08:07:48
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!
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 10:50:55
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.
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 12:03:41
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
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 12:46:20
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!!

Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 14:36:44
av janno
Låter som en bra förbättring på min idé. Räkna till noll i assembler är alltid enklast.
/J
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 21 oktober 2011, 15:26:48
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.
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 22 oktober 2011, 14:11:05
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.
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 22 oktober 2011, 23:05:46
av v-g
Går det inte med skicklighet så går det med tur som jag brukar säga

Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 23 oktober 2011, 19:41:18
av Variosboy
Ja, ibland ska man ha tur!
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!

Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 24 oktober 2011, 11:20:39
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..
Re: Pelletsövervakning.. igen... (BILD sida 3)
Postat: 24 oktober 2011, 11:30:36
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.