NumLock Postat Iunie 26, 2009 Partajează Postat Iunie 26, 2009 Salut Vreau s? înv?? s? creez programe pentru microcontrolere PIC în limbaj de asamblare ?i voi posta aici de fiecare dat? când nu în?eleg sau nu reu?esc s? fac ceva. Microcontrolerele pentru care sunt f?cute lec?iile sunt PIC12F509 ?i PIC16F84A. Programul în care scriu codul este MPLAB IDE v8.20 iar cel în care fac simul?ri ISIS 6. Primele mele nel?muriri sunt în leg?tur? cu regi?trii TRISA ,PORTA , TRISB, PORTB (am pus întreb?rile în codul surs? din fi?ierul zip). http://i42.tinypic.com/2m29qbp.jpg Sper c? m? pute?i ajuta V? mul?umesc. Link spre comentariu
Vizitator yo9hnh Postat Iunie 27, 2009 Partajează Postat Iunie 27, 2009 MOVLW 0xFFMOVWF TRISA ; pinii portului A sunt declarati ca intrare....MOVLW 0x00MOVWF TRISB ; pinii portului B sunt declarati ca iesire....BTFSS PORTA,0 ; verifici starea pinului RA0 deoarece a fost declarat ca intrare....MOVLW 0xFFMOVWF PORTB ; pinii portului B sunt in 1 logic(5V)Ai inteles ? Link spre comentariu
NumLock Postat Iunie 27, 2009 Autor Partajează Postat Iunie 27, 2009 Deci în TRISA declar?m cum s? fie pinii portului A (de intrare sau de ie?ire) iar în PORTA se afl? starea pinilor la un moment dat ? Link spre comentariu
NumLock Postat August 4, 2009 Autor Partajează Postat August 4, 2009 Cine ma poate ajuta cu o simulare pentru un circuit cu pic16f84a , dar nu in PIC Simulator IDE sau ISIS?L. e. : S-a rezolvat Link spre comentariu
NumLock Postat August 8, 2009 Autor Partajează Postat August 8, 2009 1. A?a pot folosi un fototranzistor în loc de întrerup?tor ? 2. Este necesar debounce în acest caz? 3. Trebuiesc f?cute modific?ri softului dac? am înlocuit întrerup?torul cu un fototranzistor ? Link spre comentariu
caddyct Postat August 8, 2009 Partajează Postat August 8, 2009 SalutVreau s? înv?? s? creez programe pentru microcontrolere PIC în limbaj de asamblare ?i voi posta aici de fiecare dat? când nu în?eleg sau nu reu?esc s? fac ceva. Microcontrolerele pentru care sunt f?cute lec?iile sunt PIC12F509 ?i PIC16F84A. Programul în care scriu codul este MPLAB IDE v8.20 iar cel în care fac simul?ri ISIS 6. Primele mele nel?muriri sunt în leg?tur? cu regi?trii TRISA ,PORTA , TRISB, PORTB (am pus întreb?rile în codul surs? din fi?ierul zip). http://i42.tinypic.com/2m29qbp.jpgSper c? m? pute?i ajuta V? mul?umesc.Poti folosi link-ul de mai jos.E un tutorial foarte foarte util pt PIC ASM.Succeshttp://www.winpicprog.co.uk/pic_tutorial.htm Link spre comentariu
NumLock Postat August 8, 2009 Autor Partajează Postat August 8, 2009 Mul?umesc dar la m? ajutai mai mult dac? îmi r?spundeai ultimele 3 întreb?ri. Link spre comentariu
NumLock Postat August 9, 2009 Autor Partajează Postat August 9, 2009 C?utam ceva pe Wikipedia ?i am g?sit un articol despre "Resistor Ladder". Este posibil s? creez un semnal sinusoidal folosind o astfel de scar? ?i un PIC ? Dac? da, cum ? Cum a? putea s? stabilesc din soft frecven?a semnalului sinusoidal ? Link spre comentariu
cirip Postat August 10, 2009 Partajează Postat August 10, 2009 Este posibil s? creez un semnal sinusoidal folosind o astfel de scar? ?i un PIC ?Da Dac? da, cum ? Foarte simplu. Trimiti la intervale egale de timp urmatoarea secventa de numere:128, 217, 255, 217, 128, 38, 1, 38 la portul la care e legata reteaua R-2R, apoi repeti. Ca sa iasa un sinus frumos, poti sa faci si o filtrare trece jos. Fara filtrare iese in trepte. Cum a? putea s? stabilesc din soft frecven?a semnalului sinusoidal ?Prin modificarea intervalului dintre scrieri. Varianta de mai sus este f simpla, dar merge. Genereaza un sinus din 8 puncte. Dupa ce o sa faci montajul si o sa mearga, o sa-ti arat com se face cu o formula recursiva. Metoda de mai sus e cu tabel si e cam ciobaneasca. Cirip Link spre comentariu
NumLock Postat August 12, 2009 Autor Partajează Postat August 12, 2009 Varianta de mai sus este f simpla, dar merge. Genereaza un sinus din 8 puncte. Dupa ce o sa faci montajul si o sa mearga, o sa-ti arat com se face cu o formula recursiva. Metoda de mai sus e cu tabel si e cam ciobaneasca. Cirip Nu am realizat montajul practic ci doar virtual. Am folosit cele 8 valori dar nu eram prea mul?umit a?a c? am c?utat pe net ni?te formule de ob?inere a acelor valori. Dup? aceea am scris un mic program în C++ care îmi genereaz? un fi?ier text cu valorile pentru tabel (ca s? nu stau eu s? scriu de x ori 'retlw valoarea') ?i frecven?a cu care trebuie s? schimb datele din portul la care este legat? re?eaua R-2R. SineWave_Generator.asm *Frecven?a semnalului sinusoidal ob?inut: 10Hz *Num?rul de puncte: 100 Simularea (Frecven?a ceasului - 4MHz) Îmi spui acum cum fac asta recursiv (cu detalii) ? ...c? programul meu nu genereaz? ni?te valori prea bune (mai scap? ?i câte un .256) ?i nu merge dac? dau valori prea mari pentru frecven?? sau nr. de puncte. Link spre comentariu
cirip Postat August 13, 2009 Partajează Postat August 13, 2009 Am folosit cele 8 valori dar nu eram prea mul?umit [...]*Frecven?a semnalului sinusoidal ob?inut: 10Hz*Num?rul de puncte: 100Hehe... Cand nu ai constrangeri de timp real, sigur ca poti sa pui si 3 catralioane de puncte. Asta se cheama supraesantionare, dar cand incepi sa ai limitari date de circuitul real, va trebui sa gasesti un compromis. Si la frecvente mari, daca o sa poti face sinusul din 8 puncte o sa fii fericit. Asta inseamna deja supraesantionare 2X. Mai discutam. Daca puneai un filtru trece jos dupa varianta cu 8 puncte, ar fi iesit la fixeanu.Îmi spui acum cum fac asta recursiv (cu detalii) ?Ar fi fost politicos sa bagi si un "te rog" , dar hai sa zicem ...Generarea recursiva a sinusului se face prin calculul repetat al urmatoarei relatii:y[k]=A*y[k-1]+B*y[k-2]in care y sunt esantioanele, A=2*cos(omega*T), B=-1, T=1/fs este perioada de esantionare , iar omega=2*pi*f, f=frecventa pe care vrei sa o generezi.--Incepi prin a aloca 3 variabile ptr cele 3 esantioane ale lui y. y[k] este esantionul curent, y[k-1] este esantionul anterior iar y[k-2] este valoarea cu 2 esantioane in urma. --Initializezi y[k-2]=0, y[k-1]=sin(omega*T] si calculezi y[k]. Cand ii vine sorocul, il dai afara pe port.--Dupa ce l-ai dat afara pe y[k], scrii y[k-1] peste y[k-2] (y[k-2] se pierde, dar nu mai ai nevoie de el.), y[k] peste y[k-1] si il recalculezi pe y[k], dar nu il scoti afara decat atunci cand ii vine randul, adica la exact T dupa ce ai scos afara esantionul anterior.--repeti procedeul pana la adanci batranetiS-ar putea sa constati ca nu ai timp sa faci toate calculele astea si sa generezi 100 de esantioane la frecvente mai mari :)Locatiile de memorie in care pastrezi esantioanele y formeaza un fel de memorie jgheab sau buffer alunecator sau rotativ. Valoarea cea mai veche se pierde, iar locatia y[k] este scrisa cu noul esantion. Calculul se poate face prin deplasarea valorilor dintr-o locatie in alta, dar mult mai eficient se face in procesoarele DSP cu ajutorul aritmeticii modulo aplicata pointerilor. In loc sa plimbi valorile, ai un pointer care se incrementeaza si care iti schimba locatia esantionului curent din bufferul rotativ. Toate calculele se fac relativ la locatia indicata de pointerul ala smecher. Cu picul e mai greu de facut asa ceva, dar nu e imposibil.Iti sugerez sa incerci algoritmul in excel, ca sa te familiarizezi intai cu mecanismul.Spor la treaba!Cirip Link spre comentariu
ratza Postat August 13, 2009 Partajează Postat August 13, 2009 Cel mai bine e s? faci sinusul cu dou? look up table. Una în care pui valorile e?antioanelor ?i una în care pui timpii pentru anumite frecven?e. E mult mai rapid a?a, dar consumi mai mult flash. Link spre comentariu
cirip Postat August 13, 2009 Partajează Postat August 13, 2009 Cel mai bine e s? faci sinusul cu dou? look up table. Una în care pui valorile e?antioanelor ?i una în care pui timpii pentru anumite frecven?e. E mult mai rapid a?a, dar consumi mai mult flash.Salut ratza,Desi ai dreptate in legatura cu rapiditatea, apar alte probleme. Schimband timpii, schimbi frecventa de esantionare, ceea ce face dificila sarcina filtrului trece jos de la iesire (asa numitul filtru de reconstructie). Un compromis intre varianta cu tabel si cea recursiva este interpolarea, dar si aia are alte probleme. Nimic nu e gratis.Cirip 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