pouzi 2k2. Niektore (skoro vsetky,ktore mi presli cez ruky, cca 50-70ks) 18B20 neboli ochotne spravne komunikovat, kym som hodnotu odporu nezmensil na 2k2. A to ani na vzdialenost 2-3cm od mcu.
Trefa do černého změna odporu na 2k2 pomohla už to funguje bohužel ne na 100% dnes ráno jsem to vystrčil na mráz a po chvílích to klesalo na “000.0000” … “000.5000”…“001.0000” znaménko “-” nikde tak jsem sevřel do dvou prstů to čidlo a zas přes “000.0000” stoupala teplota v opačném pořadí zas bude chyba ve v této funkci díky.
unsigned temp;
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
// Check if temperature is negative
if (temp2write & 0x8000) {
text[0] = '-';
temp2write = ~temp2write + 1;
}
// Extract temp_whole
temp_whole = temp2write >> RES_SHIFT ;
// Convert temp_whole to characters
if (temp_whole/100)
text[0] = temp_whole/100 + 48;
else
text[0] = '0';
text[1] = (temp_whole/10)%10 + 48; // Extract tens digit
text[2] = temp_whole%10 + 48; // Extract ones digit
// Extract temp_fraction and convert it to unsigned int
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
// Convert temp_fraction to characters
text[4] = temp_fraction/1000 + 48; // Extract thousands digit
text[5] = (temp_fraction/100)%10 + 48; // Extract hundreds digit
text[6] = (temp_fraction/10)%10 + 48; // Extract tens digit
text[7] = temp_fraction%10 + 48; // Extract ones digit
// Print temperature on LCD
Lcd_Out(2, 5, text);
Tak to ohledne odporu me prekvapuje, ted jsem pouzival neco kome 20ks a nebyl problem. Jen pro zajimavost, jake napeti jste pro ne pouzivali a v jakem modu jste je meli pripojene k napajeni?
Ja osobne som pouzil napajanie 5V a komunikacny vodic samozrejme zvlast. Vzdialenost od procesora od 2cm, niekedy do 10cm. Zaujimave bolo, ze ak som zobral novy kus, tak na 4k7 komunikovat nechcel. Dal som ho na 2k2, tam komunikoval bez problemov a potom niektore komunikovali aj na tych 4k7. Aj po vypnuti a zapnuti zariadenia. Priebehy som sledoval osciloskopom a boli take ako doporucoval vyrobca ci v casovej tak aj v napatovej oblasti. Pri 4k7 aj pri 2k2. Takze nejakymi parazitnymi kapacitami to byt predpokladam nemohlo. Ale stravil som pri tom hooodne casu. Pod slovom komunikovat treba rozumiet, ze data nechodili bud vobec, alebo casto chodili take nejake spotvorene. Bolo to uz relativne davno, tak presne to uz popisat neviem.
videl som par rutin kde citanie log 1 masterom bolo riesene dost nestastne a to po 15us… a zalezalo od prekladaca ako prelozil presne slucky ci citanie zacalo skor ako preslo 15us. Alebo to bolo na hrane… a obcas to casovo nesedelo… potom vznikaju prave taketo problemy.
Tak ze skontrolovat ci citanie log 1 zacina po viac ako 1us+ doba ustalenia napetia a konci trosku skor ako 15us
S odporama jsem měl úplně stejný problém. Stačí snížit hodnotu a problém je vyřešen. Záleží také na délce kabelu k čidlu.
K problému se zápornou hodnotou doporučuji pořádně přočíst datasheet:
…“Znaménkový bit (S) signalizuje, zda je teplota kladná nebo záporná (bit0-6 – značí celou hodnotu bez desetin atd). Pro kladné teploty je S=0, pro záporné teploty je S=1.”…
Presne preto je nestastim programatorskeho sveta pouzivat rozne _delay a podobne nezmysly. Bohuzial zaciatocnici v C casto siahaju po tychto nestastnych a k tomu este aj napilenych barlickach miesto toho aby vsetku casovo zavislu cinnost odvodili od casovaca. Potom nadavaju na prekladac, ale ten za to nemoze. Robi len to co robit ma a presne tak ako bol naprogramovany.