Syvällinen koodaus

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.
1273
Äänestä

Muut lukivat myös

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.

Äänestä

Kommentoi aloitusta


Windowsissa kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu