Rinnakkaisporttiin kontrolleria

portin_käyttäjä

Tulipa säädettyä linux-rinnakkaisportin kanssa, kun piti ohjata ulkoista laitetta jolla saa kerättyä mm. dataa lämpötilasta, kosteudesta, tuulesta ym. Pistin väliin avr:n - suoraan kiinni data-porttiin ja väliin 270 ohmin vastukset. Hyvin toimii! Samoin control ja status portin kautta pystyy suoraan kirjoittamaan avr:ltä pc:lle.
Varsinainen pihvi oli kuitenkin huomata, että parport_pc on melkoisen kätevä käytettynä yhdessä ppdev:n kanssa. Tällä voi tehdä jopa keskeytyskäsittelijän, joka asettaa keskeytyksessä satunnaisen nastan control-portissa. Data bufferoituu ja on luettavissa /dev/parport0:sta tavanomaisilla read()/write() käskyillä. Portin saa komennettua haluttuun tilaan ioctl() käskyillä. Hienointa tuossa on kuitenkin se, että riippuu täysin rakentamasi laitteen tuesta, mitä nuo tekevät: Jos on SPP-laite, tekee driveri SPP I/O:ta. Jos laitteesi tukee EPP:tä saat epp-tuen samasta driverista. Eli omasta laitteesta voi tehdä nopeamman yksinkertaisesti hoitamalla kättelyn nopeammalla protokollalla, kuten EPP.
Kannattaa muuten poistaa sitten kaikki cups/sane asennukset koneelta - muutamankin kerran kone jumahti, kun oma laite ei osannut "IEEE-1284" kättelyä vaan teki jotain puolinaista. Parasta suosiolla komentaa portti vaan haluttuun tilaan ja jättää neuvottelumoodit laitteiden kanssa pois laskuista!

6

104

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • usb_adapterilla

      Tulipa tässä tutkittua hieman lisää asiaa ja ilmeisesti on mahdollista saada oma laite, joka käyttää EPP-moodia, myös toimimaan USB-väylässä. Mutta se ei sitten tapahdu enää kirjoittamalla kirjoitinportin rekistereihin. Tätä varten tarvitaan USB-adapteri, joka tukee EPP-moodia ja tämän kun tuikkaa koneeseen, se näkyy tulostinjonona - ppdev ei siis ole käytössä, vaan pitää kirjoittaa suoraan "kirjoittimelle" menevään lp-jonoon(Esimerkki linkissä). Eli handshake-signaalit unohtamalla ja tekemällä vain epp-read/epp-write-komentoja pitäisi oma laite saada toimimaan:
      http://thx8411.over-blog.com/pages/Add_TTL_outputs_to_your_USB_Laptop_Part_1_Hardware-3229030.html
      Voi toki olla mahdollista saada myös kontrollit toimimaan, mutta se riippuu adapterista miten niitä kontrolloidaan - eikä taida mennä kovin helposti jos ajuria ei ole valmiina tyrkyllä. Sen sijaan pelkkä io toimii aina ja on itse asiassa aika nopea!

    • portit_harrastekäyttöön

      Tuolta ao. linkistä löytyy tietoa, miten tehdä EPP-yhteensopiva kättely. Homma on itse asiassa todella helppo: /DataStrobe:n voi kytkeä suoraan invertterin kautta /Wait:iin. DataStrobe on yleensä varsin lyhyt pulssi, n. 0.5us, koska portista pitää saada läpi n. 2MB/s. Myöskin ajoitus wait-signaalin käytölle on tiukka, joten suosittelen tuota invertteriä. Nasta kontrolleriin kytkettynä suoraan keskeytyskäsittelijään voi mennä jo liikaa aikaa 8-bittisellä avr:llä ja c:llä ohjelmoituna! Vähän nopeammalla prosarilla tai asm:lla homma toki onnistuu.
      http://retired.beyondlogic.org/epp/epp.htm
      Itse laittaisin tuohon shift-rekisterin joka kykenee tekemään parallel-load:in ja hoitaisin liikenteen eteenpäin SPI:n kautta avr:lle. IRQ:n pitäisi myös linux-ajurissa toimia: Eli data linjoille ja irq-pyyntö aiheuttaa EPP-read:in - kunhan keskeytykset on kytketty päälle ajurissa. Siispä käyttämällä kaksi-suuntaista shift-rekisteriä saa tehtyä SPI:n kautta periaatteessa sekä luku että kirjoitusoperaatiot helpolla, koska tyrkyllä on myös /Write signaali erottamaan portin suunnan. Pitää vain kehitellä sopiva datavuon valvonta, jotta homma ei mene puihin - ja pitää kaikki portit oletuksena sisäänpäin ja laittaa silti datalinjoille n. 270 ohmin vastukset lisäturvaksi! Kontrollinastoihinhan näitä ei voi käyttää, koska outputin lisäksi kyseessä on myös input ylösvetovastuksella jonka suuruus riippuu toteutuksesta.

    • avr_vinkki

      Jos osaat AVR:n assemblyä niin sitä voi "sekoittaa" helposti Free Pascal koodiin jolloin saadaan nopeutta verrattuna c-koodiin.
      http://wiki.freepascal.org/AVR_Programming
      Ongelmaksi voi muodostua se että käytössä on jo jotain valmiita c-kirjastoja.

      • Haminaattori

        Kyllä C näytti tykkäävän asmipätkistä. Liitti mukisematta pätkät käännökseen ja saatiin lyhennettyä ja nopeutettua koodia merkittävästi. Jos C on jotenkin hallussa, sillä selviää ihan hyvin eikä usean korkean tason kieli opettelu välttämttä tuo lisäarvoa ohjelmointiin. Ellei sitten ole vähän niinku masokistin vikaa niinkuin minulla.


      • fpc_tykkääjä

        Lueskelin tuota fpc-keskeytyskäsittelijä juttua ja tuostahan jo näkee, mikä sen käsittelijän oikein "hyydyttää" korkeamman tason kielellä. Nimittäin rekistereiden talteen laitto vie oletuksena aivan törkeän paljon aikaa! Kun avr-asm lupaa hypyn 4 kellojaksolla keskeytysrutiiniin, niin siinä ei ole otettu huomioon mitään rekisterien push/pop:eja. Laskeskelin itse tuossa, että ilman optimointia kääntäjä käytti (sattumalta tässä tapauksessa) 53 kellojaksoa tuohon toimintaan. Siitä voi sitten laskea, kuinka usein käsittelijää voi kutsua.. eli jos jokainen byte aiheuttaa erikseen keskeytyksen ei siinä kovin kummoista nopeutta kyllä saada.


    • muistin_siirto

      Yritän tässä toteuttaa EPP-rutiinia SRAM-piirille. Homman pitäisi toimia siten, että ensin tule address-sykli, jolla asetetaan muistisivu(256 tavun lohkon ylemmät osoitebitit) lukkopiiriin. Tämän jälkeen syötetään max. 256 datasykliä, jolloin laskuri laskee 8-bittistä osoitetta eteenpäin. Koska SRAM piiri sattuu olemaan 32kB, on käytössä 128 sivua. Kuva selventää:
      http://aijaa.com/jEWLao
      Kuten näkyy SRAM on myös kytketty atmega128:n XMEM liityntään, joten sitä voi käyttää piirin ulkoisena muistina silloin kun EPP-portilla ei ole liikennettä. Tämän voi varmistaa asettamalla nBusy:n ja odottamalla 1uS.
      Varmasti nopein tapa siirtää dataa kontrollerin ja PC:n välillä jos haluaa käyttää EPP:tä!

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Heikki Silvennoinen petti vaimoaan vuosien ajan

      Viiden lapsen isä Heikki kehuu kirjassaan kuinka paljon on pettänyt vaimoaan vuosien varrella.
      Kotimaiset julkkisjuorut
      137
      1916
    2. Taasko se show alkaa

      Koo osottaa taas mieltään
      Ikävä
      27
      1908
    3. Miksi ihmeessä nainen seurustelit kanssani joskus

      Olin ruma silloin ja nykyisin vielä rumempi En voi kuin miettiä että miksi Olitko vain rikki edellisestä suhteesta ja ha
      Ikävä
      23
      1848
    4. Persut nimittivät kummeli-hahmon valtiosihteeriksi!

      Persujen riveistä löytyi taas uusi törkyturpa valtiosihteeriksi! Jutun perusteella järjenjuoksu on kuin sketsihahmolla.
      Perussuomalaiset
      85
      1630
    5. Onko ministeri Juuso epäkelpo ministerin tehtäviensä hoitamiseen?

      Eikö hänellä ole kompetenttia hoitaa sosiaali- ja terveysministetin toimialalle kuuluvia ministerin tehtäviä?
      Perussuomalaiset
      62
      1448
    6. Sakarjan kirjan 6. luku

      Jolla korva on, se kuulkoon. Sain profetian 22.4.2023. Sen sisältö oli seuraava: Suomeen tulee nälänhätä niin, että se
      Profetiat
      20
      1266
    7. Elia tulee vielä

      Johannes Kastaja oli Elia, mutta Jeesus sanoi, että Elia tulee vielä. Malakian kirjan profetia Eliasta toteutuu kokonaan
      Helluntailaisuus
      37
      1163
    8. Avaa sydämesi mulle

      ❤ ❤❤ Tahdon pelkkää hyvää sulle Sillä ilmeisesti puhumalla Avoimesti välillämme Kaikki taas selviää Kerro kaikki, tahdo
      Ikävä
      38
      1160
    9. Söpö lutunen oot

      Kaipaan aina vaan, vaikkakin sitten yksipuolisesti.
      Ikävä
      11
      1148
    10. Nellietä Emmaa ja Amandaa stressaa

      Ukkii minnuu Emmaa ja Amandaa stressaa ihan sikana joten voidaanko me koko kolmikko hypätä ukin kainaloon ja syleilyyn k
      Isovanhempien jutut
      10
      1137
    Aihe