Hjälp att skapa en flödesmätare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
christoferivarsson
Inlägg: 67
Blev medlem: 10 juli 2008, 15:47:06
Ort: stockholm
Kontakt:

Hjälp att skapa en flödesmätare

Inlägg av christoferivarsson »

Jag har plockat upp min gamla lärobok i mikrodatorteknik och försöker lära mig assembler igen. Anledningen är att jag vill skapa en flödesmätare till min båt som mäter bränsleflödet. Min tanke är följande:

1. En flödesmätare av hall-typ ger en fyrkantsvåg som med en frekvens som är linjär mot flödet. En timer räknar antalet pulser och lagrar i ett register vid interrupt.

2. En annan timer räknar antalet klockpulser och lagrar dessa i ett register vid interrupt.

3. Antalet givarpulser lagrade i registret översätts till annan enhet (typ 1000 pulser = 0.1l)

4. Antalet klockpulser översätts i tidsenhet (typ 1000pulser =1 sek)

5. Givarpulserna divideras med klockpulserna och man får flödet i l/s



Hur skriver man en sådan rutin? Någon som gjort något liknande som vill dela med sig. Hade varitsuperschysst om jag fick något att kika på så jag kan lära mig snabbare.

Tack
Christofer
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det är väl osannolikt att du hittar *exakt* det du beskriver.
Men varje steg för sig kanske någon har ider om.

Men i princip så har du ju redan beskrivit vad som ska
göras så det är "bara" att översätta det till kod.

Du får nog vara lite mer specifik kring vad det är
som du undrar över...
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Vad är det för processor? Vad har du tänkt använda för språk?Oj, assembler stod det ju

Enklast är väl att kolla i databladet hur interrupthantering och timers konfigureras, och kanske söka efter detsamma på nätet för tips.
christoferivarsson
Inlägg: 67
Blev medlem: 10 juli 2008, 15:47:06
Ort: stockholm
Kontakt:

Inlägg av christoferivarsson »

Vad jag funderar över är framför allt

Räknar timer0,1,2 alltid interna klockpulser default?

Hur dividerar jag ett register med ett annat?

Vilken display är den absolut enkalst att programmer? en 7-segments?

/Christofer
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

På 1&2 svarar jag RTFM.
På 3 svarar jag DLR3416, Sodjan kanske har några kvar?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

PIC matterutiner (av varierande kvalitet)
http://www.piclist.com/tecHREF/microchip/math/index.htm
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Och AVR datablad finns här http://atmel.com/dyn/products/devices.asp?family_id=607

Har du en Renesas, NXP, whatever så vore det bra om du sa det så man vet.... Eller förresten, skit samma, för det gör jag i denna tråden nu. Gissningslekar har jag inte tid med.

EDIT för att förtydliga:

Vad jag funderar över är framför allt

Räknar timer0,1,2 alltid interna klockpulser default?
Om det är AVR, JA dock med inställbar prescaler

Hur dividerar jag ett register med ett annat?
Använd division om prossesorn har det, har den det?
Vilken display är den absolut enkalst att programmer? en 7-segments?
Har det redan kommit förslag på så det svarar inte jag på
/Christofer
Hade du angett vilken uc du funderar op att använf/använder hade kanske någon haft förslag....
christoferivarsson
Inlägg: 67
Blev medlem: 10 juli 2008, 15:47:06
Ort: stockholm
Kontakt:

Inlägg av christoferivarsson »

Ingen är förpliktigad att svara på ett inlägg så om det skall vara trist attityd så låt bli. Jag är en glad nybörjare som trodde jag hittat ett schysst forum.

Jag vet inget om era förkortningar. Allt jag vet är följande.

Jag är upplärd på Microships produkter och använder MPlab. Processor som jag tänkt använda är 18F452. Språk assembler.

Jag vill veta hur jag räknar givarpulser på en TIMER samtidigt som jag räknar klockpulser. Dessutom måste jag skriva ett interrupt som avbryter räkningen efter en viss tidsenhet låt säga 1sekund.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Räknar timer0,1,2 alltid interna klockpulser default?

Helt ointressant vad den räknar per default!

Ställ in den som du vill ha det enligt databladet.
Lita *aldrig* på defaults, ställ in allt som kan vara
rellevant för din applikation. Om du t.ex ska använda
Timer1, ställ in *allt* som har med Timer1 att göra så
som *du* vill ha det.

Detta är speciellt viktigt om du vill att andra ska titta på din
kod (vilket verkar rimligt här), annars får du en massa frågor
om du har tänkt på det-och-det...

> Hur dividerar jag ett register med ett annat?

Som sagt, www.piclist.com har många exempel.

*MEN*, i många fall när man ställer den frågan så
handlar det mer om att man inte har analyserat sitt
problem tillräckligt. Generellt gäller att undvika divisioner
så mycket det går (undantaget divisioner med 2, 4, 8 o.s.v
vilket är väldigt enkelt att fixa).

Samma sak gäller om man börjar fråga om "floating point", det
är väldigt sällan som det faktiskt behövs. I 99 fall av 100 kan det
hela mycket enklare realiseras via fixed point rutiner.

> Vilken display är den absolut enkalst att programmer? en 7-segments?

Det beror lite på din definition av "enkel".

HD44780 LCD har mycket färdiga exempel och rutiner. T.ex :
http://www.jescab.se/HD44780.html

DLR3416 som nämndes är en liten 4-teckens display. Programexempel finns här:
http://www.jescab.se/DLR3416.html
Och ja, jag har en hel del kvar av dom.

> Jag är upplärd på Microships produkter och använder MPlab.
> Processor som jag tänkt använda är 18F452.

Eftersom du totalt missade att nämnda det i ditt *första* inlägg (personligen
fick jag uppfattningen att du inte visste alls vad du skulle använda),
så får du faktiskt tåla det som du kallar "trist attityd".

> Dessutom måste jag skriva ett interrupt som......

Bara ett litet förtydligande. Man skriver inte interruptet.
Man skriver den kod som ska köras när ett interrupt inträffar. :-)
Denna kod kallas också ISR (Interrupt Service Routine).

Slutligen, eftersom du är "upplärd" med MPLAB och PIC processorer, så
verkar dina frågor lite underliga. Du borde ju redan ha mer "kött på benen"
än vad det låter som.

Men, det är ingen ko på isen, det är bara att tuta på med fler detaljfrågor!
Men dölj inte viktig information, som Björn sa, att gissa har vi inte tid med... :-)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Tack för att du tog dig tid att svara på vad *du* hade tänkt använda. Givetvis kan ingen tvinga dig till det, men om man vill ha hjälp så är den ininformayionen ett minimum.
Själv hade jag därmed kunnat strunta i denna tråden från början då jag inte använder PIC, och för att hjäpa dig måste jag isåfall kolla databladet först. Och skall jag göra det och lära mig en ny processor så tar jag "tyvärr" mer betalt per timme än om det vore någon processor jag kunde svaren utan till på (läs : AVR)
Dock är jag övertygad om att du kommer få hjälp av en hel del PIC-kunnigt folk

Inte menigen att att vara tyken med "trist attityd" men nu förstår du nog varför jag skrev som jag gjorde.

Lycka till.
christoferivarsson skrev:Ingen är förpliktigad att svara på ett inlägg så om det skall vara trist attityd så låt bli. Jag är en glad nybörjare som trodde jag hittat ett schysst forum.

Jag vet inget om era förkortningar. Allt jag vet är följande.

Jag är upplärd på Microships produkter och använder MPlab. Processor som jag tänkt använda är 18F452. Språk assembler.

Jag vill veta hur jag räknar givarpulser på en TIMER samtidigt som jag räknar klockpulser. Dessutom måste jag skriva ett interrupt som avbryter räkningen efter en viss tidsenhet låt säga 1sekund.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

christoferivarsson skrev:Ingen är förpliktigad att svara på ett inlägg så om det skall vara trist attityd så låt bli. Jag är en glad nybörjare som trodde jag hittat ett schysst forum.

Jag vet inget om era förkortningar. Allt jag vet är följande.

Jag är upplärd på Microships produkter och använder MPlab. Processor som jag tänkt använda är 18F452. Språk assembler.

Jag vill veta hur jag räknar givarpulser på en TIMER samtidigt som jag räknar klockpulser. Dessutom måste jag skriva ett interrupt som avbryter räkningen efter en viss tidsenhet låt säga 1sekund.
Det finns en massa färdiga exmpel i Microchips application notes. Har du kollat dessa?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

Hej Christoffer
Välkommen till forumet.

Du har beskrivit programstrukturen som du vill ha riktigt bra.
Bör inte vara allt för svårt att skriva.
Men.. gör så här istället..
Sätt en timer/counter till att räkna externa pulser från din hallsensor.
Sätt en annan timer till att räkna till 1 sekund. Använd lämplig prescaler.
När denna timer har räknat upp till en sekund så genererar den ett interrupt. Använd Overflow eller Capture/Compare för att få fram 1 sekund.

I detta interrupt läser du av vad din counter har kommit upp till och så
nollställer du countern.

Nu har du ett värde som samlats in på 1 sekund. Ytterligare justering
för presentation kan du göra med lite multiplikation/division. Oftast
går detta att lösa ändå utan mult/div

Lycka till

Swech
christoferivarsson
Inlägg: 67
Blev medlem: 10 juli 2008, 15:47:06
Ort: stockholm
Kontakt:

Inlägg av christoferivarsson »

Ok tack för konstruktiva tips. Jag har inte programmerat assembler sedan 2002 varför mina frågor kan verka triviala. Nu vet jag iaf vad jag skall göra på semestern. Återkommer senare i projektet. trevlig sommar :)

/Christofer
Skriv svar