Programmeren van PICs en meer: de PICkit 2
Hans Wagemans, ON4CDU, email: on4cdu(at)uba.be
Het programmeren van een PIC is iets dat je het liefst zelf wilt doenInleiding
Het programmeren van recente types PICs met een programmer en software van meer dan tien jaar oud verliep bij mij niet altijd vlekkeloos. Het ging zelfs zover dat het een gepruts werd met verschillende software voor verschillende PICs, en soms moest ook nog van software worden gewisseld voor lezen en schrijven. Dat moest natuurlijk anders kunnen.
De programmer
Tien tot vijftien jaar geleden was het heel zinvol een programmer zelf te bouwen. Inmiddels is dit achterhaald. De prijs van de hardware is laag, en de nu beschikbare software is veel geavanceerder en betrouwbaarder dan die van tien jaar geleden.
Een goede keus is een programmer type PICkit 2 of een kloon daarvan. Diverse handelaren verkopen zo’n programmer, en het aanbod op internet is heel groot.
De PICkit 2 is inmiddels opgevolgd door de PICkit 3. De functionaliteit is ongeveer gelijk aan die van zijn voorganger, maar het type 3 is geschikt voor de allernieuwste microcontrollers met een groot flashgeheugen [1]. Als je nu een programmer koopt is het dus voor toekomstige software-updates waarschijnlijk veiliger een type 3 te nemen. Anderzijds is het type 2 nu goedkoop en prima geschikt voor ons radioamateurs. Realiseer je bij het kopen dat sommige kloonversies niet alle functies van de originele PICkit hebben.
De PICkit is door Microchip (de fabrikant van de PICs) ontwikkeld. Hierbij stond het thuisgebruik op de voorgrond. Voor het professionele gebruik zijn er immers betere (en veel duurdere) alternatieven. Er wordt ook geen geheim van gemaakt hoe zo’n PICkit in elkaar zit. Op de website van Microchip [2] is alle informatie te vinden voor wie hem zelf zou willen bouwen. Op het helaas niet meer zo actieve Engelstalige gebruikersforum van de PICkit [3] is veel informatie te vinden. Hier wordt ook het gebruik van software onder Linux besproken.
De huidige verkoopprijs van de PICkit 2 is rond de € 35, en voor een starterkit [4], dat is een PICkit 2 met demoboard en veel software op cd’s, betaal je zo’n € 55.
Van de PICkit 2 bestaan twee versies. De bovenstaande foto geeft de nieuwere versie weer. Deze is te herkennen aan de rode drukknop. Een oudere eerste versie heeft een zwarte knop. Het verschil zit in enkele hardwaremodificaties en een nieuwe software. Het is goed mogelijk een oudere versie om te bouwen naar de nieuwere. Ook hierover is op het forum alle informatie te vinden.
Dit artikel is geen handleiding, maar geeft slechts een overzicht van de gebruiksmogelijkheden en een aantal praktische tips. Voor een handleiding raadpleeg je [2] en [5]. Op YouTube staan veel filmpjes over het gebruik van de PICkit 2.
De PICkit 2 is een ‘in-circuit programmer’ [6] en bruikbaar voor het programmeren van het flashgeheugen [7] van PICs. Flashgeheugen is een geheugen op basis van EEPROM. Een F in het typenummer van een PIC geeft aan dat deze een flashgeheugen bezit. ‘In-circuit’ betekent dat deze programmer PICs kan programmeren terwijl die in de schakeling opgenomen zijn. Uiteraard zijn ook losse controllers met een adapter van de juiste code te voorzien.
De In-Circuit Serial Programming (ICSP) aansluiting bestaat uit vijf aansluitingen:
– Vpp: de programmeerspanning, meestal ongeveer 12 volt
– ICSPCLK of PGC: de klok voor de programmer
– ICSPDAT of PGD: data. De richting is afhankelijk van lezen of schrijven.
– Vdd: voedingsspanning
– Vss: 0 volt (‘aarde’)
De aansluitingen zijn de voedingspanning en drie signaalaansluitingen. De programmeerspanning Vpp is meestal ongeveer 12 volt, en wordt bij het kiezen van de juiste PIC in de software ingesteld op de juiste waarde.
Om een PIC te programmeren sluit je de bovenstaande vijf ICSP-signalen op de juiste pootjes van de PIC aan. Je kiest het juiste type PIC in de software, en met de knop ‘write’ schrijf je een ‘hexfile’ naar de controller. Met ‘read’ lees je de inhoud van de controller. Zo eenvoudig kan het leven zijn.
Het kiezen van de juiste PIC kan de programmer ook zelf doen, maar dat wijst zich vanzelf bij het gebruik van de software. Erg handig is het aan de programmer een 40-polige Textool ZIF DIP voet te koppelen, want daarin passen alle (8, 14, 18, 28 en 40-pens) in-line PICs. De verbindingen met de programmer worden met (stekker-) draadjes gemaakt.
Een Textool voet aan de PICkit 2 aangesloten
Een kloon PICkit 2 programmer met een Textool voet op het programmerboard
Nog eenvoudiger is het een losse PIC op een experimenteerboard te plaatsen en met draadjes de verbindingen met de programmer te verbinden.
Een PIC gemonteerd op een experimenteerboard
Een universele adapter voor in-line PICs. Alle PIC-aansluitingen zijn naar buiten uitgevoerd, en een kristalvoetje, een drukknop en een voedingsplugje zijn op het board gemonteerd.
Voor SMD PICs werken de Textool voet en de experimenteerboardmethode natuurlijk niet. Die PICs moet je dan in de schakeling programmeren, of je moet een methode vinden om de microcontroller direct aan de programmer te koppelen. Je kunt de controller op een los printje solderen, programmeren en dan weer van het printje halen. Voor het programmeren van een enkele SMD PIC kan dat een oplossing zijn, maar een adapter voor de chip is een elegantere oplossing.
Een zelfbouwadapter om de SMD PICs buiten de schakeling te programmeren kun je proberen zelf te maken. Maar bij mij bleek: dat is niet altijd een erg betrouwbare oplossing. Op internet zijn allerlei handige adapters te vinden die direct of met wat geknutsel aan de programmer gekoppeld kunnen worden. Voorbeelden hiervan zijn te zien op de volgende foto’s.
Een originele Microchip adapter voor het programmeren van de in-line en SMD-versie van de 10F20x-serie. Deze adapter past direct op de PICkit 2.
Een adapter voor de SMD-versie van de 10F20x die eenvoudig met draadjes met stekkertjes aan de programmer wordt gekoppeld
Zoals eerder opgemerkt is de PICkit 2 een ‘in-circuit programmer’. ‘In-circuit’ betekent dat deze programmer PICs kan programmeren terwijl die in de schakeling opgenomen zijn. De schakeling heeft dan een aansluiting om de programmer aan te kunnen sluiten, en de schakeling rond de PIC is (hopelijk) zo ontworpen dat de schakeling bestand is tegen de spanningen die de programmer gebruikt om de PIC te programmeren.
Wees wel waakzaam. Een PIC 10F200 bijvoorbeeld functioneert prima in een schakeling met 3 volt voedingsspanning, maar tijdens het programmeren worden voor ICSPCLK (kloksignaal) en ICSPDAT (datasignaal) logische signalen van 5 volt gebruikt; de Vpp aansluiting gaat zelfs naar 12 volt. Je kunt hiermee andere IC’s op de print dus vernielen! Soms kun je wel een LVP (Low Voltage Programming) mode gebruiken, maar helaas gaat dat niet voor alle PICs.
De software wordt bij de programmer geleverd of is gemakkelijk te vinden op het internet. Een typisch screenshot met aangesloten PICkit 2 programmer is te zien in afbeelding 2.
Afbeelding 2 Screenshot van de PICkit 2 software na het uitlezen van een PIC 16F690
Enkele valkuilen
Er bestaan voor ICSP verschillende aansluitstandaarden [6]. Voor deze standaarden heb ik een adapter naar de programmer gemaakt. Tijdens experimenten bleek echter dat sommige amateurs zich niet aan die standaarden houden en er zelf een bedenken! Wees hierop bedacht.
Enkele PICs hebben een typenummer met de toevoeging A. De 16F84 bijvoorbeeld is niet helemaal gelijk aan een 16F84A; let hierop bij het kiezen van het type bij het programmeren.
PICs met een interne oscillator worden door de fabrikant gekalibreerd door een waarde op de laatste geheugenplaats van het flashgeheugen te zetten. Als je deze waarde uitwist ben je dus de kalibratie kwijt.
Pas op bij ‘In-Circuit Serial Programming’ van (vooral 3 volt) schakelingen; de programmer gebruikt tijdens het programmeren 5 volt voor de klok- en datasignalen, en voor Vpp zelfs meer dan 10 volt. Dit kan het einde betekenen van de IC’s in het omliggende circuit.
Het programmeren van PICs is erg eenvoudig zolang de configuratie-instellingen voor de zogenaamde ‘fuse bits’ in de hexfile aanwezig zijn, en dat is bijna altijd het geval.
De PICkit 2 kan meer
De PICkit is naast een programmer ook een stuk gereedschap om programma’s te ontwikkelen en te testen [8]. Zo heeft de PICkit 2 een UART-functie. De ICSP-aansluiting wordt hiervoor gebruikt. Deze UART werkt met logische 0 en 5V-signalen (dus niet met RS-232 +12V en −12V-signalen!). Hiermee kan in hex en ASCII met de PIC worden gecommuniceerd. Dat kan erg handig zijn om uitgangssignalen van de PIC te monitoren en om commando’s aan de PIC door te geven tijdens het ontwerpen en testen van software.
Afbeelding 3 Het zichtbaar maken van een RS-485 datasignaal, afkomstig van een PIC die het azimut van een antennerotor uitleest
Een ander heel handig hulpmiddel is de logic analyser. Met de PICkit 2 is het mogelijk digitale signalen in de tijd zichtbaar te maken. Deze logic analyser kan drie signalen gelijktijdig zichtbaar maken. Om speciale evenementen te bekijken zijn er diverse triggermogelijkheden. Hierdoor wordt het bijvoorbeeld mogelijk seriële protocollen te bekijken.
Afbeelding 4 Screenshot van de analyserfunctieMPLAB, de ontwikkelomgeving van Microchip, ondersteunt vanaf versie 7.5 de PICkit 2 direct. Hiermee is op eenvoudige wijze een programma voor een PIC te maken. Zie afbeelding 5.
Afbeelding 5 Screenshot van MPLAB bij selectie van de PICkit 2 programmer
Verder kun je ook heel redelijk debuggen met een PICkit in combinatie met MPLAB. De beschrijving van deze functie valt buiten ons bestek, want anders wordt het een artikel voor een computertijdschrift. Wie er meer van wil weten leest de ‘user guide’ of kan op internet terecht.
Over de PICkit 2 ben ik heel tevreden, en die in mijn shack is een onmisbaar stuk gereedschap geworden.
Hartelijk dank aan Bart van Ewijk PE1PFW voor zijn inbreng in dit artikel.
Internetlinks
[1] http://en.wikipedia.org/wiki/PICKit
[2] http://ww1.microchip.com/downloads/en/DeviceDoc/51553E.pdf
[3] https://groups.google.com/forum/#!forum/pickit-devel
[4] http://www.microchipdirect.com/productsearch.aspx?Keywords=DV164120
[5] http://www.modtronix.com/products/prog/pickit2/pickit2%20datasheet.pdf
[6] http://en.wikipedia.org/wiki/In-circuit_serial_programming
[7] http://nl.wikipedia.org/wiki/Flashgeheugen
[8] http://ww1.microchip.com/downloads/en/DeviceDoc/PICkit2%20Overview.pdf
Dit artikel is eerder gepubliceerd in het radioamateurblad Electron van oktober 2013 (PDF)