simplex Postat Noiembrie 26, 2011 Autor Partajează Postat Noiembrie 26, 2011 Eu experimentez acum controllerele de la ST pentru ca sunt mai ieftine deci "trecerea" (de fapt nu renunt la nimic, pur si simplu mai invat o arhitectura) o fac oricum, daca unul prefera sa ramana fixat pe ceva treaba lui. Existenta a nu stiu cite procesoare si arhitecturi a inceput sa devina un lucru daunator, care dezorienteaza lumea. Oamenii pierd timpul cu asimilarea de noi mnemonici de asamblare, pentru ca pina la urma asta este interfata uControlerului-ului cu omul si compilatorul, ca in final sa isi dea seama ca aceste limbaje de asamblare sunt echivalente si odata cu miniaturizarea portilor logice oricind un procesor lent ca 8051 prin artificii hardware poate depasi un AVR sau un AVR poate trece in fata unui 8051. Sa nu uitam ca microcontrollerele pe 8 biti nu se adreseaza aplicatiilor care au nevoie de 100MIPS. Pentru asta exista ARM a) 8051 este un procesor pt. automatizari, ca si AVR-ul, nu destinat PC-urilor ca ARM sau x86 (telefonul mobil gen iPhone este in esenta un PC miniatura de consum redus). b) La automatizari ai nevoie de prelucrare de semnal (8051 au convertoare analog digitale). Mereu apare necesitatea executarii unei prelucrari de semnal si asta cere viteza. Sa construiesti o placa hard care are si 8051 si ARM sau un DSP (folosite doar pentru calcule rapide) sau sa inveti ARM sau DSP si sa renunti la 8051 este complicat, dificil si nu renteaza efortul. Este mult mai comod sa faci un circuit imprimat cu doua 8051, unul de 100 MHz, sa zicem C8051F121, pe care il folosesti la calcule gen procesare de semnal sau alte operatii care necesita rapiditate, si altul, cum ar fi C8051F988, pe care il utilizezi pentru citire tastatura, afisare rezultate pe un LCD adica la procese mai putin critice. Cresterea frecventei inseamna cresterea consumului si cred ca la capitolul acesta 8051 stau mai prost. Cind comparam un 8051 High Speed cu un AVR ne uitam sa aiba frecvente similare. Totusi, existenta unor Silab 8051 de 100 MHz si absenta AVR-urilor de aceeasi frecventa este un punct in plus pentru Silab, care, probabil, pe viitor poate fi pierdut. Link spre comentariu
simplex Postat Noiembrie 27, 2011 Autor Partajează Postat Noiembrie 27, 2011 MIPS nu este chiar atat de relevant. ... sa luam cazul in care faci operatii in mod repetat asupra a 2 variabile. Presupunem arhitectura A, care are un acumulator si deci incarci variabila x, faci operatia, descarci variabila, incarci variabila y, faci operatia, descarci variabila, deci 6 operatii. Presupun acum arhitectura B, care merge la aceeasi frecventa. Ai variabila x in registrul 1, y in registrul 2, oricare dintre acestea poate fi considerat acumulator. Faci operatia asupra x, faci operatia asupra y. Astfel, ai 2 instructiuni, in loc de 6 initial. Chiar si la jumatate din frecventa, arhitectura B este mai eficienta, iar la 1/3, e la fel de rapida, cu un consum mai mic de energie. Sa presupunem ca avem operatia R1=R1+R2, unde registrii R1 si R2 au initial stocate doua valori:Pentru 8051 programul in assambler este: MOV A, R1 ADD A, R2 MOV R1, A Pentru AVR echivalentul codului 8051 se prezinta astfel: ADD R1, R2 Concluzie: AVR-ul cistiga cu 1 la 3 pentru ca ai o instructiune in loc de trei, este nevoie de un singur tact in loc de 3 pentru 8051 high speed. Acum, alt exemplu, sa zicem ca vrei sa muti o data intre locatiile de memorie 0x20 si 0x50 La 8051 Silab ai doar o singura instructiune de executat: MOV 0x20, 0x50 (3 tacti) In timp ce la AVR codul echivalent este: LDS R1, 0x20 (2 tacti) STS 0x50, R1 (2 tacti) Concluzie: AVR-ul pierde cu 4 la 3. Deci ce cistigam intr-un loc la 8051 sau AVR se poate pierde in alte sectiuni ale programului. Din punctul asta de vedere nu cred ca va iesi vreunul cistigator net. Pe de alta parte, daca instructiuni de tip ADD Ri, Rj (Ri=Ri+Rj) erau intr-adevar asa utile, proiectantii lui 8051, atunci cind a aparut el in anii 80, le puteau adauga ca doar nu le era greu sa scrie microprogramul corespunzator secventei MOV A, Ri; ADD A, Rj; MOV Ri, A. S-ar putea motiva ca nu au mai avut loc in memoria de microprogram. Este posibil. Dar oricum, lucruri ca ADD Ri, Rj se pot adauga pe viitor la noile 8051, si in logica cablata nu microprogramate (adica viteza de executie mare), asa cum la arhitectura x86 s-au tot adaugat instructiuni in timp. Asta ar presupune insa ca toti fabricantii de 8051 sa puna aceleasi noi instructiuni pentru ca altfel ar aparea numeroase 8051 diferite (lucru negativ), compatibile unul cu altul doar in ceea ce priveste setul de instructiuni clasice. Nu cred totusi ca mnemonici ca ADD Ri, Rj sunt asa de folositoare cum par, cel putin in cazul lui 8051. Link spre comentariu
edy_wheazel Postat Noiembrie 27, 2011 Partajează Postat Noiembrie 27, 2011 Existenta a nu stiu cite procesoare si arhitecturi a inceput sa devina un lucru daunator, care dezorienteaza lumea. Oamenii pierd timpul cu asimilarea de noi mnemonici de asamblare, pentru ca pina la urma asta este interfata uControlerului-ului cu omul si compilatorul, ca in final sa isi dea seama ca aceste limbaje de asamblare sunt echivalente si odata cu miniaturizarea portilor logice oricind un procesor lent ca 8051 prin artificii hardware poate depasi un AVR sau un AVR poate trece in fata unui 8051. Acuma, nu pot sa zic faptu' ca aceste arhitecturi dezorienteaza. Fiecare uC are porturi, registrii si alte periferice. Si apoi, daca lucrezi in C mnemonicile nu sunt o problema. In principiu fiecare isi alege uC-u' in functie de aplicatie. Din familia AVR ai o gama larga, pe care o poti adapta usor cerintelor.Sa construiesti o placa hard care are si 8051 si ARM sau un DSP (folosite doar pentru calcule rapide) sau sa inveti ARM sau DSP si sa renunti la 8051 este complicat, dificil si nu renteaza efortul. Este mult mai comod sa faci un circuit imprimat cu doua 8051, unul de 100 MHz, sa zicem C8051F121, pe care il folosesti la calcule gen procesare de semnal sau alte operatii care necesita rapiditate, si altul, cum ar fi C8051F988, pe care il utilizezi pentru citire tastatura, afisare rezultate pe un LCD adica la procese mai putin critice. Daca cineva lucreaza ca proiectant pe partea asta nu va folosi in veci un 8051 "tuningat" pentru a lucra la frecvente mari. Va folosi un FPGA sau altceva potrivit. Cand eram student era un program VHDL care "clona" un 8051 intr-un Spartan. De asemenea, unu' dintre proiecte era un procesor pe 8 biti. Totul se reduce la instrumentu' potrivit pentru ce am nevoie. Daca am nevoie (de exemplu) de un procesor pentru semnale video pentru o camera, nu o sa folosesc in veci amin un 8051 pe steroizi, ci un FPGA, pe care pot implementa viteza de calcul a unor DSP-uri. Link spre comentariu
simplex Postat Noiembrie 27, 2011 Autor Partajează Postat Noiembrie 27, 2011 Acuma, nu pot sa zic faptu' ca aceste arhitecturi dezorienteaza. Fiecare uC are porturi, registrii si alte periferice. Si apoi, daca lucrezi in C mnemonicile nu sunt o problema. In principiu fiecare isi alege uC-u' in functie de aplicatie. Din familia AVR ai o gama larga, pe care o poti adapta usor cerintelor. 1) Daca lucrezi in C, assemblerul poate sa nu fie o problema pentru tine insa este pentru compilator. Un nou set de mnemonici presupune dezvoltarea unui alt compilator ori asemenea program este mai greu de realizat si optimizat decit o intreaga familie de uControlere. 2) Inca o data, procesorul este un set de instructiuni in limbaj de asamblare, asta este arhitectura sa. Perifericele sunt niste circuite aditionale vazute de unitatea centrala, in general, ca locatii de memorie. La programul scris de tine in C sau assembler mai trebuie adaugat un fisier de configurare specific fiecarui periferic, specific fiecarei variante de procesor din aceeasi familie. Compilatorul nu se schimba, ramine acelasi indiferent cite periferice ai avea. Perifericele sunt niste dispozitive electronice care impart cipul de siliciu cu unitatea centrala dar nu au legatura propriuzisa cu el. In trecut majoritatea erau circuite separate acum au fost integrate cu uC-ul. Daca cineva lucreaza ca proiectant pe partea asta nu va folosi in veci un 8051 "tuningat" pentru a lucra la frecvente mari. Va folosi un FPGA sau altceva potrivit. Cand eram student era un program VHDL care "clona" un 8051 intr-un Spartan. De asemenea, unu' dintre proiecte era un procesor pe 8 biti. Totul se reduce la instrumentu' potrivit pentru ce am nevoie. Daca am nevoie (de exemplu) de un procesor pentru semnale video pentru o camera, nu o sa folosesc in veci amin un 8051 pe steroizi, ci un FPGA, pe care pot implementa viteza de calcul a unor DSP-uri. Lucrul cu FPGA-uri pentru procesari de semnal este unul din cele mai imputite corvezi la care poate fi supus un proiectant din domeniul automatizarilor, pentru ca despre el vorbim aici, uC-urile lui i se adreseaza.Daca vrei sa faci prelucrari complicate de imagine pentru rachete de croaziera sau prelucrare de semnal ultrasonor pentru ghidaj torpile, atunci fara indoiala lucrezi cu FPGA-uri si DSP-uri iar uC-ul il folosesti doar pentru comanda servomecanismelor armei in cauza. Cind ai transformate Fourier bidimensionale pe imagini sau filtrari de semnal ultrasonor, nu te apuci sa utilizezi microcontrolere. Nu ai ce face, trebuie sa folosesti DSP-uri si/sau FPGA-uri. Efortul pentru invatarea unor asemenea sisteme de prelucrare a informatiei este insa ridicat. Pentru 99.9% din aplicatiile de automatizari, FPGA-urile nu se justifica iar DSP-urile pentru 90% - 95%. La semnale de frecventa joasa, sute de herti, care pot apare in aplicatiile de automatizari, un 8051 high speed de 100 MHz (a se vedea aplicatiile de la adresa de mai jos) te scoate din incurcatura fara a fi nevoie sa recurgi la DSP. Using Microcontrollers in Digital Signal Processing Applications Un Silab 8051 de 100 MHz este suficient de puternic pentru a calcula si afisa pe un LCD, cu precizie de sub jumatate de Hertz, turatia unui motor, doar prin analiza spectrului de vibratii emis de acesta. Link spre comentariu
one Postat Noiembrie 27, 2011 Partajează Postat Noiembrie 27, 2011 @simplex Da, ai dreptate, nu am avut rabdare sa caut si versiuni ieftine. 1.Teoria mea ar fi: Am trecut la AVR pentru ca la vremea respectiva imi aducea anumite avantaje (IDE gratuit, programare flash simpla, periferice integrate). Nu imi amintesc prea multe detalii legate de 8051. Oricum, pentru ceea ce faceam eu atunci 8051 imi placeau mai mult decat PIC-urile (set mai mare de instructiuni) in plus erau reprogramabile (cele de la Atmel), costau mai putin decat circuitele de la Microchip (AT89C2051 costa de 3 ori mai putin decat PIC16F84, pentru 89C52 nici nu indrazneam sa ma uit la Microchip dupa ceva echivalent). Probabil ca 8051 de azi sunt puternice, numai ca piata s-a schimbat. Sunt disponibile foarte multe tipuri si alegerea unuia sau altuia se face si pe alte criterii (pretul, cum am mai spus). Eu de exemplu sunt mai interesat de consum si pret decat de viteza. O sa le dau o sansa si o sa citesc despre ele, daca au ceva cu adevarat bun o sa revin pe forum sa completez. 2. De ce ar fi cineva constrans sa "poarte" un program de pe 8051 pe PIC sau altceva - cum a facut tipul despre care vorbesti? (Asta ar fi o intrebare-raspuns retorica la - de ce as trece eu acum la 8051). @picolo Nu am inteles nimic din comentariu tau. Oricum sper ca sunt ontopic asa ca o sa explic: 1. Am exagerat in exemplul meu tocmai ca sa scot in evidenta avantajul arhitecturii AVR fata de altele. Edit: nu citisem toate comentariile, se pare ca simplex a adus un exemplu bun. Ideea era ca, daca ai mai multi registri "acumulator", ai viteza mai mare. 2. In ceea ce priveste notiunea de variabila, cred ca am invatat-o in scoala generala si apoi am utilizat-o in facultate. Poti avea o variabila care sa fie un sir de caractere sau doar un bit. Citat Wikipedia Variable (computer science), a symbolic name associated with a value and whose associated value may be changedIn unele limbaje de programare se declara tipul variabilei "register" tocmai pentru a mari viteza. AVR are 32 registri iar 8051 are 8+1. Datele din registri sunt variabile (sau valorile variabilelor, dar este o crima daca simplific?). http://en.wikipedia.org/wiki/Register_allocation http://en.wikipedia.org/wiki/Processor_register Ce nu e in regula cu termenul folosit de mine? Ca am spus variabila in loc de valoarea variabilei? Sau ca am notat cu x ? Link spre comentariu
one Postat Noiembrie 27, 2011 Partajează Postat Noiembrie 27, 2011 Existenta a nu stiu cite procesoare si arhitecturi a inceput sa devina un lucru daunator, care dezorienteaza lumea. Da, numai ca programele sunt lungi si nu se mai programeaza in assembler decat anumite parti.Existenza mai multor producatori si arhitecturi impinge inainte performantele si inapoi preturile. Nimeni nu le va sti pe toate nici nu trebuie.La automatizari ai nevoie de prelucrare de semnal (8051 au convertoare analog digitale). Mereu apare necesitatea executarii unei prelucrari de semnal si asta cere viteza.Am demontat cateva PLC si in interiorul lor nu am gasit nici AVR, nici 8051.De cele mai multe ori erau ARM-uri de la TexasInstruments. Pana si seria Logo de la Siemens, care este mai mult un releu programabil decat un PLC, are un ARM inauntru.PLC-urile zilelor nostre ruleaza sisteme de operare....Avem la serviciu de exemplu "PLC" Beckhoff 1010 sau CompactRio National Instruments. Acesta din urma are si un FPGA pentru comunicatia cu modulele, integrat in "cutia" in care se fixeaza acestea. Link spre comentariu
simplex Postat Noiembrie 28, 2011 Autor Partajează Postat Noiembrie 28, 2011 De ce ar fi cineva constrans sa "poarte" un program de pe 8051 pe PIC sau altceva - cum a facut tipul despre care vorbesti?Ce zice omul acela: “Am portat un proiect destul de complex de pe un Silab C8051F121 de 8 biti si 100-MIPS pe un dsPIC33FJ128MC804 de 16 biti care efectua 40 MIPS. Proiectul avea o mulţime de filtrari digitale şi FFT-uri” Normal ca avind prelucrari de semnal aplicatia sa se preta mai bine la un DSP decit la uC-uri de 8 biti. El nu a transferat-o catre un PIC ordinar ci a facut-o sa ruleze pe un DSP PIC de 16 biti, deja un procesor din alta clasa. O simpla adunare cu operanzi de 16 biti si acumulator de 16 biti este teoretic de doua ori mai rapida ca una cu operanzi si acumulator de 8 biti. Cu alte cuvinte, poti scadea frecventa procesorului la jumatate si obtii aceeasi viteza de executie. Micsorind rata tactului lucrezi cu tranzistori de frecventa mai mica si, asa cum rezulta din preturile atasate, iesi de 3 ori mai ieftin. Daca aplicatia persoanei de care vorbesc era un produs de serie, nu foarte scump (50 - 100 $), evident ca scaderea cu peste 10 dolari a pretului aparatului final nu este de neglijat. Silab 8 biti C8051F121, 100 MHz --- 22.29 $ http://search.digikey.com/us/en/product ... -ND/819525 dsPIC 16 biti dsPIC33FJ128MC804, 40 MHz --- 7.42 $ http://search.digikey.com/us/en/product ... ND/1635637 Link spre comentariu
simplex Postat Noiembrie 28, 2011 Autor Partajează Postat Noiembrie 28, 2011 programele sunt lungi si nu se mai programeaza in assembler decat anumite parti. Existenza mai multor producatori si arhitecturi impinge inainte performantele si inapoi preturile. Nimeni nu le va sti pe toate nici nu trebuie. Daca se ajunge la nivelul unde programarea in assembler este inutila nefiind nevoie decit de limbajul C atunci procesorul in sine va fi transparent utilizatorului si in consecinta nu se va mai pune problema invatarii vreunui uControler ci doar a felului cum trebuiesc setate sau citite in C diversele periferice din jurul unei anumite unitati centrale de calcul oricare ar fi ea: ARM, AVR, PIC, 8051, etc.. In ceea ce priveste presupunerea ca Existenza mai multor producatori si arhitecturi impinge inainte performantele si inapoi preturile, personal am auzit-o in repetate rinduri insa pina acum nimeni nu a reusit sa demonstreze cit adevar contine de fapt. Link spre comentariu
simplex Postat Noiembrie 30, 2011 Autor Partajează Postat Noiembrie 30, 2011 O discutie interesanta de pe forumul SiLab: "Unele controlere Silab, ca C8051F38x, sunt cotate la 48 MIPS in timp ce altele, cum ar fi C8051F56x, la 50 MHz. Intrebare: De ce unele procesoare Silab au viteza măsurată în MIPS în timp ce altele în MHz? Raspuns dat de un moderator al forumului Silab "Cele doua notiuni au legatura SILabs "minte", prin "MIPS" intelegind cite NOP-uri se executa pe secunda. Da, un Silab de 50MHz la 1 tact / instructiune executa 50 milioane NOP-uri pe secundă, dar numai aproximativ 12 milioane instructiuni ADD. Oricum toate foile de catalog dau si viteza masurata in MHz. Erik Sursa: http://www.cygnal.org/ubb/Forum1/HTML/003570.html Asta ar insemna ca un ADD nu se executa pe Silab C8051Fxxx in 1, maxim 2 tacti, asa cum scrie in datasheet-uri ci in cel putin 4 perioade de ceas. Cu alte cuvinte aceste procesoare sunt cel putin de patru ori mai lente decit vor sa apara?! Chiar asa sa minta de rau producatorul in foaia de catalog?! Link spre comentariu
nr4 Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Asta ar insemna ca un ADD nu se executa pe Silab C8051Fxxx in 1, maxim 2 tacti, asa cum scrie in datasheet-uri ci in cel putin 4 perioade de ceas. Cu alte cuvinte aceste procesoare sunt cel putin de patru ori mai lente decit vor sa apara?!Cu alte cuvinte, cel mai usor si corect este sa inveti tu cele 3 arhitecturi, sa te apuci sa faci programe, iar peste 2,3,5 ani sa raspunzi la intrebari din propria ta experienta.Se pare ca nu intelegi situatia, dar cand ajungi sa pui intrebari de genul:"What is the difference between Silab MIPS and MHz microcontrollers?"este foarte curios cum de cineva chiar iroseste timp raspunzand. Link spre comentariu
simplex Postat Decembrie 1, 2011 Autor Partajează Postat Decembrie 1, 2011 Se pare ca nu intelegi situatia, dar cand ajungi sa pui intrebari de genul: "What is the difference between Silab MIPS and MHz microcontrollers?" este foarte curios cum de cineva chiar iroseste timp raspunzand. Eu cred ca cel care nu a inteles despre ce este vorba esti tu.- MIPS = marketing = un parametru care exagereaza adevarata viteza medie de executie a instructiunilor unui procesor (in cazul nostru Silab C8051Fxxx) in scopuri comerciale. - Nr. de MHz = adevaratul indicator al rapiditatii unui uController, cu conditia sa te uiti si pe tabelul de instructiuni pentru a vedea citi tacti sunt necesari la fiecare tip de instructiune. Tabel statistic: C8051F380/1/2/3/4/5/6/7 pina la 48 MIPS operatii. (a)Tacti (b)Numarul de instructiuni care tin (a) tacti a---b 1---26 (C8051F38x are 26 instr. de 1 tact) 2---50 (50 de 2 tacti) 2/4-5 3---10 3/5-6 (6 de 3 - 5 tacti) 4---5 5---2 4/6-2 6---2 (doua instr. de 6 tacti) 8---1 (o instructiune de 8 tacti) Oricum, vad ca moderatorul forumului Silab revine azi asupra exemplului sau legat de NOP-uri si ADD-uri recunoscind ca s-a grabit. In ceea ce priveste ADD-ul acesta se executa in unu sau doi tacti, asa cum scrie in tabelul de instructiuni al procesorului (cauta pe net fisierul c8051f38x_ds.pdf) si nu in patru cicli cum zisese initial moderatorul. (Sursa: http://www.cygnal.org/ubb/Forum1/HTML/003570.html ) Totusi adevarata viteza de executie a unui C8051F38x este mai putin de jumatate din cit sugereaza foaia de catalog. Considerind ca avem de-a face cu un Silab C8051F38x de 48 MHz si 48 MIPS si facind presupunerea (care poate sa nu fie adevarata 100%) dar totusi este de bun simt, ca frecventa cu care se executa cele 26 instructiuni de 1 tact este 26/109 (unde 109 este nr. total de instructiuni), rata la care se efectueaza cele 50 instructiuni de 2 tacti este 50/109, ... , frecventa de rulare a ultimului cod, cel de 8 tacti este de doar 1/109, atunci se ajunge la concluzia ca, in fapt, C8051F38x nu este un procesor de 48 MIPS la 48 MHz ci de doar 20.51 MIPS la 48 MHz. (vezi calculul), ceea ce inseamna o viteza reala redusa la 42.7% din cea sugerata in manual, lucru, eu zic acceptabil. Chiar asa micsorata la peste 50%, rapiditatea controlerului este multumitoare si nu cred ca AVR-ul sau PIC-ul se descurca mai bine. Modul in care a fost facut calculul: 48 MIPS*(26+50+5+10+6+5+2+2+2+1)/(26*1+50*2+5*3+10*3+6*4+5*4+2*5+2*5+2*6+1*8) = 20.51 MIPS unde a) 26+50+5+10+6+5+2+2+2+1 = nr. de tacti in care s-ar executa un program alcatuit din toate cele 109 instructiuni ale lui C8051F38x daca fiecare ar tine un ciclu masina. b) 26*1+50*2+5*3+10*3+6*4+5*4+2*5+2*5+2*6+1*8 = nr. de tacti in care se executa, de fapt, un cod alcatuit din toate cele 109 instructiuni ale lui C8051F38x. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum