PIC mikrokontrollere - PIC microcontrollers

PIC -mikrokontrollere i DIP- og QFN -pakker
16-biters 28-pinners PDIP PIC24 mikrokontroller ved siden av en metrisk linjal
av en PIC12C508 8 -bits, fullt statisk, EEPROM / EPROM / ROM -basert CMOS -mikrokontroller produsert av Microchip Technology ved hjelp av en 1200 nanometer prosess
av en PIC16C505 CMOS ROM -basert 8 -biters mikrokontroller produsert av Microchip Technology ved bruk av en 1200 nanometer prosess

PIC (vanligvis uttalt som "pick" ) er en familie av mikrokontrollere laget av Microchip Technology , avledet fra PIC1650 opprinnelig utviklet av General Instruments Microelectronics Division. Navnet PIC refererte opprinnelig til Peripheral Interface Controller , og utvides for tiden som programmerbar intelligent datamaskin . De første delene av familien var tilgjengelige i 1976; innen 2013 hadde selskapet sendt mer enn tolv milliarder individuelle deler, brukt i et stort utvalg av innebygde systemer .

Tidlige modeller av PIC hadde skrivebeskyttet minne (ROM) eller feltprogrammerbar EPROM for programlagring, noen med mulighet for sletting av minne. Alle nåværende modeller bruker flash -minne for programlagring, og nyere modeller lar PIC -en omprogrammere seg selv. Programminne og dataminne er atskilt (se Harvard -arkitektur ). Dataminnet er 8-biters, 16-biters og, i de nyeste modellene, 32-biters bredt. Programinstruksjoner varierer i bittelling etter familie av PIC, og kan være 12, 14, 16 eller 24 bits lange. Instruksjonssettet varierer også etter modell, med kraftigere brikker som legger til instruksjoner for digitale signalbehandlingsfunksjoner .

Maskinvaremulighetene til PIC-enheter varierer fra 6-pinners SMD , 8-pinners DIP- brikker opp til 144-pinners SMD-brikker, med diskrete I/O-pinner, ADC- og DAC- moduler og kommunikasjonsporter som UART , I2C , CAN og til og med USB . Variasjoner med lav effekt og høy hastighet finnes for mange typer.

Produsenten leverer dataprogrammer for utvikling kjent som MPLAB X , montører og C / C ++ kompilatorer, og programmerer / debugger hardware under MPLAB og PICkit serien. Tredjepart og noen åpen kildekode-verktøy er også tilgjengelige. Noen deler har programmeringskapasitet i kretsen; rimelige utviklingsprogrammerere er tilgjengelige, så vel som programmerere med høy produksjon.

PIC-enheter er populære blant både industrielle utviklere og hobbyister på grunn av lave kostnader, bred tilgjengelighet, stor brukerbase, omfattende samling av applikasjonsnotater, tilgjengelighet til lave kostnader eller gratis utviklingsverktøy, serieprogrammering og omprogrammerbar flashminne.

Historie

Originalt konsept

Ulike eldre (EPROM) PIC -mikrokontrollere

Den originale PIC-en var ment å bli brukt med General Instruments nye CP1600 16-bits sentrale prosessorenhet (CPU). CP1600 var en kraftig prosessor for sin tid, og implementerte det meste av PDP-11 minidatamaskinens instruksjonsarkitektur i en mikrodatapakke.

Mens de fleste anså CP1600 som en god CPU, hadde den et betydelig problem; For å redusere antall PIN -koder for den fysiske DIP -emballasjen, hadde den multipleksede adresse- og databusser: adressebussen og databussen delte pins. For CPUer som hadde separate I/O- kanaler, som Intel 8008 , ville dette ikke ha vært et problem, men 1600 brukte også PDP- 11s minnekartede input/output- konsept. Dette betydde at kommunikasjon med en enhet krevde at enheten måtte se etter viktige minnesteder som ble åpnet på en maskinsyklus, og deretter lese dataene på den neste. Dette gjorde I/O på maskinen tregere da bussen vekslet mellom adresse- og datamoduser, og ble dyrere å implementere ettersom enhetene måtte låse innganger over flere sykluser.

For å løse denne svakheten fra 1600 ble 8-biters PIC utviklet i 1975. Tanken var at et system skulle ha en eller flere av billige PIC-er som utfører den faktiske I/O-enheten med enhetene, og deretter sende disse dataene til CPU'en. PIC brukte enkel mikrokode lagret i ROM for å utføre oppgavene.

Etter 1600

I 1985 solgte General Instrument sin mikroelektronikkavdeling og de nye eierne kansellerte nesten alt som på dette tidspunktet stort sett var utdatert. PIC ble imidlertid oppgradert med en intern EPROM for å produsere en programmerbar kanalkontroller . Samtidig ga Plessey i Storbritannia ut NMOS-prosessorer nummerert PIC1650 og PIC1655 basert på GI-designen, ved hjelp av de samme instruksjonssettene, enten brukermaske som kan programmeres eller versjoner som er forhåndsprogrammert for autooppringere og tastaturgrensesnitt.

I 1998 introduserte Microchip PIC 16F84, en flash -programmerbar og slettbar versjon av den vellykkede serielle programmerbare PIC16C84. I 2001 introduserte Microchip flere Flash -programmerbare enheter, med full produksjon som startet i 2002. [1]

I dag er et stort utvalg av PIC-er tilgjengelig med forskjellige innebygde eksterne enheter ( seriell kommunikasjonsmoduler , UART , motorstyringskjerner, etc.) og programminne fra 256 ord til 64K ord og mer (et "ord" er en samlingsspråksinstruksjon , varierende i lengde fra 8 til 16 bits , avhengig av den spesifikke PIC -mikrofamilien ).

PIC og PICmicro er nå registrerte varemerker for Microchip Technology. Det antas generelt at PIC står for Peripheral Interface Controller , selv om General Instruments originale akronym for de første PIC1640- og PIC1650 -enhetene var " Programmable Interface Controller ". Forkortelsen ble raskt erstattet med " Programmable Intelligent Computer ".

Microchip 16C84 ( PIC16x84 ), introdusert i 1993, var den første Microchip-CPUen med EEPROM-minne på brikken.

I 2013 sendte Microchip over en milliard PIC -mikrokontrollere hvert år.

Enhetsfamilier

PIC -mikrobrikker er designet med en Harvard -arkitektur og tilbys i forskjellige enhetsfamilier. Grunnlinjen og mellomstore familier bruker 8-biters bredt dataminne, og high-end-familiene bruker 16-biters dataminne. Den siste serien, PIC32MZ, er en 32 -biters MIPS -basert mikrokontroller. Instruksjonsord er i størrelsene 12-bit (PIC10 og PIC12), 14-bit (PIC16) og 24-bit (PIC24 og dsPIC). De binære representasjonene av maskininstruksjonene varierer etter familie og er vist i PIC -instruksjonsoppføringer .

Innen disse familiene kan enheter betegnes PICnnCxxx (CMOS) eller PICnnFxxx (Flash). "C" -enheter er generelt klassifisert som "Ikke egnet for ny utvikling" (ikke aktivt promotert av Microchip). Programminnet til "C" -enheter beskrives på forskjellige måter som OTP, ROM eller EEPROM. Fra oktober 2016 er det eneste OTP -produktet som er klassifisert som "I produksjon" pic16HV540. "C" -enheter med kvartsvinduer (for sletting) er generelt ikke lenger tilgjengelige.

PIC10 og PIC12

Disse enhetene har et 12-biters bredt kodeminne, en 32-byte registerfil og en liten to-nivå dyp anropsstabel. De er representert av PIC10 -serien, samt av noen PIC12- og PIC16 -enheter. Baseline-enheter er tilgjengelige i 6-pinners til 40-pinners pakker.

Vanligvis er de første 7 til 9 byte i registerfilen spesialregistre, og de resterende bytes er generell RAM. Pekere implementeres ved hjelp av et registerpar: Etter å ha skrevet en adresse til FSR (filvalgregister), blir INDF (indirekte f) -registeret et alias for det adresserte registeret. Hvis banket RAM er implementert, velges banknummeret av de høye 3 bitene i FSR. Dette påvirker registernummer 16–31; registre 0–15 er globale og påvirkes ikke av bankens utvalgte biter.

På grunn av den svært begrensede registerplassen (5 biter), ble 4 sjelden lest registre ikke tilordnet adresser, men skrevet av spesielle instruksjoner ( OPTIONog TRIS).

Romadresserommet er 512 ord (12 biter hver), som kan utvides til 2048 ord ved bank. CALLog GOTOinstruksjoner angir de lave 9 bitene i den nye kodeplasseringen; ytterligere høyordensbiter blir hentet fra statusregisteret. Vær oppmerksom på at en CALL-instruksjon bare inneholder 8 bits med adresse, og at den bare kan angi adresser i første halvdel av hver side på 512 ord. Det vil si at CALL -instruksjonen spesifiserer de lave 9 bitene i adressen, men bare de lave 8 bitene i den adressen er en parameter for instruksjonen, mens den 9. biten (bit 8) er implisitt spesifisert som 0 av CALL -instruksjonen selv.

Oppslagstabeller implementeres ved hjelp av et beregnet GOTO(oppdrag til PCL -register) i en tabell med RETLWinstruksjoner. RETLW returnerer og returnerer i W-registret en 8-biters umiddelbar konstant som er kodet i instruksjonen.

Denne "baseline core" betyr ikke støtter avbrudd ; all I/Ospørres . Det er noen "forbedrede baseline" -varianter med avbruddsstøtte og en anropsstabel på fire nivåer.

PIC10F32x-enheter har et mellomstort 14-biters bredt kodeminne på 256 eller 512 ord, en 64-byte SRAM-registerfil og en 8-nivå dyp maskinvarestabel. Disse enhetene er tilgjengelige i 6-pinners SMD- og 8-pinners DIP-pakker (med to pinner ubrukt). Bare én inngang og tre I/O -pinner er tilgjengelige. Et komplekst sett med avbrudd er tilgjengelig. Klokker er en intern kalibrert høyfrekvent oscillator på 16 MHz med valgbare hastigheter via programvare og en 31 kHz laveffektkilde.

PIC16

Mikrochip PIC16C58A
PIC16LF870 i SOIC -kontakt

Disse enhetene har et 14-biters bredt kodeminne og en forbedret 8-nivå dyp anropsstabel. Instruksjonssettet skiller seg veldig lite fra baseline -enhetene, men de to ekstra opcodebitene lar 128 registre og 2048 kodeord adresseres direkte. Det er noen få tilleggsinstruksjoner og to ekstra 8-biters bokstavelige instruksjoner, legg til og trekk fra. Mellomkjernen er tilgjengelig på de fleste enhetene merket PIC12 og PIC16.

De første 32 byte av registerplassen er allokert til spesialregistre; de resterende 96 byte brukes til generell RAM. Hvis banket RAM brukes, er de høye 16 registrene (0x70–0x7F) globale, det samme er noen av de viktigste spesialregistrene, inkludert STATUS-registeret som inneholder RAM-bankens utvalgte biter. (De andre globale registerene er FSR og INDF, de lave 8 bitene i programtelleren PCL, PCs høyt forhåndsbelastningsregister PCLATH og hovedavbruddskontrollregisteret INTCON.)

PCLATH-registeret leverer høyordens instruksjonsadressebiter når de 8 bitene som er levert av en skriv til PCL-registret, eller de 11 bitene som er levert av en GOTOeller CALLinstruksjon, ikke er tilstrekkelig til å adressere tilgjengelig ROM-plass.

PIC17

De 17 seriene ble aldri populære og har blitt erstattet av PIC18 -arkitekturen (se imidlertid kloner nedenfor). 17 -serien anbefales ikke for nye design, og tilgjengeligheten kan være begrenset til brukere.

Forbedringer i forhold til tidligere kjerner er 16-biters brede opcoder (som tillater mange nye instruksjoner) og en 16-nivå dyp samtale. PIC17 -enheter ble produsert i pakker fra 40 til 68 pinner.

17 -serien introduserte en rekke viktige nye funksjoner:

  • en minnekartet akkumulator
  • lesetilgang til kodeminne (tabell leser)
  • direkte register for å registrere trekk (tidligere kjerner som trengs for å flytte registre gjennom akkumulatoren)
  • et eksternt programminnegrensesnitt for å utvide kodeområdet
  • en 8-bit × 8-bits maskinvaremultiplikator
  • et annet indirekte registerpar
  • auto-inkrement/decrement adressering kontrollert av kontrollbiter i et statusregister (ALUSTA)

En betydelig begrensning var at RAM-plassen var begrenset til 256 byte (26 byte med spesialfunksjonsregistre og 232 byte med generell RAM), med vanskelig bankbytte i modellene som støttet mer.

PIC18

I 2000 introduserte Microchip PIC18 -arkitekturen. I motsetning til 17 -serien har den vist seg å være veldig populær, med et stort antall enhetsvarianter som for tiden produseres. I motsetning til tidligere enheter, som oftere enn ikke var programmert i montering, har C blitt det dominerende utviklingsspråket.

18 -serien arver de fleste funksjonene og instruksjonene i 17 -serien, mens den legger til en rekke viktige nye funksjoner:

  • anropsstakken er 21 bits bred og mye dypere (31 nivåer dyp)
  • anropsstakken kan leses og skrives (TOSU: TOSH: TOSL -registre)
  • betingede greninstruksjoner
  • indeksert adresseringsmodus (PLUSW)
  • utvide FSR -registrene til 12 bits, slik at de kan adressere hele dataadresserommet lineært
  • tillegg av et annet FSR -register (bringer tallet opp til 3)

RAM-plassen er 12 bits, adressert ved hjelp av et 4-biters bankvelgeregister og en 8-bits offset i hver instruksjon. En ekstra "tilgang" -bit i hver instruksjon velger mellom bank 0 ( a = 0) og banken valgt av BSR ( a = 1).

En stabel på 1 nivå er også tilgjengelig for STATUS-, WREG- og BSR-registerene. De lagres ved hvert avbrudd, og kan gjenopprettes ved retur. Hvis avbrudd er deaktivert, kan de også brukes på subrutine -anrop/retur ved å sette s -biten (vedlegg ", FAST" til instruksjonen).

Auto inkrement/decrement -funksjonen ble forbedret ved å fjerne kontrollbitene og legge til fire nye indirekte registre per FSR. Avhengig av hvilket indirekte filregister som åpnes, er det mulig å postdecrement, postincrement eller preincrement FSR; eller danne den effektive adressen ved å legge W til FSR.

I mer avanserte PIC18 -enheter er en "utvidet modus" tilgjengelig som gjør adresseringen enda mer gunstig for kompilert kode:

  • en ny offset -adresseringsmodus; noen adresser som var i forhold til tilgangsbanken tolkes nå i forhold til FSR2 -registeret
  • tillegg av flere nye instruksjoner, kjent for manipulering av FSR -registerene.

PIC18 -enheter er fremdeles utviklet (2017) og utstyrt med CIP (Core Independent Peripherals)

PIC24 og dsPIC

I 2001 introduserte Microchip dsPIC-serien med chips, som kom i masseproduksjon i slutten av 2004. De er Microchips første iboende 16-biters mikrokontrollere. PIC24 -enheter er designet som generelle mikrokontrollere. dsPIC -enheter inkluderer muligheter for digital signalbehandling i tillegg.

Selv om det fortsatt ligner på tidligere PIC -arkitekturer, er det betydelige forbedringer:

  • Alle registre er 16 bits brede
  • Programteller er 22 bits (bit 22: 1; bit 0 er alltid 0)
  • Instruksjonene er 24 bits brede
  • Dataadresserommet er utvidet til 64  KiB
  • De første 2 KiB er reservert for perifere kontrollregistre
  • Databankbytte er ikke nødvendig med mindre RAM overstiger 62 KiB
  • "f operand" direkte adressering utvidet til 13 bits (8 KiB)
  • 16 W-registre tilgjengelig for register-registeroperasjoner.
    (Men operasjoner på operasjoner refererer alltid til W0.)
  • Instruksjonene kommer i byte- og (16-biters) ordformer
  • Stack er i RAM (med W15 som stabelpeker); det er ingen maskinvarestabel
  • W14 er rammepekeren
  • Data som er lagret i ROM, kan nås direkte ("Programromssynlighet")
  • Vektorerte avbrudd for forskjellige avbruddskilder

Noen funksjoner er:

  • (16 x 16) -BIT en-cyklus multiplikasjon og andre digitale signalprosesseringsoperasjoner
  • maskinvare multiplisere - akkumulere (MAC)
  • hardware divide assist (19 sykluser for 32/16-bits divide)
  • fatskifte - For både akkumulatorer og generelle registre
  • litt reversering
  • maskinvarestøtte for sløyfeindeksering
  • perifer direkte minnetilgang

dsPICs kan programmeres i C ved hjelp av Microchips XC16 -kompilator (tidligere kalt C30), som er en variant av GCC .

Instruksjons -ROM er 24 bits bred. Programvare kan få tilgang til ROM i 16-bits ord, der selv ord inneholder de minst signifikante 16 bitene av hver instruksjon, og oddetall inneholder de mest betydningsfulle 8 bitene. Den høye halvdelen av merkelige ord leser som null. Programtelleren er 23 bits bred, men den minst signifikante biten er alltid 0, så det er 22 modifiserbare biter.

Instruksjonene kommer i to hovedvarianter, med de viktigste operasjonene (add, xor, skift, etc.) som tillater begge former.

Den første er som de klassiske PIC -instruksjonene, med en operasjon mellom et spesifisert f -register (dvs. det første 8K RAM) og en enkelt akkumulator W0, med en destinasjonsvalgbit som velges som oppdateres med resultatet. (W-registerene er minnekartede. Så operanden kan være et hvilket som helst W-register.)

Den andre formen er mer konvensjonell, og tillater tre operander, som kan være hvilken som helst av 16 W -registre. Destinasjonen og en av kildene støtter også adresseringsmoduser, slik at operanden kan lagres i minnet som er pekt av et W -register.

PIC32M MIPS-basert linje

PIC32MX

I november 2007 introduserte Microchip PIC32MX- familien med 32-biters mikrokontrollere, basert på MIPS32 M4K Core . Enheten kan programmeres ved hjelp av Microchip MPLAB C Compiler for PIC32 MCUer , en variant av GCC -kompilatoren. De første 18 modellene som er i produksjon (PIC32MX3xx og PIC32MX4xx) er pin til pin-kompatible og deler de samme eksterne enhetene som er utstyrt med PIC24FxxGA0xx-familien på (16-biters) enheter som tillater bruk av vanlige biblioteker, programvare og maskinvareverktøy. I dag, med en start på 28 pinner i små QFN-pakker opp til enheter med høy ytelse med Ethernet, CAN og USB OTG, er hele serien med mellomstore 32-biters mikrokontroller tilgjengelig.

PIC32 -arkitekturen brakte en rekke nye funksjoner til Microchip -porteføljen, inkludert:

  • Den høyeste kjørehastigheten 80 MIPS (120+ Dhrystone MIPS @ 80 MHz )
  • Det største flashminnet: 512 kB
  • En instruksjon per utførelse av klokkesyklus
  • Den første bufrede prosessoren
  • Tillater utførelse fra RAM
  • Full Speed ​​Host/Dual Role og OTG USB -funksjoner
  • Full JTAG og 2-leder programmering og feilsøking
  • Spor i sanntid

PIC32MZ

I november 2013 introduserte Microchip PIC32MZ -serien av mikrokontrollere, basert på MIPS M14K -kjernen. PIC32MZ -serien inkluderer:

  • 252 MHz kjernehastighet, 415 DMIPS
  • Opptil 2 MB Flash og 512 KB RAM
  • Nye eksterne enheter inkludert høyhastighets USB, kryptomotor og SQI

I 2015 ga Microchip ut PIC32MZ EF-familien ved bruk av den oppdaterte MIPS M5150 Warrior M-klassen.

I 2017 introduserte Microchip PIC32MZ DA -familien, med en integrert grafikkontroller, grafikkprosessor og 32 MB DDR2 DRAM.

PIC32MM

I juni 2016 introduserte Microchip PIC32MM-familien, spesialisert på applikasjoner med lav effekt og rimelige kostnader. PIC32MM har kjerneuavhengige eksterne enheter, hvilemoduser ned til 500 nA og 4 x 4 mm pakker. PIC32MM-mikrokontrollerne bruker MIPS Technologies M4K, en 32-biters MIPS32- prosessor. De er ment for svært lavt strømforbruk og begrenset til 25 MHz. Hovedfordelen deres er å støtte 16bits instruksjonene til MIPS, noe som gjør programstørrelsen mye mer kompakt (ca. 40%)

PIC32MK

Microchip introduserte PIC32MK-familien i 2017, spesialisert på motorstyring, industriell kontroll, Industrial Internet of Things (IIoT) og flerkanals CAN-applikasjoner.

Kjernearkitektur

PIC -arkitekturen er preget av sine flere attributter:

  • Separat kode og datarom ( Harvard -arkitektur ).
    • Bortsett fra PIC32: MIPS M4K -arkitekturens separate data- og instruksjonsveier blir effektivt slått sammen til et enkelt felles adresserom av System Bus Matrix -modulen.
  • Et lite antall instruksjoner med fast lengde
  • De fleste instruksjoner er enkeltsyklus (2 klokkesykluser eller 4 klokkesykluser i 8-biters modeller), med en forsinkelsessyklus på grener og hopper
  • Én akkumulator (W0), hvis bruk (som kildeoperand) er underforstått (dvs. er ikke kodet i opcode )
  • Alle RAM -steder fungerer som registre som både kilde og/eller destinasjon for matematikk og andre funksjoner.
  • En maskinvarestabel for lagring av returadresser
  • En liten mengde adresserbart datarom (32, 128 eller 256 byte, avhengig av familien), utvidet gjennom bank
  • Data-space kartlagt CPU, port og perifere registre
  • ALU -statusflagg kartlegges i datarommet
  • Programtelleren er også kartlagt i datarommet og skrivbar (dette brukes til å implementere indirekte hopp).

Det er ingen forskjell mellom minneplass og registerplass fordi RAM -en tjener jobben til både minne og registre, og RAM -en blir vanligvis bare referert til som registerfilen eller ganske enkelt som registerene.

Datarom (RAM)

PIC-er har et sett med registre som fungerer som generell RAM. Spesialkontrollregistre for maskinvareressurser på brikken blir også kartlagt i datarommet. Adresserbarheten til minne varierer avhengig av enhetsserier, og alle PIC -enhetstyper har en bankmekanisme for å utvide adressering til ekstra minne (men noen enhetsmodeller har bare én bank implementert). Senere serier av enheter har instruksjoner for flytting, som kan dekke hele det adresserbare rommet, uavhengig av den valgte banken. I tidligere enheter må enhver registerbevegelse oppnås gjennom akkumulatoren.

For å implementere indirekte adressering brukes et "file select register" (FSR) og "indirekte register" (INDF). Et registernummer skrives til FSR, hvoretter lesing fra eller skriving til INDF faktisk vil være fra eller til registeret som FSR peker på. Senere enheter utvidet dette konseptet med post- og pre-inkrement/decrement for større effektivitet i tilgang til sekvensielt lagrede data. Dette gjør det også mulig å behandle FSR nesten som en stabelpeker (SP).

Eksternt dataminne er ikke direkte adresserbart, bortsett fra på noen PIC18 -enheter med høyt antall pinner. Imidlertid kan generelle I/O -porter brukes til å implementere en parallellbuss eller et serielt grensesnitt for tilgang til eksternt minne og andre eksterne enheter (ved hjelp av underrutiner), med forbehold om at slik programmert minnetilgang (selvfølgelig) er mye tregere enn tilgang til opprinnelig minne om PIC MCU.

Kodeplass

Kodeplassen er generelt implementert som on-chip ROM , EPROM eller flash ROM . Generelt er det ingen bestemmelser for lagring av kode i eksternt minne på grunn av mangel på et eksternt minnegrensesnitt. Unntakene er PIC17 og utvalgte PIC18 -enheter med høy pinne.

Ordstørrelse

Alle PIC-er håndterer (og adresse) data i 8-biters biter. Imidlertid er enhetens adresserbarhet for kodeområdet generelt ikke det samme som datarommet. For eksempel har PIC-er i baseline (PIC12) og mid-range (PIC16) familier programminne adresserbart i samme ordstørrelse som instruksjonsbredden, dvs. henholdsvis 12 eller 14 bits. I kontrast, i PIC18-serien, adresseres programminnet i 8-biters trinn (byte), som er forskjellig fra instruksjonsbredden på 16 bits.

For å være tydelig, er programminnets kapasitet vanligvis angitt i antall (enkeltord) instruksjoner, snarere enn i byte.

Stabler

Pics har en hardware kallstakken , som brukes til å lagre avsenderadresser. Maskinvarestakken er ikke tilgjengelig på programvare på tidligere enheter, men dette endret seg med enhetene i 18-serien.

Maskinvarestøtte for en parameterstabel for generelle formål manglet i tidlige serier, men dette ble sterkt forbedret i 18-serien, noe som gjorde arkitekturen i 18-serien mer vennlig for språkkompilatorer på høyt nivå.

Instruksjonssett

PICs instruksjoner varierer fra omtrent 35 instruksjoner for low-end PIC-er til over 80 instruksjoner for high-end PIC-er. Instruksjonssettet inneholder instruksjoner for å utføre en rekke operasjoner på registre direkte, akkumulatoren og en bokstavelig konstant eller akkumulatoren og et register , samt for betinget utførelse og programgrening.

Noen operasjoner, for eksempel bitinnstilling og testing, kan utføres på et hvilket som helst nummerert register, men bi-operand aritmetiske operasjoner involverer alltid W (akkumulatoren), og skriver resultatet tilbake til enten W eller det andre operandregisteret. For å laste en konstant er det nødvendig å laste den inn i W før den kan flyttes til et annet register. På de eldre kjernene trengte alle registerbevegelser for å passere gjennom W, men dette endret seg på "high-end" -kjernene.

PIC -kjerner har hoppinstruksjoner, som brukes for betinget utførelse og forgrening. Hoppinstruksjonene er "hopp hvis bit er satt" og "hopp over hvis bit ikke er satt". Fordi kjerner før PIC18 bare hadde ubetingede greninstruksjoner, blir betingede hopp implementert av et betinget hopp (med motsatt tilstand) etterfulgt av en ubetinget gren. Hopp er også nyttig for betinget utførelse av umiddelbar enkelt etter instruksjon. Det er mulig å hoppe over instruksjonene. For eksempel vil instruksjonssekvensen "hoppe over A; hoppe hvis B; C" utføre C hvis A er sant eller hvis B er usant.

18 -serien implementerte skyggeregistre, registre som lagrer flere viktige registre under et avbrudd, og gir maskinvarestøtte for automatisk lagring av prosessortilstand ved serviceavbrudd.

Generelt faller PIC -instruksjonene i fem klasser:

  1. Drift på arbeidsregister (WREG) med 8-bits umiddelbar ("bokstavelig") operand. F.eks. movlw(Flytt bokstavelig til WREG), andlw(OG bokstavelig med WREG). En instruksjon som er spesiell for PIC, er å retlwlaste den umiddelbart inn i WREG og returnere den, som brukes med beregnede grener for å produsere oppslagstabeller .
  2. Drift med WREG og indeksert register. Resultatet kan skrives til enten arbeidsregisteret (f.eks. ). eller det valgte registeret (f.eks. ).addwf reg,waddwf reg,f
  3. Bitoperasjoner. Disse tar et registernummer og et bitnummer, og utfører en av 4 handlinger: angi eller fjern litt, og test og hopp over sett/slett. Sistnevnte brukes til å utføre betingede grener. De vanlige ALU -statusflaggene er tilgjengelige i et nummerert register, slik at operasjoner som "branch on carry clear" er mulige.
  4. Kontroll overføringer. Annet enn hoppeinstruksjonene som er nevnt tidligere, er det bare to: gotoog call.
  5. Noen få forskjellige null-operand-instruksjoner, for eksempel retur fra subrutine, og for sleepå gå inn i modus for lav effekt.

Opptreden

De arkitektoniske avgjørelsene er rettet mot maksimering av forholdet mellom hastighet og kostnad. PIC -arkitekturen var blant de første skalære CPU -designene og er fremdeles blant de enkleste og billigste. Harvard -arkitekturen, der instruksjoner og data kommer fra separate kilder, forenkler timing og mikrokretsdesign sterkt, og dette fordeler klokkehastighet, pris og strømforbruk.

PIC -instruksjonssettet er egnet for implementering av hurtige oppslagstabeller i programområdet. Slike oppslag tar en instruksjon og to instruksjonssykluser. Mange funksjoner kan modelleres på denne måten. Optimalisering lettes av det relativt store programområdet til PIC (f.eks. 4096 × 14-bits ord på 16F690) og utformingen av instruksjonssettet, som tillater innebygde konstanter. For eksempel kan en filinstruksjons mål indekseres av W, og utføre en "RETLW", som gjør som den heter - retur med bokstavelig i W.

Avbruddstid er konstant ved tre instruksjonssykluser. Eksterne avbrudd må synkroniseres med fire-timers instruksjonssyklus, ellers kan det være en instruksjonssyklus. Interne avbrudd er allerede synkronisert. Den konstante avbruddsforsinkelsen gjør at PIC-er kan oppnå avbruddsdrevne lav-jitter-timing-sekvenser. Et eksempel på dette er en videosynkroniseringspulsgenerator. Dette er ikke lenger sant i de nyeste PIC -modellene, fordi de har en synkron avbruddslatens på tre eller fire sykluser.

Fordeler

  • Liten instruksjonssett for å lære
  • RISC -arkitektur
  • Innebygd oscillator med valgbare hastigheter
  • Enkelt inngangsnivå, programmering i kretsen pluss in-circuit feilsøking PICkit- enheter tilgjengelig for mindre enn $ 50
  • Rimelige mikrokontrollere
  • Bredt utvalg av grensesnitt inkludert I²C , SPI , USB , USART , A/D , programmerbare komparatorer, PWM , LIN , CAN , PSP og Ethernet
  • Tilgjengelighet av prosessorer i DIL -pakke gjør dem enkle å håndtere for hobbybruk.

Begrensninger

  • En akkumulator
  • Reg- bank svitsjing er nødvendig for å få tilgang til hele RAM av mange anordninger
  • Operasjoner og registre er ikke ortogonale ; noen instruksjoner kan adressere RAM og/eller umiddelbare konstanter, mens andre bare kan bruke akkumulatoren.

Følgende stabelbegrensninger er adressert i PIC18 -serien, men gjelder fortsatt for tidligere kjerner:

  • Maskinvareanropsstakken er ikke adresserbar, så forebyggende oppgavebytte kan ikke implementeres
  • Programvareimplementerte stabler er ikke effektive, så det er vanskelig å generere reentrant- kode og støtte lokale variabler

Med sideprogramminne er det to sidestørrelser å bekymre seg for: en for CALL og GOTO og en annen for beregnet GOTO (vanligvis brukt for tabelloppslag). For eksempel, på PIC16 har CALL og GOTO 11 bits adressering, så sidestørrelsen er 2048 instruksjonsord. For beregnede GOTOer, der du legger til PCL, er sidestørrelsen 256 instruksjonsord. I begge tilfeller er de øvre adressebitene levert av PCLATH -registeret. Dette registeret må endres hver gang kontroll overfører mellom sider. PCLATH må også bevares av enhver avbryterbehandler.

Utvikler av kompilator

Mens flere kommersielle kompilatorer er tilgjengelige, ga Microchip i 2008 ut sine egne C -kompilatorer, C18 og C30, for serien 18F 24F og 30/33F prosessorer.

Som av 2013, Microchip tilbyr sine XC rekke kompilatorer, for bruk med MPLAB X . Microchip vil til slutt fase ut sine eldre kompilatorer, for eksempel C18, og anbefaler å bruke kompilatorene i XC -serien til nye design.

RISC -instruksjonssettet for PIC -monteringens språkkode kan gjøre den generelle flyten vanskelig å forstå. Skjønn bruk av enkle makroer kan øke lesbarheten til PIC -monteringsspråk. For eksempel har den originale Parallax PIC assembler ("SPASM") makroer, som skjuler W og får PIC til å ligne en toadressemaskin. Den har makroinstruksjoner som mov b, a(flytt dataene fra adresse a til adresse b ) og add b, a(legg til data fra adresse a til data i adresse b ). Det skjuler også hoppinstruksjonene ved å gi makroinstruksjoner med tre operandgrener, for eksempel cjne a, b, dest(sammenlign a med b og hopp til dest hvis de ikke er like).

Maskinvarefunksjoner

PIC -enheter har vanligvis:

  • Flash -minne (programminne, programmert med MPLAB -enheter )
  • SRAM (dataminne)
  • EEPROM- minne (programmerbart ved kjøretid)
  • Hvilemodus (strømsparing)
  • Watchdog timer
  • Ulike krystall- eller RC -oscillatorkonfigurasjoner, eller en ekstern klokke

Varianter

Innen en serie er det fortsatt mange enhetsvarianter avhengig av hvilke maskinvareressurser brikken inneholder:

Trender

Den første generasjonen PIC -er med EPROM -lagring er nesten fullstendig erstattet av sjetonger med Flash -minne . På samme måte har det originale 12-biters instruksjonssettet til PIC1650 og dets direkte etterkommere blitt erstattet av 14-biters og 16-biters instruksjonssett. Microchip selger fremdeles OTP (engangsprogrammerbare) og vindusviste (UV-slettbare) versjoner av noen av sine EPROM-baserte PIC-er for eldre støtte eller volumbestillinger. Microchip -nettstedet viser PIC -er som ikke kan slettes elektrisk som OTP. UV -slettbare vindusversjoner av disse chipsene kan bestilles.

Delenummer

F i et PICMicro -delenummer indikerer vanligvis at PICmicro bruker flashminne og kan slettes elektronisk. Motsatt betyr C vanligvis at den bare kan slettes ved å utsette matrisen for ultrafiolett lys (noe som bare er mulig hvis en pakkeform med vinduer brukes). Et unntak fra denne regelen er PIC16C84 som bruker EEPROM og derfor kan slettes elektrisk.

Et L i navnet indikerer at delen vil kjøre med lavere spenning, ofte med pålagt frekvensgrenser. Deler designet spesielt for lavspenningsdrift, innenfor et strengt område på 3 - 3,6 volt, er merket med J i delenummeret. Disse delene er også enestående I/O -tolerante, ettersom de godtar opptil 5 V som innganger.

Utviklingsverktøy

Microchip gir en program IDE pakke kalt MPLAB X , som omfatter en assembler, linker, programvare simulator , og feilsøkingsprogram. De selger også C -kompilatorer for PIC10, PIC12, PIC16, PIC18, PIC24, PIC32 og dsPIC, som integreres rent med MPLAB X. Gratis versjoner av C -kompilatorene er også tilgjengelig med alle funksjoner. Men for gratisversjonene vil optimaliseringer bli deaktivert etter 60 dager.

Flere tredjeparter utvikle C språk kompilatorer for Pics, hvorav mange integrerer til MPLAB og / eller har egen IDE. En fullt utstyrt kompilator for PICBASIC -språket for å programmere PIC -mikrokontrollere er tilgjengelig fra meLabs, Inc. Mikroelektronika tilbyr PIC -kompilatorer på programmeringsspråk C, BASIC og Pascal.

Det finnes et grafisk programmeringsspråk, Flowcode , som kan programmere 8- og 16-biters PIC-enheter og generere PIC-kompatibel C-kode. Den finnes i mange versjoner, fra en gratis demonstrasjon til en mer komplett profesjonell utgave.

Den Proteus Design Suite er i stand til å simulere mange av de populære 8 og 16-bits PIC enheter sammen med andre kretser som er koplet til PIC på den skjematiske. Programmet som skal simuleres kan utvikles i Proteus selv, MPLAB eller et annet utviklingsverktøy.

Enhetsprogrammerere

Dette er en programmerer fra 2003 for Microchip "PIC" -familien til mikrokontrollere. Den kobles med RS 232 -kabel til en PC -kompatibel kjørende utviklingsprogramvare. I 2003 kostet denne enheten $ 300 kanadisk (omtrent $ 200 USA den gangen).

Enheter kalt " programmerere " brukes tradisjonelt for å få programkoden inn i mål -PIC. De fleste PIC -er som Microchip for tiden selger, har ICSP (In Circuit Serial Programming) og/eller LVP (Low Voltage Programming) -funksjoner, slik at PIC kan programmeres mens den sitter i målkretsen .

Microchip tilbud programmerere / debuggere under MPLAB og PICkit serien. MPLAB ICD4 og MPLAB REAL ICE er de nåværende programmørene og debuggerne for profesjonell prosjektering, mens PICKit 3 er en rimelig programmerer / feilsøkingslinje for hobbyfolk og studenter.

Oppstart

Mange av de høyere blitsbaserte PIC-ene kan også selvprogrammere (skrive til sitt eget programminne), en prosess som kalles bootloading. Demokort er tilgjengelig med en liten bootloader-fabrikk programmert som kan brukes til å laste brukerprogrammer over et grensesnitt som RS-232 eller USB , og dermed unngå behovet for en programmeringsenhet.

Alternativt er det bootloader -fastvare tilgjengelig som brukeren kan laste inn på PIC -en ved hjelp av ICSP. Etter å ha programmert oppstartslasteren på PIC, kan brukeren deretter omprogrammere enheten ved hjelp av RS232 eller USB, sammen med spesialisert dataprogramvare.

Fordelene med en bootloader fremfor ICSP er raskere programmeringshastigheter, umiddelbar programkjøring etter programmering, og muligheten til både feilsøking og programmering med samme kabel.

Tredjepart

Det er mange programmerere for PIC -mikrokontrollere, alt fra de ekstremt enkle designene som er avhengige av ICSP for å tillate direkte nedlasting av kode fra en vertsmaskin, til intelligente programmerere som kan verifisere enheten ved flere forsyningsspenninger. Mange av disse komplekse programmørene bruker en forhåndsprogrammert PIC selv til å sende programmeringskommandoene til PIC-en som skal programmeres. Den intelligente typen programmerer er nødvendig for å programmere tidligere PIC-modeller (for det meste EPROM-type) som ikke støtter programmering i krets.

Tredjeparts programmerere spenner fra planer om å bygge dine egne, til selvmonteringssett og ferdig testede ferdige enheter. Noen er enkle design som krever at en PC utfører programmeringen på lavt nivå (disse kobler vanligvis til den serielle eller parallelle porten og består av noen få enkle komponenter), mens andre har programmeringslogikken innebygd i dem (disse bruker vanligvis en seriell eller USB -tilkobling, er vanligvis raskere og er ofte bygget med PIC -er for kontroll).

Feilsøking

Debugging i krets

Alle nyere PIC-enheter har et ICD-grensesnitt (in-circuit debugging), innebygd i CPU-kjernen, som muliggjør interaktiv feilsøking av programmet i forbindelse med MPLAB IDE. MPLAB ICD og MPLAB REAL ICE -feilsøkere kan kommunisere med dette grensesnittet ved hjelp av ICSP -grensesnittet.

Dette feilsøkingssystemet har imidlertid en pris, nemlig begrenset antall brytpunkter (1 på eldre enheter, 3 på nyere enheter), tap av noen I/O (med unntak av noen overflatemonterte 44-pinners PIC-er som har dedikerte linjer for feilsøking) og tap av noen funksjoner på brikken.

Noen enheter har ikke støtte for feilsøking på brikken, på grunn av kostnad eller mangel på pins. Noen større chips har heller ingen feilsøkingsmodul. For å feilsøke disse enhetene, kreves en spesiell -ICD -versjon av brikken montert på et datterkort som gir dedikerte porter. Noen av disse feilsøkingsbrikkene kan fungere som mer enn én type brikke ved bruk av valgbare hoppere på datterbrettet. Dette gjør at stort sett identiske arkitekturer som ikke har alle eksterne chip -enheter, kan erstattes av en enkelt -ICD -chip. For eksempel: 12F690-ICD vil fungere som en av seks forskjellige deler som hver har en, noen eller alle fem på chip-periferiutstyr.

Emulatorer i krets

Microchip tilbud tre fulle i slutningen emulatorer : den MPLAB ICE2000 (parallelt grensesnitt, er en USB converter tilgjengelig); den nyere MPLAB ICE4000 (USB 2.0 -tilkobling); og sist, REAL ICE (USB 2.0 -tilkobling). Alle slike verktøy brukes vanligvis i forbindelse med MPLAB IDE for interaktiv feilsøking på kildenivå av kode som kjører på målet.

Operativsystemer

PIC-prosjekter kan bruke sanntidsoperativsystemer som FreeRTOS , AVIX RTOS, uRTOS, Salvo RTOS eller andre lignende biblioteker for oppgaveplanlegging og prioritering.

Et åpen kildekode -prosjekt av Serge Vakulenko tilpasser 2.11BSD til PIC32 -arkitekturen, under navnet RetroBSD. Dette bringer et kjent Unix-lignende operativsystem, inkludert et utviklingsmiljø ombord, til mikrokontrolleren, innenfor begrensningene til den innebygde maskinvaren.

Kloner

Parallaks

Parallax produserte en serie PICmicro-lignende mikrokontrollere kjent som Parallax SX . Det er nå avviklet. Designet for å være arkitektonisk lik PIC -mikrokontrollerne som ble brukt i de originale versjonene av BASIC Stamp , erstattet SX -mikrokontrollerne PIC i flere påfølgende versjoner av det produktet.

Parallax's SX er 8-biters RISC-mikrokontrollere, som bruker et 12-biters instruksjonsord, som kjører raskt ved 75 MHz (75 MIPS). De inkluderer opptil 4096 12-bits ord i flashminne og opptil 262 byte med tilfeldig tilgangsminne , en åtte bits teller og annen støttelogikk. Det er programvarebiblioteksmoduler for å etterligne I²C- og SPI- grensesnitt, UART, frekvensgeneratorer, målertellere og PWM- og sigma-delta A/D-omformere. Andre grensesnitt er relativt enkle å skrive, og eksisterende moduler kan endres for å få nye funksjoner.

PKK Milandr

1886VE2U

Russiske PKK Milandr produserer mikrokontrollere som bruker PIC17 -arkitekturen som 1886 -serien. Programminne består av opptil 64 kB Flash -minne i 1886VE2U ( russisk : 1886ВЕ2У ) eller 8 kB EEPROM i 1886VE5U ( 1886ВЕ5У ). 1886VE5U ( 1886ВЕ5У ) til 1886VE7U ( 1886ВЕ7У ) er spesifisert for det militære temperaturområdet på -60 ° C til +125 ° C. Maskinvaregrensesnitt i de forskjellige delene inkluderer USB, CAN, I2C, SPI, samt A/D og D/A -omformere. 1886VE3U ( 1886ВЕ3У ) inneholder en maskinvareakselerator for kryptografiske funksjoner i henhold til GOST 28147-89 . Det er til og med strålingsherdede chips med betegnelsene 1886VE8U ( 1886ВЕ8У ) og 1886VE10U ( 1886ВЕ10У ).

ELAN mikroelektronikk

ELAN Microelectronics Corp. i Taiwan lager en serie mikrokontrollere basert på PIC16-arkitekturen, med 13-biters instruksjoner og et mindre (6-biters) RAM-adresserom.

Holtek Semiconductor

Holtek Semiconductor lager et stort antall veldig billige mikrokontrollere (så lave som 8,5 cent i mengde) med et 14-biters instruksjonssett som er påfallende likt PIC16.

Andre produsenter i Asia

Mange ultra-billige OTP- mikrokontrollere fra asiatiske produsenter, funnet i rimelig forbrukerelektronikk, er basert på PIC-arkitekturen eller modifisert form. De fleste kloner retter seg bare mot grunnlinjedelene (PIC16C5x/PIC12C50x). Microchip har forsøkt å saksøke noen produsenter når kopieringen er spesielt fryktelig, uten å lykkes.

Se også

Referanser

Videre lesning

  • Teori og applikasjoner for mikrokontroller, med PIC18F ; 2. utgave; M. Rafiquzzaman; Wiley; 544 sider; 2018; ISBN  978-1119448419 .
  • Mikrokontrollersystemdesign ved bruk av PIC18F -prosessorer ; Nicolas K. Haddad; IGI Global; 428 sider; 2017; ISBN  978-1683180005 .
  • PIC -mikrokontrollerprosjekter i C: Basic to Advanced (for PIC18F) ; 2. utgave; Dogan Ibrahim; Newnes; 660 sider; 2014; ISBN  978-0080999241 . (1. utgave)
  • Mikrokontroller programmering: Mikrochip PIC ; Sanchez og Canton; CRC Press; 824 sider; 2006; ISBN  978-0849371899 . (1. utgave)
  • PIC mikrokontroller prosjektbok ; John Iovine; TAB; 272 sider; 2000; ISBN  978-0071354790 . (1. utgave)

Eksterne linker