Tuossa tavailin taas rinnakkaisportin speksiä hiukan ja nyt alkoi tuntumaan, että sillä voisi
olla mahdollista toteuttaa huokea SPI-liityntä: Hommaan tarvitaan vain yksi invertteri, minkä voi askarrella vaikkapa transistorista ja vastuksesta hätätapauksessa.
SPP-moodissa tuon toki saa onnistumaan, jos se on riittävä, mutta i2c-kokeilujen perusteella dataa saa läpi 20k..40k ja PC tahmaa jo aika lailla, kun joutuu käyttämään bit-bangia.
Nykyisin lähes kaikki portit tukevat kuitenkin ECP-moodia. Ja siinä on FIFO! Eli homman
saisi fifon avulla tehtyä parport_pc ajurilla linux:ssa käyttämällä block-move:a, mikä löytyy valmiina toteutuksena ajurista. Eli GPIO-moodissa vaikkapa bit0 kello ja bit1 data: Nyt syöttämällä tuohon 16 tavua, joissa 0-bitti on vuorotellen 1 ja vuorotellen 0 ja ainaa kun syöttää nollan, pistää kaveriksi sille bit1:een halutun datan(ja muistaa pitää sen mukana seuraavan 1:sen syötössä). Tuon pitäisi mennä 4x 32bit siirtona fifo-rekisteriin PCI tai PCIe väylän yli, jonka jälkeen kone on vapaa muuhun toimintaan.
Sitten tekee päin vastaisen operaation, eli asettaa portin "reverse" moodiin, joka toimii samalla portissa olevalle SPI-laitteelle komentona lähettää datansa - 16 bittiä - eli 2 tavua voi lähettää ennen kuin FIFO tulee täyteen ja saadaan keskeytys tästä. Nyt voi SCK:n kytkeä suoraan periph_clk:hon.
Onhan tämä tietysti kikkailu - mutta toisaalta ei tarvita mitään ylimääräistä rautaa toteutuksessa! Ja kun sen tekee näin, jos ECP-moodia ei ole saatavilla, saa siitä silti läpi jotakin. Vaihtoehto on synkronoitua myös lähetyksessä ECP:n hostCLK:iin, jolloin datanopeutta voi tulla ainakin 2mbit/s - joskin tämä on half-duplex, koska portilla on/voi olla yhteinen fifo lähetykselle ja vastaanotolle..
Ja jos rakenteluintoa on jäljellä, niin tuohon voi askarrella vaikka 74ls299 universaalin shift-rekisterin perään ja saada 8x nopeutta lisää. Kannattaa kyllä harkita tarkkaan, kumpaa moodia lähtee toteuttamaan, EPP vaiko ECP, koska EPP mahdollistaisi toisaalta full-duplex toiminnan..
olla mahdollista toteuttaa huokea SPI-liityntä: Hommaan tarvitaan vain yksi invertteri, minkä voi askarrella vaikkapa transistorista ja vastuksesta hätätapauksessa.
SPP-moodissa tuon toki saa onnistumaan, jos se on riittävä, mutta i2c-kokeilujen perusteella dataa saa läpi 20k..40k ja PC tahmaa jo aika lailla, kun joutuu käyttämään bit-bangia.
Nykyisin lähes kaikki portit tukevat kuitenkin ECP-moodia. Ja siinä on FIFO! Eli homman
saisi fifon avulla tehtyä parport_pc ajurilla linux:ssa käyttämällä block-move:a, mikä löytyy valmiina toteutuksena ajurista. Eli GPIO-moodissa vaikkapa bit0 kello ja bit1 data: Nyt syöttämällä tuohon 16 tavua, joissa 0-bitti on vuorotellen 1 ja vuorotellen 0 ja ainaa kun syöttää nollan, pistää kaveriksi sille bit1:een halutun datan(ja muistaa pitää sen mukana seuraavan 1:sen syötössä). Tuon pitäisi mennä 4x 32bit siirtona fifo-rekisteriin PCI tai PCIe väylän yli, jonka jälkeen kone on vapaa muuhun toimintaan.
Sitten tekee päin vastaisen operaation, eli asettaa portin "reverse" moodiin, joka toimii samalla portissa olevalle SPI-laitteelle komentona lähettää datansa - 16 bittiä - eli 2 tavua voi lähettää ennen kuin FIFO tulee täyteen ja saadaan keskeytys tästä. Nyt voi SCK:n kytkeä suoraan periph_clk:hon.
Onhan tämä tietysti kikkailu - mutta toisaalta ei tarvita mitään ylimääräistä rautaa toteutuksessa! Ja kun sen tekee näin, jos ECP-moodia ei ole saatavilla, saa siitä silti läpi jotakin. Vaihtoehto on synkronoitua myös lähetyksessä ECP:n hostCLK:iin, jolloin datanopeutta voi tulla ainakin 2mbit/s - joskin tämä on half-duplex, koska portilla on/voi olla yhteinen fifo lähetykselle ja vastaanotolle..
Ja jos rakenteluintoa on jäljellä, niin tuohon voi askarrella vaikka 74ls299 universaalin shift-rekisterin perään ja saada 8x nopeutta lisää. Kannattaa kyllä harkita tarkkaan, kumpaa moodia lähtee toteuttamaan, EPP vaiko ECP, koska EPP mahdollistaisi toisaalta full-duplex toiminnan..
Vastaukset 8
Vanhimmat
Rinnakkaisportti oli helppo tapa päästä rautaan käsiksi mutta nykyisellään se taitaa olla uhanalainen eläinlaji, kun siihen liitettäviä oheislaitteita ei ole valmistettu aikoihin.
Onhan se. USB on vienyt vallan ja ehkä ihan hyvästä syystäkin. Toisaalta rinnakkaisportin käyttäminen on oiva tapa oppia rekisteripohjaisen järjestelmän käytöstä laitekehityksessä ja se taas ei tule katoamaan mihinkään. Samalla tulee tutuksi, miksi tehdään sulautettuja, eikä kaikkea vaan PC-raudalla käyttöjärjestelmän alaisuudessa. Sitä on moni ihmetellyt, miksi jonkun asian pystyy tekemään 12MHz:lla sulautetuissa, mutta saman asian tekeminen usean gigahertsin PC:llä ei meinaa onnistua millään edes tyydyttävällä tasolla.
Ja saahan sitäpaitsi irrallisia portteja - niitä vaan ei ole valmiina nykyään asennettuna, kun kaikki eivät niitä enää tarvitse. Eikös se ole harrastajalle vähän halvempi tapa saada GPIO-kortti(general-purpose IO) käsiinsä, kun kirjotinportteja on vähän joka paikassa ja kortinkin saa kympillä. Samalla ei mene arvailuksi, mikä osa väylästä taas "mättää" kun bitti ei kulje. Tuollaisesta "oikeasta" GPIO-kortista voi joutua maksamaan jo satasia. Ero on ehkä siinä, että noilla ei saa bittiä viuhumaan ihan niin kovaa vauhtia ja IO-nastoja on aidossa reilusti enemmän - toisaalta johto voi olla sen täydet 2m pitkä, mikä auttaa koneen taakse kumartelussa kummasti.
Aluksi voi laittaa sen 470 ohmin vastuksen LED:n kirjotinporttiin ja katsoa saako sitä välkkymään: Niin se on monella lähtenyt liikkelle elektroniikka harrastus tai C-64:lla pokeilemalla vastaava!
Onko RINNAKKAISPORTTI elektroniikkaa?
Nyt menee hei jo trollailuksi ja vittuiluksi! Aloittaja rakentelee rinnakkaisporttiin kytkettäviä laitteita joten se kuuluu tänne!
Televisio ei ole elektroniikkaa - olisi, jos siinä olisi SCART ja kotelo palisanteria?
No nyt kun tuli puheeksi, niin sellainen skemat rinnakkaisporttiin ainakin on olemassa kuin rayer_spi flashrom. Tuolla saa pukattua sarja-flash:lle rinnakkaisportin kautta datat jos on sellaiselle käyttöä. Siihen saa kooditkin, joten kyllä se taitaa ihan toimia. Ja nopea tuo rayeri ei tosiaan ole, joten käyttäskö ihan perus-porttia?
Nuo on ihan käteviä, kun voi kontrollerissa olla pelkästään tuon flash-rom:n luvun koodit ja bootissa se sitten purkaa flash:lta koodit muistiin ja lähtee sitä kautta liikkelle. Jos on adapteri, niin riittää että pystyy tri-stateamaan rom:n io-nastat ja saa syötettyä sille uudet koodit - tai voihan sen pistää kannalle ja vaikka vaihtaa jos niikseen tulee. Aika useissa laitteissa se on juurikin tällä tavalla toteutettu.
Mihin sitä invertteriä tarvitsee? Ohjelmoin pelkällä rinnakkaisportilla AVRiä SPI:llä vuosituhannen alussa Linuxilla tällä kytkennällä: https://www.instructables.com/id/Simplest-AVR-Parallel-port-programmer/
Taisin ottaa käyttövirrankin rinnakkaisportista. Ainakin vanhemmissa koneissa nuo rinnakkaisportin eri tilat toimivat aika satunnaisesti eli piti kokeilla jokainen erikseen.
Tein myös muita juttuja rinnaisportilla, kuten ohjasin graafista LCD-näyttöä, luin PWM:ää tuottavaa lämpötila-anturia jne. Nykyään rinnakkaisporttia ei enää koneissa ole ja USB-rinnakkaisportit toimivat vain printteireiden kanssa eli yksittäisiä pinnejä ei pääse ohjaamaan.
Onneksi on paljon parempia vaihtoehtoja, kuten FTDI:n USB-RS232 -muuntimet. Niissä on myös mahdollisuus käyttää GPIO-pinnejä mihin haluaa. Saa tehtyä melkein mitä vaan ja suurella nopeudella. Noita saa 10-20 eurolla käyttövalmiina. Ei tulisi mieleenikään enää tehdä mitään rinnakkaisportilla. UB232R:ää ja vastaavia olen käyttänyt yli 10 vuotta. AVR:lle on tulut hankittua ihan oikea ohjelmointityökalu.
Heh heh, mun harrastuslaitteet taitaa olla vuodelta miekka-ja-kypärä jo..!
No sillä invertterillä conffataan se portti tunnistamaan "laite", eli jos se puuttuu - voi olla ettei oikea moodi tule valituks vaan portti jää johonkin random-tilaan. Kyllä sen pystyy tekemään ohjelmallisestikin, mikä helpottaa kytkentää mutta sitten pitää pyöriä busy-loopissa ohjelmassa: Jos se menee ensin keskeytysrutiinin odotteluksi, niin aikarajat alkaa paukkua hyvin herkästi. EPP kun on toteutettu ISA-speksin pohjalta ja siinä pitää saada kättelyt mahtumaan sitten yhteen ISA-jaksoon, jottei varata väylää hirveän pitkäksi aikaa. Taisi olla max. aika 10us tuossa kohdassa. Ja tuohon ei avr:llä tahdo oikein päästä - ehkä assemblerilla.. ja siinä palaa jo wait-state poikineen väylältä.
ECP on sitten tässä suhteessa mukavampi, kun ikäänkuin FIFO on vain "ISA-välyällä" ja datat kellotetaan sitten sieltä laitteen haluamalla tahdilla. Joskus tämäkään ei toimi näin, vaan ollaan edelleen 10us rajassa.. riippuu toteutuksen virheellisyysasteesta.
Samoin strobe-pulssi on noissa muistaakseni 500ns alhaalla käynti eli paljon lyhyempi kuin perinteisessä portissa.
Sitten kannattaa tiedostaa myös ieee1284:n olemassaolo: Se yrittää alkaa helposti lukea väylältä laitetietoja ja saa koneen kaatumaan, mikäli laite ilmoittaa olevansa em. invertteri-kättelyllä standardi, mutta ei sitten olekaan.. ainakin skanneriajurit, mikäli niitä on asennettuna yrittävät olla tässä kohdassa "Plug-and-Hang" mallisia.
Tuossa invertterin käytössä on jännä analogia muuten 16-bittiseen isaan nähden: Sama juttu löytyy ISA-väylältä signaloimassa, että 8bitin asemasta siirretään 16 bittiä. Ja kun väylä vaihtuu PCI:hin, niin toteutus laajenee samalla periaatteella. Erittäin joustavaa suunnittelua tehtyä tässä kohtaa kirjoitin portin kanssa, täytyy kyllä sanoa. Tuo näkyy PC-assembler tasolla erittäin nätisti, sillä hardis tekee kaksi isa siirtoa, jos prosessori ei saa tuota 16bit-CS indikaattoria. Printterille päätyy kuitenkin täsmälleen sama data.