Prosessorivertailuja

Suomen Robottiyhdistyksen prosessori vertailuja

Ominaisuus C8051F330 PIC18F26J11 PIC18F26K20 ATmega128 MSP430F1611 LPC17858
Valmistaja Silicon LABS Microchip Microchip Atmel Texas Instruments NPX
Flash 8kB 64kB 64kB 128 KB 48 KB 512k
Kotelo DIP20/QFN SO-28/DIP28 SO-28/DIP28 PDIP-40 TQFP QFN/MLF (44) LQFP 64 LQFP80
RAM 769B 3,936B 3,800B 16KB 10 KB 64kB
POWER 2.7. .3.6 V 6.4mA 25MHz 2.0 -3.6 V 2.0 -3.6 V 1.8 - 5.5V 1.8 - 3.6 V 2.4-3.6V 41mA
Sleep mode 100 nA 13 nA 34 nA 1uA 1.1 µA 40nA
I2C 1 1 1 1 1 3
PWM PCA 3 PWM 6 PWM 6 PWM 6 PWM 7 PWM 6
SPI 1 2 1 1 2 2 12*12bt 200kHz
UART 1 2 1 2 2 4
ADC 16*10bit 10*10bit 13*10bit 8*10bit 6*12bit
EEPROM Ei Ei 1024Byte 10 milj. kertaa 4K 256 B ei
Flash kirjoitus ohjelmasta Kyllä Kyllä 10k kertaa 2.0V Kyllä 10k kertaa2.0V 10k Kyllä kyllä
Ajastimet 4 4 5 2*8 + 2*16 2 4
Komparaattorit 1 3 2 1 1
Kertolaskuyksikkö ei 1 1 ? 1 ?
Floating point kääntäjä Ilmainen SDCC Ilmainen Microchip MCC18[8] Ilmainen Microchip MCC18[8] GCC GCC RED-code(ilmainen)
Simulaattori SiLabs IDE [9] MPLAB MPLAB AVR STUDIO ? LPCxpresso
Nastamatriisi Crossbar Kyllä PPS 16 pin ei ei ? Kyllä
Referenssijännitteet 2.44 V 1*16 tasoa 1*16 tasoa sisäinen/ulkoinen 1.5 V, 2.5 V ja ulkoinen ?
Sisäinen oskillaattori 80 kHz-25 MHz 32kHz- 48MHz 32kHz- 48MHz kyllä 1MHz ? 1-25MHz
MIPS 25MIPS 12MIPS 16MIPS 20 MIPS 8 MIPS 100MHz
Ohjelmointitapa USB ToolStick Booloader/USB PICKIT2 Booloader/USB PICKIT2 Bootloader/ISP/ JTAG Bootloader/JTAG
Can ei ei ei ei ei CAN
Ethernet ei ei ei ei ei USB2.0 Ethernet 10/100MHz
Quadrature laskuri ei ei ei ei ei Kyllä
Lisäominaisuuksia 4 1, 2,3,4,[5] 1,3 ,4,[5] 4,6,7 10,1,[11]
Hinta 2.17e Digikey 3.6e Digikey 2.26 e Microchip, 3.26 Digikey 63 Digikey7. 11.4e Digikey 12 digikey

[1] Hardware reaaliaikakello paristovarmistuksella (kello, kalenteri ja hälytys Harwdaressa ) 830 nA
[2] Kapasitiivinen ilmaisu kosketusnäyttöä varten ( Charge Time Measurement Unit,CTMU,supports capacitive touch screens]
[3] Rinnakkainen ADC mittaus eri kanavilta
[4] Wachdog, Brown Out reset
[5] Uart RS-485, RS-232 ja LIN tuki, Auto-Wake-up on Break, Auto-Baud Detection
[6] kolmekanavainen DMA
[7] 2* DAC 12bit
[8] Muita Microchip kääntäjiä CCS , Hi Tech, WIZ-C , MicroEngineering, GCC, SDCC, mikroC PRO for PIC,
Pascal compiler for PIC12, PIC16, and PIC18, [mikroBasic PRO for PIC 2009]
Basic compiler for PIC12, PIC16, and PIC18, Forest Electronics C compiler.
[9] In-circuit, full speed debugging, simulaattoria ei varsinaisesti tarvita mihinkään.
[10] 10-bit DAC
[11] IRDA ja RS485 tuki sarjaliikenteelle, LPC 1758 on ARM 9,Cortex M3 sarjaa
Ohjelmointi USB/ON LINE kääntäjällä, ei rajoituksia

pinout.jpg

Mikä on nastamatriisi?

nastamatriisi.jpg

Nastamatriisi on moduuli joka kytkee joukon laitteitta kuten UART, ajastimia, SPI, I2C jne, haluttuihin nastoihin.
Nastoissa on luonnostaan yksi laite esim. PWM, mutta siihen voi kytkeä toisen Uartin. Uart on normaalisti kytketty kiinteästi määrättyihin nastoihin esim. -51 sarjassa P.2 ja P3, Microchipissä RC.7 ja RC.6.
Niissä piireissä, jossa on tämä nastamatriisi on mahdollista ohjelmallisesti valita määrättyjen nastojen toiminnat. Microchip 28-nastaisissa malleissa on on 18 ohjelmallista nastaa.

Nastamatriisissa määritellään tulo- ja antonastat erikseen. Esim. Uartissa on RX ja TX nastat, jotka voidaan kytkeä moniin nastoihin. Samoin perinteiset Uart nastoihin voidaan kytkeä muita laitteita. Kaikki ohjelmoitavat nastat voidaan määritellä tulo- tai anto-nastoiksi.

Huomaa tarkistaa etukäteen ennen piirilevyn suunnittelua, mitkä toiminnat ovat mahdollisia eri nastoille.
Käyttöjännitenastoja ei vielä ole mahdollista muuttaa. Joskus olen kuvitellut sellaista mikropiiriä, joka osaa vaihtaa nastat, jos käyttäjä laittaa piirin väärinpäin. Ehkä sekin vielä nähdään.

pps1.jpg

Jos prosessorissa ei ole kuin yksi Uart, usemapaa sarjaliikennettä voi hoitaa ulkoisella digitaalisella multiplekserillä kuten esim. CD4053 mikropiirillä. Ei ole ohjelmoijalle kovin herkullinen tehtävä. Tämä sopii vain määrättyihin tehtäviin. Esim. kun Video multiplekseristä tulee sarjaliikenne sanoma ja se pitää muuttaa toiselle laitteelle, joka tietysti käyttää erilaista sarjaliikennenopeutta ja protokollaa.
Nores toi aikoinaan suuren määrän Sanoyn videototykkejä ja saamaan yhteyteen he olivat hankkineet hollantilaisia videomultipleksereitä. Asiakkaat olivat odottaneet pitkän toimitusajan, mutta yksikään laite ei toiminut yhdessä.
Tutkin asiaa sarjaliikenneanalyssaattorillani. Onneksi ongelma ei ollut kovin monimutkainen.
Tein protokolla ja baudinopeusmuuntimen, jota silloin tällöin vieläkin tarvitaan.

pps5.jpg

Microchin prosessorissa nastamatriisin nimi PPS ( Parallel Pin Select ).
Sillä voi hoitaa

  • Nastojen vaihtamisen I/O, Uart, PWM, ajastimien välillä.
  • Nastojen toimintoja voi vaihtaa kesken ohjelman
  • 28-nastaisissa on 18 vaihdettavaa ja 44-nastaisissa piireissä on 26 vaihdettavaa nastaa
  • Nastojen nimet ovat RPxx esim. RP1.. RP26
  • Toimintojen tulo- ja lähtönastat voidaan määritellä ei nastoihin. Esim. perinteisen Uartin nastat voidaan ohjelmoida PWM toiminnaksi.
  • Nastamatriisilla ei voi tehdä yhteensopivia prosessoreita.
  • Nastamatriisilla ei voi vaihtaa analogia nastoja
  • Nastamatriisi on eri asia kuin kaksi Uartia. Onko laitteessa kaksi Uartia riippuu mallista.
  • Kahta Uartia ei Mikrochipillä ole kuin 3.3V malleissa. 3.3V käyttöjännite ei ole sen hankalampaa kuin 5 V. Käyttäjällä pitää olla kuitenkin sopiva 3.3V ohjelmointilaite kuten PICKIT2, uudet 3.3V regulaattorit ja 3.3V RS232 muuntimet. Joitakin analogiapiireissä kuten LM335-lämpötila-anturia ei voi kytkeä suoraan 3.3V analogiatuloon. Silloin pitää käyttää vastaavia 3.3V antreita kuten MCP9701 tai tehdä tasomuunnos vastuksilla. Esim. 1k8 ja 3k3 vastusjännitejako on sopiva viidestä 3.3V:iin.

Ohjelmointi PPS:llä on edelleen hankalaa, mutta mahdollista.
Pieni säästö tulee siitä , että ei tarvita ulkoista multiplekseriä.
PPS toimintojen ohjelmallinen käyttö pitää aloittaa ja lopettaa tarkasti oikealla koodisekvenssillä, jotta nastat eivät missään tapauksessa pääse vaihtumaan.
Nastojen vaihtaminen myöhemmin ohjelmassa voidaan lukita.
PPS:llä voi vaihtaa samaan nastaan eri toimintoja kuten laskureita, joten PPS on käyttökelpoinen joissakin tapauksissa, mutta kahden Uartin ongelmaa se ei ole ratkaisu.

pps7.jpg

Jos prosessorissa on kaksi oikeaa Uartia ja PPS, ohjelmointi on paljon helpompaa, mutta ei edelleenkään helppoa.
Kun periaatteet ovat selvät, kahden (ja useamman ) laitteen tietoliikenne on mahdollista.
Uartiin pitää tehdä ainakin kaksi keskeytyspuskuria, jotka huolehtivat taustalla sarjaliikenteen vastaanoton puskureihin

Joku saattaa muistuttaa, että nykyisillä prosessoreilla voi melkein mitä tahansa nastaa käyttää
sarjaliikenteessä. Unohtakaa tämä menetelmä, paitsi äärimmäisen yksinkertaisissa tehtävissä.
Ongelmia tulee kaikissa yhtäaikaisissa tehtävissä kuten ajastimien käsittelyssä.
Pulssien laskenta ja laskurien tausta-ajo ohjelmallisella Uartilla on mahdotonta.

Aikaisemmin prosessorit, joissa on monta Uartia ovat olleet vain suurinastaisissa piireissä, kuten Microchipin 68-, 84- ja 100-nastaisissa prosessoreissa, Siemens 80C817A ( -51 tyyppi), joissakin Dallasin ( -51 sarja) prosessoreissa.

Käyttämällä PPS-tekniikkaa, on mahdollista käyttää kahta Uartia myös pienissä 28-nastaisissa prosessoreissa esim. PIC18F26J11. Tätä piiriä saa SOIC 28 ja DIP28 koteloissa.

Mielestäni tämä on erittäin hieno asia.

Käyttökohteita:

  • GPS ja GSM vaativat kaksi Uartia. SMS-viestit tulevat silloin kuin haluavat, niitä ei voi pyytää määrättyyn aikaan. Samoin GPS:stä tulee koko ajan tietoa, ei sitäkään voi keskeyttää eikä se ole edes mahdollista. Useamman NMEA-laitteiden sanomien yhdistäminen on nyt mahdollista yhdellä prosessorilla melko yksinkertaisella laitteella.
  • Auton OBD2 laite, auton IO-laitteet ja PC vaativat kahden Uartin käytön
  • Protokolla muuntimet, jossa on kaksi eri nopeutta vaativat myös kaksi Uartia
  • Automaatiolaitteissa jossa on väylä vaativat eri nopeuden väylässä kuin liitäntälaitteissa

Linkin kuvassa on sama asia ratkaistu monella prosessorilla.

[http://robotti.wikidot.com/local--files/projektit/Token2.jpg]
==
Miten tämä tehdään käytännössä?
Käytä CCS-kääntäjää esim PCW.

Laita ohjelman alkuun esim.

#PIN_SELECT U1TX=PIN_C6
#PIN_SELECT U1RX=PIN_C7

#use rs232(baud=9600,parity=E,UART1,bits=8,stream=PORT1,enable=PIN_C5,errors)

#pin_select CCP2OUT=PIN_B2

Näin helppoa se on kun sen oikein ymmärtää

PCW lisäys 22.2.2018 OH3GDO

Nastamatriisikuvaus : 19.6.2009 OH3GDO
Lisäys/Korjaus : 11.6.2009 OH3GDO C8051F330 tarkistettu
Alkuperäinen taulukko 2.6.2009 OH3GDO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License