Denne side er lavet i og ligger fysisk i Danmark
Sidst opdateret: 05/02-2025

Microcontrollere:

Hvad er forskellen på en microcontroller og en microprocessor (CPU) ?
Alle microcontrollere har en CPU.
En microprocessor er stort set en CPU, dog kan én microprocessor have flere CPU'er.
En CPU har ingen addresserbar on-chip RAM; den kan dog have cache.
En microcontroller har ofte addresserbar on-chip RAM.
-Derfor har jeg valgt addresserbar on-chip RAM som skillelinie mellem CPU (microprocessor) og MCU (microcontroller).


Microchip PIC...Ved jeg ikke rigtig noget om.
Microchip / Atmel AVR...Er rigtig god at starte med (kan programmeres fra Mac/Windows/Linux).
  Køb en original AVRISPmkII, det kan ikke betale sig at købe en klon; de fleste af dem er ikke lige så gode og koster mere alt i alt.
 
Til AVR programmering har du brug for:
  1. Et programmerings-kabel (Køb AVRISPmkII hos El-Supply - ring til dem og spørg efter den).
  2. Open-source værktøjerne avr-gcc og avrdude (Mac: CrossPack-AVR kan hentes fra Objective Development).
ARM Cortex-MI dag skal der næsten stå "Cortex" på en microcontroller.
ARM Cortex-M kan programmeres fra Mac/Windows/Linux.
  En Cortex-M0 og M0+ er en lidt sløv banan, men den sparer til gengæld rigtig meget på energien. Chippen's størrelse kan komme helt ned på 0.008mm² ved 40nm teknologi. [4MHz...204MHz; 260 DMIPS].
  En Cortex-M3 er en rimelig hurtig og fornuftig chip, er heller ikke en storforbruger af strøm. Chip-størrelsen kan komme helt ned på 0.02mm² ved 40nm teknologi. [50MHz...300MHz; 573 DMIPS (Marvell)].
  En Cortex-M4 er rimelig hurtig. Chip-størrelsen kan komme helt ned på 0.028mm² ved 40nm teknologi. [100MHz...204MHz; 398 DMIPS. STM32F4xx kører op til 180 MHz].
  En Cortex-M7 er en hel del hurtigere end Cortex-M4 [200MHz...480MHz; chip-størrelsen kan komme ned på 0.067mm² ved 28nm teknologi. 1550 DMIPS (ST-Microelectronics)].
  En Cortex-M23 er Cortex-M0's afløser. Cortex-M23's arkitektur er 32-bit ARMv8-M [???MHz; ???? DMIPS].
  En Cortex-M33 er Cortex-M3's afløser. Cortex-M33's arkitektur er 32-bit ARMv8-M [???MHz; ???? DMIPS].
  En Cortex-M35P er Cortex-M4's afløser. Cortex-M35P's arkitektur er 32-bit ARMv8-M [???MHz; ???? DMIPS].
  En Cortex-M55 er Cortex-M7's afløser. Cortex-M55's arkitektur er 32-bit ARMv8-M [1GHz; ???? DMIPS].
ARM Cortex-ADisse er faktisk CPU'er og ikke microcontrollere.
ARM Cortex-A kan programmeres fra Mac/Windows/Linux.
  En Cortex-A5 er baseret på A-8 arkitekturen [400MHz...1GHz+; 1200 DMIPS v/800MHz].
  En Cortex-A7 er baseret på A-15 arkitekturen [800MHz...2.5GHz+; 4750 DMIPS].
  En Cortex-A8 er rimelig hurtig [600MHz...1GHz+; 2000 DMIPS v/1GHz]. Hele A-serien er 32-bit (bortset fra A53/A57).
  En Cortex-A9 er endnu hurtigere og bruges i mange mobiltelefoner og tablets [800MHz...2GHz; 6000 DMIPS v/2GHz].
  En Cortex-A12 var baseret på A53-arkitekturen [hastighed=...2GHz+; 6000 DMIPS].
  En Cortex-A15 er vældig imponerende og bruges i dag i mange hurtige ARM-baserede produkter [1GHz...2.5GHz; 10000 DMIPS].
  En Cortex-A17 er langsommere end Cortex-A15 [1.5...2.0GHz+; 5600 DMIPS].
  En Cortex-A32 er en lavenergi CPU, som erstatter Cortex-A5, chippen fylder mindre end 1/4 mm² ved 28nm teknologi [hastighed=...1GHz+; 1600+ DMIPS].
  En Cortex-A35 er 64-bit, denne fylder ca. 13% mere end Cortex-A32. [hastighed=...2.0GHz; 3600 DMIPS].
  En Cortex-A53 er 64-bit, [hastighed=...2.5GHz; 5750 DMIPS].
  En Cortex-A55 er 64-bit, [hastighed=...?.?GHz; ???? DMIPS].
  En Cortex-A57 er 64-bit, [hastighed=...2.7GHz; 12420 DMIPS].
  En Cortex-A72 er 64-bit, [hastighed=...2.7GHz+; 12960 DMIPS].
  En Cortex-A73 er 64-bit, [hastighed=...3.0GHz+; 19050 DMIPS].
  En Cortex-A75 er 64-bit, Ny arkitektur + Deeply out-of-order gør den 3-5 gange hurtigere end Cortex-A73. [hastighed=...?.?GHz+; ????? DMIPS].
  En Cortex-A76 er 64-bit, [hastighed=...3.3GHz+; ????? DMIPS].
  En Cortex-A77 er 64-bit, 23%...35% hurtigere IU/FPU end Cortex-A76 [hastighed=...3.3GHz+; ????? DMIPS].
  En Cortex-A78 er 64-bit, 20% hurtigere IU/FPU end Cortex-A77 [hastighed=...3.3GHz+; ????? DMIPS].

  Da Cortex-A32 ville fylde lidt under 0.1mm x 0.1mm ved 5nm, vil det jo sige at man burde kunne have 100 kerner på 1mm².
  Siden Cortex-M4's kerne fylder 0.028mm² (0.1676mm x 0.1676mm), vil man burde kunne have cirka 25 kerner pr. mm² ved 40nm.
  Dette burde kunne øges til 2209 kerner ved 5nm teknologi.

Jeg har prøvet både Atmel ARM (SAM7), NXP's LPC (Cortex-M3/M4) og ST-Microelectronics' STM32F4, og vil klart anbefale STM.
  Hvis du gerne vil starte med microcontrollere men ikke rigtig har bestemt dig for hvilken type, vil jeg bestemt anbefale STM32F103.
  Prisen på et STM32F103C8 board er lav (ca. 13 kr), microcontrolleren har gode anvendelsesmuligheder og kører 72MHz, hvilket er en ganske fornuftig hastighed.
For at programmere en ARM chip (eller en CPLD eller en FPGA), har du brug for et JTAG kabel til din computer.
  Alle chip-producenterne fremstiller deres egen JTAG som kun kan bruges til deres egne chips.
  Men jeg anbefaler et rigtig godt JTAG kabel som er kompatibel med OpenOCD og næsten alle chips:
  Amontec JTAGKey2 og JTAGKey Tiny.
  Skal du kun programmere microcontrollere fra ST-Microelectronics, kan du slippe afsted med at købe en ST-Link v2 (rul ned til du ser en pris på ca. 12 kr)

 
Til ARM programmering har du brug for:
  1. Et JTAG kabel (fx. JTAGKey Tiny).
  2. Open-source værktøjerne arm-gcc og OpenOCD.

  Hvis du bruger OpenOCD i forvejen, så kan du købe en god low-cost JTAG hos Distortec.
  Den hedder JTAG-lock-pick Tiny 2.
  JTAG-lock-pick Tiny 2 er lavet af en af de folk som er med til at udvikle OpenOCD.
  Distortec sælger også JTAG-lock-pick. Den er endnu bedre end JTAG-lock-pick Tiny 2.
Alle ARM chips har JTAG og kan programmeres fra Mac/Windows/Linux ved at bruge en GNU toolchain og OpenOCD.
  Hvis du har Windows findes der flere værktøjer, bla. fra ARM selv (KEIL).
  I øjeblikket er Qualcomm's Snapdragon nok den hurtigste (Cortex-A57 med 48 kerner).
  Et godt hurtigt board er Solid-Run's MacchiatoBIN Community Board (quad-core Cortex-A72)..

Køber du et STM32F103C8-board og en ST-Link v2 på eBay, kan du starte med microcontroller-programmering for kun 25 kr.
HUSK:
  • Når du køber fra Kina, vil der normalt gå mellem 1 og 2 måneder før du modtager din pakke.
  • Bagatel-grænsen: Når værdien af din pakke er under 80 kr., skal du ifølge dansk lov ikke betale told/moms.
  • Ligger pakke-værdien på 80 kr. eller over, skal du betale moms+told af både pakkens værdi OG fragten, dertil lægges 160 kr. i gebyr fra Postnord.

På alle Cortex-M baserede microcontrollere skal du huske at du skal tænde for en funktion før du kan bruge den.

Dette gælder blandt andet:
  • RAM (normalt tændt ved opstart),
  • Flash-hukommelse (normalt tændt ved opstart),
  • Timere (deriblandt PWM, quadrature-encoders, capture, osv),
  • DMA,
  • SPI,
  • I2C,
  • UART/USART,
  • Ethernet,
  • GPIO-ben,
  • I2S,
  • ADC,
  • DAC,
  • LCD/TFT-controllere,
  • SD-kort,
  • CRC/SHA generatorer,
  • ... og stort set alle andre funktioner, som ikke er nævnt allerede.


-Med andre ord: Hvis dit program ikke vil fungere, så er det meget sikkert fordi du har glemt at tænde for den funktion du vil bruge.

? Hvordan finder jeg ud af hvilke kondensatorer der skal bruges til mit krystal ?
! Du har en microcontroller og et krystal med 2 ben.
  I krystallet's datablad kigger du efter Load Capacitance.
  Denne værdi trækker du 5 fra (Cstray), derefter ganger du med 2 og finder den nærmeste kondensator lig eller under denne værdi.
  For eksempel: Load Capacitance er 10pF. (10pF - 5pF) * 2 = 10pF.
  Nærmeste keramiske kondensator lig eller under denne værdi er 10pF.
  Brug to 10pF keramiske kondensatorer til dit krystal.
  (Advarsel: Denne håndregel er ikke komplet. Det kan være Cstray er fx. 3pF eller 7pF. Hvis du vil være sikker, bør du måle printet's kapacitans, dvs. Cstray)