Arduino Timer/Counter
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
Az imbolygó mozgást végző motor-excenterre gondoltam.
(vagy valamit nagyon benéztem...)
Az ide-oda mozgást nem forgásirányváltás csinálja, így alaphelyzetben 2 lehetőség adódik attól függően, hogy hol áll az excenter. A motor mindig egyirányba megy, de nem tudom eldönteni, hogy pont most húzni vagy eltolni fogja a vezetőt, ha nincs félfordulatos jelem valahonnan. (3 vagy 9 óránál áll) Ja, meg letekeredik a kábel, nem tudjuk, hogy (szemből) jobbra vagy balra van-e a maradék, az üres hely irányába kellene először mozdulni a vezetőnek.
(vagy valamit nagyon benéztem...)
Az ide-oda mozgást nem forgásirányváltás csinálja, így alaphelyzetben 2 lehetőség adódik attól függően, hogy hol áll az excenter. A motor mindig egyirányba megy, de nem tudom eldönteni, hogy pont most húzni vagy eltolni fogja a vezetőt, ha nincs félfordulatos jelem valahonnan. (3 vagy 9 óránál áll) Ja, meg letekeredik a kábel, nem tudjuk, hogy (szemből) jobbra vagy balra van-e a maradék, az üres hely irányába kellene először mozdulni a vezetőnek.
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
Hát, akkor lehet olvasgatni:
Bascom: INT fejezet
Bascom: Timer részek...
http://avr.tavir.hu/modules.php?name=Co ... age&pid=18
És ha Bascom, akkor -> gyerünk át abba a fórumba
Bascom: INT fejezet
Bascom: Timer részek...
http://avr.tavir.hu/modules.php?name=Co ... age&pid=18
És ha Bascom, akkor -> gyerünk át abba a fórumba
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
Arduino alatt _rengeteg_ kompromisszumod lesz, és az erőforrásból kifuthatsz.
Egyetlen lehetőséged Arduino alatt:
- TIMER-t megtanulod hasznélni. Így lesz
- egy hardware számlálód 0...65535
- egy időzítőd mondjuk 0,5 sec-re
Az időzítő leketyeg, akkor kiolvasod a HW számlálót.
Ez arduinón túlmutató feladat, mert a TIMER-eket regiszterszinten és C nyelven kell már megfognod.
Na ez az, ami 1-2 hónap (megérteni és alkalmazni). Copy-Paste alapon 1-2 perc, de nem érted meg mitől megy....
Bevezető, elrémisztésnek:
http://www.mythic-beasts.com/~markt/ATmega-timers.html
http://www.engblaze.com/microcontroller ... prescaling
http://www.gammon.com.au/forum/?id=11504
És ezek az egyszerűbb, olvasható, magyarázatos oldalak!
Egyetlen lehetőséged Arduino alatt:
- TIMER-t megtanulod hasznélni. Így lesz
- egy hardware számlálód 0...65535
- egy időzítőd mondjuk 0,5 sec-re
Az időzítő leketyeg, akkor kiolvasod a HW számlálót.
Ez arduinón túlmutató feladat, mert a TIMER-eket regiszterszinten és C nyelven kell már megfognod.
Na ez az, ami 1-2 hónap (megérteni és alkalmazni). Copy-Paste alapon 1-2 perc, de nem érted meg mitől megy....
Bevezető, elrémisztésnek:
http://www.mythic-beasts.com/~markt/ATmega-timers.html
http://www.engblaze.com/microcontroller ... prescaling
http://www.gammon.com.au/forum/?id=11504
És ezek az egyszerűbb, olvasható, magyarázatos oldalak!
- zoli_varga
- DrótVégénSzéndarab
- Hozzászólások: 20
- Csatlakozott: 2009. november 9. hétfő, 7:00
Üdv!
Most még emésztgetem az arduino timer prescale "hackeket" de ha jól értelmezem akkor a D11 hez tartozó TCCR2B nincs hatással a milis() és delay() fv.-re.
TCCR2B = TCCR2B & 0b11111000 | 0x02 ; átállítja 3900 Hz re a PWM jelet?
A ~0.5 khz kevés áramszabályzáshoz. Még a ~4kHz is de az már valami. Vagy esetleg ~31Khz? HMMM..... Mindenféleképpen HW PWM kell.
Most még emésztgetem az arduino timer prescale "hackeket" de ha jól értelmezem akkor a D11 hez tartozó TCCR2B nincs hatással a milis() és delay() fv.-re.
TCCR2B = TCCR2B & 0b11111000 | 0x02 ; átállítja 3900 Hz re a PWM jelet?
A ~0.5 khz kevés áramszabályzáshoz. Még a ~4kHz is de az már valami. Vagy esetleg ~31Khz? HMMM..... Mindenféleképpen HW PWM kell.
- zoli_varga
- DrótVégénSzéndarab
- Hozzászólások: 20
- Csatlakozott: 2009. november 9. hétfő, 7:00
Egy kicsit a terv kigondolatlannak tűnik.
A drót az 1,5 mm 15mm 1,5mm2 vagy mi láb, méter?
De egy biztos hogy egy közelítő képlettel ki kell számolnod mekkora lesz a dob átmérője a menet végén. Mivel nem asztalosok vagyunk hanem műszaki emberek ezért a mm-t veszem alapul. 15mm drótkötélnél:
Szóval a dob 300 mm, az első sorra fel tudsz tekerni
[(dob+kötélátmérő+0,5mm hiba)*pi] kötelet ez legyen K. Most megtudod hogy mondjuk a S=3*dob hosszúságú dobon jelen esetben (900mm) mennyi kötél fér el. L= K*S/[(kötélátmérő+0,5mm hiba)*2] . Ez az első sor. Mivel a következő sor az egymás mellé illesztett menetek érintőjére ül így a K' értéke K'=[(dob+kötélátmérő+{(n-1)*2*gyök3(kötélátmérő/2)}+0,5mm hiba)*pi]. L'=K'*S alapján mindig nőni fog a feltekert kötél mennyisége és a súlya, a dob teljes vastagsága........
Mivel nem vagyok mérnök én ebből a sorozatot már nem akarom és nem is tudom kifejteni, ezekkel a képletekkel viszont már lehet dolgozni. (kicsit sokat)
De egy feszítőgörgőn átvezetve a kötelet és a görgő tengelyén egy rés optót (egérből) meg egy tárcsát felszerelve máris impulzus számlálást tudsz végezni.
A drót az 1,5 mm 15mm 1,5mm2 vagy mi láb, méter?
De egy biztos hogy egy közelítő képlettel ki kell számolnod mekkora lesz a dob átmérője a menet végén. Mivel nem asztalosok vagyunk hanem műszaki emberek ezért a mm-t veszem alapul. 15mm drótkötélnél:
Szóval a dob 300 mm, az első sorra fel tudsz tekerni
[(dob+kötélátmérő+0,5mm hiba)*pi] kötelet ez legyen K. Most megtudod hogy mondjuk a S=3*dob hosszúságú dobon jelen esetben (900mm) mennyi kötél fér el. L= K*S/[(kötélátmérő+0,5mm hiba)*2] . Ez az első sor. Mivel a következő sor az egymás mellé illesztett menetek érintőjére ül így a K' értéke K'=[(dob+kötélátmérő+{(n-1)*2*gyök3(kötélátmérő/2)}+0,5mm hiba)*pi]. L'=K'*S alapján mindig nőni fog a feltekert kötél mennyisége és a súlya, a dob teljes vastagsága........
Mivel nem vagyok mérnök én ebből a sorozatot már nem akarom és nem is tudom kifejteni, ezekkel a képletekkel viszont már lehet dolgozni. (kicsit sokat)
De egy feszítőgörgőn átvezetve a kötelet és a görgő tengelyén egy rés optót (egérből) meg egy tárcsát felszerelve máris impulzus számlálást tudsz végezni.
Sziasztok!
A gondom a következő:
A megszakítás során megáll a milisec-számláló.
A progimban egy enkóder jeleinek érkezésének idejét kell mérnem egy kezdőidőponthoz képest. Ebben az esetben gondot jelent ez a leállás, még akkor is, ha csak 1ms időt "veszítek" el. hiszen 1000 jelnél ez már 1 másodperces csúszást eredményez (a jeleknek 116,87582 ms-ként kellene érkezni)
Nem találok infót arról, hogyan tudom pontosan kiszámolni mennyi időt vesz igénybe az alábbi műveletsor. (16MHz-en jár a ATmega 328))
Úgy gondolom, hogy a TimeOfSignal = (micros() + leallasideje); megfelelő megoldás lehetne ebben az esetben.
Előre is köszönöm a segítséget
A gondom a következő:
A megszakítás során megáll a milisec-számláló.
A progimban egy enkóder jeleinek érkezésének idejét kell mérnem egy kezdőidőponthoz képest. Ebben az esetben gondot jelent ez a leállás, még akkor is, ha csak 1ms időt "veszítek" el. hiszen 1000 jelnél ez már 1 másodperces csúszást eredményez (a jeleknek 116,87582 ms-ként kellene érkezni)
Nem találok infót arról, hogyan tudom pontosan kiszámolni mennyi időt vesz igénybe az alábbi műveletsor. (16MHz-en jár a ATmega 328))
Kód: Egész kijelölése
void signaltime()
{
TimeOfSignal = micros();
if (Mode != CalibrationMode)
{
action = 1;
}
SignalCounter = SignalCounter++;
}
Előre is köszönöm a segítséget
Köszönöm Robert!
Sajna csak egy Arduinom van
Viszont építettem más áramköröket, szerintem valamelyiket meg tudom buherálni, hogy egy szabad lábat tudjon használni. Írok egy progit rá, ami 116875us-ként változtatja a láb állapotát. Ezt fogja "encoder jelként" kapni a másik Arduino és meg is méri szerinte mekkora az időkülönbség. És máris okosabak leszünk
Köszönöm az ötletet!
Sajna csak egy Arduinom van
Viszont építettem más áramköröket, szerintem valamelyiket meg tudom buherálni, hogy egy szabad lábat tudjon használni. Írok egy progit rá, ami 116875us-ként változtatja a láb állapotát. Ezt fogja "encoder jelként" kapni a másik Arduino és meg is méri szerinte mekkora az időkülönbség. És máris okosabak leszünk
Köszönöm az ötletet!