[ Almedin @ 20.05.2013. 20:38 ] @
Imam problem sa DS18B20. Razvijam neki uređaj sa PIC16F648A koji, između ostalog, treba da čita temperaturu sa DS18B20 i prikazuje na LCD. Trenutno je na breadboard-u a razvoj događaja je sljedeći:

Čitanje i prikaz je radilo normalno do neke faze razvoja. Sada prilikom uključivanja uređaja prikazuje ispravnu temperaturu i nakon 10-20 sekundi detektuje logičku jedinicu sa senzora što se nakon preračuna manifestuje kao vrijednost 163,59 na LCD. Izvadim senzor i ponovo vratim i čitanje je opet ispravno neko vrijeme te opet počne griješiti. Izvadim senzor, vratim ga i držim prste na njemu (ovo sam slučajno otkrio) i čitanje je ispravno. Ako nakon vraćanja senzora držim prste na milimetar od senzora, ne dodirujući ga, čitanje opet radi bez problema sve dok ne odmaknem prste.

Vjerujem da nije do programa jer sam radio i do sada komunikaciju sa ovim senzorom kako jednim tako i više njih i sve je funkcionisalo ispravno.

Samo mjerenje temperature i slanje preko NRF24L01+ je u svrhu testiranja radilo bez greške nekoliko sedmica. Problem se počeo javljati (da li slučajno ili ne) kada sam dodao još drugih kola (74165, 74595, ULN2003). Sada se na ploči nagomilalo i kola i žica i ne znam je li kapacitivnost breadboard-a mogla uzrokovati ovo i kako će se uređaj ponašati kada ga uradim na pločici. Imate li neki savjet? Nemam osciloskop niti nešto slično.
[ zica49 @ 20.05.2013. 22:28 ] @
Kad dodas toliko kola treba dodati i keramickih kondenzatora..
Nesto te zeza sa napajanjem da li dodatna kola koja su se namnozila proizvode smetnju ili je napajanje preoptereceno..
Naravno i parazitni kapaciteti zbog isprepletenih zica,onda isto moze biti problm jer proticanje bilo kakve fluktuirajuce stuje kroz zicu u eter isijava,a senzor moze biti kao antena.Kad priblizis prst dodje mu kao da je oklopljen.
Na PCB-u bi trebalo biti manje problema jer je sve to u ravnini isprepletano vodovima mase tako da je ta smetnja tamo minimalna.
[ Zlatni_bg @ 20.05.2013. 22:38 ] @
Jel mozes jumperima da odaljis DS18B20 od trenutne pozicije na breadbordu, ili ako imas jos 1 breadboard, zakacis ga tamo pa ga tako spojis? Vrlo verovatno ti dolazi do ometanja.
[ bogdan.kecman @ 20.05.2013. 22:46 ] @
kako si spojio DS? 2 ili 3 zice?
[ Almedin @ 21.05.2013. 05:23 ] @
DS je spojen sa 3 žice. Pokušao sam ga pomijerati po breadboardu, danas ću pokušati spojiti na drugi breadboard i odmaknuti ga od ovoga pa ću vidjeti kako će se ponašati.
[ bogdan.kecman @ 21.05.2013. 05:41 ] @
dodaj mu neki 10uF na vdd/vss direktno na njemu. koliki ti je pull up na dq?
[ Almedin @ 21.05.2013. 08:23 ] @
Pull up je 4,7 K. Pkušat ću i kondenzatorima riješiti pa ćemo vidjeti.
[ bogdan.kecman @ 21.05.2013. 08:27 ] @
probaj i da smanjis pull up na 2k7 i probaj da ga povecas na 6k ne mogu da se setim sta je meni pomoglo ali znam da nije radilo sa 4k7 al da me ubijes dal je bilo na gore ili na dole bolje :D
[ mikikg @ 21.05.2013. 10:40 ] @
Obavezno kada se radi sa vise digitalnih IC spojenih na isto napajanje treba da se svaki IC obskrbi sa svojim keramickim kondenzatorom npr 0.1uF a jos bolje bi bilo ako se tu paralelno doda jos i MKP (Wima) 1uF kondenzaor. To vazi za sve uslove, PCB, breadboard itd. Situacija je gora sto su brzi IC i ako su sami IC sa relativno velikom potrosnjom struje (npr 74xx, 74Sxx i slicne serije). Na fabrickim PCB se to uglavnom resava sa SMD keramickim kondeznatorima vrednosti 0.1 do 1uF ili tantal kondeznatorima.
Dakle svaki IC da ima svoj kondenzator odmah tu u blizini (bukvalno prikljucen uz nozice napajanja) i sve ce biti mnogo bolje ;)

Oko otpornika, smanjivanjem pull-up otpornika se dobija na "tvrdoci" komunikacionih linija i samim tim se povecava imunost na smetnje ali ne treba preterivati zbog strujnih limita samih izlaza iz IC.
[ bogdan.kecman @ 21.05.2013. 10:47 ] @
za ds taj kond nije bas ubitacno potreban posto on radi svejedno na parazitski napon te ima svoj kond u sebi koji puni i sa vdd i sa dq, no sigurno nece da steti .. nego brzina spustanja i dizanja dq-a na breadboardu je zeznuta posto kapacitivnost i induktivnost bb-a tu prave karambol, posebno kada je brdo zica u pitanju ... ja sam jednom gledao kako izgleda signal na dq liniji na bb-u doslo mi da placem
[ rsinisa @ 21.05.2013. 11:06 ] @
Citat:
bogdan.kecman:
probaj i da smanjis pull up na 2k7 i probaj da ga povecas na 6k ne mogu da se setim sta je meni pomoglo ali znam da nije radilo sa 4k7 al da me ubijes dal je bilo na gore ili na dole bolje :D


Na dole je bolje, 2K7 je sasvim ok vrednost.

Pozdrav.
Sinisha
[ mikikg @ 21.05.2013. 11:12 ] @
Da, sa breadboard mora da se vodi racuna oko rutiranja zicica kada se nesto eksperimentise. Generalno pravilo je sto su vece brzine to pokusati da te veze budu sto blize i krace zicice.
Inace taj DS posto ima jednu liniju samo za komunikaciju tu su vremena digitalnih impulsa vrlo kriticna i njihovo rise/fall vreme koje se pogorsava sa losim uslovima (kao na breadboard zbog povecanih kapacitivnosti vodova + mnogo losiji kontakti u poredjenju sa PCB) i onda na kraju to pocne da brljavi.

Znaci samo skratiti maksimalno veze DS<>PIC i dodati ove kondenzatore za napajanje i sve bi trebalo da bude ok.
[ Almedin @ 21.05.2013. 20:10 ] @
Nakon dodatnog testiranja situacija je sljedeća. Dodavanje kondenzatora ne pomaže. Sama promjena pull up otpornika takodje. Ispravno mjerenje dobijem ako povećam pull up na 7K7, ubodem komad žice u dq i drugi kraj žice držim prstima. Čim pustim žicu, brljavi. Ako pull up ostavim na 4K7 ne pomaže ni držanje žice. Pretpostavljam da je problem zbog ovih silnih žica okolo i da na pločici neće biti problema.
[ bogdan.kecman @ 21.05.2013. 20:22 ] @
tebi tu nesto gadno leti :( ... probaj da dodas 20k od dq prema gnd i izvadi ds sa protoa, spoj 3 zice u proto izvuci do ds-a bar 20cm .. deluje da imas preveliku kapacitivnost izmedju dq i vss da nema snage da ga povuce na gnd (zato ti pomaze veci pull up)
[ goran_68 @ 21.05.2013. 20:43 ] @
Smanji brzinu kojom komuniciraš sa DS1820 pa vidi šta se dešava.
[ Almedin @ 21.05.2013. 22:28 ] @
@goran_68, u pitanju je DS18B20 i one-wire, tajminzi su propisani.

@bogdan.kecman, da, neće na gnd. Izmedju ispravnog i potpuno neispravnog mjerenja pojave se medjuvrijednosti koje ukazuju da ova nemogućnost spuštanja na gnd nastane postepeno, za 10-20 sekundi.
[ bogdan.kecman @ 21.05.2013. 23:36 ] @
da, to znaci da imas kapacitivnost izmedju DQ i Vss. Slabljenje pull-up otpornika (ja sam nekad morao i 10k da turam tu) smanjuje tu kapacitivnost, to bi trebalo da radi ok van breadboard-a ali to se lako proveri, dakle zabodes DQ liniju zicu direkt u pin pored mcu-a, i vuces zicu min 10-20cm od bb-a i tu kacis DS direkt na 3 zice, dakle ne bodes ga u BB, to bi moralo da radi. 6k8 ili 8k4 ili cak 10k pull up + jedan veci pull down (100k recimo) da malo otkoci tu kapacitivnost su zgodni za testiranje na BB-u (ne bas i za produkciju)

DS je vrlo osetljiv, obzirom za sta se 1wire senzori koriste taj protokol bi trebalo da je mnogo robusniji ali na zalost ... maxim/dallas inace ako pogledas po sajtu polako izbacuje 1wire kompletno i menja sa i2c ... skoro swi 1wire uredjaji su "deprecated" a zamena im nije 1wire vec i2c (skoro svi, ne svi)
[ Almedin @ 03.06.2013. 13:49 ] @
Evo da javim epilog ove priče. Izradom pločice ništa se nije bilo promijenilo. Ustanovio sam da je problem bio u protokolu odnosno tajmingu. Ja sam kod čitanja držao dq na nuli dvije mikrosekunde a zatim čekao deset mikrosekundi pa čitao podatak. Smanjio sam čekanje na osam mikrosekundi i sada radi bez greške. Nisam siguran o čemu se radi jer u datasheet-u stoji da taj proces treba da bude završen unutar 15 mikrosekundi i do sada je radilo sa 2+10.
[ mikikg @ 03.06.2013. 14:21 ] @
Pa da, to je ovaj problem koji je bogdan.kecman spominjao, vrlo kriticna vremena jer je takva komunikacija i jos to moze da varira od primerka do primerka IC-a i na to jos razne ometajuce pojave koje ta vremena dodatno "ometaju" (temperatura, vlaga itd).

Zato je proizvodjac presao na bolju I2C komunikaciju gde je drugacije protokol implementiran pa nije toliko kritican tajming. Kod I2C se slave device "javi" kada je zavrsio neku operaciju kroz STOP/ACK/NACK uslov pa ne mora da se "nabada" vreme. I2C prakticno uopste ne zavisi od vremena, zato ima posebne CLOCK i DATA linije.
[ Almedin @ 03.06.2013. 14:38 ] @
Pa jeste, radio sam i sa I2C i naravno da je komotnije "pričati" preko dvije žice. Medjutim, ovi I2C senzori koje imam mogu ići do osam na jednu liniju dok OW može više a troši jedan pin. A nekada je baš nestašica pinova:)
[ goran_68 @ 03.06.2013. 21:31 ] @
Citat:
Almedin: Nisam siguran o čemu se radi jer u datasheet-u stoji da taj proces treba da bude završen unutar 15 mikrosekundi i do sada je radilo sa 2+10.


Dobro je što si javio rezultat. Možda će još neko imati sličan problem. Moguće je da ti i PIC ne čeka baš 2+10us ukoliko ti pozoveš neku rutinu koja treba to da izgeneriše, već više. Da li si to testirao? Ako radiš u asembleru onda je to malo verovatno ali možda neki kompajler te Delay rutine malo "produži".
[ Almedin @ 05.06.2013. 22:14 ] @
Citat:
goran_68: Dobro je što si javio rezultat. Možda će još neko imati sličan problem. Moguće je da ti i PIC ne čeka baš 2+10us ukoliko ti pozoveš neku rutinu koja treba to da izgeneriše, već više. Da li si to testirao? Ako radiš u asembleru onda je to malo verovatno ali možda neki kompajler te Delay rutine malo "produži".


Da, pregledao sam asembler listing i u pitanju je nešto slično. Delay je bio dobar ali oslobađanje linije i čitanje pina traje nekoliko instrukcije odnosno nekoliko dodatnih mikrosekundi. Nisam do sada koristio interni oscilator (4 MHz) a na 20MHz nije pravilo problem zbog većeg takta.