Jump to content
ELFORUM - Forumul electronistilor

Intrebare uC 16 biti


Romica_t

Recommended Posts

Exista uC cu porturi de exemplu RB0, RB1...RB15 , care printr-o singura comanda pun la iesire un numar pe 16 biti? M-am uitat rapid prin cateva pdf-uri de PIC24 si dsPIC dar vad tot porturi "incomplete", cum ar fi RC0-9, si nici unul pana la 15. Aceste uC sunt pe 16 biti.Imi cer scuze daca e o intrebare stupida si nu m-am documentat mai bine ininte de a posta.

Link to comment
  • Replies 18
  • Created
  • Last Reply

Top Posters In This Topic

  • Romica_t

    7

  • svm86

    4

  • Liviu M

    2

  • 10vid

    1

Chiar daca pui 16 biti odata, pinii nu isi vor actualiza starea instant. Ce vreau eu sa spun: poti pune o valoare intr-un port, aceeasi in alt port si pinii vor parea ca sunt actualizati in acelasi timp. Asta in cazul in care PIC-ul merge la o frecventa mare de ordinul MHz.Cauta slew rate.Ceva care sa te ajute: IO extender 16 bit (pe SPI/I2C).

Link to comment

Limitarea e impusa doar de numarul de pini pe capsula. De ex. uC de 16 biti cu 16 sau 18 pini au doar franturi de porturi, desi intern toate porturile sunt de 16 biti, la iesire sunt doar cativa biti legati, iar restul ignorati. La uC cu 28 pini, PORTB are toate cele 16 iesiri, si niste franturi din PORTA si PORTC in completare pana la cei 23 pini de I/O.La pastilele cu mai multi pini (64, 100 etc.) probabil toate porurile au iesiri complete.

Link to comment

Nu cunosc controllere la care sa poti "incarca" in acelasi moment valori pentru 2 porturi de 8 biti dar, daca ai nevoie sa activezi in acelasi moment 16 biti, atunci poti folosi circuite latch, care sunt circuite digitale in care incarci 8 biti si apoi exista un pin in care activezi transferul din registrul de intrare in bufferele de iesire. Comandand simultan pinii latch de la 2 circuite cu 1 iesire de la microcontroller, poti obtine schimbarea iesirilor in acelasi timp. Un exemplu ar fi 74HC373 sau 573...Alta varianta ar fi folosirea unor registre de deplasare seriale, astfel se economisesc pini de la microcontroller. Dupa ce se incarca registrele, se activeaza acest "latch" si valorile sunt transferate "simultan" la iesire.PS. Am aruncat o privire rapida la dsPIC33FJ256GP710 si la portul B si D am gasit toti pinii. Nu am verificat si la alte porturi.

Link to comment

Sunt limitat atat de pret cat si de capsula. Am aflat si de circuitele latch dar ma prea complic. Ma duc pana la urma cu doua porturi, unul de 10 pini si altul de 6. Nu o sa scada semnificativ viteza.Inca o intrebare, ca sa nu deschid alt topic, la seria PIC18, la unele se specifica 48Mhz frecventa maxima. Asta inseamna ca le pot atasa un cristal de 48MHz ? Pana acum am lucrat cu 20Mhz dar am nevoie de putin mai multa viteza.

Link to comment

Din cate stiu eu nu, extern merg pana pe la 25 MHz. Mai mult se obtine printr-un multiplicator intern (PLL) de maxim 4 ori, parca.Exista niste formule de calcul/configuratii prin data sheeturi (18F4550 merge sigur la 48MHz ca-i trebuie pentru partea de USB si si 18F452 are ceva multiplicare).

Link to comment

ar trebui specificat picul 18Fde exemplu, la 18f2550-4550, se poate folosi un cristal de 20Mhz, iar cu postscalerul setat corespunzator uC-ul va lucra la 48MHz (avand si un prescaler corespunzator, pentru a putea folosi USB).18f452, merge la 40MHz cu un cristal de 10MHz, avand activat PLL.lista poate continua. cel mai bine ar fi sa alegi picul dupa functionalitate si mai apoi dupa frecventa de lucru.cu doua latch-uri treaba-i destul de simplu de implementat...spor!

Link to comment

Daca registri picului sunt pe 8 biti nu are cum sa scrie 16bitideci cauta picuri cu arhitectura pe 16bit, exemplu PIC24FJ16GA002sau mai super cele pe 32bit

Link to comment

Nu e nevoie de circuite latch deoarece eu incarc porturile pe rand si apoi trimit un semnal "strobe" pentru citire. Oferta de picuri care o consult e cea de la tme, probabil ca pe site la microchip as gasi orice dar na...In legatura cu frecventa de lucru la pic18, nu mai e nevoie s-o maresc deoarece maximul admis de displayul ce vreau sa-l controlez e 6Mhz, deci cei 5Mhz la care lucreaza acum sunt aproape de limita. Va multumesc.

Link to comment

In legatura cu frecventa de lucru la pic18, nu mai e nevoie s-o maresc deoarece maximul admis de displayul ce vreau sa-l controlez e 6Mhz, deci cei 5Mhz la care lucreaza acum sunt aproape de limita. Va multumesc.

Banuiesc ca stii: ai nevoie de pana la 4 cicli sa executi o instructiune. Presupun ca ai oscilator de 20MHz - instructiunile se vor executa la 5MHz (unele mai rapid daca se executa in 1,2 sau 3 cicli). Daca ai rula in mod continu doar o singura instructiune de xor (sa inversezi semnalul - de exemplu) -vei injumatati frecventa de 20MHz si ajungi la 10MHz, dar banuiesc ca nu sa faci doar asta.Cresterea frecventei de oscilator te ajuta sa executi mai multe instructiuni pana ajungi sa dai enable la strobe.Si ca test iti recomand sa faci toggle la viteza maxima - si urmareste semnalul cu osciloscopul. -pentru a vedea daca pinul se misca suficient de repede
Link to comment

@svm86: Nu stiu cum e cu la PIC24 & PIC32 ca n-am folosit inca niciunul, da' eu stiu ca PIC12, PIC16 & PIC18 executa TOATE instructiunile in (minim) 4 cicluri de ceas (extern). Practic ceasul intern e ceasul extern / 4.

Citat din documentatia de la 18F452 (similare se gasesc in toate data-sheeturile pe care le-am vazut)

4.6

Instruction Flow/Pipelining

A fetch cycle begins with the program counter (PC)

incrementing in Q1.

An “Instruction Cycle” consists of four Q cycles (Q1,

 

Daca ai alte informatii, mi-ar prinde bine un "refresh", asa ca orice indrumari sunt binevenite.
Link to comment

@svm86: Nu stiu cum e cu la PIC24 & PIC32 ca n-am folosit inca niciunul, da' eu stiu ca PIC12, PIC16 & PIC18 executa TOATE instructiunile in (minim) 4 cicluri de ceas (extern). Practic ceasul intern e ceasul extern / 4.

Citat din documentatia de la 18F452 (similare se gasesc in toate data-sheeturile pe care le-am vazut)

 

4.6

Instruction Flow/Pipelining

A fetch cycle begins with the program counter (PC)

incrementing in Q1.

An “Instruction Cycle” consists of four Q cycles (Q1,

 

Daca ai alte informatii, mi-ar prinde bine un "refresh", asa ca orice indrumari sunt binevenite.
Exprimarea nu a fost tocmai cea mai corecta.

 

Ai dreptate: Ceas intern este Fosc/4. 20MHz oscilator extern => Ceas intern de 5MHz.

 

 

Din datasheet 18f67j60

PIC18 Instruction CycleAn [b]“Instruction Cycle” consists of four Q cycles, Q1through Q4[/b]. The instruction fetch and execute arepipelined in such a manner that a fetch takes oneinstruction cycle, while the decode and execute takeanother instruction cycle. However, due to the pipelining,each instruction effectively executes in one cycle. If aninstruction causes the program counter to change(e.g., GOTO), then[b] two cycles[/b] are required to completethe instruction 
Link to comment

Da, stiam ca instructiunile se executa la 1/4 din frecventa cristalului extern, deci daca am un cristal de 20Mhz, uC va lucra la 5Mhz propriu zis. Curiozitatea mea era sa pun un cristal de 40 sau 48Mhz fara sa schimb nimic in software si astfel sa obtin o frecventa de executie de 10 sau 12Mhz. Setarile oscilatorului nu le-am prea invatat bine si de aceea am recurs la o solutie mai rapida, intreband aici.Cum ar fi cel mai bine, sa pun un cristal de 40Mhz sau sa pastrez cel de 20Mhz si sa incerc din PLL sa ajung la o frecventa de executie de 10Mhz propriu zis?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines