ATmega128: En anmeldelse

Af obskure årsager har jeg aldrig rigtig haft brug for at kode til en AVR cpu tidligere, men et af sommerferiens projekter kom med en ATmega128.

Selvom jeg kommer sent til den fest, vil jeg anmelde min oplevelse.

Det har været et positivt bekendtskab.

avr-gcc og avr-libc pakkerne virkede uden videre på FreeBSD og den medfølgende kildetekst fra et Windows miljø kunne uden videre oversættes.

For os der har kæmpet med indlejrede i mange år, er det tæt på niravana (lille 'n'!).

Simulatoren simavr tog det lidt mere tid at gennemskue, jeg måtte grave de nødvendige compile-time options ud af et eksempel, inden den ville lave traces til gtkwave.

GTKWave er forresten også er et ret labert værktøj. Tankevækkende at se hvor tæt de følger det meget store UX forskningsarbejde HP gjorde i logik-analysatorer i tidernes morgen.

Selve ATmega128 chippen er behageligt fri for dikkedarer. Ingen indviklede PLL'er som kun kan konfigureres med en Windows applikation, ingen uforudsigelige caches, alting er dejligt forudsigeligt.

Selvfølgelig er noget Mylius og Leisner over 8 MHz og 8 bit, men jeg har driftet 8 samtidige bogføringsbrugere på mindre og det her er ikke rocket science men derimod atomfrekvensnormaler.

Simavr er ikke perfect, det tog lidt tid før jeg gennemskuede at SPI simulationen bare siger "det tager 100µs for en byte" uanset hvilke clock settings man har brugt, men den har allerede sparet mig for en masse downloads.

Anbefalet.

phk

Kommentarer (17)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Michael Jensen

Ja jeg var også en del forskellige enbedded boards og cpu'er igennem i min studietid. Jeg er helt enig med dig, i at ATmega128 var den absolut letteste at gå til, og det hele spillede, via både linux og bsd.

I dag er det vel mest Arduino og lignende "de unge" har taget til sig. Det har jeg slet ikke kigget på, men det er vel også blot bygget op omkring en Atmel eller lignende..

  • 2
  • 0
Morten Jensen

AVR er let at arbejde med - helt sikkert.
Man kommer let i gang, der er en GCC klon, der er meget eksempelkode rundt omkring osv.
Jeg synes bare AVR er dyrt ifht hvis man kigger efter 32-bit ARM Cortex-M0 eller hvis man foretrækker 8-bit, så STM8 f.eks.
Jeg roder nærmest ikke med 8-bit MCUer mere, fordi jeg kan ikke fordrage PIC (det er nok en smagssag) og .ARM-processorerne er blevet endog meget billige.

Jeg bryder mig ikke om at arbejde med Arduino-kode, da det hele er skrevet blokerende og i en lidt særlig dialekt af C/C++ (processing vel?) - jeg er nok bare en sur skid :)

  • 1
  • 0
Lars Tørnes Hansen

De microcontrollere har jeg også brugt, og de nemme at arbejde med.

Jeg har overvejet at bruge noget tid på ARM microcontrollere, men pt. bliver det først i ugen med de 2 torsdage.

Arduino giver mig ikke mulighed for at bruge en watchdog, som er nødvendig hvis der på en eller anden måde (f.eks. EMI) går ged i noget bus kommunikation, og microcontrolleren derfor lander i en slags hardware deadlock situation.
Jeg bruger derfor helst C kode med en Atmel AVR.

I øvrigt så er det smart ikke at komme til at bytte rundt på de 2 modstande for en LM317 der kommer til at sætte spændingen for lavt for I²C bussen, fordi at AVR microcontrolleren så udfører hop-instruktioner, hvor der ikke er nogen maskinkode hop instruktioner.
Det bør ses med JTAG - og det var noget af en A-hva? oplevelse - og ikke noget jeg havde set før, men digitalelektronik kan jo lave spændende ting, hvis spændingen ikke er korrekt.

  • 2
  • 0
Chris Bagge

Hvilke af de mange I/O faciliteter i kredsen vil du bruge? Er der noget af det der er tidskritisk?
Er selv i gang med et meget lille projekt på en AtTiny2313. En uni-direktionel buffer på en seriel linje. Chip'en valgt ud fra at jeg skal bruge en UART.
Kiggede også på at lave det med en Arduino, men da Arduino'en er ca. 5 us en set/clear på en I/O pind, så blev den valgt fra.

  • 2
  • 0
Martin Sørensen

Har også selv brugt lidt tid på at kode til AVR 8 bit og de er rigtigt nok ret ligetil at gå til. Arduino softwareplatformen bør man dog gå langt udenom hvis man skal lave noget der er bare tilnærmelsesvist optimeret. De billige Arduinoboards man får på ebay er dog en billig måde at få et komplet AVR board der kører. Det eneste minus er at pinnavne ikke altid er logiske, så man skal krydschecke diagrammet med alle forbindelser.

Har kigget lidt på Assembler til den, men det output som GCC kan lave er næsten lige så godt optimeret hvis det er skrevet korrekt, så det er primært det jeg også bruger (gennem Atmel Studio).

  • 1
  • 0
Casper Bang

Jeg deler din begejstring efter at have leget med AT* i nogle år. Det er sjovt at se hvor lange man kan komme med en C kompiler og en mikroprocesser til 5kr, selv om man skal tage nogle kreative veje nogengange (f.eks. bit-bang af en USB protokol for en ATTiny eller misbrug af watchdog for at få 10 års batterilevetid). Forstår til gengæld ikke Arduino er så populær, det er et abstraktionsniveau der ikke synes at tjene noget større formål.

  • 2
  • 0
Hans Schou

Kiggede også på at lave det med en Arduino, men da Arduino'en er ca. 5 us en set/clear på en I/O pind, så blev den valgt fra.


Hvis du brugte digitalWrite(), så vil jeg give dig helt ret, den er sløv. Til børn og når hastighed er ligemeget, bruger jeg digitalWrite(). Skal der lidt mere fart på er det hurtigere at maske selv. LED'en på Arduino sidder på D13, som er PORTC bit 7. Dette eksempel burde kunne vise forskellen (uprøvet):

int flip;  
void loop() {  
  ++flip;  
  int cnt = 1000;  
  while (--cnt) {  
    if (flip) {  
      PORTC |= (1<<7);  
      PORTC &= ~(1<<7);  
    } else {  
      digitalWrite(13, HIGH);  
      digitalWrite(13, LOW);  
    }  
  }  
  delay(1000);  
}

Selvfølgelig skal børnene lære bitfedtning, men måske ikke lige med det samme...

  • 3
  • 0
Claus Waldersdorff Knudsen

Hvad er der nu galt med den gode gamle 8051 familie, siger en der engang har undervist i 8051 :-)

Til mindre opgaver (8-bits) bruger jeg stadig et medlem af 8051 familien med flere eller færre perifere enheder indbygget.

SiLabs har en meget stor familie af u-controllere med 8051 kerne, som til forskel fra de første fra intel og andre "nulevende" afvikler mange instruktioner i løbet af 1 klokpuls i stedet for de oprindelige 12.

Bitmanipulering på en port sker i løbet af 2 klokpulse, så hvis dimsen kører med 50MHz kan man sætte eller cleare en bit på bare 40ns.
C-compiler/assembler/linker er "gratis" fra Keil og har efterhånden mange år på bagen, så de fleste fejl er efterhånden luset ud.

Hilsen fra en der også engang har udviklet til 8048 - uden moderne debuggere og IDE'er. Så lærer man virkelig at sætte pris på en lysdiode og en scope probe.

  • 1
  • 0
Chris Bagge

Tak for vejledning. Nu er det så Port B pin 5. Ja, og så kan man lave en puls på 125 ns. Men hvis jeg skal lave den slags ting, så bliver det nok i en C med Atmel Studio og deres Dragon udviklingskort.

Herudover tror jeg det er vigtigt at indlæringstærsklen ikke er for høj. De unge mennesker der der begynder at få en interesse har ikke en hardware baggrund. For at få skabt interessen er det vigtigt at man hurtigt kan få et eller andet til at spille. Her tror jeg Arduino miljøet er rigtigt godt. Her er det nemt at 'få noget til at ske'. Noget hvor man rigtigt vekselvirker med omverden, og ikke bare arbejder på en skærm.

Herefter kan man så, når der kommer lidt flere krav, nærme sig hardware med porte, timere og og interrupt. Det er forbløffende få, der rigtigt forstår hvordan interrupt virker.

Næste trin er så at komme helt ned i hardwaren.

  • 2
  • 0
Chris Bagge

Hvis man kender 8051 kan man selvfølgelig fortsætte der. AVR familjen har dog den fordel at der er væsentligt flere 'ydre enheder' indbygget i den, og så kan den fås i indkapslinger med meget få ben. Det er på en måde tankevækkende at man kan stå med en 'lakrids' med bare 8 ben. Det er så ikke en OP-AMP. Der sidder en microcontroller inde i den med analog indgang, pulsbredde moduleret udgang og 8 kbyte programlager ;-).

  • 5
  • 0
Morten Jensen

8051 begynder at være en gammeldags platform ifht. konkurrenterne. Mange instruktioner tager op imod 12 clockcykler imod ofte 1 for de fleste moderne microprocessorer. Jeg synes heller ikke 8051 er specielt billig sammenlignet med PIC, STM8 eller AVR - især ikke når man tager ovenstående i betragtning.
Sidst jeg kiggede på 8-bit platforme (~6 måneder siden) blev jeg undervældet af 8051'ernes performance-egenskaber kontra deres pris, så det skal da kun være hvis man kender en masse tricks med dem og kan spare tid den vej.
AVR har yderligere den fordel at der findes en GCC-port og (vistnok) også en clang-port. STM8 er kun understøttet sådan rigtigt open-source med SDCC - Small Devices C Compiler - som så desværre leverer bloatede binaries ifht. GCC.
Det samme gælder så også for ARM, plus du får en 32-bit platform oveni hatten og prisen for eks. en Cortex-M0 er meget tæt på 8-bit MCUerne når vi kommer over de helt små modeller med <4kb Flash / <1kb RAM - fx når vi kommer i nærheden af Mega128 ^^

  • 1
  • 0
Claus Waldersdorff Knudsen

Mange instruktioner tager op imod 12 clockcykler imod ofte 1 for de fleste moderne microprocessorer


1 instruction tager 8 clockcykler, DIV AB, >70% tager 1 eller 2 clockcykler

Clocks to Execute         1  2  2/3  3  3/4  4  4/5  5  8  
Number of Instructions   26  50  5  14   7   3   1   2  1

Prismæssigt starter SiLabs fra omkring 0,7US$ enkeltstykpris, 10pin (3mm x 3mm).

Og ja, man er tilbøjelig til at anvende de værktøjer (hardware såvel som software) man kender godt og er fortrolige med. I sidste ende handler det for mig om at få noget ud på markedet :-)

I fritiden hygger jeg mig så med mere eksotiske chips som Renesas S7 serie (rasende dyr!), eller en indlejret 8051 i en FPGA, så der er plads til at udvide instruktionssættet ;-)

  • 1
  • 0
Morten Jensen

1 instruction tager 8 clockcykler, DIV AB, >70% tager 1 eller 2 clockcykler

Clocks to Execute 1 2 2/3 3 3/4 4 4/5 5 8
Number of Instructions 26 50 5 14 7 3 1 2 1
Prismæssigt starter SiLabs fra omkring 0,7US$ enkeltstykpris, 10pin (3mm x 3mm).

Og ja, man er tilbøjelig til at anvende de værktøjer (hardware såvel som software) man kender godt og er fortrolige med. I sidste ende handler det for mig om at få noget ud på markedet :-)

I fritiden hygger jeg mig så med mere eksotiske chips som Renesas S7 serie (rasende dyr!), eller en indlejret 8051 i en FPGA, så der er plads til at udvide instruktionssættet ;-)

Sammenligner du en "moderne" 8051'er-klon med en original? For jeg mindes da at nærmest alting tager 12 cykler på en "rigtig"god gammeldags 8051? Det synes jeg også jeg finder mange steder på nettet, men jeg kan tage fejl.

Til gengæld står jeg ved argumentet om at de mere moderne MCUer har flere og bedre peripherals. STM8 starter også et godt stykke under en dollar på digikey, ved køb af 1. Du kan ofte købe et 1-dollar dev-board med en STM8 på fx.

For ikke ret mange basseører mere får du så en Cortex-M0 med langt mere power. Jeg gider kun rode med 8-bit processorer fordi det er sjovt og nemt :)
Kommercielt ser jeg dem efterhånden overhalet af 32-bit alternativerne til alt andet end opgaver der kan løses af de helt små med <1kb flash og få byte RAM osv.

Jeg er dog helt enig med dit rationale:
"I sidste ende handler det for mig om at få noget ud på markedet" <-- det er jo det eneste vigtige :)

  • 1
  • 0
Niels Danielsen

Selve ATmega128 chippen er behageligt fri for dikkedarer. Ingen indviklede PLL'er som kun kan konfigureres med en Windows applikation, ingen uforudsigelige caches, alting er dejligt forudsigeligt.

Du tænker sikkert på STM32Cube..
Jeg købte for over et år siden et STM32F103 kineser eval. Board.
Jeg brugte dengang en weekend på at rode med at blande downloads af Eclipse, CDC, Code sourcery arm-none-eabi, GCC/GDB, OpenOCD, zadig , STMLinkV2, CMSIS, og STM32Cube sammen..
Det kom der ikke noget godt ud af -det var ved at drive mig til vandvid...

I dag forsøgte jeg igen, denne gang med OpenSTM32 og STM32Cube.
Denne gang virkede rodebutikken næsten i første forsøg... :-)
OpenSTM32 er et færdig konfiguret Eclipse miljø, og STM32Cube kan køre som en en en plugin i OpenSTM32. (Begge dele er JAVA og kan køre under Linux)

  • 1
  • 0
Log ind eller Opret konto for at kommentere