[ korak @ 26.06.2011. 17:16 ] @
Pomazem komsijinom sinu da napise diplomski. Decko je vredan ali mu je potrebna pomoc.
Traeba da napravi bryinske testove za nekoliko mikrokontrolera, da ih analizira i komentarise sa zakljuckom. Moram priznati da je interesantno.

Nasli smo na internetu statistiku o zastupljenosti pojedinih operacija u programu, poziva podprograma, globalnih i lokalnih varijabli i raspodelu varijabli po tipovima.
Profesor mu je dao da obradi: ATmega, AT89Sxx i PIC18Fxx.

Pomoc nam treba u sledecem:

Obimne su familije ovih mikrokontrolera pa je veliki posao pregledati svu tehnicku pdf dokumentaciju da bi smo odredili dominantnu periodu jednog ciklusa izvrsenja naredbe.

Dakle, ako na primer neka familija mikrokontrolera ima 80% tipova koji rade sa nekim taktom izvrsenja naredbi onda je to ono sto nam treba. Treba odbaciti onaj manji broj koji radi na nizem ili visem taktu.

Kako nemam mnogo iskustava sa ovim mikrokontrolerima, bio bih vrlo zahvalan na svakoj informaciji.

Za testiranje ce mo uzeti kompajlere od Mikroelektronike ne ulazeci u to koliko su oni efikasni, ali je vazno da im je efikasnost priblizno ista. Da li se ne varam u ovoj konstataciji?

Unapred zahvalan.

Pozdrav svima.
[ goran_68 @ 26.06.2011. 18:58 ] @
I jedan i drugi proizvođač imaju Product Selector Tool. Mislim da vam može pomoći oko određivanja perioda jednog izvršenja naredbe za tipičnog predstavnika familije. Za testiranje bih koristio asembler pre nego bilo čiji kompajler.
[ korak @ 26.06.2011. 20:27 ] @
Da, imaju.
Ali problem mi je da ustanovim koji su to dominantni tipovi. Ja ne radim sa ovim MCU-ovima već sa MC9S08, i tamo postoji nekoliko tipova koji rade na 25MHz, ali to su oni koji imaju USB, dakle oni su za specifičnu namenu, ali sam siguran da se najviše koriste oni opšte namene.

Za ATmega vidim da je dominantno trajanje ciklusa 100ns, dok mi je za PIC18Fxx mnogo teže da nađem taj podatak. Znam da je nekada 8031 delio frekvenciju oscilatora sa 12, ne znam kako je sada.

Koliko sam skapirao PIC deli generisanu frekvenciju sa 4, ali to nije jasno razlučeno u dokumentima šta je frkvencija, a šta frekvencija izvršenja naredbi.

Na forumu ima mnogo onih koji rade sa ovim MCU-ovima, pa sam očekivao odgovor iz ruke.

U svakom slučaju hvala.

Pozdrav.
[ bogdan.kecman @ 27.06.2011. 02:17 ] @
pic ima konstantan broj taktova za svaku naredbu, i svi 18fxxxx imaju to identicno, razlikuju se po maximalnoj frekvenciji na kojoj rade i po perfierijama ali sto se "brzine" tice

Citat:

All instructions are single cycle, except for any program branches. These take two cycles since the fetch instruction is “flushed” from the pipeline while the new instruction is being fetched and then executed.


to vazi za svaki pic18F

e sad ono sto ti je bitno je veza izmedju "single cycle" i frekvencije na kojoj radi mcu. To je tipicno za ovu arhitekturu 1/4 posto

Citat:

The microcontroller clock input, whether from an internal or external source, is internally divided by four to generate four non-overlapping quadrature clocks (Q1, Q2, Q3 and Q4). Internally, the Program Counter (PC) is incremented on every Q1; the instruction is fetched from the program memory and latched into the Instruction Register (IR) during Q4. The instruction is decoded and executed during the following Q1 through Q4.


dakle ako ti 18Fxxxx trci na 48MHz to znaci da to svaki asm statement traje 1/12000000 sec osim brancheva koji traju duplo duze.

ista prica vazi i za 10F, 12F, 16F, 24f .. 32mx je malo drugaciji posto je to mips core no obzirom da te zanima 18F ..


sto se tice kompajlera - ne znam sta bih rekao, koliko ja znam mikroe ima ok kompajlere mada nisu idealni. razliciti ljudi rade na kompajleru za pic i za avr tako da ne mora da znaci da ako su od iste firme da su isto optimalni

meni nije jasno brzinu cega meri? ako meri brzinu izvrsavanja nekog koda, pic je tu uvek 1 cycle po komandi .. atmega i motorola su koliko ja znam druga arhitektura pa idu od 1 do 15 ali njima je 1 frekventni takt == 1 cycle (dok je na 18f 1/4) ... u cemu ce da racuna tu brzinu? u mips? flops? u broju operacija za dolar?

[ goran_68 @ 27.06.2011. 08:06 ] @
Najviše PIC18 ima MaxCPUSpeed 40MHz. Za jedan instrukcioni ciklus frekvencija se deli sa 4.
Najviše ATMega se vrti na 16Mhz i oni ne dele takt.
Mislim da AT89 ne deli frekvenciju sa 12 kao stari dobri 8031 ali bih to morao kasnije da proverim.
Imam i fajlove sa sajtova, mogu ti poslati. Sem clock-a jedna od brzinskih prednosti AVR nad PIC-om je i u tri Z registra koji se mogu koristiti kao pokazivači i odvojenim prekidnim vektorima za svaku vrstu prekida.
E sad, ja sam malo zastareo po pitanju korišćenja novijih kontrolera pa možda negde grešim i voleo bih da se još neko ukljuši sa zapažanjima.
Pozdrav.
[ Odin D. @ 27.06.2011. 10:20 ] @
Citat:
korak:
Nasli smo na internetu statistiku o zastupljenosti pojedinih operacija u programu, poziva podprograma, globalnih i lokalnih varijabli i raspodelu varijabli po tipovima..

Na osnovu toga napravite benchmark-test i uporedite rezultate. Zasto se bakcati sa iznutricama kad na kraju - da bi rezultati razlicitih arhitektura bili uporedivi - sve mora da se svede na istu mjeru, a to jedino moze biti vreme.
[ korak @ 27.06.2011. 11:32 ] @
Hvala svima na odgovorima.

Čini mi se da mogu da uzmem za ATmega i PIC18Fxx da je trajanje jednog ciklusa naredbe 100ns da je to preovlađujuća vrednost. Da li sam u pravu?

Koristio bih C kompajler da se ne bih mlatio sa asemblerom. Primeri bi bili jednostavni, a kako imam naviku da pogledam prevod, ako mi se učini da je nešto moglo efikasnije da se prevede to ću ispraviti.

Dakle, izmerio bih trajanje izvršenja pojedinih iskaza, i prema statistici pojavljivanja takvih iskaza sračunao bih brzinu izvršenja netrivijalnih programa.

Ostaje mi da pogledam za AT89, i što je još važnije nešto vezano za PIC: koliko se u procentima koriste u istom iskazu varijable sa različitih banaka za netrivijalni program. Zapravo koliko će puta biti potrebno da se preklapaju banke. Nemam predstavu o tome.

Naslućujem teškoću kod AT89 i PIC-a jer nemaju mogućnost da lokalne varijable stavljaju na stek, pa zato moram da proučim njihove kompajlere kako bih ukapirao mehanizam koji koriste za to. Ovo mi je potrebno radi komentarisanja brzine rada sa lokalnim varijablama.

Pozdrav svima.

[ bogdan.kecman @ 27.06.2011. 12:40 ] @
@goran, nije max 40MHz nego 48MHz (12MIPS) (na primer 18F4550 ili 18F2550)


Citat:
korak
Čini mi se da mogu da uzmem za ATmega i PIC18Fxx da je trajanje jednog ciklusa naredbe 100ns da je to preovlađujuća vrednost. Da li sam u pravu?


to je vrlo "opusteno" posmatranje, ako sve osim branch traje jedan ciklus na 18F onda je ako uzmemo da 18F trci na 48MHz taj ciklus traje 83ns dok ATMEGA koji trci na 16MHz (recimo ATmega640/1280/1281/2560/2561 koji na tih 16MHz mogu teoretski da imaju i 16MIPS doduse i mnogo manje zavisi sta rade - u poredjenju sa 12MIPS konstantno na picu) taj ciklus traje 62ns "mostly" preko gomile koji traju 4 ciklusa pa sve do nekih koji traju 6 ... uvatiti 100ns kao prosek za te dve mcu familije je prilicno "opusteno" posmatranje ... ako je cilj merenje brzine, po meni previse opusteno


Citat:
Ostaje mi da pogledam za AT89, i što je još važnije nešto vezano za PIC: koliko se u procentima koriste u istom iskazu varijable sa različitih banaka za netrivijalni program. Zapravo koliko će puta biti potrebno da se preklapaju banke. Nemam predstavu o tome.


za 18F - sa dobrim kompajlerom - beznacajno


Ja licno mislim da treba da napravis desetak jednostavnih programa u c-u i da probas sve kompajlere koje mozes da nadjes "za dz" za svaki mcu koji testiras i da napravis comparison chart ... tu vidis i poredjenje kompajlera i mcu-a, uopste ne gubis vreme na "koliko prosecno xyz .." ... teoretski maximum imas u datasheet-u .. 12MIPS je 18Fxxx 16MIPS je ATMEGA, koliko je realno moras da probas sa realnim programom
[ rsinisa @ 27.06.2011. 13:21 ] @
Mislim da je jedino ispravno poredjenje ako se porede ASM programi - iazberu se 2, 3 rutine, recimo množenje dva 8-bitna broja, ispis na 2 displeja u multipleksu ili tako nešto, zatim se za svaku familiju izabere oscilator tako da za svaki MCU instrukcija koja traje najkraće, ima isto vreme izvršenja.
Pošto se kod PIC-a jedna instrukcija izvršava za 4 takta oscilatora, a kod ATMEL-a za 1, onda treba računati za npr. PIC na 48 MHz i ATMEL na 12 MHz. I, kao što reče Bogdan, kod PIC-a se sve instrukcije izvršavaju za 4 takta oscilatora (iliti 1 mašinski ciklus) sem onih koje menjaju PC (program counter) registar.
Što se tiče banaka kod PIC-a, najčešće jednostavni programi koriste malo korisničkih varijabli pa nema potrebe za preklapanjem, sem ako se radi sa sistemskim registrima koji su u drugoj banci. PIC ima samo jedan akumulator, tj. radni registrar (w od "working register") tako da je potrebno jedan operand smestiti u njega, a onda se radi operacija koja rezultat može da smesti ili u w ili u korisničku varijablu.

Pozdrav.
Sinisha
[ bogdan.kecman @ 27.06.2011. 16:29 ] @
nema sta da poredis sa asm programima zato sto za asm programe imas vec brzinu prikazanu u data sheet-u, atmega je 16 mipsa, 18f je 12 mipsa i to je to, nema sta da "meris" ljudi izmerili ... ako meris "realnu" brzinu onda tu nema asm-a, ni jedan ni drugi mcu nisu dizajnirani sa idejom da se programiraju u asm-u vec u c-u. imas za svaki po 2-3 kompajlera, uzmes realan problem napises ga u c-u i iskompajlras na svih 10 kompajlera i izmeris im vremena. "realna" brzina je bas to - veza kontrolera i kompajlera i koliiko ce brzo da radi taj realan problem, a ne koliko ti mozes da optimalno napises asm koda koji sa realnim uslovima rada nema veze sa vezom - posto kao sto rekoh, za to vec imas izmereno, atmega je za 4 mipsa brzi.
[ Odin D. @ 27.06.2011. 19:40 ] @
Jedino sto ima prakticnog smisla mjeriti kod ovih mikrokontrolera je maksimum koji od sebe mogu dati u realnim uslovima.
Dakle, nikakvo tandrljanje sa oscilatorima i sl. - uzeti najbrzi koji moze i sa time mjeriti.
Sta mjeriti:
- aritmeticke operacije,
- protok podataka: mem/mem, mem/per, per/mem,
- odziv na interrupt,
- skakutanje na potprograme,
- nesto drugo sto moze biti od prakticnog interesa...

Broj mipsa takodje ne znaci nista, jer je u nekom procesoru za sabiranje dva broja potrebno 4 operacije (dovuci A iz memorije, dovuci B iz memorije, saberi i smjesti u akumulator, smandrljaj iz akumulatora nazad u memoriju), a na drugoj se sve to obavi u npr. jednoj operaciji, u zavisnosti od arhitekture.
Pa tako iako ovaj potonji procesor moze imati dva puta manji mips, sabirace brojeve dva puta brze od onog prvog.
Mips ima smisla samo ako se asemblerske operacije izvrsavaju na isti nacin (dakle ako je arhitektura ista ili bar priblizno slicna).

@korak
Pomazes li ti komsijinom malom, ili komsijin mali pomaze tebi :)
Sudeci po tvom poslednjem postu, jedino ti je jos ostalo da otkucas i ukoricis taj diplomski :)
[ korak @ 27.06.2011. 20:39 ] @
A, ne Odin. Odavno sam ja završio sve škole.

Ja sam pre petnaestak godina radio ovo isto, samo su tada u igri bili drugi mikrokontroleri. Mogu da ti kažem da je to za mene interesantna zanimacija.

Prošle godine sam negde na internetu našao neki rad, čovek je napravio statistiku za netrivijalni program. Dao je u procentima zastupljenost svih aritmetičko logičkih operacija, poziva procedura, korišćenja globalnih i lokalnih varijabli kao i različitih tipova varijabli. E sad, za svaki napišem primer dobijem vreme izvršenja i pomnožim sa težinskim koeficijentom koji se dobija iz procenta zastupljenosti. Kada sve to saberem dobijem rezultat. To uradim za sve MCU-ove i to je to.

Kada sam to prvi put radio, početkom devedesetih, koristio sam brzinske testove koje su dale firme, proizvođači, ali su u njima favorizovali osobine svojih MCU-ova. Zato to nije bilo dobro.

Nego vidim u teh. dokumentaciji za PIC18Fxx2 da je deklarisan za 10MIPS-a, a ovde mi se navodi 12MIPS-a. Meni je važno šta je od ova dva zastupljenije. Na primer, ja ne računam na 25MHz takt CPU za MC9S08JM i još neke, jer 90% ove familije ima takt CPU-a 20MHz, pa ne želim da računam sa PIC-om ili AVR-om koji je manji deo familije.

Biće muke sa izborom kompajlera za testiranje. Primetio sam da neki profesionalno urađeni kompajleri vrlo efikasno prevode najviše zastupljene iskaze, tako da ih i u asembleru nije moguće efikasnije napisati. Međutim za retko korišćene iskaze forsiraju što kraći kod bez obzira što je izvršenje i 5 puta sporije nego kada bi se to napisalo na asembleru. E sad, da stvar bude još komplikovanija postoji mogućnost izbora različitih strategija prevođenja, pa i ta da se dobije najbrži kod. Onda se dobija sasvim drugačiji prevod.

Uostalom, što komplikujem kada njegov profesor ionako o ovoj materiji manje zna od prosečnog forumaša, nekako ću uprostiti stvari.

Pozdrav.
[ bogdan.kecman @ 27.06.2011. 21:05 ] @
18F ima sa max 40MHz i sa max 48MHz ovi koji su max 40MHz su 10 a ovi sa 48MHz su 12 mips. pogledaj 18f2550 i ekipu (najpopularniji usb enabled pic)

btw ja bi brzinu definisao u zavisnosti od "MHz" ili X jedinica brzine u 1MHz. a onda bi spomenuo frekvencije na kojima rade odredjeni mcu-i
[ goran_68 @ 27.06.2011. 21:26 ] @
Komšijin mali treba da nađe ne najbržeg već tipičnog predstavnika familije u pogledu brzine jer ATMEL možda sutra izbaci ATMegaxx na 200MHz. Za PIC18 seriju to je neki mcu sa 40Mhz clock-om (PIC18F4520npr.). Inače se PIC18 maksimalno serija vrti na 64MHz (PIC18F23K20 recimo). Kod AVR je to 16MHz i ATMega16. Mislim da su ATMega16 i PIC18F4520 po svim pitanjima dva porediva kontrolera ovih proizvođača. Testovi koje Odin predlaže su OK i treba ih pisati u asembleru da bi poređenje imalo svrhu. Način na koji neki C kompajler optimizuje kod za jednu ili drugu vrstu kontrolera moze napraviti značajnu razliku i zašto te dileme ne eliminisati odmah u startu izborom asemblera.
AVR je u prednosti jer ima 32 registra opšte namene a naredbe nad promenljivima smeštenim u te registre se izvršavaju u jednom instrukcionom ciklusu. Pogedajte npr:

ADD Rd,Rr ili AND RD,Rr

Registri R26 do R31 se koriste kod indirektnog adresiranja (pointeri - to beše C!?) i još jedna su prednost AVR. Pogledajte sledeći primer preuzet sa:
http://www.myplace.nu/avr/minidds/minidds.asm

ldi r29,0x00 ; clear accumulator
ldi r28,0x00 ; clear accumulator
; setup adder registers
ldi r24,0x55 ; setup adder value
ldi r25,0x35 ; to 1 kHz
ldi r26,0x00 ;
; main loop
;
; r28,r29,r30 is the phase accumulator
; r24,r25,r26 is the adder value determining frequency
; add value to accumulator
; load byte from current table in ROM
; output byte to port
; repeat
;
LOOP1:
add r28,r24 ; 1
adc r29,r25 ; 1
adc r30,r26 ; 1
lpm ; 3
out PORTB,r0 ; 1
rjmp LOOP1 ; 2 => 9 cycles

Main loop se izvršava u samo 9 ciklusa!!! To PIC ne može za ovakvu aplikaciju (DDS). Dakle, u matematici i radu sa tabelama, u interaptima, arhitektura i skup naredbi daju brzinsku prednost AVR. To komšijin mali treba da dokaže.
Prednost PIC je kad gazda kaže da ćemo za sledeći projekat koristiti PICxxx i što ga možeš kupiti kod nas na trafici. Vremenom me mrzelo da prelazim na nešto drugo pa ga koristim i za svoje stvari.
[ Odin D. @ 27.06.2011. 21:31 ] @
Citat:
korak: A, ne Odin. Odavno sam ja završio sve škole.

Ma znam ja da nije za tebe, nego sam se nasalio posto mi iz svega sto si napisao ne izgleda da ti njemu pomazes - nego da sve radis umjesto njega.

Citat:
korak: Nego vidim u teh. dokumentaciji za PIC18Fxx2 da je deklarisan za 10MIPS-a, a ovde mi se navodi 12MIPS-a. Meni je važno šta je od ova dva zastupljenije. Na primer, ja ne računam na 25MHz takt CPU za MC9S08JM i još neke, jer 90% ove familije ima takt CPU-a 20MHz, pa ne želim da računam sa PIC-om ili AVR-om koji je manji deo familije.

A cemu uopste koriste tako "usrednjeni" rezultati?
Mislim, ako ikad ikog bude zanimala brzina mikrokontrolera onda ce ga vjerovatno zanimati neki konkretan mikrokontroler, a ne neki nepostojeci "uopsteni"?!

Najlakse je da sastavite tri "jednake" seme sa ta tri mikrokontrolera - tipicna predstavnika svoje sorte. Napisete program koji testira one stvari koje sam naveo u prethodnoj poruci (broj MIPS-ova ne znaci ama bas nista - iz razloga koje sam gore objasnio. To je cisto marketinski podatak, a ne tehnicki i razlicite arhitekture se prema MIPS-ovima uopste ne mogu uporedjivati. Nesto smisleniji je broj FLOPS-ova, ali to je vise za DSP nego za uC, posto ovi uC o kojima se ovdje radi i ne znaju sta je to :)

Elem, za neki info na prvu loptu nije zgoreg malo se informisati na npr. Embedded Microprocessor Benchmark Consortium kako se to radi i o cemu se tu radi:
http://www.eembc.org/home.php

Tamo se moze downloadovati i CoreMark benchmark, pa licno probati, mada vec postoje i gotovi rezultati za uporedjivanje, npr.:
http://www.coremark.org/benchmark/index.php

Pozdrav!
[ bogdan.kecman @ 27.06.2011. 21:40 ] @
u vreme dzaba cortex m3 jezgra advocacy o 8bitnom avr vs pic je besmislena ... mozemo da diskutujemo o nacinu merenja, ali o tome sta je bolje, kvalitet jednog mcu-a se meri daleko drugacije od toga koji se hardware nalazi u njemu, no ovde korak prica o brzini

ako ces da gledas "sta je najbrze na kom mcu-u" - to uzmes iz data sheet-a, napravis kompilaciju segmenata odatle i prezentujes kao rad, ako ces prosek (prosecno 18F ide na 40-48MHz 2550 je najprodavaniji 18F a on ide na 48mhz, mchip je celu novu seriju pravio zbog potraznje, presisali su i 16f84 sa tim 18f-om, atmege sve koje sam ja video su na 16, nisam video ni vise ni manje, motorole ne znam) .. ako je rec o "prosecnom" merenju, onda moras da izbacis "sebe" iz racunice ... ako ja uzmem da pisem asm kod za avr i pic i msp430 pic ce garant da bude najbrzi, dok ako ti uzmes da pises kod najbrzi ce biti avr, a ako moja zena uzme da ga pise bice msp430 .. uzmes lepo C koji je de fakto standard za programiranje mikrokontrolera vec mnogo godina ma koliko se neki tome opirali ... i napises test app koji ima i racunicu i kopiranje memorije i ad konverziju ... iskompajliras ga lepo sa svim kompajlerima koje nadjes izmeris trajanje svakog segmenta i kazes mcu X, n / mhz, mcu Y, m / mhz, mcu Z, p /mhz. Pustis dva tri grafikona i to je to ...
[ goran_68 @ 27.06.2011. 22:36 ] @
Korak, baš me zanimaju rezultati pa te molim da zaključak okačiš ovde. Može i ceo rad ukoliko to nije problem.
Bogdane, ako ti, korak, neko treći i ja napišemo asemblerski kod za sabiranje dve 4-bajtne promenljive za sve tri vrste kontrolera rezultat MORA da bude isti. U ciklus... ili neko nije dobro uradio posao.
[ Odin D. @ 27.06.2011. 22:48 ] @
Citat:
goran_68:asemblerski kod za sabiranje dve 4-bajtne promenljive za sve tri vrste kontrolera

Poenta je u tome da za taj slucaj vreme izvrsavanja mozes za 38 sekundi da saberes iz datasheet-a, uopste ne moras da pises program.

Za bilo kakav slucaj od prakticnog interese - a to su netrivijalni programi - dobijena vremena ce sigurno da se razlikuju, osim ako sva cetvorica nemate 4 godine na raspolaganju za poliranje vasih asemblerskih ceda.
[ goran_68 @ 27.06.2011. 23:15 ] @
Koliko sam razumeo, korak želi da nađe vreme izvršenja upravo za takve stvari: aritmetičko-logičke operacije, pozive procedura i sl. pa da osnovu toga i statistike njihove zastupljenosti u netrivijalnom programu računa rezultat. Da li će za to da piše program ili da gleda u datasheet sasvim je svejedno.
[ goran_68 @ 27.06.2011. 23:36 ] @
Za AT89S, da ne ostanem dužan, clock ide do 24MHz ali u datasheetu za AT89S51 stoji 33MHz. Ne znam šta je korektan podatak , možda može da se overclock-uje.
[ korak @ 28.06.2011. 02:06 ] @
Hvala svima na odzivu, mislim da ste puno pametnih stvari napisali.
Problem je u profesorima, tako daju neku temu, a ona nema baš mnogo smisla.

Nisam baš razumeu Goranov primer, zapravo nameru. Čini mi se da je ovo primer trivijalnog programčića i da se to mnogo efikasnije postiže interrupt-ima. Neka tajmer čita programsku memoriju brzinom koja je potrebna. Takvi primeri za moje testiranje nisu pogodni. Ipak je jedno u pravu, kada AVR uzme sve varijable u svoje registre onda je šampion brzine. Inače si dobro razumeo moje namere, mada mi njihova realizaciija sada izgleda komplikovanija. Klok koji si naveo za AT89S da li se odnosi na frekvenciju izvršenja naredbi, ili ima nekog deljenja?

Da bih isplivao iz nepredviđenih komplikacija, a da ne izgleda da sam nešto smandrljao čini mi se da sam najbliži Bogdanovom pristupu.

Ima još jedna stvar koju profesori ne znaju. Promenila se uloga 8-o bitnih MCU-ova u zadnjih 10 god. Oni više nisu glavni u sistemu. Njihova uloga je da budu uz razne senzore, da čitaju podatke sa njih, da ih transformišu i šalju na neku mrežu gde je glavni neki 32-o bitni multi-medijalni MCU. Mogu imati i izvršnu ulogu kada rade nešto sobzirom na poruku koju su primili. U nekim slučajevima završavaju kompletan posao u lokalu uz komunikaciju sa glavnim MCU-om. Zbog toga su važni i još uvek čine više od 50% svih proizvedenih MCU-ova. Ovo menja pristup u izboru programskih sekvenci koje treba testirati, jer oni su i napravljeni da rade u sadejstvu sa periferijama koje su na njih nakačene.

Mislim da ću ponovo da razmislim. Izbraću jedan skup periferija, recimo za merenje temperature, enkoder, DC motor, potenciometar, i šta ja znam šta još. Kao komunikacija koju ima svaki tip MCU-a uzeću RS485 i to je to. Razgovaraću sa diplomcem da tako precizira rad sa profesorom, mislim da neće biti problema. Čini mi se da će ovako posao da mi bude određeniji i lakši. Šta mislite?

Pozdrav svima.

[ goran_68 @ 28.06.2011. 07:48 ] @
Primer sam dao samo kao jedan efikasan način upotrebe pokazivačkih registara AVR. Inače, teško da će bilo koja interrupt rutina, kod bilo kog mcu, za 9 instrukcijskih ciklusa izbaciti na PORT neku vrednost iz tabele koja može biti smeštena bilo gde u adresnom prostoru tog mcu. I kod rada sa periferijama koje si naveo, opet će matematika biti ta koja će određivati brzinu. SHT11 senzor vlažnosti i temperature će pročitati gotovo jednako brzo svi a onda sledi matematika sa promenljivama tipa float. Kad odrediš temperaturu i vlažnost za regulaciju ti u zavisnosti od izabranog algoritma sledi opet neka matematika pa tek na kraju uključiš ili isključiš rele, trijak ili šta-ti-ja-znam-šta. Za AT89S ne nađoh ništa konkretno u datasheetu. Pogledaću ponovo kad nađem vremena.
[ korak @ 28.06.2011. 11:27 ] @
Slažem se sa tobom, ne bi interrupt to brže uradio, ali bi omogućio da MCU radi i nešto drugo a ne da stoji u petlji, samo to i ništa više.
A kakva će matematika biti primenjena, o tome razmišljam.

Pozdrav.
[ infiniteIgnorance @ 30.06.2011. 14:27 ] @
Zdravo.

Imam zadatak slican ovome - treba da uporedim potrosnju energije dva mikrokontrolera istog ranga.

Procesljao sam okolo pa sam (izmedju ostalog natrcah i na face koje je neko vec spomenuo - EEMBC) nasao nekog Litvanca koji je opisao Sliding Window algoritam pa ga i realizovao u C-u. To bi mi odgovaralo, pa sam mu pisao ako moze da posalje taj kod (u tekstu rada pise da je kod dostupan, tj. da je voljan da ustupi). Medjutim, prodje dva dana a on se ne javlja, a meni to treba... Pa... da nema neko slucajno?

Ili da nemate bolju ideju kako testirati potrosnju energije kod razlicitih kontrolera?

Hvala.
[ goran_68 @ 30.06.2011. 19:04 ] @
Za koraka: AT89LP je single clock cycle a AT89S nigde ne kazu eksplicitno sta je sa clockom.

Za infiniteIgnorance: Sliding window ima objasnjen u jednom App. Note kod Atmela samo je koliko se secam dat u asembleru. Nije tesko da ga prebacis u C. Imas i na microchip i TI sajtu video sa prikazom aplikacije za XLP i MSP430 kontrolere.Tu malo napusavaju jedni druge a tebi moze da posluzi za ideju kako, kad i sta meriti.
[ infiniteIgnorance @ 01.07.2011. 09:56 ] @
Hm, sve sto je google izbacio u odgovor na moje sliding window algorithm site:microchip.com & sliding window algorithm site:atmel.com je bilo vezano za komunikaciju TCP protokolom - sto mi ne treba.

Mozes li, molim te, biti malo konkretniji? Gdje si to nasao (asembler nije problem)?
[ goran_68 @ 01.07.2011. 11:22 ] @
Mislim da će ovo od litvanca više vredeti koraku nego tebi. Dopada mi se i jedan od zaključaka:

"Given fixed 4 MHz CPU clock frequency 8 bit MC Atmega16 from Atmel Corp. outperformed 16 bit MC MSP430F449 from Texas Instruments Inc. and 32 bit ARM7 core based STR712F from ST Microelectronics by means of described sliding window algorithm execution time. The gain is around twice in case of most favorable algorithm implementation."

Tebi treba da uporediš potrošnju energija dva mcu pa ti predlažem da pročitaš:
http://focus.ti.com/lit/wp/slay015/slay015.pdf
http://www.microchip.com/stell...eId=1406&dDocName=en544410


A za algoritam izvinjenje. Ono o čemu sam pisao je moving average filter Atmel AN a pisao sam po sećanju ne proverivši pre toga.