wolfei Postat Iunie 22, 2010 Autor Partajează Postat Iunie 22, 2010 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 Link spre comentariu
Liviu M Postat Iunie 22, 2010 Partajează Postat Iunie 22, 2010 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
wolfei Postat Iunie 23, 2010 Autor Partajează Postat Iunie 23, 2010 Ai dreptate, era cu TRIS...am mai modificat o data...dar tot nu iese.. 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
Liviu M Postat Iunie 23, 2010 Partajează Postat Iunie 23, 2010 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
wolfei Postat Iunie 23, 2010 Autor Partajează Postat Iunie 23, 2010 Aveai dreptate...iar...e la fel si in proiectul pe care l-am primit...L-am rulat...insa nu inteleg de ce imi da niste valori super ciudate... Link spre comentariu
Liviu M Postat Iunie 23, 2010 Partajează Postat Iunie 23, 2010 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
Liviu M Postat Iunie 23, 2010 Partajează Postat Iunie 23, 2010 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
Liviu M Postat Iunie 23, 2010 Partajează Postat Iunie 23, 2010 Inca o intrebare (2?): - de unde iei coeficientii pentru transformari ? Cod: #define C1 -4.0#define C2 0.0405#define C3 -0.0000028Docu 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
wolfei Postat Iunie 23, 2010 Autor Partajează Postat Iunie 23, 2010 A iesit soarele pe strada mea! :101Mi-a trimis aceeasi persoana o alta varianta care merge!! :dans:Multumesc mult pentru ajutorul acordat Liviu! Link spre comentariu
Liviu M Postat Iunie 24, 2010 Partajează Postat Iunie 24, 2010 Cu placere, desi n-ai de ce sa-mi multumesti. Solutia ai primit-o de la altcineva. Link spre comentariu
wolfei Postat Iunie 24, 2010 Autor Partajează Postat Iunie 24, 2010 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 Link spre comentariu
Liviu M Postat Iunie 24, 2010 Partajează Postat Iunie 24, 2010 M-am scos! 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
wolfei Postat Iunie 24, 2010 Autor Partajează Postat Iunie 24, 2010 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 Link spre comentariu
Liviu M Postat Iunie 24, 2010 Partajează Postat Iunie 24, 2010 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
wolfei Postat Iunie 24, 2010 Autor Partajează Postat Iunie 24, 2010 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
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