Tuossa alempana kyselin keskeytysasioista Windowsissa ja sain hyviä neuvoja.
Olen nyt kokeillut RS232-portin RING-tulon käyttämistä oman alirutiinin kellotukseen.
Koodi käynnistää säikeen jonka prioriteetti asetetaan korkeimmaksi mahdolliseksi (time critcal).
Säie lukee CPU-kellon ja jää kutsuu API:n Com-portin keskeytyksen odotus funkiota. Kun funktiosta palataan luetaan CPU-kello jälleen ja lasktetaan aika mikrosekunteina ja tallennetaan taulukkoon.
Näyttää siltä, että keskeytys muodostuu aina kun RING-tulo tila muuttuu, eli sekä nousevalla, että laskevalla kellolla. Tähän viittaava teksti löytyy joistakin teksteistä.
Käytin 6100Hz oskua joka johti 12200 keskeytykseen sekunnissa. Odotusaika näytti olevan 58us, eli ja huojunta erittäin vähäistä ( -1us). Johonkin katoaa 25u, mikä ei kyllä haittaa.
Ohjelmassa on muutakin testailua ja sen pääsäie asettaa 100ms timerin ja päivittää tekstiä ikkunassa tuolla vauhdilla.
Kaiken kaikkiaan tämä testiohjelma näyttäisi vievän n. 4% AMD X2 5600 tehosta, eli ei yhtään mitään. Tuo vastaisi 32% 700MHz koneesta mutta koska kernelin käyttämä aika IO-piirin käsittelyyn ei muutu CPU-tehon mukaan, vienee tuo 20% ja koska tarvittu kello olisi 7-8kHz putoaisi kuorma vielä 13% tuntumaan. Ongelma on siis ratkaistu ja PC:llä voi hienosti generoida ohjauksen kymmenelle askelmoottorille joista osaa ajetaan keskenään vektorina.
Olen nyt kokeillut RS232-portin RING-tulon käyttämistä oman alirutiinin kellotukseen.
Koodi käynnistää säikeen jonka prioriteetti asetetaan korkeimmaksi mahdolliseksi (time critcal).
Säie lukee CPU-kellon ja jää kutsuu API:n Com-portin keskeytyksen odotus funkiota. Kun funktiosta palataan luetaan CPU-kello jälleen ja lasktetaan aika mikrosekunteina ja tallennetaan taulukkoon.
Näyttää siltä, että keskeytys muodostuu aina kun RING-tulo tila muuttuu, eli sekä nousevalla, että laskevalla kellolla. Tähän viittaava teksti löytyy joistakin teksteistä.
Käytin 6100Hz oskua joka johti 12200 keskeytykseen sekunnissa. Odotusaika näytti olevan 58us, eli ja huojunta erittäin vähäistä ( -1us). Johonkin katoaa 25u, mikä ei kyllä haittaa.
Ohjelmassa on muutakin testailua ja sen pääsäie asettaa 100ms timerin ja päivittää tekstiä ikkunassa tuolla vauhdilla.
Kaiken kaikkiaan tämä testiohjelma näyttäisi vievän n. 4% AMD X2 5600 tehosta, eli ei yhtään mitään. Tuo vastaisi 32% 700MHz koneesta mutta koska kernelin käyttämä aika IO-piirin käsittelyyn ei muutu CPU-tehon mukaan, vienee tuo 20% ja koska tarvittu kello olisi 7-8kHz putoaisi kuorma vielä 13% tuntumaan. Ongelma on siis ratkaistu ja PC:llä voi hienosti generoida ohjauksen kymmenelle askelmoottorille joista osaa ajetaan keskenään vektorina.
Vastaukset 1
Vanhimmat
Uusi tutkimus jossa laskin WIndowsin timerilla kuinka usein keskeytystä palveleva rutiini saa RING-inputin paljasti, että kyllä RING tulo on herkkä vain jommalle kummalle, joko nousevalle tai laskevalle reunalle.
No kokeilin kuitenkin nosmalla oskillaattorin 28500Hz ja hyvin tuntuu toimivan. Tastalla ajossa SpyBott ja siltikin ohjelma pysyy hyvin synkassa ja vie vain 8% tehosta.