Sari la conținut
ELFORUM - Forumul electronistilor

Cum se citesc doua ADC-uri?


Vizitator fod

Postări Recomandate

  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • vcdec

    1

  • 10vid

    1

Top autori în acest subiect

Vizitator fod

Vreau sa fac o placa de achizitie de date(temperatura si umitate) care sa transmita datele wireless catre un calculator, iar pe calculator am facut un soft de monitorizare cu care pot genera rapoarte pe zile si grafice. Pana acum am facut achizitia, trasmisia si monitorizarea temperaturii si vreau sa fac acelasi lucru si pentru umiditate. Am folosit PIC16F877.Nu stiu cum sa fac sa fac adc si sa transmit serial si umiditatea.

Link spre comentariu

Exista un singur modul ADC la care se pot conecta pana la 8 intrari analogice (de la pini). Dar nu deodata, ci cate una odata. Astfel, va trebui sa le conectezi alternativ, cand una, cand cealalta.Sa zicem ca intrarile sunt AN0 (RA0) si AN1 (RA1):Intai se configureaza modul analogic pe acesti pini (bitii PCFG3:0 ---> 0100 in registrul ADCON1) vezi tabel la pag.112.Apoi se selecteaza canalul dorit a fi conectat la ADC (alternand valorile bitilor CHS2:0 ---> 000 pentru AN0 sau 001 pentru AN1) pag.111.Dupa schimbarea canalului se va astepta cel putin 40us pana la pornirea unei noi conversii, pentru ca intrarea la ADC sa se stabilizeze.

Link spre comentariu
Vizitator fod

Daca scriu in fc main urmatorul cod, e corect?In init_ADC_T() am facut setarile pt citirea portului AN0 unde e conectat senzorul de temperatura, iar in init_ADC_U() am facut setarile pt ADC pt senzorul de umiditate conectat pe AN1. init_ADC_T(); TXREG = 'T'; delayMs(10); ADCON0 |= 0x04; //Start ADC while (conversie == 0); // wait for interrupt conversie = 0; scrieNr (ADCValue); delayMs(5000); init_ADC_U(); TXREG = 'U'; delayMs(10); ADCON0 |= 0x04; //Start ADC while (conversie == 0); // wait for interrupt conversie = 0; scrieNr (ADCValue); delayMs(5000); Averi alte sfaturi?

Link spre comentariu
Vizitator fod

Cu codul de mai sus nu imi merge simularea in proteus...Trimite corect caracterul T urmat de valoarea ADC-ului de te portul AN0 iar apoi trimite carecaterul U dar ADC-ul il face tot pt valoarea pe care o citeste de pe portul AN0...deci practic nu citeste portul AN1 a doua oara.Eu cred ca am configurat bine ADC-urile dar o sa atasez si codul in care le-am configurat poate ma ajuta cineva sa gasesc greseala: init_serial(){ TRISC |= 0X80; TRISC &= 0XBF; SPBRG = 25; TXSTA = 0x24; RCSTA = 0X90; }init_ADC_T(){ /* ADC configuration */ ADCON0 = 0x0; ADCON1 = 0x81; ADCON0 |= 1; ADIF = 0; ADIE = 1;}init_ADC_U(){ /* ADC configuration */ ADCON0 = 0b00000100; ADCON1 = 0x80; ADCON0 |= 1; ADIF = 0; ADIE = 1;}Am folosit PIC16F877.

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări