aionescu Postat Iunie 24, 2006 Partajează Postat Iunie 24, 2006 Am urmatoarea problema:Nu reusesc sa citesc cu un PIC senzorul DS18B20 (temperatura) prin adresare cu codul ROM. Scopul ar fi sa citesc mai multi senzori pe acelasi bus.Precizez ca softul functioneaza (pot citi temperatura) pentru un singur senzor, nefolosind codul ROM.Daca a abordat cineva o aplicatie de genul acesta (mai multe dispozitive adresabile pe protocol 1-wire) rog sa ma lumineze si pe mine.Multumesc anticipat! Link spre comentariu
Vizitator yoco Postat Iunie 30, 2006 Partajează Postat Iunie 30, 2006 salut,eu am facut asa ceva dar cu avr si e cat se poate de simplu, trebuie doar sa urmaresti pasii din pdf, adica documentatia lui ds18b20.ca sa citesti mai multi senzori daca bine imi aduc aminte trebuie sa comunici pe 1wbus ROM-ul device-ului pe care doresti sa-l citesti pt ca protocolul asa e conceput, masterul trimite interogare catre slave(s) si stabileste cu cine vrea sa comunice, raspunde cel care recunoaste ROM-ul trimis de master si se continua tranzactia doar cu acel slave,eu zic asa:-citesti codurile ROM la toti senzorii , salvezi in eeprom si faci softul in asa fel ca sa poti comunica cu senzorii, plus 18b20 are si 2 registrii de alarma , adica daca il configurezi sa semnaleze o depasire a unui anumit prag de temperatura el iti semnaleaza starea de "avarie" pe 1wbus, pui pinul pt 1w pe intrerupere externa si ai rezolvat problema.atentie la distanta si tipul de cablu !Yoco. Link spre comentariu
puiu Postat Iulie 3, 2006 Partajează Postat Iulie 3, 2006 1. Intrucat fac acum o analiza a senzorilor de temperatura pentru un automat, as vrea sa stiu la ce distanta de PIC se poate utiliza senzorul 1wire?Cu stima, Link spre comentariu
bogdanm Postat Iulie 3, 2006 Partajează Postat Iulie 3, 2006 Uita-te nitel prin appnote-urile de la Maxim. Acolo scrie destul de clar cat tine o retea 1-Wire. Din cate imi aduc aminte poti sa ajungi la cateva sute de metri in anumite conditii (adica ceva repetoare pe traseu). Link spre comentariu
puiu Postat Iulie 3, 2006 Partajează Postat Iulie 3, 2006 Multumesc de informatie. Cu stima Link spre comentariu
Vizitator DragosP Postat Iulie 3, 2006 Partajează Postat Iulie 3, 2006 Eu am ajuns la vreo 250 fără nici un repetor. Însă, trebuie citite într-adevăr notele de aplicaţie, atât în ceea ce priveşte softul cât şi-n ceea ce priveşte hardul. Link spre comentariu
aionescu Postat Iulie 5, 2006 Autor Partajează Postat Iulie 5, 2006 Multumesc tuturor pentru sfaturi, am rezolvat problema.Buba era in rutina de transmisie care altera registrii unde stocam eu ROM-ul dupa prima transmisie. Link spre comentariu
78ATI Postat Iunie 3, 2007 Partajează Postat Iunie 3, 2007 Buna!Un exemplu de cod pentru citirea in BUS a 3 senzori se poate? V-as fi profund recunoscator! Link spre comentariu
aionescu Postat Iunie 6, 2007 Autor Partajează Postat Iunie 6, 2007 Un exemplu de cod(ASM) n-ar folosi la mare lucru fiindca e stufos si fiecare abordeaza problema in felul sau. De exemplu, al meu are peste 900 de linii (impreuna cu afisarea pe LCD) dar banuiesc ca nu e abordarea optima. Amator, de !In primul rand trebuie sa te asiguri ca se citeste bine seria ROM-ului.Eu cu asta am inceput.Un program care citeste seria si o afiseaza cumva (pe LCD e cel mai comod).Seria trebuie sa se termine musai cu "28", care e codificrea familiei DS18B20) . De exemplu,unul dintre traductorii mei are seria asta: D900000090185D28.In al doilea rand mare grija la transmitere sa te asiguri ca se transmite corect sau nu se altereaza in operatii ulterioare (cum am patit eu).Asta se poate verfica foarte bine pe simulator.In al treilea rand trebuie urmata intocmai secventa din data sheet-ul lui DS18B20 (succesiunea comenzilor).Modifica codul existent citind tot un singur traductor, dar cu adresa. Comenteaza instructiunea "skip rom" si pune " match rom" (impreuna cu secventa din data sheet). Dupa ce va merge pentru un singur traductor, poti sa pui si 10, doar se multiplica secventele de citire. Eu asa am facut.Cand ai mai multi traductori, mare atentie la "timing". Nu le place sa-i grabesti si, culmea, difera de la lot la lot. Eu eram convins ca am codul definitivat cand, dupa ce am schimbat lotul de traductori, nu a mai mers bine pana nu am schimbat "timing"-ul. Bafta! Link spre comentariu
78ATI Postat Iunie 7, 2007 Partajează Postat Iunie 7, 2007 Culmea este ca eu nu reusesc sa citesc temperatura unu senzor. Am renunatat "pentru teste" la BUS si fac lucrul cu un singur senzor. Ideea e ca nu imi dau seama ce numar afiseaza pe LCD. Afiseaza un numar insa este ceva ce nu are legatura cu realitatea.Am sa incerc reconstruirea programului pas cu pas, oricum pana in acest moment nu merge! Link spre comentariu
aionescu Postat Iunie 7, 2007 Autor Partajează Postat Iunie 7, 2007 Aaa, pai zii asa. Eu credeam c-ai rezolvat citirea unui singur senzor. Pe mine nu m-au tinut curelele sa atac citirea mai multor senzori din prima, asa ca am facut (pentru un singur senzor) in felul urmator:1. Am scris rutinele de transmisie/receptie si le-am verificat cu simulatorul. 2. Am verificat ca dupa comanda "reset pulse", DS-ul imi raspunde cu "presence pulse". Asta musai pe osciloscop, ca trebuie sa verifici ca taimingul e cel din diagramele din data sheet. La protocolul asta (1 wire) taimingul e al naibii de important (asa cum am constatat pe pielea mea).3. Tot pe osciloscop am (re)verificat rutinele de transmisie si mai ales receptie, findca in cazul receptiei pe simulator am generat valori artificiale, adica am facut eu pe DS18B20.4. Ca sa nu introduc incertidudini suplimentare am afisat pe LCD valoarea temperaturii in hexa, facand conversia manual.5. Pentru verificarea rutinei de calcul a temperaturii (2's complement) si a conversiei hexa-zecimal am fortat eu in program niste valori chipurile citite de DS, sa vad daca pe LCD afisaza ce trebuie. Programul are 3 sectiuni importante, care pot fi testate independent: citirea senzorului, calculul temperaturii+conversia in zecimal si afisarea pe LCD.Pentru inspiratie cauta si pe Internet niste note de aplicatie, au niste indicatii bune pe acolo. Ba chiar iti arata cum trebuie sa apara diferite secvente pe ecranul osciloscopului.Ca veni vorba, fara osciloscop e aproape imposibil sa reusesti aplicatia asta in timp rezonabil.Bafta! Link spre comentariu
78ATI Postat Iunie 7, 2007 Partajează Postat Iunie 7, 2007 Merci mult! Osciloscop nu am, insa datele folosite (timpii sunt cei din data sheet) si scris in program...Acum sunt la servici, sunt atat de frustrat ca nu pot sa incerc codurile...scriu codurile in notepade, si acasa testez. Sper ca de aceasta data sa mearga. program read_one_wiredim tmp_sign as bytedim j as bytedim scratch as byte[9]dim text as char[7]dim a,b,i,x,r as bytedim deci as char ow_reset(PORTA,2)ow_write(PORTA,2,$CC)ow_write(PORTA,2,$44)delay_us(120)ow_reset(PORTA,2)ow_write(PORTA,2,$CC) Ow_Write(portA, 2, $BE) 'read scratchpad cmd for i=0 to 8 x = ow_read(PORTA, 2) scratch[i] = x 'get result 9 bytes in array next i a= scratch[1] 'sign temp if a=0 then tmp_sign="+" else tmp_sign="-" end if a=scratch[0] if a.0 = 0 then 'a.0 is 0.5C value deci = "0" else deci = "5" end if a = scratch[0] >>1 'temp en degre ByteToStr(a,text)' Lcd_out_cp( text)' Lcd_Chr_CP(",")' Lcd_Chr_CP(deci)' Lcd_chr_CP(223)' Lcd_Chr_CP("c")end.[/code] Partea de afisare (cosmetica se face la fata locului insa...datele sunt importante! Link spre comentariu
Vizitator yo2lio Postat Iunie 7, 2007 Partajează Postat Iunie 7, 2007 Sal, Un link interesant ( zic eu ) : http://www.mikroe.com/forum/viewtopic.php?t=9184 Cu stima ! Link spre comentariu
aionescu Postat Iunie 7, 2007 Autor Partajează Postat Iunie 7, 2007 Mda, situatia e complicata din punctul meu de vedere fiindca:1. Nu ai osciloscop (nici eu n-aveam, mi-am luat unul tocmai obligat de aceasta aplicatie).2. Eu folosesc ASM si nu limbaj de nivel inalt si asa am control asupra "bitului". In plus folosesc simulatorul la greu. M-a scos din multe incurcaturi.Fara osciloscop si simulator e greu (dar nu imposibil). Eu nu m-as descurca. Zici acolo ca ai respectat timing-ul. Dar ai verificat ca DS-ul raspunde? Asta e prima operatie pe care as face-o, sa vad daca raspunde traductorul. Poate e defect, mai stii? E foarte sensibil la alimentare inversa, eu am prajit vreo 2.Daca pot ajuta cu ceva, cu placere.Bafta! Link spre comentariu
78ATI Postat Iunie 7, 2007 Partajează Postat Iunie 7, 2007 Ciudat! Am incercat din nou! imi afiseaza valori intre 90-105..si aceste valori variaza in functie de temperatura...zau ca nu imi dau seama ce e necazul.. Am incercat cu 2 senzori identici, aceleasi simptome! 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