Sari la conținut
ELFORUM - Forumul electronistilor

proiect nokia 3310 +LM35


wolfei

Postări Recomandate

Din pacate n-am nici o idee, n-am folosit de niciunul pana acum. De altfel nici LM35 n-am folosit; eu m-am jucat cu un ds1631, de la Dallas, care stie tot -55..100 si ceva de grade, da' are interfata digitala (i2c) si n-am avut problemele tale (domeniul negativ oricum nu m-a interesat, ca inca n-am vazut acvariul care sa functioneze cu gheata :da ).De ajutat te pot ajuta ca pana acum (nu-s sigur ca am reusit sa fiu si util; cel putin ieri am fost cam ametit), in sensul ca tu spui ce nu merge si eu incerc sa spun cum cred eu c-ar trebui facut. Da' grosul - gasit senzorii si venit cu ideea si munca de implementare iti apartin.

Link spre comentariu
  • Răspunsuri 140
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    67

  • wolfei

    54

  • A_L_E_X

    6

  • nana

    3

Top autori în acest subiect

Felicitari, cel putin partea de afisare functioneaza binisor. :da

N-am schimbat decat oscilatorul folosit - din RC/Intern in HS.

 

Posted Image

Link spre comentariu
:101 Perfect!...multumesc frumos pentru verificare...nu am mai avut timp sa fac nimic...pt ca am inceput examenele...dar sapt asta...dupa marti...sper sa fac si senzorul de presiune...m-am hotarat la MPX 4115...sper sa nu fie prea greu...:P
Link spre comentariu

Am simulat senzorul de temperatura cu un semireglabil si, folosind offsetul mentionat de atatea ori anterior (o valoare pusa din burta, clar), obtin si temperaturi negative. :daLE Era sa uit: mie imi merge perfect alimentat totul (inclusiv picul) la 3.3V. Si acum, ca tot a venit vorba, mi-am dat seama ca n-am folosit valoarea corecta pentru calculele de la conversia analog/digital (am folosit in continuare 5V in loc de 3.3V).

Link spre comentariu

I'm back!Am mai lucrat la senzorul de presiune MPX4115...dar nu prea iese...imi afiseaza o singura valoare oricat as modifica in proteus senzorul de presiune.Cred ca am gresit ceva pe la citirea din RA1.Va rog sa va uitati un pic pe codul meu.Va multumesc!

Link spre comentariu

Eu unul nu vad nimic ciudat la partea de citire a ADC-ului. Nu stiu exact cat de bine faci conversiile ulterioare in pascali si mmHg, ca n-am stat sa verific chiar totul.Daca as fi in locul tau as merge in pasi ceva mai mici. Pentru inceput as citi ADC2 si as afia direct valorile "raw", citite din adc, fara prelucrari. Asa o sa poti vedea daca achizitia merge bine sau daca sunt sanse ca formulele tale de prelucrare a datelor sunt prea "generoase".Ce-i drept, nu cunosc proteus deloc si nu stiu daca merge simulat ce zic eu, da' ar trebui sa mearga. Eu asa as face cu circuitul real; de altfel iti recomand sa-l faci cat mai repede, ca nu tot ce simulezi merge exact la fel si in lumea reala. De exemplu, programul tau nu implementeaza semnul pentru °.

Link spre comentariu

Am incercat sa afisez valoarea "raw" a datelor...nici aia nu se misca...Cred ca are legatura cu mesajul pe care mi-l afiseaza proteus-ul:ADC conversion started before "wait" time has expired following previous conversion or channel change.Oare nu las timp sa citeasca o valoare si trece la cititul urmatoarei valori?

Link spre comentariu

Mie rutina aia mi se pare OK. Dupa aprerea mea, atata timp cat asteapta ca ADGO sa se faca 0 ar trebui sa-i fie suficient.Pentru mai multa siguranta poti sa pui un Delay pe acolo si sa vezi daca se schimba ceva. Desi acum vad ca ai 2.5 secunde. Ar trebui sa fie suficient.Incearca sa citesti numai senzorul de presiune. Asa merge?Revin la ideea mea: poate n-ar fi rau sa faci circuitul practic. Simulatoarele se pare ca au si ele limitarile lor.

Link spre comentariu

M-am uitat putin mai atent prin functia de citit presiunea, m-am uitat si in foaia de catalg a lui mpx4115 si nu ma prind de loc cum faci tu conversiile lsb-presiune.

Din foaia de catalog, presiunea poate fi masurata intre 15 si 115 kPa. La o iesire de 46 mV/kPa inseamna tensiuni intre 690 mV si 5290 mV (n-am idee de ce e mai mare decat alimentarea, asa da la calcule).

ADC-ul nu taie singur o felie din semnalul asta si nici n-o intinde pe toata gama lui de masurare. El masoara tensiunile de la intrarea sa atata timp cat sunt intre referinte.

Asta inseamna presiuni intre 0 kPa si 5V / 46 mV = 108,69 (~109) kPa. => la "cap de scala", cei 1024 de lsb masoara 109 kPa => 109/1023 = 0,1066 kPa/LSB. Daca vrem in mmHg inmultim cu 760 / 101.325 si => 0,795 mmHg/LSB (760 si 101,325 sunt luate din comentariul taula program, nu le-am verificat).

Cu coeficientul asta trebuie sa calculezi tu mai departe presiunea masurata ca sa o afisezi:

 

pAfisata = adc(1) [LSB] * coef_kPa[kPa/LSB] pentru presiune in kPa sau

pAfisata = adc(1) [LSB] * coef_mmHg[mmHg/LSB] pentru presiune in mmHg

 

Sunt sanse ca daca tu alimentezi senzorul la 5V nu la 5.1V ca in foaia de catalog valorile numerice sa fie putin altfel (si gama de iesire a senzorului sa se potriveasca mai bine cu gama de intrare a ADC-ului), da' ideea ramane.

 

PS Sper ca n-am aberat prea tare, ca mi se mai intampla.

PPS A propos, ce inseamna hPa? E cumva greseala de scriere sau am inteles eu ceva complet aiurea? Ca daca am inteles eu complet aiurea, sunt sanse sa ajungi la acelasi rezultat cu mine, dar venind pe alt drum.

 

LE A, tot uit sa-ti zic: DelayMs are ca parametru un unsigned char. Asta inseamna 0..255. Nu stiu ce se intampla cand tu apelezi functia cu DelayMs(2500);

 

LLE Am descoperit misterul! Simulatorul tau are dreptate. Am mai citit o data documentatia (dupa ce am testat practic circuitul) si am vazut ca pasii sunt:

 

These steps should be followed for doing an A/D

Conversion:

1. Configure the A/D module:

• Configure analog pins/voltage reference and

digital I/O (ADCON1)

• Select A/D input channel (ADCON0)

• Select A/D conversion clock (ADCON0)

• Turn on A/D module (ADCON0)

2. Configure A/D interrupt (if desired):

• Clear ADIF bit

• Set ADIE bit

• Set PEIE bit

• Set GIE bit

3. Wait the required acquisition time.

4. Start conversion:

• Set GO/DONE bit (ADCON0)

1. Faci

2. Nu te intereseaza

3 Nu faci si e necesar

4. Faci dar prea devreme.

 

Am modificat read_adc() ca mai jos si merge; intarzierea am pus-o sa vad daca merge, daca o vrei exacta poti s-o calculezi cu formula din data sheet, pagina 114.

 

unsigned int read_adc(unsigned char channel){	channel&=0x07;			// truncate channel to 3 bits	ADCON0&=0xC5;			// clear current channel select	ADCON0|=(channel<<3);  	// apply the new channel select        DelayMs(10);                            // Wait the required acquisition time.	ADGO=1;					// initiate conversion on the selected channel	while(ADGO)continue;	return(((ADRESH&0x03)<<8)+ADRESL);	// return the 10-bit result}
Link spre comentariu

Spunemi si mie cum ai reglat offsetul la LM pentru a afisa temperaturile negative ca incerc si eu sa fac in proteus si cu un atmega16 pe partea de tens poz merge perfect insa pe tens neg nu.

Link spre comentariu

Din cate stiu eu, wolfei n-a reusit sa simuleze temperaturile negative (in Proteus).

Eu m-am jucat cu un circuit practic la care am "emulat" LM35 cu un semireglabil; folosind in program o valoare oarecare pe post de offset, am "simulat" tensiuni negative.

Din pacate testul meu e neconcludent, pentru ca nu stiu cat de bine functioneaza schema aia cu LM35 alimentat prin diode, desi dupa parerea mea ar trebui sa nu fie probleme.

 

LE Da' partea teoretica am discutat-o pe paginile anterioare.

Link spre comentariu

Un simulator e atat de bun pe cat de bun e modelul pe care-l foloseste.Eu inclin sa cred ca schema din data-sheetul lui LM35 e buna si ca modelul din Proteus nu simuleaza corect cazul respectiv. Sau poate-l deranjeaza diodele cu care se realizeaza deplasarea referintei lui? Incercati ca in locul diodelor din GND-ul LM-ului sa folositi o sursa de tensiune de ~1V. S-ar putea ca asa sa pacaliti simulatorul.

Link spre comentariu

Gata...l-am facut si pe asta! :101

Sry ca raspund asa tarziu...dar nu am vrut sa mai apar iar cu temele nefacute...

Multumesc frumos pentru raspunsuri...mai ales pentru cel cu delay din read_adc()...fara ala nu mergeam deloc inainte...

Intr-adevar, ce facusem eu pentru transformarea din valorile adc in presiune ...era total pe langa...

Am incercat si cum ai explicat tu dar tot nu iesea cum trebuie...erau un pic decalate valorile...asa ca am mai muncit un pic...am mai cautat un pic...si am gasit o chestie foarte tare:

http://www.pbpgroup.com/Calculators/MPX ... X4115A.htm

Si am implementat formula de acolo si merge! Mai rebuie sa fac o transformare in mmHg sau mbar.

De acum urmeaza senzorul de presune si sa trimit wirelles!

Multumesc inca o data pentru ajutor

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