Sari la conținut
ELFORUM - Forumul electronistilor

proiect nokia 3310 +LM35


wolfei

Postări Recomandate

AM gresit libraria pe care am pus-o in proiect, aceasta atasata e cea corecta.Am incercat sa pun breakpoint , dar nu prea imi iese...nu am mai folosit pana acum breakpoint :jytuiyu

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

Eu n-am decat proteus6 lite pe care nu l-am folosit niciodata, asa ca prea mult nu te pot ajuta.

Nici eu nu gasesc breakpointurile, da' daca iau un exemplu cu PIC (semaforul) si pornesc debuggingul, cand opresc animatia imi apare o fereastra cu codul sursa prin care pot "pasi". In acelasi timp, pot vedea continutul unor registrii (din pacate nu si al variabilelor sau nu stiu eu cum).

E, incearca sa ajungi in functiile de comunicatie cu senzorul (exista o optiune interesanta - Execute until the current cursor position - cu care poti incerca sa "suplinesti" breakpointii) si vezi daca PIC-ul citeste ce trebuie din senzor.

 

PS Esti sigur ca functia

output_high(SHT11_DATA); //release DATA-line
si
SHT11_DATA=1; //release DATA-line
sunt echivalente? Nu de alta, da' m-as fi asteptat ca atunci cand citesti bitul acknowledge, SHT11_DATA sa fie setat ca intrare - asta se face din TRIS, parca.

 

LE Am gasit breakpointii: in fereastra Debug->PIC CPUU Source Code UI, in coltul din dreapta sus exista un cerculet rosu, unul maron inchis si o sageata deasupra. Cu butonul ala activezi /deactivezi / stergi breakpointii de pe linia pe care e cursorul. Pui un breakpoint in functia de citire din senzor, dupa o citire si incerci sa te prinzi ce ai citit. In cel mai rau caz vezi cum arata linia SHT11_DATA dupa fiecare clock.

Si ca m-am mai uitat o data in functia citeste (st11_read_byte()), observatia cu eliberarea liniei de date (transformarea ei in intrare) ramane valabila.

Rasfoieste putin documentatia protocolului i2c - ai sa vezi ca circuitele care comunica pe un astfel de bus "forteaza" doar 0 (LOW). Pentru 1 (HIGH) se pune linia in tristate si e trasa la VDD de rezistenta pull-up.

Link spre comentariu

Ai dreptate, era cu TRIS...am mai modificat o data...dar tot nu iese.. :sparge: Am mai vb cu cineva...si a zis ca are un cod pt sht11 care merge...acum astept sa vad codul lui...sa vad care sunt diferentele...Intre timp incerc sa vad cum e cu breakpoints alea...

Link spre comentariu

Observatii care nu duc neaparat la imbunatatiri:

- in sht11_write_byte() nu setezi directia pinului cand intrii in functie => depinde de starea in care a ramas anterior apelului functiei; ce-i drept, apelul anterior e al transstart(), da' eu l-as face iesire "local", sa fiu sigur:

char sht11_write_byte(unsigned char value)//------------------------------------------------------------------------------// writes a byte on the Sensibus and checks the acknowledge{   unsigned char i,error=0;    SHT11_TRIS_DATA=0;    for (i=0x80;i>0;i/=2) //shift bit for masking

- la reset ai gresit directia:

 

//------------------------------------------------------------------------------void sht11_connectionreset(void)//------------------------------------------------------------------------------// communication reset: DATA-line=1 and at least 9 SCK cycles// followed by transstart// _____________________________________________________ ________// DATA: |_______|// _ _ _ _ _ _ _ _ _ ___ ___// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______{   unsigned char i; /* directie gresita  SHT11_TRIS_DATA=1;  //SHT11 WRITE */   SHT11_TRIS_DATA=0;  //SHT11 WRITE   SHT11_DATA=1;

Mai scriu daca mai gasesc, da' cum mai am cate ceva de facut, sunt sanse sa ma deconecteze serverul, asa ca postez acum.

 

LE

 

As muta intarzierea dinaintea lui if(i&value) dupa else:

LLE Am vazut acum, e pentru CLK = 0; uita de sugestia asta.

Link spre comentariu

Sa-nteleg ca a inceput sa mearga?

Daca incepe sa afiseze cate ceva, sunt sanse sa fi inceput sa comunice. Intrebarea e acum unde scartaie.

Adica mai e de lucru la comunicatie sau conversiile/prelucrarile ulterioare sunt aiurea?

Referitor la comunicatie, ma intreb daca nu cumva ar fi bine sa astepti purin intre frontul pozitiv al clk si citit datele, respectiv intre pus datele la iesire si clk. Cu toate ca in simulare n-ar trebui sa se simta prea tare, in circuitul real s-ar putea sa conteze.

 

De exemplu, eu as modifica:

unsigned char s_read_byte(unsigned char ack){   unsigned char i,val=0;   TRIS_DATA = 1;        //SHT11 READ   //DATA=1; //release DATA-line   for (i=0x80;i>0;i/=2) //shift bit for masking   {     DelayUs(5);     SCK=1; //clk for SENSI-BUS     if (DATA)     val=(val | i); //read bit		     DelayUs(5);     SCK=0;   }   TRIS_DATA = 0;    //make DATA-Line output   DATA=!ack;         //in case of "ack==1" pull down DATA-Line   SCK=1; //clk #9 for ack    DelayUs(5); //pulswith approx. 5 us   SCK=0;   TRIS_DATA=1;   //DATA=1; //release DATA-line   return val;}

in

unsigned char s_read_byte(unsigned char ack){   unsigned char i,val=0;   TRIS_DATA = 1;        //SHT11 READ   //DATA=1; //release DATA-line   for (i=0x80;i>0;i/=2) //shift bit for masking   {     DelayUs(5);     SCK=1; //clk for SENSI-BUS     DelayUs(1);      /****** as astepta putin intre CLK si citit datele, ca senzorul sa aiba timp sa raspunda; eventual vezi in data-sheet daca e dat vreun timing*/     if (DATA)     val=(val | i); //read bit		     DelayUs(5);     SCK=0;   }   TRIS_DATA = 0;    //make DATA-Line output   DATA=!ack;         //in case of "ack==1" pull down DATA-Line   DelayUs(1);      /****** la fel aici, as astepta putin inainte de clk, ca sa se stabilizeze linia de date*/   SCK=1; //clk #9 for ack    DelayUs(5); //pulswith approx. 5 us   SCK=0;   TRIS_DATA=1;   //DATA=1; //release DATA-line   return val;}

Referitor la poza, tradu-mi si mie cum te-ai astepta tu sa arate. Care din valorile aratate de senzori ar trebui sa se vada?

Prelucrarile pe care le faci in program ce influenta ar trebui sa aiba?

Nu de alta, da' inca nu m-am prins de functionarea totala a programulu.

 

Spor la treaba!

 

PS Cu breakpointii n-ai rezolvat nimic?

Link spre comentariu

Eu inca o data.

Sfatul meu e s-o iei pas cu pas, babeste, poate ai sanse mai mari sa gasesti buba daca ai mai putine "variabile".

 

In cazul de fata, eu din main (ma rog, din while(1), restul poate ramane) as lasa doar

 while(1)   {    /********************************************************      Measure Temperature    ********************************************************/     s_connectionreset();     s_transstart(); //transmission start     s_write_byte(MEASURE_TEMP); //measure Temperature     while (DATA); //wait until SHT11 ends measurements     //Save highest byte read, in RAM     byte_1 =  s_read_byte(ACK);     //Save lowest byte read, in RAM     byte_2 =  s_read_byte(noACK);         /********************************************************      Print to LCD    ********************************************************/	afisare( byte_1, 1, 30);	afisare(byte_2, 3, 30);     //----------wait approx. 0.8s to avoid heating up SHTxx----------------------//-----------------------------------------------------------------------------------     for(i=0;i<2000;i++)        DelayUs(8000);} //while(1)

Cu ocazia asta as putea vedea daca datele citite de la senzor sunt ce ma astept sa fie sau nu.

Daca nu sunt, as incerca sa bag afisarea "mai adanc", prin functiile de comunicatie (as afisa diverse caractere prin diverse puncte ale functiilor (pe la if-uri, de exemplu), sa vad pe unde se plimba programul).

Link spre comentariu

Inca o intrebare (2?):

- de unde iei coeficientii pentru transformari ?

 

Cod:

#define C1 -4.0#define C2 0.0405#define C3  -0.0000028
Docu
SORH    c1            c2          c312 bit   -2.0468   0.0367       -1.5955E-68 bit    -2.0468    0.5872       -4.0845E-4
- de unde apare 100 din socoteala?

fTemp_true = (D1+(D2*lValue_Temp)*100);

Docu

T= d1 + d2*SO
Link spre comentariu

Cand vezi ca nu iti merge senzorul si nici nu stii ce sa ii faci e important sa stii ca mai e cineva care incearca sa gaseasca o solutie..Am sa te trec pe licenta ca indrumator :da

Link spre comentariu

M-am scos! :da :101 Eu iti urez bafta si spor in continuare! Mai ai oricum mult de munca. Daca vrei sa faci proiectul si practic, s-ar putea sa mai ai de lucrat la cod, ca uneori simularile nu se pupa in totalitate cu circuitul fizic, da' ai o baza buna de plecare.Poate ar fi bine sa te apuci totusi si de partea hard.

Link spre comentariu

Asta vreau sa fac acum..voiam mai intai sa termin cu senzorii..Acum vreau sa ma ocup de transmisie...eu vreau sa fac wireless...dar as vrea..pentru orice eventualitate sa fac si seriala...in caz k nu reusesc cu wireless mkr sa am seriala..AI vreo recomandare pt ce TX Rx sa iau?Ai vreo bucata de cod pentru seriala?...ca nu am mai facut nici asta pana acum :nas:

Link spre comentariu

N-am inteles intrebarea "ce rx-tx sa iau".877 are interfata rs232 hard; nu trebuie sa iei nimic deosebit. Legi rx de la primul cu tx de al doile si invers si gata.Comunicatie seriala am folosit numai intre PC si PIC si numai intr-un sens - de la PC la PIC. Nu-i nici o problema sa postez codul, da' trebuie sa ajung acasa. Oricum, tinand cont de faptul ca transmit numai ~10 octeti, e un cod relativ simplu si banal. Eventual configurarea porturilor sa fie mai interesanta.He, he, m-am uitat acum si se pare ca trebuie sa muti LCD-ul, ca "sta" exact pe portul serial. Daca n-ai alt plan pentru portul D, eu acolo as muta LCD-ul.

Link spre comentariu

pt wireless modulul transmitator Tx si receptor Rx...Si mai am o intrebare...e greu sa pun un buton, sa fac un fel de menu?...ca am cam multe de afisat si as vrea sa pun un butonPrima oara sa se vada pe display temp int si exterioara si un ceas sa zicem...si cand aps pe buton sa se vada umid press si dew point...si daca apas iar butonul sa se intoarca la ceas+temp..

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