Muita CD:tä 1. PIC16F87x sarjan opetus CD http://www.kolumbus.fi/probyte/piccdf87x.htm 2. Sulautettujen järjestelmien kurssi CD ja PID-säädinsimulaattori 3. Prof. P-Anderson PIC-C routines kirja CD- muodossa 4. Servo CD robottiasioista kiinnostuneille
Ritariässä-ohjelman testilevy
PIC CD sisältää suomenkielisen PIC kurssimateriaalin PIC työpajakursseista, joita on pidetty Helsingin Keksintösäätiölle ja TAKK:n opettajille eri vuosina. CD:llä on opetusteksti, päiväkohtaiset kysymykset ja niiden vastaukset. Microchipin MPLAB uudistuu usein, mutta kun käytössä on versio 6 tai uudempi ohjelmat ovat yhteensopivia. Uuden ohjelman voi ladata MIcrochipin sivulta ilmaiseksi. Toisaalta jos vanha ohjelma toimii hyvin, ei tarvitse.
CD:llä on MLAB käytöstä on yksityiskohtainen käyttöesimerkki kuvineen projektin aloittamisen eri vaiheista ja käyttämisestä. Erityisesti opettajat voivat käyttää tätä ominasuutta hyväkseen alkeisopetuksessa. KOSTEUSMITTARIESIMERKKI MPAB
PIC CD:lle on myös aloittelijalle tärkeitä PIC-aputiedostoja, kuten suomenkieliset PIC assemblerkurssi, suomenkielinen PIC C kurssi, PIC ohjelmointilaitteiden ohjeita ja solvellusohjelmia. Eri prosessoreilla on erislaisia asetuksia ja ohjelmiontilaitteiden käyttöstä on ratkaisut helposti saatavilla.
Myös Pictest-piirilevyn materiaali on mukana. PICTEST on PIC opetus kurseille tehty testilaite- CD:llä on esimerkkejä myös PIC16F628 sovelluksista. Erilaisia PIC-projekteja kuten askelmoottori, AD-muuntimet, joulutähti, LCD jne. Toivottavasti jaksat lukea läpi ainakin PIC assembler ja PIC C tiedostot ajatuksella. ------ MICROCHIP In Circuit Emulaattoriin (ICD) ja PICF877 liittyvät ongelmat on myös selvitetty PICF16F877 hakemistossa. Vastaukset esim. allaoleviin kysymyksiin
CD:llä on myös PROBYTEn kotisivutiedostot hinnastoineen. PDF-tiedostoihin ( Portbable Document File) tarvitaan Adobe Reader ohjelma ( 32-bittinen Adoben versio 4.0 löytyy CD:ltä) tai vastaava esim Gostscript. Jotkut ohjelmat ovat pakattu PKZIP-ohjelmalla ja ne avautuvat PKUNZIP-ohjelmalla (Utils-hakemisto) tai WINZIP-ohjelmalla. Myös Netscapen kotisivulta voi ladata vastaavan NETZIP-ohjelman, joka tosin tuo mainoksia koneeseen käytön aikana. PIC C-kääntäjän demo on CCS-hakemistossa, TDE-editori tietysti TDE-hakemistossa. Intel -51 sarjan prosessorikortista tietoa on ACPU-hakemistossa. PC:n kirjoitinporttiin tulevasta dataloggerista on tietoa PRO98-hakemistossa. HWBOOK hakemistossa on erilaisten hardwarelaitteiden kuvaukset (liitimet/väylät). ----- Alla Jarmo Latvalan komentteja PIC CD:stä---- Jarmo Latvala wrote:
Sain PICCd 2000:n ja olen sitä tutkiskellut ja testaillut siinä olevia ohjelmanpätkiä, lähinnä MPLAB ympäristössä. Tein sovelluksen joka loopitti silmukkaa jossa tutkittiin B-portin tuloja muistaakseni RB(0-3), ja jos niissä jotain oli muuttunut niin sytytettiin portti + 4 ledi palamaan. Kun testasin sitä MPLAB:lla kaikki toimi (asettelin ennen looppiin tuloa BSF PORTB,0 ...3 riippuen testikierroksesta) loopissa testattiin mikä bitti on muutoksen saanut ja hypättiin sen mukaan aliohjelmiin. Aliohjelmassa ajettiin 15 sek viive lediä polttaen ja sitten se sammutettiin ja palattiin takaisin looppiin. En edes epäile että MPLAB sisältäisi bugin vaan enemmän epäilen testikytkentääni jossa kaikkiin B-portteihin (0-7) on kytketty 330 vastus ja ledi maihin.
1. Nollaavatko nämä INPUT porttien tilan ?
Vastaus 1. ( Pekka Ritamäki) |--.nappi.--- VCC Kyllä, jos led on oiken päin eli katodi maihin. PIC/IO--330R--|>|-- gnd Lisäksi sinun tietysti pitää laittaa painonapit input -> VCC.
2. Jos laitan keskeytykset päälle tuleeko ym. kytkennällä jatkuvasti keskeytystä porttien tilanvaihdoksen takia?
Vastaus 2:
Kyllä, jos käytät B-portin muutoskeskeytystä. Se toimii vain portin ylänibblellä eli rb.4 .. rb.7. Lisäksi yleiskeskeytysbitti pitää olla päällä. Jos käytät muita kuin rb-muutoskeskeytystä, niin portin muutokset eivät haittaa ohjelmaa.
3. Onko sillä merkitystä tuleeko input porttiin infona maa/+5 v, eli onko tilanmuutos samanlainen , eli jos otan ja kytken painonapin porttiin A:2 niin kytkenkö napin toisen pään suoraa maihin/+5 volttiin vai vastuksen läpi jompaan kumpaan ?
Vastaus3 :
Ei ole merkitystä mihin kytket napin ( +5 tai maa), mutta lepotilassa tulon pitää olla toisessa tilassa, eikä missään tapauksesssa ilmassa. Yleensä kannattaa käyttää painonappeihin porttia B ja kytkeä napit maihin. Lisäksi kannattaa laitaa B-portin pull-optio päälle. Optiobitin käytössä on huomattava, että se (bit7) on päällä kun bitti on 0!
4. Onko siitä jotain haittaa jos käskyttää tyyliin BSF PORTB,3 kuitenkin tuo PORTB on muistipaikan osoite ja siinä olevan tiedon 3:tta bittiähän tuossa asetellaan. Tuntuisi lyhentävän koodia kun ei tarvitse ensin lukea osoitteesta tietoa muuttujaan ja muuttaa muutujan arvoa ja sitten sijoittaa sitä takaisin.
Vastaus 4:
Olet ymmärtänyt oikein, juuri noin pitää tehdä. PIC:n I/O:t ovat suoraan muistiavaruudessa olevia muistipaikkoja ja bittejä. Kaikki toiminnat kannattaa kohdistaa suoraan näihin rekistereihin.
5. Kun testasin erilaisia laskuri/viive toimintoja ei nuo viive-esimerkit kaikilta osiltaan toimineet ihan kopio ja liitä periaatteella, kun niissä oli tuo DECFSZ käsky niin kävi niin että kun se oli kierroksen kiertänyt eli tullu arvoon nolla ja käytiin seuraavaa laskuria vähentämässä oli lähtöarvo yllättäen nolla ja ensimmäisen kierroksen jälkeen arvo oli FF, josta seuraus oli asettaa sille ennen aliohjelman kutsua uusi arvo, sillä siitä selvittiin. Mutta nosti ilmaan kysymyksen PC:ssä nousee lippu pystyyn (OVERFLOW), entä PIC. Mistä huomaan vai onko asia otettava huomioon koodattaessa?
Vastaus5:
Taaskin olet ymmärtänyt asian oikein. Jokaiselle ohjelmoijalle kehittyy ajan myötä rutiineja, joita voi myöhemmin käyttää helposti. Nämä esimerkit on tehty enimmäkseen opteustuntien aikana selventämään asioita, eikä niitä ole tarkoitettu yleiskäyttöiseksi viiverutiineiksi. Kuten itsekin huomasit, niitä vähän muuttamalla pääsee kohtuulliseen nopeasti tulokseen. Töissä käytän itse enemmäkseen C-kieltä, johon olen kehitellyt parinkymmenen vuoden aikana kohtuullisen paljon itselleni sopivia rutiineja.
6. Aliohjelmien lopussa oli usein RETLW 0x00, palataanko aliohjelmasta kutsuneeseen ohjelmaan ja samalla asetetaan w muuttujaan arvo (eli kuten funktiossa yleisesti). Kuinka pitkä paluupino PICissä on eli montako hyppyä se muistaa ?
Vastaus 6:
RETLW 00 käskyn avulla voidaan tuoda aliohjelmasta parametritietoa kutsuvaan ohjelmaan työrekisterin W-avulla. Tämä käsky on on aivan yhtä lyhyt kuin pelkkä RET-käsky. Monasti, vaikka itse arvoa ei tarvitakaan, käytetään tätä käskyä tottumuksen vuoksi, sehän ei haittaa oikeastaan mitään.
7. Voinko suorittaa hypyn suoraa interrupt osoitteeseen, eli siihen osoitteeseen johon ohjelma keskeytyksen sattuessa menee, ja miten äijän käy jos sinne menee potkiiko PICCI pois vai saako mennä sorkkimaan?
Vastaus 7:
Kyllä voit ja ohjelma toimii ihan normaalisti, myös keskeytystilanteessa, koska keskeytyksen alussa laitetaan kriitiset rekisterit, mm. status ja osoitelaskuri talteen. Toinen asia on, että kannattaako tehdä itselleen kiusaa ja kokeilla erilaisia temppuja, koska normaalissakin ohjelmoinnissa on tarpeeeksi oppimista.
8. Onnistuuko rakentaa sellainen kytkentä jossa minulla on emolevy jossa on input/output väylät Picin porteille. Pic kortti painetaan emoon jossa sille on kide / kondensaattorit (1 per emolevy) , kortteja voi olla useita max(5 - 20) emolla mutta ne toimisivat vain yhdellä kiteellä. Emo tulisi ohjaamaan valvontakameroita, eli kun jollekin inputille tulee signaali niin ajettaisiin output- puoleta ko. kameralle viivettä, viiveen jälkeen palattaisiin kiertoon. Pic kortteja lisättäisiin kameroiden määrän mukaan mutta kiteet ja muut olisivat emolla valmiiksi.
Vastaus 8:
Kyllä onnistuu, jos tunnet PC I/O-väylän kunnolla tai olet valmis ostamaan ja lukemaan alan kirjallisuutta esim. PC Hardware Bible tms. Taas toinen asia on onko tuossa mitään järkeä. Mitä järkeä on säästää yhtä kidettä ja toisaalta sen takia tehdä monimutkaisia järjestelyjä? Käytä mieluummin valmiiksi dekoodattua PC:n IO-avaruutta, esim kirjoitin- tai sarjaporttia. Lisäksi videovalvontaan löytyy valmiita ratkaisuja esim. Maximilta.
> PS: Ohjelmointi ja sen ymmärtäinen ei ole tuottanut suurempia vaikeuksia, ainoastaan suuntarekisterit (TRIS ??) ovat vähän tuottaneet probleemaa, mutta nyt juuri löysin Microchipin rompulta asiaan jotain syventävää.
Vastaus 9:
Suuntarekisterit pitää ymmärtää oikestaan ensimmäisenä. Itse ymmärsin asian helpommin katsomalla Microhipin IO-portin kytketäkuvauksesta, joka on jokaisessa PIC-datalehdessä.
Erityisesti kannattaa huomata, että PICin porteista ei voi lukea ulkoista dataa, jos portin suuntarekisteri on anto-tilassa eli portin TRIS-rekisterin bitti on 0. TRISA ja TRISB-käskyjä voi huoletta käyttää, vaikka Microchip väittää niitä vanhentuneiksi. Vasta sitten kun ne eivät toimi, ne ovat vanhentuneita. Isoimmilla PIC:llä (esim. PIC16F877) pitää käyttää bankin vaihtoa suuntarekisterin ohjauksessa, koska suurempien porttien TRIS-käskyt eivät enää toimi. Alempien porttien TRIS käskyt toimivat kyllä edelleen.
Jos käytät TRISE-käskyä, se näkyy kyllä virheenä käännöstilanteessa ja ohjelma ei käänny.
--- Jarmon vastaus kohtaan 8--------
Niin tuossa ylläolevassa ajattelin kyllä pitää PC:n jossain ihan muualla enkä sekoittaisi sitä tähän vaikka emolevystä puhuinkin, vaan tarkoitin, että PIC-kortteja varten rakentaisin emolevyn jolla olisi väylät Piceille eli PIC-kortissa olisi mahdollisesti pelkkä PIC , kenties muutama oheiskomponentti kide olisi emolla ja kaikki Pic-kortit ottaisivat tahdistuksen tuolta kiteeltä. Tiedän että siihen olisi valmiitakin ratkaisuja tässäkin tapauksessa sellainen on mutta siitä puuttuu muutama säätömahdollisuus. Kortti voitaisiin painaa emolle kuten PC:n laajennuskortit ja se olisi sillä käyttövalmis. - Toki tuosta I/O porttien määrän kasvatuksesta uusilla pic-korteilla pääsisi eroon käyttämällä isompia Piccejä mutta asioitahan ei saa tehdä helpon kautta, tässä saisi nimittäin kokeiltua pientä sarjaliikennettä kun picit keskenään jakaisivat tietoa siitä kenellä olisi kamerapuolella aktiviteettia! Tuskin se tässä sovelluksessa on mikään hieno ratkaisu mutta saisi vähän harjoitella tuotakin ja yhteinen kide tahdistaisi ne kaikki samaan tahtiin olisi kenties siitäkin johtuva ongelma vähäisempi.
- Jarmo ---
Tuo suuntarekisteriasia oli kyllä aika simppeli kunhan vain pääsi ytimeen käsiksi eli sehän on oikeastaan ihan selvä kun miettii että PORTA & PORTB sisältävät 8-bittisen luvun eli sillä on mahdollista esittää vain 2 tilaa per bitti / portin pinni, niin tarvitseehan se vielä toisen rekisteripaikan jossa kerrotaan että onko kysymyksessä antava vai ottava portti.
Lopuksi Pic:ssä asiat ovat paljon selkeämmin kuin PC:ssä jossa ensin ladataan tietyt muistipaikat sopivilla arvoilla ja kutsutaan jotain keskeytystä hoitamaan asia ja tietenkin käskyjen määrä on ihan toinen.
- Jarmo ------- Jarmon vastaukset loppu----
KOSTEUSMITTARIESIMERKKI MPAB6
Uusi microchipin ohjelmointiympäristö MPLAB 6 on hieman erilainen kuin MPLAB 5. Tätä muutosta varten on tehty täydellinen esimerkkiohjelmisto MPASM/MPLAB6 varten Ympäristö MPLAB6:lle ja PIC16F628 sisäinen oskillaattori
Kieli Microchip assembleri MPASM -- Toiminta ---
Anturi: Kapasitanssi, joka muuttuu kosteuden mukaan ( esim. Philips kosteusanturi) 555 oskillaattori antaa pulssin PIC16F628 komennosta (B2->555/2) 555 anto (nasta 3) kytketään PICin nastaa B3 Mittaus: PIC mittaa pulssin ajan Capturure laskurin avulla Laskenta: kosteusnäytöksi LCD 2*16 -------- 1. Avaa projekti humidity MPLAB:n avulla 2. Käännä se HEX-tiedostoksi 3. Simuloi sitä MLABin avulla. --------- Esimerkki on tarkoitettu ohjelmointiesimerkiksi, ei laiterakennusprojektiksi. LCD on kytketty PIC16F628 toiselle puolelle LCD:n databitit DB4..7 -> PIC nastoihin B4..B7 LCD E -> RA.7 ( huom kidenasta!) LCD RS -> RA.6 ( huom kidenasta!) LCD W/R- kytketään suoraan maihin LCD CTR -> 0V LCD 1 -> 0V LCD 2 -> 5V
Esimerkkiohjelma sisältää F628HUM.ASM Pääohjelma LCD.INC LCD apufunktiot, viiveet, alustus LCD_MSG1.INC LCD sanoman muodostus HUMIDITY.MCW MPLAB- workplace asetukset F628HUM.ASM Pääohjelma F628HUM.COD Simulattoritiedosto F628HUM.HEX Käännetty tiedosto HUMIDITY.MCP MPLAB projetitiedosto SUBINT16.INC Vähennuslaskumoduli BIN2DEC.INC Binääri desimaalimuunnos HUMIDITY.INC Kosteuslskenta HEX2ASC.INC HEX-> ASCII muunnos READ.ME Toimintaselotus
Yhteystiedot
PROBYTE Oy Nirvankatu 31, 33820 Tampere FINLAND Puh: 03-2661885 Yhteystiedot