Vizitator Iwly Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 Cer ajutorul acelora dintre voi mai experimentati in lucrul cu microcontrolerele. Cu un PIC16F877A vreau sa folosesc ADC intern pentru a citi temperatura de la un senzor de temperatura Dallas; temperatura s-o afisez pe un LCD cu doua randuri conectat la unul dintre porturi; de asemeni, vreau sa interfatez microcontrolerul cu o tastatura (pseudo)numerica 4randurix4coloane care sa fie conectate la un port. As vrea sa stiu daca este FEZABIL . Este proiectul meu de licenta, va multumesc! Link spre comentariu
costi002 Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 pentru a conecta un senzor DS nu este nevoie de ADC. el trimite datele digital.spor la proiect. Link spre comentariu
vcdec Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 Este realizabil, depinde insa de nivelul tau de cunostinte... daca ai intrebari concrete colegii de pe forum iti vor acorda ajutor, trebuie insa sa arati si tu ca te preocupi, te documentezi si nu vrei un proiect de-a gata. Ce programator ai?Ce soft folosesti pt codul uC? Link spre comentariu
Vizitator Iwly Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 Este realizabil, depinde insa de nivelul tau de cunostinte... daca ai intrebari concrete colegii de pe forum iti vor acorda ajutor, trebuie insa sa arati si tu ca te preocupi, te documentezi si nu vrei un proiect de-a gata. Ce programator ai? Ce soft folosesti pt codul uC? Deocamdata, urmaresc sa-mi iasa simularile in Proteus si sa mearga programul OK. Odata acestea rezolvate, atunci ma va preocupa montajul practic(am tot ce trebuie in laboratoarele facultatii). Despre nivelul meu de cunostinte... sa zicem ca-s unul care invata repede si care n-a lipsit de la cursuri, doar ca asa ceva nu s-a facut la ore; acolo- doar PIC16F84, niciodata vreun uC varf de gama cu ADC, CCP etc.. Pentru programare folosesc C (compilator MikroC si Hi-Tech) si assembler. Precizez ca singurul meu scop este acela de A INVATA ! stiu in schimb ca pentru cei cu experienta este o aplicatie destul de frecventa si voi aprecia mult ajutorul si indicatiile voastre multumesc Link spre comentariu
nooob64 Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 Daca esti incepator si vrei sa realizezi ceva rapid eu zic sa nu te aventurezi la Hi-Tech C pentru ca nu iti ofera aceeasi usurinta de lucru ca si mikroc. Pt. a citii un senzor de temperatura gen DS18x20 mikroc-ul are exemple insa pentru un singur senzor pe bus , iar pentru a citii mai multi senzori exista un procedeu special pentru cautarea fiecarui senzor si apoi interogarea lor unul cite unul http://www.maxim-ic.com/app-notes/index.mvp/id/187 , am testat acest cod si functioneaza cu mici modificari la delay-uri ... Link spre comentariu
picolo Postat Ianuarie 13, 2012 Partajează Postat Ianuarie 13, 2012 Cer ajutorul acelora dintre voi mai experimentati in lucrul cu microcontrolerele. Cu un PIC16F877A vreau sa folosesc ADC intern pentru a citi temperatura de la un senzor de temperatura Dallas; temperatura s-o afisez pe un LCD cu doua randuri conectat la unul dintre porturi; de asemeni, vreau sa interfatez microcontrolerul cu o tastatura (pseudo)numerica 4randurix4coloane care sa fie conectate la un port. As vrea sa stiu daca este FEZABIL . Este proiectul meu de licenta, va multumesc!este FEZABIL. merge si ca teza pentru doctorat.esti amabil sa spui si la ce spirulache studiezi si care-i idiotu care va trimite pe forumuri pentru licenta? Link spre comentariu
Vizitator Iwly Postat Ianuarie 14, 2012 Partajează Postat Ianuarie 14, 2012 este FEZABIL. merge si ca teza pentru doctorat.esti amabil sa spui si la ce spirulache studiezi si care-i idiotu care va trimite pe forumuri pentru licenta?Nu e vina profului, nici a institutiei. Eu sunt singurul responsabil pentru ca nu mi-am dat licenta la timp, dar vreau sa indrept asta. Am hotarat ca voi folosi senzorul de temp cu iesire analogica LM35 de la TI/ NS conectat la ADC PIC16F877 si LCD-ul si tastatura le conectez la porturile libere. Am aflat ca este realizabil, ma apuc de treaba si voi veni doar cu intrebari concrete. va multumesc pentru indicatii Link spre comentariu
Liviu M Postat Ianuarie 14, 2012 Partajează Postat Ianuarie 14, 2012 Ignora-l pe picolo, inca n-am vazut un post de-al lui cu ceva cau adevarat util prin el. Numai aere si rautati gratuite. Link spre comentariu
puiu Postat Ianuarie 15, 2012 Partajează Postat Ianuarie 15, 2012 Este realizabil. Eu lucrez doar in ASM deci aici te pot ajuta, dar in limbaje de nivel inalt te pot ajuta colegii de pe forum. Link spre comentariu
costi002 Postat Ianuarie 16, 2012 Partajează Postat Ianuarie 16, 2012 Dupa cum ti-am promis, eu cam asa as vedea schema.Dat fiind un proiect, as adauga si transmisie seriala, de ex sa vezi in heperteminal ce este pe LCD sau un mic program in Labview, sigur ai facut asa ceva in facultate PROJECT.pdf Link spre comentariu
aionescu Postat Ianuarie 17, 2012 Partajează Postat Ianuarie 17, 2012 Dupa cum ti-am promis, eu cam asa as vedea schema..........Dar cu modificarea ca LCD-ul poate comunica pe 4 biti, deci se face economie de 4 pini. Link spre comentariu
costi002 Postat Ianuarie 17, 2012 Partajează Postat Ianuarie 17, 2012 oricum ramane cu pini in plus. atat ar trebui sa faca proiectul si cu pic-ul respectiv. depinde numai de beneficiar. Link spre comentariu
Vizitator Iwly Postat Octombrie 21, 2012 Partajează Postat Octombrie 21, 2012 Nu m-am descurcat cu LCD-ul, am facut pana la urma pe afisaj cu LED-uri. La tastatura am renuntat. Pentru incepatorii interesati, mai jos este codul. E un pic rudimentar, desigur, poate fi optimizat, dar macar functioneaza. Am atasat de asemeni si schema in Proteus Hidden text: ONAvailable only to registered users. Hidden text: OFF http://www1.picturepush.com/photo/a/11215924/220/11215924.bmp #include <pic.h> // introducem biblioteca pic #include <htc.h> // introducem libraria compiler #include <pic16F877A.h> // introducem biblioteca integratului int rezultat; //int rezultat; int i;int x;// unsigned int digit[10]={0b11000000,0b11111001,0b10100100, 0b10110000, 0b10011001,0b10010010, 0b10000010, 0b11111000, 0b10000000,0b10010000}; C. C.unsigned int digit[10]={0b00111111,0b00000110,0b01011011, 0b01001111, 0b01100110,0b01101101, 0b01111101, 0b00000111, 0b01111111,0b01101111}; //valoare digit//unsigned int caracter[4]={0x01, 0x02, 0x04, 0x08};unsigned int caracter[4]={0xFE, 0xFD, 0xFB, 0xF7}; //selectie canalvoid delay(void) //functie intarziere{ for(i=1;i<500;i++); //rutina intarziere 500 de cicluri masina}void afisare(void) //functie afisare { PORTC=caracter[0]; //selectie canal sute x=rezultat/100; //determinare sute PORTB=digit[x]; //afisare sute delay(); //intarziere PORTC=caracter[1]; //selectie canal zeci x=(rezultat/10)%10; // determinare zeci PORTB=digit[x]; //afisare zeci delay(); //intarziere PORTC=caracter[2]; //selectie canal unitati x=rezultat%10; //calcul unitati PORTB=digit[x]; //afisare unitati delay(); //intarziere PORTC=caracter[3]; //selectare canal 4 PORTB=0b00111001; //afisare simbol celsius delay(); //intarziere }//init porturi void init(void) { TRISA=0XFF; //porta intrari TRISB=0X00; //portb iesiri PORTB=0x00; TRISD=0x00; //portd iesiri TRISC=0X00; //porta iesiri }//INIT ADC void ADC_init(void) { ADCON0=0b10000000; //ADCON0=0b10000101; ADCON1=0b00001110; }void main(void) { init(); ADC_init(); while(1) { ADCON0bits.ADON=1; delay(); delay(); delay(); ADCON0bits.GO=1; delay(); delay(); delay(); while(ADCON0bits.GO==1); delay(); delay(); delay(); rezultat=ADRESH<<1; //rezultat=ADRESH*2; delay(); delay(); delay(); afisare(); ADCON0bits.ADON=0; delay(); delay(); delay(); ADCON0bits.GO=0; delay(); delay(); delay(); } } Link spre comentariu
lama Postat Octombrie 21, 2012 Partajează Postat Octombrie 21, 2012 Felicitari ca iti merge.De curiozitate ce versiune de Hitech C ai, caci vad o multime de #include in plus..... Link spre comentariu
Liviu M Postat Octombrie 21, 2012 Partajează Postat Octombrie 21, 2012 Felicitari, e bine ca merge, da' as avea cateva observatii/intrebari. 1. Nu e nevoie sa incluzi toate 3 fisierele pe care le incluzi tu, e suficient sa incluzi htc.h si sa selectezi picul corect in mplab (vad ca si lama are observatia asta). 2. Toate variabilele tale sunt int, adica pe 16 biti, ceea ce inseamna risipa de memorie. In cazul tau nu e o problema, programul e scurt si incape, da' cand o sa vrei sa scrii ceva mai complex o sa constati ca nu mai incape. Singura variabila care are rost sa fie int e rezultat, desi si pe asta tot pe 8 biti o folosesti. 3. Eu as fi pus cuvantul de configurare (directiva __CONFIG()) in cod. 4. Imi e neclar ce parte din valoarea achizitionata folosesti (ma rog, imi e clar, da' nu inteleg de ce). Din cate vad eu ( rezultat=ADRESH<<1; //rezultat=ADRESH*2; ), folosesti numai 7 biti din cei 10. 5. Ce face functia delay() mai exact? Din cate stiu eu, functiile de intarziere din picc arata putin altfel (in functie de versiune sunt DelayMs()/DelayUs() sau __delay_ms()/__delay_us()) si au nevoie de parametri. Nu de alta, da' daca citesti la pagina 129 din Data-Sheet, o sa vezi ca intre ADON = 1 si GO iti trebuie o pauza minima "de achizitie". Esti sigur ca delay() iti asigura pauza asta? Schema: 1. N-am facut pana acum nimic cu afisoare pe led-uri, asa ca sunt sanse sa zic prostii, da' R2..R11 nu trebuie puse in serie cu ledurile afisorului? 2. Bazele tranzistoarilor sunt conectate direct la pinii PIC-ului; cred ca-ti trebuie rezistente totusi. 3. D3 e inutila. De obicei se foloseste cand ai si conector pentru programare pe placa si pinul MCLR/Vpp primeste 13 V de la programator in timpul programarii. In cazul asta, dioda se inseriaza intre VDD si pinul MCLR. 4. Nici D1, D2 nu-ti trebuie (cred eu), iar R13 si C5 s-ar putea chiar sa fie "daunatoare" timpului de achizitie. 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