Kotisivu  Elektroniikka sivulle  Ohjainlevy  Relekortti Analogiatulokortti

PIC16F877

Tämä projekti on ollut suunnitelmissa jo jonkin ajan, mutta kun ei ole saanut mitään näkyvää aikaiseksi. Täytyi ottaa oikein ja aloittaa, eihän siitä mitään muuten tule ja tuskin tulee koskaan ihan valmista, mutta hällä väliä kunhan on jotain tekemistä ja miettimistä.
Tämä on nyt ihan hakuammuntaa ja jotain tekemistä, noudattamatta mitään suunnitelmaa tai suunnittelusääntöjä, eikä mitään muutakaan. Eli tehdään ja katsotaan mitä saadaan aikaiseksi. Kun tuosta piiristäkään ei ole muuta tietoa kuin mitä datalehdestä ala arvoisella kielitaidolla saa irti, eikä se ole oikeastaan mitään, tai ainakin erittäin vähän. 
Mitähän siitä piiristä saisi aikaiseksi ??? 
Katsotaan, katsotaan, joo .... Piirissä on musta kotelo ja 40 jalkaa... hmmm... Missähän sen datalehti olisi, varmaan löytyy jostain Microchipin sivuilta. Sieltä se löytyy. 
Microchip. PIC valmistajan kotisivu

28/40-pin 8-Bit CMOS FLASH Microcontrollers. 

Nimen omaan juuri tuo PIC16F877 ja 40 jalkainen kotelo, tuli jossain vaiheessa ostettua, kun tuntui siltä että siitä saisi jotain aikaiseksi. Helpompi tälle on tehdä piirilevy kun vastaavalle pintaliitos komponentille. Tässä on myös jonkin verran enemmän IO-portteja kuin pienemmissä piireissä... mutta kuitenkin vähemmän kuin isommissa... menikö se näin... 
33kpl ohjelmoitavaa liitäntäpistettä, jalkaa, joiden toiminta  voidaan määrittää ohjelmallisesti. 
PortA 6kpl, portB 8kpl, portC 8kpl, portD 8kpl ja portE 3kpl yhteensä 33kpl.
33kpl missäs ne loput 7. No käyttöjännite jalkoja on 2kpl +5V:lle ja 2kpl GND:lle ja 2kpl kidettä tai oskillaattoria varten, ja muuten piiri toimii luvatusti 20 MHz kiteellä, sekä sitä hitaammilla. Yksi vielä puuttuu, joka on master reset, ja siitä tuli 40 täyteen.
PortA ja E voidaan määrittää myös analogia sisääntuloiksi. Sekä portC:n 1 ja 2 bitti voidaan määrittää PWM lähdöiksi. 
Mielenkiintoista.... vai onko... mitä siitä saisi aikaiseksi.

Piiristä löytyy ominaisuuksia vaikka kuinka paljon, mutta ei kai niitä kaikkia tarvitse samaan aikaan käyttää.

Tehdään siitä laite, jossa on muutama rele, joita voidaan ohjata piirin ohjelmalla, muutama sisääntulo kytkimillä. Analogi tuloja, jonkin jännitteen mittaamiseen. Muutama painikekin siinä saisi olla. Moottorin ohjaus pulssinleveys modulaatiolla, koska piirissä nyt sattuu olemaan sellainenkin mahdollisuus. LCD-modulikin kertomaan mitä tapahtuu.

Mitä nyt sitten pitäisi tehdä ??? Mistä aloittaa ??? Mitä... mitä... mitä...

Tuntuu olevan kysymyksiä enemmän kuin vastauksia...
Ensiksi haetaan piirin datalehti ja aloitetaan siitä tarkastelemalla miten piiriin voidaan kytkeä mitäkin ja minne. Päätetään minne porttiin kytketään painikkeet, releet, LCD-moduli, analogitulot ja PWM lähtö.

  1. Porttiin A pitää kytkeä analogitulot, koska muissa porteissa ei ko. ominaisuutta ole. Tuloja 5kpl, bitit 0,1,2,3 ja 5, bitti 4 käytetään kytkintiedolle.
  2. PWM (pulssinleveysmodulaatio) lähdöt on portissa C joten ne kytketään siihen porttiin, bitteihin 1 ja 2. C-porttiin jää vielä tämän jälkeen 6 bittiä käyttämättä 0 ja 3,4,5,6 ja 7.
  3. LCD-moduli voidaan kytkeä samoin C porttiin jos ohjaukseen käytetään 4bitin ohjausmoodia modulilla, ja kahta bittiä modulin ohjaukseen. Eli bittejä 4-7 käytetään datan syöttöön modulille, ja bittejä 0 ja 3 käytetään modulin ohjaukseen, kaksi riittää, jos modulilta ei tietoa siirretä ulospäin datalinjalle.
  4. Porttia D käytetään releitten ohjaukseen 8kpl.
  5. Porttia B käytetään painikkeille 8kpl tai kytkinmatriisille.
  6. Porttia E käytetään kytkintiedoille 3kpl.

Kun nyt on määritetty mitä mikin piirin portti tekee voidaan miettiä miten toteutetaan piirilevy. No tosin tässä jo noiden määrittelyjen aikana hieman tarkastelin minne piirin jalkoihin nämä kaikki kytketään, ja miten sen toteuttaa piirilevyllä. Osaksi piirilevykin määräsi minne mikäkin kytketään. Piirilevystä on tarkoitus tehdä mahdollisimman yksinkertainen ja vieläpä yksipuolinen, jossa ei montaakaan komponenttia eikä hyppylankaa ole.

Kytkentäkaavio ohjainpiirilevylle.

Minkä kokoinen levy ?? Miten osat sijoitellaan piirilevylle ?? Voisiko releet ja analogitulon vahvistimet sijoittaa samalle levylle ?? Entäs riviliittimet joihin kytketään ulkopuolinen maailma ??

Jos kaikki osat sijoitetaan yhdelle piirilevylle niin ne on sitten siinä. Mutta entä jos tulee mieleen että muutetaan jotain ominaisuutta tai tuloja tai lähtöjä ?? ......  Sitten vain suunnitellaan koko levy uudelleen. 
Mielestäni tässä tapauksessa, kun ei ole selvää kuvaa mihin koko laitetta käytetään, voisi tehdä niin että, tulot ja lähdöt tehdään erillisille piirilevyille. Jolloin esimerkiksi lähtöjen releiden tilalle voi tehdä vaikka uuden kortin jossa on FETit ohjauskomponenttina yms. No no... joo joo ... eipäs mennä liian nopeasti ... pidetään mielessä mitä piti tehdä.
Ohjainpiirille oma piirilevynsä jossa on liittimet jokaiselle lähdölle ja tulolle. Ohjainpiirilevyllä lisäksi liitäntä LCD-modulille. Samoin painikkeet voisi olla samalla levyllä ohjainpiirin kanssa. Myös LEDit lähtöjen tilaa osoittamassa. Varsinaiset tulot ja lähdöt ulkopuolista maailmaa varten omille korteilleen. Korttien keskinäisen kytkennän voisi hoitaa nauhakaapelilla ja liittimillä.

Piirilevyn voisi tehdä niin että sen valmistaminen onnistuu ihan harrastuspohjalta eikä tarvitse tilailla sitä mistään. Käytetään valmiiksi lakattua levyä johon voidaan valottamalla tehdä syövytyskuvio. Piirilevyä on myynnissä eri kokoisia paloja, yleisin varmaan on eurooppakortti 100X160mm, valmiiksi valoherkällä lakalla päällystettynä, käytetään sellaista ja tehdään siitä piirilevy ohjainpiirille.

Piirilevyn suunnitteluohjelmana voi käyttää vaikka jotain piirustusohjelmaa, jossa on käytettävissä eri tasot. Tasoja käyttäessä levyn voi suunnitella kerroksittain. Levy ja komponentit eri tasoille.
Itselläni on Micrografixin Designer ohjelman vanha versio. Kelpo ohjelma, kun sitä osaa jotenkin käyttää. Piirretään piirilevyn ääriviivat yhdelle tasolle ja komponenttien ääriviivat toiselle, ja siirrellään niitä ruudulla. Lisätään taas taso ja piirretään johdotus sopivan levyisellä viivalla.
Kun sitä ohjainpiiriä ja liittimiä sovittelee piirilevylle näyttää aika väljältä. No pistetään levy puoliksi, sitten tuntuu sopivalta. Toisen puolen levystä voisi käyttää tuloihin, tai lähtöinä olevien releiden alustana. No jätetään ne myöhemmäksi ja keskitytään tähän ohjainpiirin levyyn.

Ohjainpiirin levylle tulevat osat. 
Levy vaatii +5V:n jännitesyötön, se voidaan järjestää tässä vaiheessa vaikka muutamalla johdon pätkällä suoraan levylle niin päästään kokeilemaan toimiiko se mitenkään.
Ohjainpiiri. Kide ja sen kondensaattorit. Reset-nappi, sille vastus ja kondensaattori. Suodatus elko käyttöjännitteelle. LCD-modulin liitin ja mahdollisesti kiinnitys modulille. Lähdön LEDit ja virranrajoitusvastukset sekä liitin lähtöohjausta varten. Painikkeet ja niiden vastukset sekä liitin, jos halutaan liittää painikkeiden tilalle jotain kytkimiä. Vielä yksi liitin analogituloille ja kytkintuloille. Onhan siinä puuhaa ja sovittelemista joksikin ajaksi.
Tuossa tuli vielä mahdollisuus käyttää nollavoimakantaa ohjainpiirille, kun sitä kuitenkin irrotellaan piirilevystä vähän väliä, ohjelmointia varten. Itselläni on ohjelmointia varten käytössä MICROCHIPin valmis ohjelmointilaite, PICSTART Plus. Joskus innostuksissani sellaisen hankin, ja sitä siinä olevaa ohjainpiiriä, on tullut päivitettyä jo muutamia kertoja.
Olisihan tuossa PIC16F877 piirissä mahdollisuus ohjelmoida piiri suoraan, vaikka se olisi piirilevyssä kiinni, mutta se sitten taas vaatii oman ohjelmansa ja omat virityksensä levylle, jotenka päätin jättää sen käyttämättä ja käyttää niitä ominaisuuksia mitä nyt sattuu käsien ulottuvilla olemaan. Kaikki mahdolliset osat ovat kierrätys osia, piirilevyä ja ohjainpiiriä lukuun ottamatta, eli irrotettu romulaitteista.
Vaikka piirilevylle juottaakin kannan ohjainpiiriä varten, voi tämän nollavoimakannan painaa piirilevyllä olevaan kantaan ?!?!? ..heh... heh... 
Tuntuu vitsiltä, mutta ei ole.
Kun ohjelma on toimiva ja kaikki toimii niin kuin pitääkin, voi nollavoimakannan ottaa pois ja painaa piirin kantaan, ilman juottamista. Ei tunnu enää vitsiltä !! Ja nollavoimakannan voi käyttää seuraavassakin projektissa, eikä ohjainpiirin jalat ole jatkuvasti vinossa sinne tänne ohjelman kokeilun aikana.

Piirilevy juotospuolelta ja osien sijoittelu.

Ohjainpiirilevy valmiina.

Testiohjelma jolla voidaan testata rakennetun levyn toiminnat.
Ohjelma on kirjoitettu MICROCHIPin MBLAB IDE ohjelmalla. Ohjelmointi tulee tutuksi vain ohjelmoimalla, ei haaveilemalla mitä sillä voisi  tehdä. Piirin käskyt ja niiden selitykset löytyy toisaalta sivustosta, käskyt on samat lähes koko PIC piirisarjalle.

Ohjainpiirilevy ei jaksa kauaa yksinään pitää mielenkiintoa yllä, joten seuraavaksi sille täytyi rakentaa levy jossa on muutama rele joita voidaan ohjata ohjelmallisesti ohjainkortilta.
Relekortti
. Kortilla on 8kpl releitä, ja 2kpl FET lähtöä joita kaikkia ohjataan ohjainpiirilevyllä olevalla piirillä.

Tämä projekti alkoi tuossa loka- marraskuun vaihteessa v.2004 jolloin rupesin miettimään miten tuon toteuttaisi.  Marraskuun loppupuolella tein tämän sivun ja lisäsin kotisivuilleni. Siinä vaiheessa oli ohjainpiirilevy valmiina ja melkein relekorttikin, aika pian sen jälkeen, joulukuun alussa muokkasin esimerkkiohjelmaa sen verran että siitä tuli kohtuullisen luettava. Aikaisempi ohjelma oli hieman satunnaisessa- tai muuten epäjärjestyksessä. 
Ja tästä tämä jatkuu....ja joulukin on tuossa ihan oven takana ... vai oliko se tonttu........ jatketaan kunnes saadaan jotain aikaiseksi.
Aikaa tähän tuntuu menevän yllättävän paljon, no eihän ole vapaa ajan ongelmia..... niin minkä vapaa ajan ???

Aikaahan on kyllä tässä vierähtänyt viritellessä edellisiä. Siitä huolimatta seuraavana rakennellaan tälle systeemille vielä yksi lisäosa.  Tälle kortille tulee ohjainpiirilevyn AD tulojen vahvistimet ja säädöt sekä ulkoisten kytkimien optoerotetut tulot.

Tulokortti analogiatuloille.
Tuli se kortti valmiiksi, joopa joo.... ei vaan toiminut odotetulla tavalla.
No minähän jo vähän ajattelin että meneekö tämä täysin putkeen, ilman suurempia mokia, mutta tulihan se sieltä.
Tuo op-vahvistin ei annakaan jännitettä ulos riittävästi, olisi pitänyt vain jatkaa etsimistä. Tässä kävi nyt niin että, kun piirin käyttöjännite on +5V niin lähtöjännite voi ohjautua 0,005V:sta..... 3,6V:iin. Kun taas PIC piirin referenssijännitteenä käytetään käyttöjännitettä +5V. Tuo referenssijännite tarkoittaa sitä jännitettä, mihin AD muunnin vertaa mitattavaa jännitettä. Saa tuota jännitettä myös muutettua, kun käyttää ulkoista referenssiä, mutta siinä sitten menee kaksi mittauspistettä. Kaksipa tietenkin, myös nollapisteellä on oma referenssi.
 Voihan ...... mietitään sitä seuraavaksi miten tästä taas selvitään.
Olisiko mahdollisuus käyttää op-vahvistimilla suurempaa käyttöjännitettä, ja mikä se sitten tulisi olemaan, ja mistä se tehdään, ja mistä se tuodaan levylle. Taas aika rivi kysymyksiä joihin pitäisi keksiä myös vastauksia. Uutta levyä ei tässä vaiheessa oikein viitsisi kokonaan rakentaa, kai sekin on edessä jossain vaiheessa, jos noita mokia tulee esille enemmänkin.

Korjaukset piirilevyille.

Seuraavana olisi vuorossa jonkin testausohjelman miettiminen. Mitä tuon ohjelman pitäisi tehdä... mitä... miksi ... ja .. miten ... ??
Taas pientä päänvaivaa joksikin ajaksi. 
Ai niin siitä puuttuu vielä pieni näppäimistökin... sekin vielä. 
Tuo LCD modulikin saisi olla hieman suurempi kuin tuo 2 X 16 merkin moduli. Eihän siihen mahdu kuin 32 merkkiä jossa on jo välimerkitkin mukana. Ei sillä paljoa kerrota, ainakaan mitään selvää tekstiä.

Taasen on hieman vierähtänyt aikaa edellisestä päivityksestä. Eikä vielä paljon muuta ole saanut aikaiseksi kuin pienen ohjelman pätkän jolla saa testattua kaikki tähän mennessä liitetyt ominaisuudet. 
Ohjelmassa on valikko, josta valitaan testattava portti ja sen ominaisuus. Teksti on hieman mitä sattuu, mutta kai siitä jotain selvääkin  saa pienellä päättelyllä. 

Aluksi LCD näyttöön ilmestyy nimi ja osoite joka häipyy parin sekunnin kuluttua ja sen jälkeen tulee teksti "TESTIVALIKKO" sekä numerot 1-6, jotka tarkoittavat valittavia painikkeita ja samalla eri testejä. Paluu tähän päävalikkoon tapahtuu painamalla samanaikaisesti 7 ja 0 painiketta.
1. Painikkeesta tulee teksti näytölle "Portti RB-- "ja painettaessa painiketta ilmestyy painikkeen ja samalla portin bitin numero.
2. Painikkeesta tulee teksti näytölle "Portti RD-- "eri painikkeilla saa LEDin syttymään ja numeron näytölle ja jos relekortti on kytkettynä ,myös rele vetää, niin kauan kun painiketta painetaan.
3. Painikkeesta tulee teksti näytölle "Portti RC1-2. "Tämä on relekortilla olevan PWM lähtöjen testi. Valitaan painike 1 tai 2 testit on samanlaiset. Näytölle ilmestyy teksti "PWM(1)(2) 4+  5-  " Tarkoittaen, 4 painikkeella lisätään ja 5 painikkeella vähennetään pulssisuhdetta ja jos lähtöön on kytketty moottori, sen pyörimisnopeus muuttuu samalla. 7 painikkeella takaisin edelliseen valikkoon.
4. Painikkeesta tulee teksti näytölle "Portti RE-" tässä voidaan testata AD kortilla olevien rajakytkintulojen toiminta jos kortti on kytkettynä. Oikosuljetaan riviliittimeltä testattava pari ja näytölle tulee sitä osoittava teksti.
5. Painikkeesta tulee teksti näytölle "A/D CH-     " Tämä taas tarkoittaa että voidaan valita analogiakanava 0-4:n tai palata edelliseen valikkoon 7:lla. Jos painetaan esim 0 tekstiksi tulee "A/D CH-0  0,00V " ja kun kytketään jännite kanavaan 0, jännitearvo tulee kanavanäytön perässä olevan 0,00V numeroiden tilalle. Voidaan kytkeä vaikka +5V:n käyttöjännite kanavaan ja säädetään trimmerillä jännitearvo oikeaksi 5,00 tai mitä se sitten onkin, jotain siinä lähellä. Jokaiselle kanavalle tulee tehdä sama säätö, sen jälkeen näytöllä oleva jännitearvo on oikein, jokaisella kanavalla. 6 painikkeella näytölle tulee 4:n kanavan mittaustulos.

Siinä tuo toisen testiohjelman toiminta noin lyhyesti. Olisi siinä vielä hiomista suuntaan jos toiseenkin, mutta toimii näinkin. 
Ohjelmaa on kommentoitu suhteellisen runsaasti, ihan tarkoituksella, kun noista esimerkeistä, mitä netistä löytyy, on tuo kieli paremmin outoa ja tässä on nyt ainakin yritetty hieman käyttää tätä kotimaista murretta, mitä yleensä lähes jokainen tässä maailman kolkassa asuva  ymmärtää. Itselläni oli kuitenkin aluksi hieman hankala hahmottaa ohjelmien toimintaa, johtuen ensiksikin juuri kielestä ja toiseksi ohjelmointitavasta, jossa käytetään muita linkitettyjä tiedostoja kääntäjällä, tietenkin esimerkeistä nämä linkitetyt osat yleensä puuttuvat ja niitä kokeillessa ne yleensä ei sitten toimi. Myös kommentit ovat yleensä vain jokin huomautus tai sana josta pitäisi ymmärtää mitä ohjelma tekee juuri tässä kohdassa, no parempi sekin kuin ei mitään. Tässä testiohjelmassa on kaikki mitä siinä tarvitaan. Ei muita tiedostoja kuin tämä ja MPLAB ohjelma niin käännös onnistuu.
Ja ei muuta kuin kokeilemaan ja tutkimaan miten piiri toimii ohjelman kanssa.

Lisäsin vielä systeemiin näppäinmatriisin ja sille ohjelman, jolla voi testata toimiiko näppäimet matriisissa. Ohjelmassa on aika runsaasti rivejä, varmaan vähemmälläkin tulisi toimeen. Näin siitä tulee kuitenkin paremmin ymmärrettävä, miten näppäimet erotellaan toisistaan. Matriisi on kytketty samaan porttiin kuin ohjainpiirilevyllä olevat painikkeet, molemmat eivät toimi samaan aikaan. Kun käytetään matriisia, ohjainpiirilevyllä olevat näppäimet jätetään käyttämättä. Testaukseen pääsee painamalla aloitusvalikossa piirilevyn painiketta "6". Testauksesta pääsee takaisin painamalla samaan aikaan "0" ja "C". Ohjelma näyttää LCD näytöllä matriisista painetun näppäimen merkin. 


Tällainen siitä piti tulla alunperin jonkin aikaisemman suunnitelman mukaan.


Ja lähes tällainen tuli. PIC16F877 piirillä toteutettu ohjaus, kaikki yhdessä kuvassa.

Kotelointikin tuli toteutettua muutaman yrityksen ja sovituksen jälkeen, mutta tulihan siitä ainakin kohtuullisesti toimiva.

Kotisivu  Elektroniikka sivulle Relekortti Analogiatulokortti