Sida 1 av 2

PIC vs AVR, jag har kommit till insikt!

Postat: 13 september 2006, 20:35:17
av Johan.o
Idag så började jag en mikrodator-kurs i skolan.
Det är AVR som används. Det blir den tredje mikrodatorfamiljen jag lär mig.
Först Motorola i gymnasiet, sedan PIC på egen hand, nu AVR.

Hela kursen bygger på Mega16.

Jag kan säga såhär långt att jag inte är imponerad av AVR.

Till att börja så har Mega16 cirkus 130 instruktioner.
Kollade på några mycket mindre modeller, och det verkar inte vara någon som har mindre än 100 instruktioner!

(I jämförelse så har en PIC 16F870 35st.)

Sedan detta med "generella register", är det verkligen så smidigt?
Och så klagar folk på bankningen i PIC! Jag ställer mig oförstående.

Sedan verkar Atmel tro att det är någon fult med att ha fler än tre bokstäver långa mnemonic, tacka vet jag
PIC assembler, där man verkligen direkt ser vad dom betyder.

Måhända att jag blir något mer ödmjuk mot AVR senare i kursen när man lärt sig AVR mer, och kanske inser fördelar.
Men såhär långt så .. :lol:

Postat: 13 september 2006, 20:40:16
av Icecap
Jo, jag har kollat lite på AVR och jag är inte imponerat heller.

Men å andra sidan är AVR och PIC-segmenten en aning förskjutna, de överlappar alltså inte helt. AVR är en aning "större" men för mig hamnar den då i ett segment som egentligen är överflödigt.

* Ska jag göra "smågrejor" använder jag PIC.
* Ska jag göra lite "tyngre" grejer använder jag Renesas/Fujitsu.

AVR hamnar mellan stolerna så att säga.

Postat: 13 september 2006, 20:41:46
av björn
nåja, du kommer nog till insikt du med så småningom :)

Förövrigt så har jag precis börjat med ARM7 (philips), har dock bara hunnit göra lite blinkprogram änsålänge pågrundav att jag har ett jobb att sköta med :( (som bara innefattar en ATmega88)

EDIT; Icecap han mellan...

Postat: 13 september 2006, 21:48:37
av sodjan
> Sedan detta med "generella register", är det verkligen så smidigt?
> Och så klagar folk på bankningen i PIC! Jag ställer mig oförstående.

Dessutom så är de inte så "generella", det finns en stor grupp
instruktioner som bara fungerar på ca hälften av de "generella" registren.
Om jag inte har förstått fel...

Re: PIC vs AVR, jag har kommit till insikt!

Postat: 13 september 2006, 22:09:52
av exile
Johan.o skrev: Till att börja så har Mega16 cirkus 130 instruktioner.
Kollade på några mycket mindre modeller, och det verkar inte vara någon som har mindre än 100 instruktioner!

(I jämförelse så har en PIC 16F870 35st.)
Nja, att ha få instruktioner för att enklare att lära sej köper jag inte riktigt, AVR har många instruktioner för att under lätta codandet...

Exempel ACCb + ACCa -> ACCb (16bitar variabel PIC)
movf ACCaLO,W
addwf ACCbLO, F ; add lsb
btfsc STATUS,C ; add in carry
incf ACCbHI, F
movf ACCaHI,W
addwf ACCbHI, F ; add msb

Exempel add1 = add1 + add2 (16bitar variabel AVR)
add add1l, add2l
adc add1h, add2h

Delvis har AVR en extra instruktion som hetter adc delvis add with carry vilket eliminerar behovet med att kolla carry manuelt och addera den som man måste göra på PIC16...

Några andra exempel är
ANDI och med konstant
ORI eller med konstant
NEG byter teken på signed tal
bara för att några exemplel
Johan.o skrev: Sedan detta med "generella register", är det verkligen så smidigt?
Och så klagar folk på bankningen i PIC! Jag ställer mig oförstående.
Det mer fråga om smak sak, Men bankning inbär gansak mycke bök om man över skider storleken på en bank i en array som exempel
Johan.o skrev: Sedan verkar Atmel tro att det är någon fult med att ha fler än tre bokstäver långa mnemonic, tacka vet jag
PIC assembler, där man verkligen direkt ser vad dom betyder.
Även det är en smak sak, Jag tycker att Atmels för kortningar är korta och lätt förståda...


En sida värt att kolla på
http://elm-chan.org/docs/avr_e.html

Icecap:
Att AVR skulle vara "större" så att den hamnar mellan stolarna har jag väldigt svårt att hålla med om, AVR finns 8pin kapsel till 100pin.
Detta gör att lätt att använda samma "kärna" till små och till mellan stora projekt...
Om den hamnar mella stolarna för dej må vara hänt, efter som du är van med PIC och gillar Renesas, och varför bytta om man trivs ^^

Postat: 13 september 2006, 22:27:22
av Johan.o
sodjan: Jepp

björn:
Men hur i fan gör man i avr asm, om man skulle vilja utföra
skip eller branch om ett register blir noll?
Blir galen på skiten ärligt talat, kikat igenom datablad i hundra år nu.

Postat: 13 september 2006, 22:54:05
av BEEP

Kod: Markera allt

	ldi		r16, $00
	cp 		r16, r17         ; Compare registers r16 and r17
	breq    loop             ; Branch if registers equal

Postat: 13 september 2006, 22:55:09
av björn
Vill du kolla om hela registret är noll eller bara en bit?

För en bit har du SBRC för skip och för bracnch verkar det som att du först får göra en compare och sen en branch if equal eller liknande. Det var ett tag sen jag kodade AVR i assembler så jag minns inte riktigt.

EDIT: Där fick man inte vara först heller :(
EDIT2: För att utföra SKIP gör du likadnat som BEEP visar men väljer CPSE istället för BREQ.

Postat: 13 september 2006, 22:57:32
av bengt-re
Säga vad man säga vill om PIC, men är man normalkorkad så lyckas man alltid begripa hur man skall göra något om man läser databladet. Sen är ju MPASM en väldigt mogen och välfungerande utvecklingsmiljö. Det är lättbegripligt, konfigureringsbart, stabilt och känns logiskt och tämligen buggfritt.

Vill man programera tidskritiska applikationer så känns PIC som ett väldigt bra val då det är rätt lätt att räka klockcykler. Det är väl bara att interupten har ett gitter på en klockcykel som kan ställa till det, men i de (få)fallen där man inte tillåta detta jitter så får man försöka programera utan interups och i praktiken utan timers. Det kan ju hända att det finns någon annan lösning också, men den diskutionen hör väl knappast hemma i denna tråd.

Skall man köra C så är säkert avr bra, men för assambler tror jag att oaktat att jag råkar gilla PIC att PIC är den lämpligaste och mest lättkontrollerade familjen. Ryser lite vid minnet ifrån assambler på Z80 med en kass utvecklingsmiljö... Var inte Z80 en satans skum processor egentligen förresten? Nåväl RISC gör det lättare att programera i assambler iaf, om det råder väl ingen större tvekan...

Postat: 13 september 2006, 23:03:57
av Johan.o
Såhär gör jag..

Kod: Markera allt

loop_yttre
	ldi XL,1
loop_innre
	out	PORTB,XL
	clc
	rol	XL
	(Nu vill jag veta om XL blivit noll eller inte..)
Vad jobbigt att man måste ha ett register nollställt för att jämföra med.
usch..

Postat: 13 september 2006, 23:09:22
av sodjan
> Det är väl bara att interupten har ett gitter på en klockcykel som kan ställa
> till det, men i de (få)fallen där man inte tillåta detta jitter så får man
> försöka programera utan interups och i praktiken utan timers.

Hm, är det inte bara själva *anropet* av ISR'en som har ett jitter, inte
timern i sig. Så om man bara hanterar timern korrekt (ADD av värdet av
nästa intervall istället för MOVWF t.ex) så stämmer cyklerna. Eller har
jag missat något ?

Jittret uppstår så vitt jag kan förstå p.g.a att man inte kan veta i förväg
och själva interruptet inträffar under en 1 Tcy eller en 2 Tcy instruktion.

> Var inte Z80 en satans skum processor egentligen förresten?

Det var väl en "förbättrad" Intel 8080 och ansågs vara bättre av de flesta
på den tiden... :-)

Postat: 13 september 2006, 23:16:45
av sodjan
Efter en "rotate" har man samma problem på en PIC.
"Rotate" instruktionerna sätter *inte* Z-flaggan om
registret blir h'00' efter rotate'en.

PIC18 har en TSTFSZ "test file, skip if zero", men på PIC16 får
man t.ex göra "IORLW h'00'" och sedan en bit-test på Z-flaggan.
En extra instruktion, men inget extra register.

Har inte AVR en "OR with literal" eller liknande ?
Annars är det så klart *lite* sämre att man får ta till ett extra
register...

Postat: 13 september 2006, 23:20:36
av björn
Man borde kunna göra en CPI "Compare Register with Immediate" med om du vill slippa använda ett register för jämförelse.

CPI XL,0 ;Compare Register with Immediate
BREQ 'var du vill hoppa'


EDIT:
Sodjan skrev: Har inte AVR en "OR with literal" eller liknande ?
Jo, ORI 'logical OR register and constant'

Postat: 13 september 2006, 23:27:33
av Johan.o
Det är sant, det blir ju bättre med CPI.

Postat: 13 september 2006, 23:34:02
av sodjan
OK, CPI eller ORI, det blir samma slutresultat med lika
mycket resurser som på PIC i de fallen. Så 1-1 i *den* matchen... :-)