nu jei dar pvz. tacho impulsai labai labai labai greiti, tai juos paduodi i harwarini counteri ir softe tik tikrini overflow (ar gal overflow interupta darai). Tada softas tik is viso dirba reverso metu. On 2015.06.05 19:02, Levas wrote: > kaip suorganizuoti tavo impulsu skaiciavimai? Ar naudoji paprasta > impulsa ar naudoji du signalus, kad matyti krypti. > > Tam reikalui stovi ISR, kuris naudoja globalu volatile kintamaji? > > Tas pats ISR turi ir tikrinti ar reikia keisti krypti. Nafig daryti > amzina cikla ir tikrinti ar pasiekta 623 impulsai. > > Pagrindiniam loop reikia daryti ka nors protingo arba ... miegoti. :) > > > On 2015.06.05 18:18, ig wrote: >> Programa pradejau ir paskui vel apkarpiau iki sito minimumo ir vistiek >> tas pats. >> Serial.print atsirado tik paskui - paziurejimui kas vyksta. >> Taip pat elgiasi ir be jo. >> >> >> O ka rekomenduotum vietoje Arduino ? (su salyga kad daugiau nieko nemoku >> ir reiktu persiorientuoti) >> >> >> Kadangi dar reikes atlikineti nemazai veiksmu (counterio impulsu trukmes >> matavimas, vidurkinimas, ziurejimas ar geras uzsiduotas greitis, jei >> negerai - pareguliavimai, etc. Tai masciau apie >> STM32F..... >> >> Nors greiciai kaip ir nera dideli - 1,2 kHz sita impulsu seka jei >> skaiciuot abu frontus. >> >> >> >> On 2015-06-05 17:57, Levas wrote: >>> nu tikriausiai supranti, kad dabar pasireiks visas arduino geris, nes >>> reikes aiskintis, kaip kas kokioje bibliotekoje ka priprogramino ir >>> kokius work arround panaudojo. Ir kokie pertraukimai panaudoti ir >>> kokie ne. >>> >>> :) >>> >>> Is esmes, jei nera matomu klaidu, gali buti ir memory leak ir kintamuju >>> uzglusinimas. Visa tai gana sunku issiburti. >>> >>> O siaip, jei programa tik tai ka parasei daro, reikia ja pasirasyti per >>> naujo be jokiu serial.println ir kito monstrisko reikalo. Nes karta >>> programa parasiau tokia, kur sunaudojo ... data 300% atminties. Ir ji >>> dalinai veike! >>> >>> On 2015.06.05 14:36, ig wrote: >>>> Paprasta programele seka variklio encoderio outputa, skaiciuoja >>>> "zingsniukus" ir kai padaromas pilnas apsisukimas (624 zingsniai), >>>> keiciama sukimosi kryptis. Ir taip "mojuoja" pirmyn atgal. >>>> >>>> Taciau karts nuo karto (mazdaug vienas is desimt ciklu), atsitiktinai >>>> variklis apsisuka maziau nei pilna apsisukima ir pradeda keisti krypti. >>>> pabandziau su serial.println isvedineti "c" reiksme kai keiciasi >>>> kryptis >>>> (t.y. if viduje - uzkomentuota eilute). >>>> >>>> Nuostaba tame, kad sutrikimo atveju visada buna c=512 (t.y. grazus >>>> binarinis skaicius, ar nesusije su duomenu tipais, overflowais kokiais >>>> ir pan., nors keiciau c tipa int, unsigned int, jokio skirtumo - visada >>>> 512. (624-512 = 92) >>>> (Pakeitus vienos krypties zingsniu skaiciu i belekoki kita pvz 1001, >>>> klaidos atveju metama visada 768 reiksme. 1001 - 768 = 233) >>>> >>>> Nuostaba numeris du, kad c=512 viduje if(c>623) salygos !!! T.y. kaip i >>>> ta "if" isvis patenkama, jei netenkinama salyga. O ji netenkinama >>>> tikrai, nes klaidos atveju, butent tiek (~20%) ir nedasisukes iki pilno >>>> apsisukimo pradeda suktis atgal ir tada sukiojasi pirmyn atgal jau nuo >>>> naujos pozicijos. Vienintelis paaiskinimas, kad po salygos ispildymo >>>> staiga ivyksta 64911+512 interruptu, kad "c" owerflowinasi iki >>>> 512(624+64911 = 65535). Nu galima daleisti kad enkoderis kazkoki noisa >>>> ismeta ir sudurniuoja interuptai/skaiciavimas, bet kodel visa laika >>>> vienodai... o ne randomu. >>>> >>>> Zodziu biski konfuze. Gal kas turi minciu ? >>>> >>>> >>>> >>>> volatile unsigned int c = 0; // counter >>>> volatile boolean dir = 1; // direction >>>> >>>> int fwdrevPin = 9; >>>> >>>> void setup() { >>>> attachInterrupt(0, tacho, CHANGE); >>>> pinMode(fwdrevPin, OUTPUT); >>>> } >>>> >>>> void loop() { >>>> >>>> if (c > 623){ >>>> >>>> // Serial.println(c); >>>> >>>> dir = !dir; // Switch direction >>>> c = 0; // Reset counter >>>> if (dir==0) { >>>> analogWrite(fwdrevPin, 140); >>>> } >>>> else { >>>> int t = 128 - torque; >>>> analogWrite(fwdrevPin, 100); >>>> } >>>> } >>>> >>>> >>>> >>>> } >>>> >>>> void tacho() >>>> { >>>> c++; >>>> } >>> >> > -- Bye, Levas -- http://www.vabolis.lt