PROBYTE PIC CD  

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
 

PICTEST-hakemistossa on PICTEST-piirilevyn tiedot ja testausohjelmat.

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