Programmeren van pic-microcontrollers in C. Een tutorial over het programmeren van PIC-controllers voor beginners (EA Korabelnikov, 2008). De MPLAB C-compiler installeren

Eindelijk hebben we vandaag tijd om u kennis te laten maken met een andere familie microcontrollers: dit zijn microcontrollers FOTO.

Deze microcontrollers zijn ook zeer bekend, worden in veel apparaten geïnstalleerd en staan ​​al geruime tijd zeer in de belangstelling bij radioamateurs.

De ontwikkelaar van deze familie is het bedrijf Microchip, dat ook erg beroemd is en dat er over de hele wereld vraag is naar zijn producten.

Het bestuderen van deze serie controllers is een heel moeilijke vraag, ik ben er lang geleden mee begonnen, maar ik heb het nu pas onder de knie. De laatste tijd heb ik het proces van het bestuderen van PIC-microcontrollers enigszins versneld dankzij jullie verzoeken in groepen en chats, waarop ik niet anders kon dan reageren.

Daarom merk ik op dat we de PIC MK in de taal C zullen programmeren. We zullen iets later beslissen welke programmeeromgeving en compiler we zullen kiezen, maar in de tussentijd zullen we in deze les een korte introductie krijgen over de controllers zelf, hun architectuur en hun variëteiten.

De AVR-controllers waar we nog steeds mee werken zijn bijvoorbeeld 8-bit, terwijl de STM-controllers die we bestuderen 32-bit zijn.

PIC-controllers zijn ook onderverdeeld op bitdiepte.

Eerste lijn zijn 8-bit PIC-controllers. Hun modelnamen beginnen met het voorvoegsel PIC10/PIC12/PIC16.

Ook deze lijn is verdeeld in 3 families.

1. BASISLIJN— deze architectuur is aanwezig in PIC10-controllers. Het verschilt van de krachtigere series in het aantal pinnen (van 6 tot 28) en in de lage kosten.

2. MIDDENBEREIK— PIC12/PIC16-microcontrollerkernen hebben deze architectuur. Het aantal pinnen in deze serie is verhoogd (van 6 naar 64), ze zijn iets duurder, maar naast de 35 machine-instructies die door de BASELINE-serie worden ondersteund, hebben ze 14 extra instructies (geoptimaliseerd voor de C-taalcompiler) . Ook heeft deze serie de productiviteit met 50% verhoogd, ze hebben een diepere en verbeterde hardwarestack, verhoogde geheugencapaciteit en enkele andere geneugten waar we later kennis mee zullen maken, aangezien we hoogstwaarschijnlijk het proces van het bestuderen van microcontrollerprogrammering zullen beginnen met deze series FOTO.

3. 8-bit PIC18-microcontrollers- dit is een verbeterde serie controllers, er zijn veel andere randapparatuur aan boord, het aantal pinnen van 18 tot 100, prestaties 16 MIPS, ondersteuning voor NanoWatt-technologie, de aanwezigheid van een programmeerbare generator.

Tweede lijn- dit zijn 16-bits controllers FOTO. Ze worden voorafgegaan door PIC24F en PIC24H. Dit zijn al krachtigere controllers. In tegenstelling tot de eerste regel wordt een machinecommando niet meer in 4 klokcycli van de generator uitgevoerd, maar in 2. Ook zijn de randapparatuur nog verder uitgebreid qua bustypes, directe toegang tot DMA-geheugen (voor PIC24H), en een uitgebreide set instructies. Er zijn ook veel andere kenmerken.

Derde lijn- dit zijn 32-bits controllers. Hun voorvoegsel is al PIC32. De klokfrequentie van dergelijke controllers is maximaal 120 MHz, en voor de nieuwe MZ-serie - tot 200 en zelfs hoger. Ik heb bijvoorbeeld een ontwikkelbord waarop een PIC32MZ2048EFH064-controller is geïnstalleerd, die een klokfrequentie heeft van 252 megahertz. Ook hier zijn de kernprestaties verder verhoogd. Deze familie is gebouwd op de MIPS32®-kern, die naast hoge prestaties ook wordt gekenmerkt door een laag energieverbruik.

Over het algemeen zijn dit de korte kenmerken van de momenteel bestaande PIC-controllers. Als we het bij naam nemen, dan zijn er veel namen, voor elke smaak, zoals ze zeggen.

Net als de AVR- en STM32-controllers die we hebben getest, en ook degene die we overwegen, werken PIC-controllers op ongeveer dezelfde manier. Een programma wordt geschreven, samengevoegd tot machinecode die begrijpelijk is voor het rekenkundig-logische apparaat van de controller, in de controller geladen (geflasht of geüpload) en zorgt vervolgens voor de werking volgens een bepaald algoritme. De belangrijkste interface die wordt gebruikt om deze controllers te flashen is ICSP, ontworpen voor in-circuit programmering. We zullen het in meer detail leren kennen als we deze controllers flashen.

Laten we eens kijken naar de geheugenorganisatie in PIC-controllers. Omdat we de PIC-familie gaan bestuderen met eenvoudigere 8-bits (het principe van eenvoudig naar complex is door niemand geannuleerd), zullen we kijken naar de geheugenorganisatie van deze serie.

Laten we eerst eens kijken naar het blokschema van de controller met behulp van het voorbeeld van MK PIC16F84A(klik op de foto om de afbeelding te vergroten)

Linksboven valt meteen de FLASH-geheugenmodule op, waarin doorgaans het controllerprogramma (firmware) is opgeslagen. En in de rechterbovenhoek zien we EEPROM-geheugen, dat al wordt gebruikt om gegevens op te slaan. Deze twee typen geheugen zijn niet-vluchtig en worden niet gewist nadat de controller is uitgeschakeld en gereset. Maar dit geheugen is niet snel, dus wanneer het programma start, wordt de code verdeeld in het RAM-geheugen (RAM), dat al snel is en bedoeld is voor het functioneren van de controller tijdens bedrijf. Daarom zullen we dit geheugen nu wat gedetailleerder bekijken.

Het RAM-geheugen van de PIC-controller is verdeeld in programmageheugen en datageheugen.

Zo is het programmageheugen van de controller georganiseerd PIC16F84A

De microcontrollers in deze serie hebben een programmateller die 8K x 14 woorden programmageheugen kan adresseren en een 14-bit programmageheugendatabus. Het volledige programmageheugen is verdeeld in 4 pagina's van elk 2 kilowoorden (0000h-07FFh, 0800h-0FFFh, 1000h-17FFh, 1800h-1FFFh). Dit is algemene informatie, dus voor controllers met een klein geheugen zal het wisselen tussen deze pagina's leiden tot cyclische adressering. Daarom moeten we de geheugengrootte kennen van de controller die we willen programmeren. Over het algemeen bestaat het programmageheugen uit een programmateller, een stapel van verschillende niveaus, geheugen voor het opslaan van interruptvectoren en een intern programmageheugen.

We zullen ook iets te weten komen over de organisatie van het RAM-geheugen dat is toegewezen voor gegevensopslag.

Het datageheugen is verdeeld in registers voor algemene doeleinden en registers voor speciale doeleinden. Laten we eens kijken hoe het datageheugen van de controller is georganiseerd PIC16F84A

Special Purpose Registers (SFR) zijn registers die zijn ontworpen om strikt aangewezen waarden op te slaan en specifieke namen hebben. We zullen ze geleidelijk leren kennen als we broncode schrijven die er uitgebreid gebruik van zal maken.

General Purpose Registers (GPR) zijn geheugencellen die alleen adressen hebben en zijn ontworpen om gegevens op te slaan.

Ook uit de bovenstaande figuur zien we dat het datageheugen van onze controller is verdeeld in 2 pagina's (of banken), waarvan de overgang wordt uitgevoerd door bepaalde bits in het register in te stellen TOESTAND. Daarom is dit register in beide banken aanwezig en kunnen we er op elk moment toegang toe krijgen om de huidige geheugenpagina te wijzigen.

Adressering kan direct, indirect of relatief zijn, wanneer het adres wordt gemeten relatief ten opzichte van het huidige adres. We maken hier misschien geen kennis mee, omdat deze taak zich voordoet voor programmeurs die programma's in assembler schrijven.

Dienovereenkomstig heeft elke controller, naast geheugen, nog veel meer interessante dingen, waaronder I/O-poorten. Onze PIC-controllers vormen daarop geen uitzondering. Laten we eens kijken naar het doel van de controllerpoten PIC16F84A

Deze controller heeft twee poorten: poort A en poort B. Vanaf poort A worden 5 poten naar buiten gebracht - RA0-RA4, en vanaf poort B - alle 8 poten RB0-RB7.

Ook kunnen de poortbenen andere doeleinden hebben, afhankelijk van hoe we ze configureren. Pin 6 of RB0 kan bijvoorbeeld op elk moment veranderen in een pin voor het opvangen van externe interrupts, en pin 3 of RA4 kan een pin worden voor het klokken van een timer van een externe generator.

Het klokken van de PIC MK kan ook worden uitgevoerd vanaf een externe oscillator, of vanaf een kwartsresonator, vanaf een interne weerstand, en er zijn ook verschillende andere opties die niet alle controllers van deze familie ondersteunen. In de praktijk wordt meestal gebruik gemaakt van klokken vanuit een kwartsresonator. Hoogstwaarschijnlijk zullen we deze traditie ook in onze toekomstige studies volgen.

Ik denk dat dit is waar we onze kennismaking met PIC-controllers zullen beëindigen. De kennismaking bleek kort te zijn, maar voor de eerste keer zal dit genoeg voor ons zijn. We zullen meer gedecodeerde informatie tegenkomen wanneer we onze programma's schrijven. Kijk dus uit naar de volgende lessen, die beloven heel interessant te worden. We zullen eerst kennis maken met de installatie van de omgeving en de compiler, we zullen bestuderen hoe we ermee kunnen werken, welke programmeersubtiliteiten aanwezig zijn in de instellingen van verschillende randapparatuur, maar ook in het werken ermee.

Bekijk VIDEO TUTORIAL (klik op de foto)

Berichtweergaven: 9.304



  • klokfrequentie - 20 MHz
  • 4 volledige 8-bit I/O-poorten
  • seriële en parallelle poort
  • I2C-bus
  • meerdere timers
  • vergelijkingsmodules, comparatoren
  • pulsbreedtemodulatie (PWM) module
  • 10-bits ADC

Deze MK is wijdverspreid en wordt vaak aangetroffen in de detailhandel. Als je in Moskou bent, moet je naar "Chip and Dip" gaan - daar kun je het voor ongeveer 350 roebel kopen. Ik raad ten zeerste aan om het in een DIP-pakket (breed) te kopen, gelukkig is er één. Voor eerste experimenten en tests is dit de beste optie. Als je het plotseling in een PLCC-pakket koopt, zullen er een heleboel problemen zijn met het gebruik ervan - de steek van de platte kabels van 1,27 mm is niet de handigste optie.

Dus hebben we voor MK gekozen. In de bestanden bij dit artikel vindt u een complete handleiding voor deze MK. Het is nu duidelijk wat we moeten kopen, maar laten we voor nu een programma schrijven zodat het duidelijk is wat we er vervolgens mee moeten doen en hoe we het in deze MK kunnen ‘naaien’.

We starten het MPLAB-programma (dat we in eerdere artikelen hebben geïnstalleerd). Selecteer een menu-item Project -> Projectwizard. Klik in het venster dat wordt geopend Verder.

In de vervolgkeuzelijst met beschikbare MCU's selecteert u PIC16F877. Klik Verder.

Hier moeten we een compiler selecteren die onze programmacode zal verwerken. U moet het artikel selecteren HI-TECH PICC-toolsuite in de vervolgkeuzelijst Actieve Toolsuite. Dit is dezelfde C-taalcompiler die we in het laatste artikel hebben geïnstalleerd. Klik Verder.

Geef het project een naam, bijvoorbeeld TestPIC en specificeer de projectmap. Er zijn hier twee trucs. Ten eerste maakt MPLAB geen aparte map voor het project zelf en plaatst alle bestanden rechtstreeks in de map die u hebt opgegeven. Ten tweede, en misschien wel het allerbelangrijkste, begrijpt MPLAB geen Russische letters in de padnaam. Er wordt een project aangemaakt, maar terwijl het programma draait, vooral bij het opslaan en openen van bestanden, zullen er zulke “glitches” optreden dat je je lange tijd zult afvragen wat er aan de hand is. Daarom mag het pad naar de projectmap geen Russische namen bevatten. Klik Verder.

Hier kunt u eventuele kant-en-klare bestanden aan het project toevoegen, maar deze optie hebben we nog niet nodig. Klik Verder.

Hier denk ik dat alles duidelijk is. Klik Klaar.

Het project is voorbereid, maar staat nog leeg. Klik Bestand -> Nieuw. Er verschijnt een nieuw venster met de titel Ongetiteld. Selecteer vervolgens Bestand -> Opslaan als.... Geef een bestandsnaam op, bijvoorbeeld TestPIC.c en ga naar uw projectmap. Zorg ervoor dat u het vakje aanvinkt Bestand toevoegen aan project.

Nu plaatsen we de volgende code hieronder in het geopende venster van het TestPIC.c-projectbestand (het hele project is te vinden in de bestanden voor dit artikel).

#erbij betrekken CONFIG(0x03F72); int ik=0; leegte voornaamst( leegte) ( T0IE=0; GIE=0; TRISB=0; PORTB=0; terwijl(1==1) (POORTB++; voor(i=0; ik

Je vraagt ​​je waarschijnlijk af wat het resultaat van deze code zal zijn. Het volgende gebeurt: Er worden 8 LED's op de MK aangesloten. Wanneer je de stroom inschakelt, beginnen de LED's te knipperen in de vorm van een "golf" (het is beter om dit te zien, gelukkig zijn er niet zoveel meer). Laten we de code zelf eens nader bekijken.

Eerst komt de bekende include-instructie, die het headerbestand met alle benodigde macrodefinities bevat. Vervolgens komt er nog een preprocessorrichtlijn __CONFIG, die een hexadecimaal getal bevat dat een reeks speciale opties en eigenschappen karakteriseert die de werking van de MK karakteriseren. Op dit punt komen we verderop in dit artikel terug. Laten we meteen naar het begin van de functie main() gaan: het toegangspunt tot de daadwerkelijke uitvoerbare code van het programma. Vervolgens volgt een operatie met wat T0IE. Concreet betekent deze regel dat het noodzakelijk is om interrupts van de timer uit te schakelen wanneer de MK actief is. TOIE is het adres van een speciaal register gedefinieerd met #define in het pic.h-bestand, dat verantwoordelijk is voor deze bewerking (en in het algemeen, als je in de code vreemde, voorheen ongedefinieerde variabelen ziet die in hoofdletters in de code zijn geschreven, dan zijn dit waarschijnlijk symbolische namen van de MK-registers). Lijn GIE=0; - verbiedt de verwerking van eventuele interrupts globaal door de gehele microcontroller. We zullen geen interrupts gebruiken voor ons eenvoudige voorbeeld, omdat... Wij hebben ze simpelweg niet nodig.

TRISB=0; - betekent dat de I/O-poort B De PIC16F877 MK zal werken als een uitgang, d.w.z. Je kunt er nu een belasting op aansluiten, die 0 of +5V kan leveren vanuit de MK (deze belasting zal LED zijn). In de volgende regel plaatsen we het getal 0 in poort B - d.w.z. Alle pinnen op deze poort die zijn geconfigureerd voor uitvoer hebben een nulspanning. Vervolgens komt een constructie van de while-operator, en met zo'n parameter dat sommige programmeurs die gewend zijn aan het schrijven in C voor een pc enigszins verrast zullen zijn - dit is, zeggen ze, een eindeloze lus, het programma zal vastlopen. Maar dit is precies wat we nodig hebben. MK kan niets doen, hij moet voortdurend iets doen. Daarom is voor MK het uitvoeren van een programma in een eindeloze lus een essentiële noodzaak. Dan komt de operator om het nummer in poort B met 1 te verhogen. Laten we het even uitleggen. Als u PORTB=0xFF; - dan hebben alle poortpinnen 1. Als PORTB=0x0; - voor alle 0. (Ik denk dat dit duidelijk moet zijn). De constructie van de for loop-operator levert blijkbaar geen "slim" werk op en is alleen nodig om een ​​tijdvertraging te organiseren. Als we dit gedeelte van de code verwijderen, zullen we eenvoudigweg niet merken hoe de spanning op de LED's verandert (het zal heel snel zijn).

Wat bedoelen ze? Laten we in volgorde gaan.

  • Oscillator - HS (betekent dat een hoogfrequente kwartsresonator wordt gebruikt als klokgenerator)
  • WatchDog Timer - Uit (speciale optie, als deze is ingeschakeld, zal de microcontroller periodiek resetten [ga naar het begin van main()] om vastlopen in de MK te voorkomen. We hebben deze optie niet nodig.)
  • Power Up Timer - Aan (indien ingeschakeld, bevindt de MK zich in een reset-status totdat de voedingsspanning het vereiste drempelniveau bereikt)
  • Brown Out Detect - Aan (reset de MK als de voedingsspanning onder een bepaald niveau daalt)
  • Laagspanningsprogramma - Uitgeschakeld (in dit geval verbieden we het gebruik van laagspannings-in-circuitprogrammering van de MK, aangezien we een gewone programmeur zullen gebruiken [zie de volgende artikelen])
  • Flash Program Write - Ingeschakeld (we staan ​​de mogelijkheid toe om programma's naar Flash-geheugen te schrijven)
  • Data EE Read Protect - Uit (laat lezen van gegevens en EEPROM-geheugen van de MK toe)
  • Code Protect - Uit (schakel codebeveiliging in de MK uit. Indien Aan, is het onmogelijk om het programma van de MK te lezen. Dit is nodig als u uw programma wilt beschermen tegen hackpogingen. We hebben deze functie nog niet nodig .)

Het is tijd om de code te compileren. Loop Project -> Alles bouwen. Hiermee wordt begonnen met het compileren van het project en een venster zoals dit verschijnt met een prachtige invoer aan het einde van BUILD SUCCEEDED.

Als u nu in onze projectmap kijkt, zou u daar een bestand moeten zien TestPIC.hex- het resultaat van al onze inspanningen. Het bevat speciale code, gegenereerd op basis van onze schrijfsels in C, om in het MK-geheugen te laden. Om verder te gaan hebben we een programmeur nodig waarmee we ons programma in de MK zullen schrijven. Het is tijd om verder te gaan naar het volgende artikel, waar de kwestie van het maken van je eigen programmeur wordt besproken.

© Ivanov Dmitry
april 2007

PIC-controllers blijven populair als het gaat om het creëren van een goedkoop, compact en energiezuinig systeem dat geen hoge besturingseisen vereist. Met deze controllers kunt u hardwarelogica vervangen door flexibele software die via goede poorten met externe apparaten communiceert.

Miniatuur PIC-controllers zijn goed voor het bouwen van converters voor seriële datatransmissie-interfaces, voor het implementeren van de functies "ontvangen - verwerken - verzenden van gegevens" en eenvoudige regelaars van automatische besturingssystemen.

Microchip distribueert MPLAB, een gratis geïntegreerde omgeving voor het bewerken en debuggen van programma's die via programmeurs binaire bestanden naar PIC-microcontrollers schrijft.

Door de interactie tussen MPLAB en Matlab/Simulink kunt u programma's ontwikkelen voor PIC-controllers in de Simulink-omgeving - grafische modellering en analyse van dynamische systemen. Dit werk bespreekt de programmeertools voor PIC-controllers: MPLAB, Matlab/Simulink en PIC-KIT3-programmeur in de volgende secties.

Kenmerken van de miniatuur PIC-controller PIC12F629
Geïntegreerde ontwikkelomgeving MPLAB IDE
Matlab/Simulink verbinden met MPLAB
De PIC-KIT3-programmeur aansluiten

Kenmerken van miniatuur PIC-controller

De PIC12xxx-familie bevat controllers in een miniatuur 8-pins pakket met een ingebouwde klokgenerator. De controllers hebben een RISC-architectuur en zorgen voor de uitvoering van de meeste processoropdrachten in één machinecyclus.

Hieronder staan ​​als voorbeeld de kenmerken van een goedkope, compacte 8-bit PIC12F629-controller met multifunctionele poorten, een laag verbruik en een breed vermogensbereik.

Architectuur: RISC
Voedingsspanning VDD: 2,0 V tot 5,5 V (< 6,5В)
Consumptie:
- <1,0 мА @ 5,5В, 4МГц
- 20 µA (typ) @ 32 kHz, 2,0V
- <1,0 мкА (тип) в режиме SLEEP@2,0В
Vermogensdissipatie: 0,8 W
Multifunctionele I/O-kanalen: 6/5
Maximale uitgangsstroom van GPIO-poorten: 125mA
Stroom door programmeerbare pull-up-weerstanden op de interne poort: ≥50 (250) ≤400 µA bij 5,0 V
Controllergrootte: 8
Klokfrequentie van externe oscillator: 20 MHz
Machinecyclustijd: 200 ns
Klokfrequentie van interne RC-oscillator: 4 MHz ±1%
Machinecyclustijd: 1 µs
FLASH-programmageheugen: 1K
Aantal wis-/schrijfcycli: ≥1000
RAM-gegevensgeheugen: 64
EEPROM-gegevensgeheugen: 128
Aantal wis-/schrijfcycli: ≥10K (-40оС ≤TA≤ +125 оС)
Hardware-registers voor speciale doeleinden: 16
Lijst met instructies: 35 instructies, alle instructies worden in één machinecyclus uitgevoerd,
behalve sprongopdrachten die in 2 cycli worden uitgevoerd
Hardwarestapel: 8 lagen
Timer/teller TMR0: 8-bit met prescaler
Timer/teller TMR1: 16-bit met prescaler

Extra functies:
Resetten bij inschakelen (POR)
Timer resetten (PWRT generator start wachttimer (OST)
Onderspanningsreset (BOD)
Watchdog-timer WDT
Gemultiplexte uitvoer -MCLR
Interruptsysteem voor het wijzigen van het signaalniveau aan de ingangen
Individueel programmeerbare pull-up-weerstanden voor elke ingang
Programmeerbare ingangsbeveiliging
SLEEP Energiezuinige modus
Selecteren van de bedrijfsmodus van de klokgenerator
ICSP-in-circuitprogrammering met behulp van twee pinnen
Vier aangepaste cel-ID's

Beperk de bedrijfstemperatuur voor E-versie (uitgebreid bereik) van -40°C tot +125°C;
Opslagtemperatuur van -65°C tot +150°C.

CMOS-controllertechnologie biedt een volledig statische bedrijfsmodus, waarbij het stoppen van de klokgenerator niet leidt tot het verlies van logische toestanden van interne knooppunten.
De PIC12F629-microcontroller heeft een 6-bit GPIO-poort. Eén GP3-pin van de GPIO-poort werkt alleen als invoer, de overige pinnen kunnen worden geconfigureerd om zowel als invoer als uitvoer te werken. Elke GPIO-pin heeft een individuele interrupt-inschakelbit voor het wijzigen van het signaalniveau aan de ingangen en een interne pull-up-weerstand-inschakelbit.

Geïntegreerde ontwikkelomgeving MPLAB IDE

MPLAB IDE - een gratis geïntegreerde softwareontwikkelomgeving voor PIC-microcontrollers omvat tools voor het maken, bewerken, debuggen, vertalen en koppelen van programma's, en het schrijven van machinecode naar microcontrollers via programmeurs.

Gratis versies van MPLAB (inclusief MPLAB 8.92) zijn opgeslagen op de Microchip-website in de sectie “DOWNLOAD ARCHIEF”.

Een project maken

Een voorbeeld van het maken van een PIC-controllerprogrammaproject in de MPLAB-omgeving omvat de volgende stappen.

1. Bel de projectmanager.

2. Selectie van het type PIC-microcontroller.


3. Selecteer een compiler, bijvoorbeeld Microchip MPASM voor assembler.


4. Selecteer het pad naar de projectmap (toets Bladeren...) en voer de projectnaam in.

5. U hoeft geen bestanden aan het project te koppelen in het venster Projectwizard → Stap Vier. Dit kan later gedaan worden, binnen het actieve project. De Volgende-toets opent het volgende venster.

6. Het aanmaken van het project voltooien (Finish-toets).

Als resultaat van het maken van het FirstPrMPLAB-project neemt de MPLAB-interface de vorm aan die wordt getoond in Fig. 1.


Rijst. 1. MPLAB v8.92 omgevingsinterface en projectsjabloon.

Een programmabestand maken
Het programma kan met elke teksteditor worden gemaakt. MPLAB heeft een ingebouwde editor die een aantal voordelen biedt, bijvoorbeeld een snelle lexicale analyse van de brontekst, waardoor gereserveerde woorden, constanten, opmerkingen en door de gebruiker gedefinieerde namen in de tekst worden benadrukt.

Het maken van een programma in MPLAB kan in de volgende volgorde worden gedaan.

1. Open de programma-editor: menu → Bestand → Nieuw. Aanvankelijk kreeg het programma de naam Untitled.

2. Typ of kopieer het programma, bijvoorbeeld in assembler.


Rijst. 2. Een voorbeeld van het eenvoudigste programma (in assembler) voor het uitvoeren van signalen via de controllerpoorten GP0, GP1, GP2, GP4, GP5 op de maximale frequentie.

Door een '1' in het TRISIO-registerbit te schrijven, wordt de overeenkomstige uitgangsbuffer in de derde toestand geplaatst, in welk geval de GP-poort alleen als ingang kan functioneren. Door TRISIO op nul te zetten, wordt de GP-poort geconfigureerd om als uitgang te werken.

Opmerking. Volgens de PIC12F629-specificatie werkt de GP3-poort van de microcontroller alleen als invoer (de overeenkomstige bit van het TRISIO-register wordt niet gereset - deze staat altijd op ‘1’).

De TRISIO- en GPIO-registers bevinden zich in verschillende banken van het geheugengebied. Bankwisseling wordt uitgevoerd door de 5e bit van het STATUS-register.

Elk assemblerprogramma begint met de org-richtlijn en eindigt met de end-richtlijn. De goto-overgang van Metka zorgt voor een cyclische uitvoering van het programma.

Het programma (Fig. 2) gebruikt de volgende notatie.

LIST-richtlijn - een controllertype toewijzen
__CONFIG-richtlijn - instelling van de waarden van controllerconfiguratiebits
equ-richtlijn - een numerieke waarde toekennen
Richtlijn org 0 - start programma-uitvoering vanaf adres 0
bsf-opdracht - stelt een bit van het opgegeven register in op 1
bсf-opdracht - reset een bit van het opgegeven register naar 0
movlw commando - schrijft een constante naar het W-register
movwf-opdracht - kopieert de inhoud van het W-register naar het opgegeven register
goto commando - biedt een overgang zonder voorwaarde naar de regel met een label
Eindrichtlijn - einde van het programma

Instellen van de vereiste microcontrollerconfiguratie
De configuratie van de PIC12F629-microcontroller is afhankelijk van de instellingen van het configuratiewoord (2007h), dat in het programma kan worden ingesteld via de __CONFIG-richtlijn.

Direct of via het MPLAB-venster: menu → Configureren → Configuratiebits:

Waar:

Beetje 2-0-FOSC2:FOSC0. Klok selectie
111 - Externe RC-generator. Wordt aangesloten op pin GP5. GP4 werkt als CLKOUT
110 - Externe RC-generator. Wordt aangesloten op pin GP5. GP4 werkt als I/O
101 - Interne RC-oscillator 4 MHz. GP5 werkt als I/O. GP4 - zoals CLKOUT
100 - Interne RC-oscillator 4MHz. GP5 en GP4 werken als I/O
011 - EC-generator. GP4 werkt als I/O. GP5 - zoals CLKIN
010 - HC-generator. De resonator is aangesloten op GP4 en GP5
001 - XT-generator. De resonator is aangesloten op GP4 en GP5
000 - LP-generator. De resonator is aangesloten op GP4 en GP5

Beetje 3- WDTE: Watchdog-timerinstelling
1 - WDTE ingeschakeld
0 - WDTE uitgeschakeld

De watchdog-timer beschermt de microcontroller tegen bevriezing: hij start het programma na een bepaald tijdsinterval opnieuw op als de timer niet opnieuw is ingesteld. De timerperiode wordt ingesteld in het OPTION_REG-register. Het resetten van de watchdog-timer wordt veroorzaakt door de opdracht CLRWDT.

Beetje 4- PWRTE: Inschakeltimer inschakelen:
1 - PWRT uitgeschakeld
0 - PWRT ingeschakeld

De timer houdt de microcontroller in de reset-status wanneer VDD-stroom wordt ingeschakeld.

Beetje 5- MCLR: selectie van de bedrijfsmodus GP3/-MCLR-uitgang
1 - werkt als -MCLR
0 - werkt als GP3 I/O-poort

Beetje 6- BODEN: Reset inschakelen wanneer de voedingsspanning daalt (meestal< 2.0В)
1 - BOR-reset ingeschakeld
0 - BOR-reset is verboden, de timer wordt automatisch ingeschakeld

Wanneer BOR-reset is ingeschakeld, wordt de PWRT-timer automatisch gestart

Beetje 7- .CP: Programmageheugenbeveiligingsbit tegen lezen door de programmeur
1 Beveiliging uitgeschakeld
0 Beveiliging ingeschakeld

Wanneer de beveiliging wordt uitgeschakeld, wordt het gehele programmageheugen gewist

Beetje 8- .CPD: beschermingsbit voor EPROM-gegevensgeheugen
1 Beveiliging uitgeschakeld
0 Beveiliging ingeschakeld

Na het uitschakelen van de beveiliging wordt alle informatie gewist

Beetje 11-9- Niet gebruikt: gelezen als '1'.

Beetje 13-12- BG1:BG0. Kalibratiebits met laag vermogen resetten
00 - onderste kalibratielimiet
11 - bovenste kalibratielimiet


Een programma aan een project toevoegen

Een voorbeeld van het toevoegen van een programma aan een project wordt getoond in (Fig. 3).


Rijst. 3. Het FirstPrMPLAB.asm-programma toevoegen aan het FirstPrMPLAB.mcp-project

Compilatie

Om een ​​binair bestand met een hex-extensie te maken voor het flashen van de firmware van de microcontroller, moet u het project compileren. Het compileren wordt gestart met de menuopdracht → Project → Alles bouwen. De compilatieresultaten zijn te zien in het uitvoervenster (Fig. 1). Als er geen fouten in het programma voorkomen, geeft de compiler een bericht weer over een succesvolle compilatie: BUILD SUCCEEDED, het boot HEX-bestand is te vinden in de werkmap:

Debuggen van het programma

Het debuggen van een programma in de MPLAB IDE kan worden gedaan met behulp van de MPLAB REAL ICE hardware-emulator of de MPLAB SIM-softwaresimulator. De laatste wordt gelanceerd zoals weergegeven in Fig. 4.


Rijst. 4. Verbinding met de MPLAB SIM-simulator voor het debuggen van programma's.

Na het starten van de debugger verschijnt het tabblad MPLAB SIM in het venster Uitvoer (Fig. 1), waar MPLAB de huidige debugger-informatie weergeeft. Debugger-opdrachten (Fig. 5) worden actief na het starten.


Rijst. 5. Debugger-opdrachten.

Debugger-opdrachten:

Uitvoeren - Continue uitvoering van het programma tot een onderbrekingspunt, als er een is ingesteld.
Halt - Stop het programma bij de huidige uitvoeringsstap.
Animate - Animatie van continue programma-uitvoering.
Stap in - Uitvoeren in stappen (oproepen worden in één stap uitgevoerd).
Stap over - Voer stap voor stap uit, inclusief oproepopdrachten.
Reset - Eerste installatie van het programma. Verplaats de aanwijzer naar het eerste commando.
Breekpunten - Geef een lijst met breekpunten weer. Lijstverwerking.

Wanneer u een programma stap voor stap uitvoert, wordt de huidige stap gemarkeerd met een pijl (afb. 6). De continue programma-uitvoering wordt gestopt door de opdracht Halt of wanneer het programma een breekpunt bereikt. Het breekpunt wordt in de programmaregel ingesteld/verwijderd door te dubbelklikken.
Een voorbeeld van een assemblerprogramma dat de status van de controllerpoorten met maximale snelheid verandert, wordt getoond in Fig. 6 (rechts). Het programma draagt ​​gegevens b’10101010’ en b’01010101’ over naar het GPIO-poortregister. Omdat niet alle bits in het GPIO-register gegevens naar de controllerpoorten verzenden, maar alleen 0,1,2,4 en 5, verschilt de status van het GPIO-register (Fig. 6, links) in de volgende waarden: b'00100010' en b'00010101'.


Rijst. 6. De status van de speciale registers van de controller op het moment dat het programma wordt uitgevoerd (aan de linkerkant) en het programma dat stap voor stap wordt uitgevoerd (aan de rechterkant).

Tijdens het foutopsporingsproces kunt u de status van registers, variabelen en geheugen volgen in de overeenkomstige vensters die worden geopend in de sectie Weergave van het hoofdmenu. Tijdens het foutopsporingsproces kunt u wijzigingen aanbrengen in de programmacode, de inhoud van registers en het geheugen en de waarden van variabelen wijzigen. Nadat u de code hebt gewijzigd, moet u het programma opnieuw compileren. Het wijzigen van de inhoud van registers, geheugen en variabele waarden (Bekijk sectievensters: Speciale Functie Register, Bestandsregister, EEPROM, Watch) vereist geen hercompilatie.

De ingangssignalen van de modelpoorten van de microcontroller kunnen worden ingesteld in de sectie Debugger → Stimulus. De ingestelde statussen van poortsignalen zijn gekoppeld aan de foutopsporingstijd (cycli).

Soms komen de resultaten van het uitvoeren van een programma in de debugging-modus niet overeen met de uitvoering van hetzelfde programma in een echte controller. De programma-debugger (Fig. 6) zonder de movlw 0x07- en movwf cmcon-instructies laat bijvoorbeeld zien dat de uitgangen GP0 en GP1 van het GPIO-register verandert niet - ze bevinden zich in de nulstatus, de inhoud van het GPIO-register is afwisselend gelijk aan 0x14 en 0x20. Een controller die zonder deze instructies een programma uitvoert, toont echter op de oscilloscoop de cyclische werking van alle vijf de uitgangen: 0x15 en 0x22, inclusief GP0 en GP1 (zie figuur 7).

Oscillogrammen van de controller die programmacycli uitvoert Afb. 6 (Metka... ga naar Metka) worden getoond in Fig. 7.


Rijst. 7. Oscillogrammen van de uitgang GP0 (links) en GP1 (rechts) van de PIC12F629-microcontroller, aangedreven door een interne 4 MHz RC-oscillator. Het programma (Fig. 6) genereert signalen met maximale frequentie op alle controlleruitgangen. Gedurende een signaalperiode van 5,3 µs worden 5 commando's uitgevoerd (6 machinecycli), de amplitude van het GPO-signaal op het oscillogram is 4,6V, de door de programmeur gemeten voeding van de controller is 4,75V.

Firmware voor microcontrollers

Om een ​​programma naar de microcontroller te schrijven (controllerfirmware), moet u de microcontroller via een programmeur verbinden met de geïntegreerde MPLAB IDE. De verbindingsorganisatie wordt hieronder weergegeven in het gedeelte 'De PIC-KIT3-programmeur aansluiten'.

Opmerking. De PIC12F629-controller heeft een fabriekskalibratieconstante voor het instellen van de frequentie van de interne klokgenerator. Indien nodig kan het worden gelezen en hersteld met behulp van MPLAB met behulp van een programmeur.

Commando's voor het werken met de programmeur en het wijzigen van de instellingen bevinden zich in het MPLAB Programmer-menu. Het type programmeur in MPLAB wordt geselecteerd in de sectie: menu → Programmeur → Selecteer Programmeur.


Rijst. 8. Een programmeur selecteren om verbinding te maken met de MPLAB-omgeving.

De firmware van de microcontroller wordt via de programmeur gestart met het commando: menu → Programmeur → Programma. Het bericht over succesvolle firmware wordt getoond in Fig. 9.


Rijst. 9. Het starten van de microcontrollerfirmware en het weergeven van een bericht over succesvolle firmware.

Opmerking: Terwijl de microcontroller knippert, knippert de gele LED op de PIC-KIT3-programmeur.

MATLAB/SIMULINK verbinden met MPLAB

In het dynamische systeemmodelleringssysteem Simulink (Matlab-applicatie) in een grafische programmeertaal kunt u programma's ontwikkelen voor een familie van PIC-controllers met ADC/DAC, tellers, timers, PWM, DMA, UART, SPI, CAN, I2C-interfaces, enz. .

Een voorbeeld van een Simulink-programma voor een PIC-controller wordt getoond in Fig. 10.


Rijst. 10. Een voorbeeld van een programma in een grafische programmeertaal voor een PIC-controller uitgevoerd in de Simulink dynamische systeemmodelleringsomgeving.

De interactie tussen ontwikkelingstools en programmacompilatie voor PIC-controllers in Simulink wordt getoond in Fig. elf .


Rijst. elf. Structuur van tools voor het construeren van een adequaat model van een PIC-controller in een grafische programmeertaal.

Om een ​​ontwikkelomgeving te bouwen zijn de volgende Matlab-componenten vereist:

Simulink
Real-time workshop ingebedde coder
Realtime workshop

En de Microchip C-compiler:

C30 voor PIC24-, dsPIC30- en PIC33-controllers
of C32 voor controllers uit de PIC32-serie

Matlab-componenten installeren

De site bevat Simulink-bibliotheken (dsPIC Toolbox) voor PIC-controllers en Matlab-versies van R2006a tot R2012a:

Om de bibliotheek te downloaden moet u zich registreren. De programma's ondersteunen de werking van 100 microcontrollers uit de PIC 16MC, 24F, 30F, 32MC, 33F, 56GP, 64MC, 128MC, 128GP serie.
Gratis versies werken met Simulink PIC-controllermodellen met maximaal 7 I/O-poorten.

Om dsPIC Toolbox te installeren - een bibliotheek met PIC-controllerblokken voor Matlab/Simulink heeft u het volgende nodig:

Download dsPIC Toolbox voor de vereiste Matlab-versie.
Pak het zipbestand uit in de map waar de Simulink-blokken worden geïnstalleerd.
Start Matlab.
Stel de huidige Matlab-map in op de map met het uitgepakte bestand.
Open het bestand install_dsPIC_R2012a.m en voer het uit, bijvoorbeeld met behulp van de menuknop of de toetsenbordtoets.

De dsPIC-bibliotheken en voorbeelden van Simulink-modellen zijn geïnstalleerd in de huidige Matlab-map (Fig. 12). Geïnstalleerde blokken voor het modelleren van PIC-controllers zijn beschikbaar in de sectie Embedded Target for Microchip dsPIC van de Simulink-bibliotheek (Fig. 13).


Rijst. 12. Inhoud van de huidige map na het uitvoeren van install_dsPIC_R2012a.m.


Rijst. 13. Blokken van de geïnstalleerde bibliotheek “Embedded Target for Microchip dsPIC”.

Om samen een Simulink-model te compileren met behulp van Matlab en MPLAB, moet u het pad naar de MPLAB-directory instellen met de bestanden MplabOpenModel.m, MplabGetBuildinfo.m en getHardwareConfigs.m in de pad Matlab-omgevingsvariabele met de hoogste prioriteit:

>>

De MPLAB C-compiler installeren

MPLAB-compilers bevinden zich op de Microchip-website (Download Archief → MPLAB C Compiler voor PIC24 en dsPIC DSC's). Om de demoversie van de C30-compiler te installeren, moet u deze downloaden via de link PIC24/dsPIC v3.25 (Fig. 14) en het geaccepteerde bestand mplabc30-v3.25-comboUpgrade.exe uitvoeren.


Rijst. 14. C-compilerversies (links) en de installatiemodi (rechts).

Opmerking. Het werk werd uitgevoerd met versie v3.25 van de C30-compiler voor PIC24/dsPIC. Uit de controle bleek dat de volgende versie v3.30 geen foutloze gezamenlijke compilatie van Matlab R2012a (dsPIC Toolbox)-modellen ondersteunt.

Het installatie-exe-bestand maakt een nieuwe mplabc30-map aan met de bestanden in de sectie c:\Program Files (x86)\Microchip\:


Rijst. 15. C30 MPLAB-compilermappen.

Simulink-programmeervolgorde voor PIC-controllers

1. Maak een werkmap en kopieer de *.mdl-voorbeelden uit de voorbeeldsectie ernaartoe (zie Afb. 12).
2. Matlab downloaden. Stel het in in uw werkmap.
3. Neem in de pad Matlab-omgevingsvariabele met de hoogste prioriteit het pad naar MPLAB op: de map c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\:

>> pad("c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\",pad)
Opmerking: Als u de opdracht >>path zonder argumenten gebruikt, wordt de padvariabele weergegeven in het opdrachtvenster. U kunt een pad uit de padvariabele verwijderen met het commando rmpath, bijvoorbeeld:

>>rmpath(" c:\Program Files\Microchip\MPLAB IDE\Tools\MATLAB\")
4. Maak een Simulink-model voor de PIC-controller met behulp van de blokken van de Embedded Target for Microchip dsPIC-bibliotheek (Fig. 13), of laad een kant-en-klaar model, bijvoorbeeld Servo_ADC.mdl.

Het type controller waarvoor het Simulink-model wordt ontwikkeld, wordt geselecteerd uit de lijst in het Master > PIC-blok (Fig. 16, Fig. 10), die in het model moet worden opgenomen.


Rijst. 16. Selecteren van het controllertype in het Master-blok van het model.

5. Controleer de modelconfiguratie-instellingen: Menu → Simulatie → Configuratieparameters . De S-functie compiler dspic.tlc moet worden gespecificeerd in de invoerregel Systeemdoelbestand van de sectie Code genereren (Fig. 17). Als u dspic.tlc selecteert, worden alle andere modelconfiguratieparameters geconfigureerd, inclusief stap- en integratiemethode.


Rijst. 17. Het selecteren van de dspic.tlc S-functie compiler voor PIC-controllermodellen in de sectie "hoofdmenu → Simulatie → Configuratieparameters → Codegeneratie".

6. Compileer het tmp_Servo_ADC.mdl-model. De lancering van de compiler wordt getoond in Fig. 18.


Rijst. 18. Het uitvoeren van de Simulink-modelcompiler.

Als resultaat van een succesvolle compilatie (bericht: ### Succesvolle voltooiing van de bouwprocedure voor model: Servo_ADC), worden een HEX-bestand voor het flashen van de PIC-controller en een MCP MPLAB-omgevingsproject aangemaakt in de huidige map (Fig. 19).


Rijst. 19. Resultaten van modelcompilatie.

Het model wordt gelanceerd in Matlab/Simulink met behulp van de knop in het modelvenster; de voorwaardelijke simulatietijd wordt ingesteld in de regel:


Beheersen van de compilatie van Simulink-modellen vanuit de MPLAB-omgeving

Het compileren van Simulink-modellen kan worden beheerd met behulp van opdrachten uit de Matlab/Simulink-sectie van de MPLAB-omgeving, bijvoorbeeld in de volgende volgorde.

1. Ontwikkel een PIC-controllermodel in Matlab/Simulink. Bewaar het model.
2. Start MPLAB.
3. Selecteer MPLAB-menu → Extra → Matlab/Simulink en er verschijnt een nieuwe sectie in het menu.


4. Open in de Matlab/Simulink-sectie het Simulink-model, bijvoorbeeld Servo_ADC, met de opdracht “Matlab/Simulink → Geef Simulink-modelnaam op → Openen → Bestandsnaam → Servo_ADC.mdl → Openen”. Het commando Openen start Matlab en opent het model.

5. Compileer het model en maak een MCP-project met behulp van de opdrachten Codes genereren of Codes genereren en bestanden importeren. De vertaling van het MDL-model naar een MCP-project wordt uitgevoerd door de TLC-compiler Matlab.
Als gevolg hiervan wordt een MPLAB-project gemaakt:

Met modelscripts in C-taal.

6. Open het project: menu → Project → Openen → Servo_ADC.mcp (Afb. 20).


Rijst. 20. MCP-structuur van het Simulink-projectmodel Servo_ADC.mdl in de MPLAB-omgeving.
Het Simulink-modelproject is klaar voor het bewerken, debuggen en compileren in machinecontrollercodes met behulp van MPLAB.

De PIC-KIT3-programmeur aansluiten

Welke programmeurs binaire code naar een specifieke microcontroller schrijven, kunt u vinden in de menusectie → Configureren → Apparaat selecteren van de MPLAB 8.92-omgeving. De PIC-KIT3-programmeur ondersteunt bijvoorbeeld niet de PIC12C508A-controller (Fig. 21, linker afbeelding), maar werkt met de PIC12F629-controller (Fig. 21, rechter afbeelding).


Rijst. 21. Lijst met programmeurs voor microcontrollerfirmware.

Informatie over het geïnstalleerde PIC-KIT3-programmeerstuurprogramma kan worden opgevraagd via de Windows OS-apparaatbeheerder (Fig. 22).


Rijst. 22. Informatie over het geïnstalleerde PIC-KIT3-programmeerstuurprogramma.

Het aansluitschema van de PIC12F629-microcontroller met de PIC-KIT3-programmeur wordt getoond in Fig. 23.


Rijst. 23. Aansluitschema van de PIC12F629-microcontroller met de PIC-KIT3-programmeur.

De PGM-uitgang van de programmeur wordt niet gebruikt voor het flashen van PIC12F629-controllers. De aanwezigheid van PGM-uitvoer voor verschillende typen PIC-controllers wordt getoond in Fig. 24. Het wordt aanbevolen om de PGM-pin naar de gemeenschappelijke draad (GND) te “trekken”, via een weerstand met een nominale waarde van 1K.


Rijst. 24. PGM PIC-controllerpinnen.

De LED-indicatie van de Olimex PIC-KIT3 programmeur wordt hieronder weergegeven:

Geel - Rood - Programmeurstatus
Aan - Uit - Verbonden met USB-lijn
Aan - Aan - Interoperabiliteit met MPLAB
Knipperend - Altijd aan - Firmware van microcontroller

U mag de voeding van de VDD-microcontroller (Fig. 23) niet aansluiten op de programmer als de controller wordt gevoed vanuit zijn eigen voedingsbron.

Wanneer u de microcontroller van stroom voorziet via de programmeur op de VDD-lijn, is het noodzakelijk om de bedrijfsspanning in te stellen, bijvoorbeeld 5V, met behulp van het MPLAB-programma (Menu → Programmeur → Instellingen → Voeding), zoals weergegeven in Fig. 25.

Opmerking. Als er geen spanning op de VDD-lijn staat, geeft MPLAB IDE een foutmelding weer: PK3Err0045: U moet verbinding maken met een doelapparaat om te gebruiken


Rijst. 25. Instellen van de VDD-spanning op de PIC-KIT3-programmeur met behulp van MPLAB IDE v8.92.

Als de programmeur de vereiste spanning niet kan instellen, bijvoorbeeld 5V wanneer deze wordt gevoed via USB, waarbij de spanning minder is dan 5V, geeft MPLAB IDE een foutmelding weer: PK3Err0035: Kan apparaat-ID niet ophalen. In dit geval moet u eerst de spanning van de programmeur meten - lees deze op het menutabblad → Programmeur → Instellingen → Status, en stel vervolgens de spanning in (niet meer dan de gemeten spanning) op het menutabblad → Programmeur → Instellingen → Stroom.


Rijst. 26. Meten (links) en instellen (rechts) VDD-spanning van de PIC-KIT3-programmeur met behulp van MPLAB IDE v8.92.

Een voorbeeld van een MPLAB-bericht van een succesvolle verbinding van de microcontroller met de programmeur met behulp van de menuopdracht → Programmer → Opnieuw verbinden wordt getoond in Fig. 27.


Rijst. 27. MPLAB-bericht over succesvolle verbinding van de microcontroller met de programmeur.

U kunt niet alleen een afzonderlijke PIC-controller programmeren, maar ook een controller die deel uitmaakt van het werkende apparaat. Om de PIC-controller binnen het apparaat te programmeren, is het noodzakelijk om te voorzien in de installatie van jumpers en stroombegrenzende weerstanden, zoals weergegeven in Fig. 28.


Rijst. 28. Een microcontroller als onderdeel van een elektronisch apparaat aansluiten op een programmeur.

Conclusie

Laagspanning PIC-controllers hebben een breed voedingsbereik, een laag verbruik en kleine afmetingen. Ze zijn geprogrammeerd in talen op een laag niveau. Door programma's te ontwikkelen in de grafische programmeertaal Simulink, waarbij gebruik wordt gemaakt van talrijke bibliotheken, wordt de ontwikkelings- en foutopsporingstijd aanzienlijk verkort in vergelijking met programmeren op assemblageniveau. De voor Simulink PIC-controllers ontwikkelde structuren kunnen ook worden gebruikt voor computersimulatie van dynamische systemen met controllers. Vanwege coderedundantie is deze aanpak echter alleen toepasbaar op PIC-controllerfamilies met voldoende middelen.
Simulink Tags toevoegen Onlangs besloot ik een apparaat op een PIC-microcontroller te bouwen, maar om onbekende redenen faalde mijn Extra-PIC-programmeur. Hoogstwaarschijnlijk is de microschakeling doorgebrand MAX232, dit is al een keer gebeurd. Zonder er twee keer over na te denken, vond ik op internet een eenvoudig programmeercircuit dat was ontworpen voor IC-Prog en werkte via COM haven.
Bij het printen moet het bord gespiegeld zijn. Anders moeten de stopcontacten vanaf de spoorzijde worden gesoldeerd.


Vervolgens heb ik gaten geboord en ben ik begonnen met het solderen van de onderdelen. Het grootste probleem waren de zenerdiodes. Ik ging op zoek naar zenerdiodes op het bord van de CRT-monitor. Ze zijn op het bord gelabeld als ZD (Zener Diode). Uiteraard zijn hun markeringen onduidelijk en weet je niet waar of hoe je moet kijken. Om te bepalen hoeveel volt een zenerdiode waard is, kun je een eenvoudige schakeling in elkaar zetten.


Een voltmeter geeft vrij nauwkeurig aan hoeveel volt de zenerdiode is. Op deze eenvoudige manier vond ik zenerdiodes met geschatte nominale waarden. In plaats van 5,6V heb ik 6,2V geïnstalleerd, in plaats van 12,6V heb ik 2 zenerdiodes in serie geïnstalleerd 6,2+6,2=12,4V .


De transistor kan worden geïnstalleerd KT315. Ik heb het zelf geïnstalleerd S945. Diodes zijn er ook, ik heb alle 3 de stukken losgemaakt. van de diodebrug van hetzelfde bord van de monitor. De waarde van de condensatoren is ook niet kritisch, maar ze zijn ingesteld op hun nominale waarde.

Iets over de rode vlekken op de panelen. Deze poten zijn helemaal niet aan de panelen gesoldeerd. Een volledig afgewerkt apparaat ziet er als volgt uit:


Ik heb besloten om niet alle aansluitingen te solderen, omdat... Ik hoefde het alleen maar te flashen PIC16F628A. Na het solderen moet je het programma configureren. We zullen IC-Prog flashen. Download het programma, pak het uit het archief, Alle bestanden moeten in één map staan!

1) Als u Windows NT, 2000 of XP gebruikt, klikt u met de rechtermuisknop op het bestand icprog.exe. " Eigenschappen" >> tabblad " Compatibiliteit" >> Zet het selectievakje op " Voer het programma uit in de compatibiliteitsmodus voor:" >>
selecteer "Windows2000".

2) Laten we het programma starten. Als het al in het Russisch is, heb je niets nodig, ga naar stap 3 .

Als het programma in het Engels is, klik dan op " Instellingen" >> "Opties" >> tabblad " Taal" >> taal instellen " Russisch" en klik op "Ok".
Ben het eens met de stelling " U moet IC-Prog nu opnieuw opstarten" (Klik " OK"). De programmeurshell wordt opnieuw opgestart.

3) Nu moet je de programmeur configureren. Klik " Instellingen" >> "Programmeur". Controleer de instellingen, selecteer de COM-poort die u gebruikt, klik op " OK".


Voor zeer snelle computers moet u mogelijk de I/O Latency-instelling verhogen. Het verhogen van deze parameter verhoogt de betrouwbaarheid van het programmeren; de tijd die wordt besteed aan het programmeren van de chip neemt echter ook toe.

4) Alleen voor gebruikers van Windows NT, 2000 of XP. Klik " Instellingen" >> "Opties" >> selecteer een tabblad " Komen vaak voor" >> vink het vakje aan " Op NT/2000/XP-stuurprogramma" >> Klik " OK" >> als het stuurprogramma nog niet eerder op uw systeem is geïnstalleerd, in het venster dat verschijnt " Bevestigen"Klik op "Ok". Het stuurprogramma wordt geïnstalleerd en de programmeurshell wordt opnieuw opgestart.

5) Klik nogmaals" Instellingen" >> "Opties" >> selecteer een tabblad " I2C" >> vink de vakjes aan: " Schakel MCLR in als VCC" En " Schakel blokopname in". Klik " OK".

6) "Instellingen" >> "Opties" >> selecteer een tabblad " Programmering" >> haal het vinkje weg: " Controleer na het programmeren"en vink het vakje aan" Controleer tijdens het programmeren". Klik " OK".


Klaar, nu is het programma helemaal klaar om met de programmeur te werken. Wij verbinden onze programmeur met COM poort, selecteer onze microcontroller in het programma, open de firmware en programmeer eventuele MK's uit de PIC-serie. Veel succes voor iedereen bij het werken met de programmeur en controllers!

In 2006 had ik de wens om de assembler voor PIC-microcontrollers onder de knie te krijgen. De beslissing om PIC onder de knie te krijgen werd niet toevallig gevormd. Er zijn om te beginnen slechts 35 assembler-opdrachten. Je kunt ze in een paar dagen uit je hoofd leren door ze in de praktijk toe te passen bij het schrijven van je eigen programma. Of leer het eenvoudig met behulp van de datasheet op een van de PIC-controllers. Gelukkig is een deel van de documentatie beschikbaar in het Russisch.

Nou, het eerste ontwerp is natuurlijk een klok. En het is niet moeilijk (althans dat leek mij in het begin zo) en het is gemakkelijk om zowel thuis als op het werk een toepassing te vinden voor een klok of timer. Het enige obstakel waarmee ik te maken kreeg, was het gebrek aan duidelijke en consistent gepresenteerde informatie over directe programmeermethoden.

Er zijn veel sites op internet met onderwerpen over microcontrollers, maar vaak wordt deze informatie gepresenteerd in de vorm van een soort vinaigrette, wat erg moeilijk te begrijpen is als je geen ervaring hebt met het programmeren van chips.
Na de lancering van het circuit "eerste project op een microcontroller" - waarbij de LED knipperde - begon een verwoede zoektocht naar nuttige informatie. En heel toevallig, terwijl ik het netwerk doorzocht op zoek naar informatie volgens het volgende schema van het tijdschrift "Radio" (de frequentiemeter van Denisov), kwam ik de website van Evgeniy Korabelnikov tegen.

Ik kan niet zeggen dat mijn zoektocht daar eindigde. Ik heb zelf een aantal benaderingen bedacht, en mijn eigen code is in de regel altijd beter dan die van iemand anders.
Maar ik heb nog geen consistentere en methodischere presentatie gevonden van vragen over de structuur van microcontrollers, opties voor protocollen voor het uitwisselen van PIC-informatie met externe apparaten (indicatoren, sensoren), het werken met geheugenchips en nog veel meer.

Evgeniy is een auteur met een hoofdletter A. Hij slaagde erin een enorme hoeveelheid materiaal te ordenen en te vertalen naar een normaal leesbare tekst, waardoor deze begrijpelijk en toegankelijk werd, zelfs voor degenen die nog nooit met programmeren te maken hebben gehad.

Als je een snelle start en programmeren in assembler nodig hebt voor PIC-controllers, dan raad ik de website van Evgeniy Aleksandrovich aan.

Programmeren in assembleertaal voor

PIC-microcontrollers

Tutorial over het programmeren van PIC-controllers voor beginners

(ontwerpgids voor microcontroller-apparaten)

Algemene opmerkingen over de instapstrategie.

“De zelfinstructiehandleiding...” is zo samengesteld dat, in gevallen waarin er onduidelijkheden zijn die ontstaan ​​na het lezen van de voorgaande paragrafen, deze in de volgende paragrafen geleidelijk worden opgehelderd door middel van aanvullende informatie. In de beginfase van 'binnenkomst' is het belangrijkste om de betekenis te begrijpen, en al het andere zal er in de loop van de tijd aan worden toegevoegd.

Invoering
1. Bereid het gereedschap voor. Een programmeur maken en ermee werken.
2. Wat is een microcontroller en hoe werkt deze?
3. PIC16F84A-besturingssysteem.
4. Wat is een programma en de regels voor de voorbereiding ervan. Een voorbeeld van het maken van een programma voor een zelfoscillerende multivibrator. Richtlijnen. Schematisch diagram van een multivibrator
5. Geïntegreerde ontwerpomgeving MPLAB IDE en werk daarin.
6. Wat nu?
7. Een voorbeeld van het maken van een programma (begin).
8. Voorbeeld van het maken van een programma (vervolg).
9. Werk in de simulator. Debuggen van het programma.
10. Hoe u de programma-uitvoering kunt volgen
11. Onderbreekt. Stapel. Een voorbeeld van programmaontwikkeling met onderbrekingen.
12. Organisatie van een berekende transitie. Werken met EEPROM-datageheugen.
13. Vlaggen. Werken met vlaggen. Hoe werkt een digitale vergelijker? Overdracht en lening.
14. Een voorbeeld van het gebruik van de C-vlag in een opteller van drie bytes. Cyclische verschuiving. Vermenigvuldiging.
15. Inleiding tot het principe van het construeren van een dynamische weergavesubroutine. Indirecte adressering.
16. Binaire getallen converteren naar BCD. Definitieve vorming van de tekst van de dynamische weergavesubroutine.
17. Telprincipe. Werken met timer TMR0. Het principe van het installeren van groepen telopdrachten in de programmatekst.
Conclusie