Fordulatszám mérés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Fordulatszám mérés

Hozzászólás Szerző: gerry »

Üdv!

Ma reggel felkeltem és eszembe jutott egy project, ami még nem szerepelt itt a fórumon. Ez pedig egy fordulatszámmérő kétütemü robogóhoz.
Pic-es projectet találtam egy párat de avr-es nem sok van.

Gyenge programozási képességem miatt (sajnos elhanyagoltam az oldal látogatását) a segítségeteket kérném, persze nem a program megírásában, hanem a program működéssel kapcsolatban.
A program elméletileg így nézne ki.
Timer elindul, (szabadon fut), túlcsorduláskor kiértékeli egy adott lábon beérkező impulzusok számát. Ezt felszorozza 60-al (percenkénti fordulatszám). De lehet le kell vonni a timer futási idejét a 60 másodpercből és a maradék idővel felszorozni a timer túlcsordulás alatt beérkező impulzusokat?
Kiértékelés, kijelzés.

Na valahogy így képzeltem el, de minden ötletet szívesen fogadok.
Üdv!
A hozzászólást 1 alkalommal szerkesztették, utoljára gerry 2009. augusztus 23. vasárnap, 9:18-kor.
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

Hozzászólás Szerző: DOGMAN »

Üdv!

Én így csinálnám:
8bites timert beállítom 250ms megszakításra
int0-ra kötöm a jeladót ami küldi az impulzusokat.
int0 megszakításakor imp változót növelem 1-el
Mikor timer túlcsordul akkor megkapom a 250 ms alatt megtett fordulatok számát.
Korlát: így a legkisebb mérhető fordulatod 240 f/perc lesz: 1 imp * 4*60 mert megszakításonként minimum 1 impulzust tudsz venni.
50 impulzus timer0án így: 12000 F/min lesz (50 imp*4*60)
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

DOGMAN írta:Üdv!

Én így csinálnám:
8bites timert beállítom 250ms megszakításra
int0-ra kötöm a jeladót ami küldi az impulzusokat.
int0 megszakításakor imp változót növelem 1-el
Mikor timer túlcsordul akkor megkapom a 250 ms alatt megtett fordulatok számát.
Korlát: így a legkisebb mérhető fordulatod 240 f/perc lesz: 1 imp * 4*60 mert megszakításonként minimum 1 impulzust tudsz venni.
50 impulzus timer0án így: 12000 F/min lesz (50 imp*4*60)
Üdv!
Köszönöm, valahogy én is így csinálnám meg, csak nem voltam tisztában a számításokkal. :)

Még egyszer köszi!
üdv!
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Üdv!

Egy kis segítség kellene, 250ms-os timert kellene beállítanom, de sehogyan sem megy. Próbáltam visszafele kiszámolni, de valami nem igazán jött össze. Az avrcalc-ot is megnéztem, de hogy amit kiad értéket azzal mit kell csinálni...... hát azt bíz nem tudom. Ezt írtam bele.

Kép

8Mhz crystal, prescale 64, needed timer 250ms.

Ezek után hogyan kell konfigolni a timer0-t?

köszi!
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

Hozzászólás Szerző: DOGMAN »

timer0 nem adja ki 250 ms-ra

ezt a programot használd: http://www.tanyalap.hu/Moslekos/dogman/ ... 0Timer.exe

Kép

Kép
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Köszönöm szépen DOGMAN a segítséget!

Nem akarok ám minden kis semmiségért segítséget kérni, de ezt nem tudtam volna megoldani.
Igaz egy hét gondolkodás és Bascom help olvasgatás kellett ahhoz, hogy mega8-al 4db. hétszegmenses ledkijelzőt tudjak multiplex vezérelni úgy ,hogy egy számot megadva azt kiírja a kijelzőre, mert 99 ig kiírta,de 100 fölött már csak krix-kraxokat jelzett ki, de végül is sikerült. Most 0-9999 bármilyen számot ki tudok íratni a szofverrel. Gondolkodom még egy mátrixon rs232es adat kiírással, de ez csak a jövő.

Még egyszer köszönöm!
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00
Tartózkodási hely: Győr

Hozzászólás Szerző: evildodo »

DOGMAN írta:timer0 nem adja ki 250 ms-ra

ezt a programot használd: http://www.tanyalap.hu/Moslekos/dogman/ ... 0Timer.exe

Kép

Kép
köszi dogman a progit, ezt nem ismertem!
Amúgy én is hasonló projekten vagyok, egész jól halad
Geht nicht, Gibt's nicht!
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Naszóval alakul a progi!!! Márcsak frekigenerátorral kell tesztelnem, de azért fel kell mennem a padlásra, de majd csak holnap este.
Tegnap este számolgattam és arra jutottam, hogy szép szép, működik is a program, de, ahogy Dogman levezette a megszakítást és a mérhető értéket, rá kellett jönnöm ,hogy a fordulat kijelzés X impulzus *4*60, vagyis 240 minimum kezdőértéktől indul és 240-el lépked felfele, ami nem is lenne rossz, csakhogy a kijelzőn (hülyén) néz ki, hogy "most 720...960"...stb lépked fel, ill. lefele. Azt meg lehetne oldani valahogy programmal, hogy a timer megszakítás után az x*4*60 (x*240) eltároljuk és a következő timer tulcsorduláskor számított x*240 -et összehasonlítva az előzővel egy teszem azt for-next ciklusba betéve számoltassuk és ezt az értéket lepörgetve a kijelzőn úgy látszana, mintha egyesével lépkedne? Vagy ez már túl bonyolult lenne megoldani szoftveres multiplex kijelzéssel?

Remélem érthetően magyaráztam el.
Köszi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Adott időnként íratod csak ki és nem megszámolod eddig mennyi jött, hanem frekvenciává alakítod (impulzusszám/idő.
De bulibb, ha vizszintes vonal az LCD-n és így VU meter alapon is látszik:)
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Robert írta:Adott időnként íratod csak ki és nem megszámolod eddig mennyi jött, hanem frekvenciává alakítod (impulzusszám/idő.
De bulibb, ha vizszintes vonal az LCD-n és így VU meter alapon is látszik:)
Mondasz valamit! Tegnap még kipróbáltam, hogy kivettem a (felszorzást) és így teljesen jól látszott a számok fel és lefutása. Még dolgozom rajta egy kicsit. Köszi
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00
Tartózkodási hely: Győr

Hozzászólás Szerző: evildodo »

gerry írta:Naszóval alakul a progi!!! Márcsak frekigenerátorral kell tesztelnem, de azért fel kell mennem a padlásra, de majd csak holnap este.
Tegnap este számolgattam és arra jutottam, hogy szép szép, működik is a program, de, ahogy Dogman levezette a megszakítást és a mérhető értéket, rá kellett jönnöm ,hogy a fordulat kijelzés X impulzus *4*60, vagyis 240 minimum kezdőértéktől indul és 240-el lépked felfele, ami nem is lenne rossz, csakhogy a kijelzőn (hülyén) néz ki, hogy "most 720...960"...stb lépked fel, ill. lefele. Azt meg lehetne oldani valahogy programmal, hogy a timer megszakítás után az x*4*60 (x*240) eltároljuk és a következő timer tulcsorduláskor számított x*240 -et összehasonlítva az előzővel egy teszem azt for-next ciklusba betéve számoltassuk és ezt az értéket lepörgetve a kijelzőn úgy látszana, mintha egyesével lépkedne? Vagy ez már túl bonyolult lenne megoldani szoftveres multiplex kijelzéssel?

Remélem érthetően magyaráztam el.
Köszi
Én a bejövő impulzusokat int be tettem, és simán csak egy változó értéke növekszik int-re. A Timer túlcsordulásakor pedig kiirja az értéket, és nullázza az int változóját. Fontos hogy az interrupt csak változó érték növelést / csökkentést tartalmazzon, nehogy magas fordulaton jel "elvesszen". Az enyém 7segmenses multiplex vezérlésű ledsorra írja az értékeket,nem annyira bonyolult, hisz még nekem is sikerült:) A gondom csupán annyi, hogy ha lcd-t kezelek, akkor egy kicsit megborul a multiplex vezérlés, mivel sok erőforrás kell az lcd kezeléshez. Erre eddig nem találtam megoldást...
Amúgy a frekigenerátor rajza érdekelne engem, ha esetleg tudsz valamit! :)
Jó szrakozást :)
Geht nicht, Gibt's nicht!
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Nekem a multiplex kijelzés egy do-loop ciklusban rohangál 4ms késleltetéssel, az int megszakításban csak egy A=A+1 szerepel a timer túlcsordulásban pedig a beérkezett impulzus kiértékelése, vagyis

Kód: Egész kijelölése

fordulat= impulzus * 240 
Az egyik verzióban a timer hívta meg egy CALL utasítással a kijelzőt, de kivettem, hogy ennyivel is gyorsabb legyen.

A frekigenerátort egy 555-el oldottam meg, egy asszem astabil multivibrátor? két poti van egy tengelyen, hogy a kitöltési tényező és a lefutóél,vagyis szünet is egyformán szabályozható legyen, majdnem olyan mint egy pwm generátor. csak pár alkatrész és az 555 bármire használható.

Még meg kell oldanom, hogy a szegmens kijelzőkön csak akkor kapcsoljanak be az értékek (tiz, száz, ezer), ha eléri azt a számot, tehát ne 0045 legyen a kijelzés, csak 45. De ezt már fejben megcsináltam.

Amikor még a multiplex kijelzéssel szórakoztam, párhuzamosan futott a próbapanelon egy lcd is, hogy lássam az számításokat és tényleg megbolondult a multiplex vezérlés. Erősen vibrált és egyes számjegyek hol erősebben hol gyengébben világítottak. Egy mega8-al kezdtem a kísérleteket, de egy tiny2313 folytattam, mert be kellett volna a mega8 reset, vagy quarc lábait áldozni, de így is elég lesz a tárhely, mert még csak 45%-nál járok és csak több lesz. Lehet hogy teszek bele egy hömérőt is, mert a project egy robogóra készül.
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

Hozzászólás Szerző: szepnorbee »

Üdv mindenki! Én is szeretnék egy egyszerű fordulatszám mérőt építeni. Kérdésem, ha én közben az lcd egyik sarkába a pontos időt is ki akarom iratni, a TOSC lábakra órakvarcal meghajtva a timert async módban, akkor ez a timer0 vagy timer1 órajelét tolja el? Vagy esetleg mindkettőét? Az AVR-calc-ba az órakvarc frekijét írjam be ha én pl. 200 ms alatt meg szeretném számolni az int1 lábra érkező megszakitások számát? Ahogy én számolom, így egy 16bit-es timer kell nekem, prescale=1 -el. Ez viszont megköveteli a timer1-et mert ha jól tudom csak az lehet 16 bit-es. Vélemény?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10113
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Hozzászólás Szerző: Robert »

Hülye kérdés:
1xre egy projektet vigyél végig - szerintem....
El fogsz veszni a részletekben :(

Timer0 vagy Timer2 a belső óra.
200msec alatti impulzusok számolásához PRECÍZ óra kell!
Ezt a belső RC nem tudja.

Így M8 helyett M16ra át kell nyergelni. Ehhez van külső kvarc és külső órakvarc lehetőség is....
Impulzusszámolás lehet:
- INT alapon
- Timer, mint számláló, de ha adott ideig: 2db TIMER kell!

A timer a legbonyolultabb része a chipnek....
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

Hozzászólás Szerző: szepnorbee »

Persze minden project külön van eddig. Van egy akufeszmérő, egy óra meg most lenne egy ilyen ami fordulatszámot mér. Ezután szeretném ezeket összevegyíteni. Nem kell olyan gyorsnak lennie. Igazából nekem elég ha egy másodperc alatti impulzusokat számolja meg és utánna azt egy változóba tölti. Abból én már kisilabizálnám a továbbiakat. Egyenlőre mega8-am van, majd később fejlődök nagyobbra :)

Ma jött meg a két 16x4-es lcd-m. Ezeken szeretnék tesztelgetni
Válasz küldése