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++; >> } >