Tema: Re: Padekit pagaut bug'a (Arduino)
Autorius: Levas
Data: 2015-06-05 19:07:02
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
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser