Elektronika.lt
 2025 m. gruodžio 25 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2025 12 25, 00:54. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Atmega16 ir DS18B20
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 56
Pereiti prie Atgal  1, 2, 3, 4, 5, 6  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 DS18b20
PranešimasParašytas: 2012 03 03, 09:37 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasskr
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
To JonuiK.

CRC tikrai reikalingas. Pas mane 11 davuklių . Kontroleris Arduino pagrindu padarytas namo šildymo valdymui. Laikas nuo laiko išmeta temperatūrą -127 laipsnius ir suknisa programos valdymą. Gal kas nors gali įmesti kodą CRC tikrinimui. Pagal mane turėtų ignoruoti -127 ir laukti sekančio nuskaitymo. Būsiu dėkingas.

Vytautas
 Re: DS18b20
PranešimasParašytas: 2012 03 03, 11:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Dovydas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Vytautasskr rašo:

Gal kas nors gali įmesti kodą CRC tikrinimui. Pagal mane turėtų ignoruoti -127 ir laukti sekančio nuskaitymo. Būsiu dėkingas.

Vytautas


1 var. išbandytas

Kodas:
#define CRC8INIT   0x00
#define CRC8POLY   0x18              //0X18 = X^8+X^5+X^4+X^0

uint8_t   crc8 ( uint8_t *data_in, uint16_t number_of_bytes_to_read )
{
   uint8_t    crc;
   uint16_t loop_count;
   uint8_t  bit_counter;
   uint8_t  data;
   uint8_t  feedback_bit;
   
   crc = CRC8INIT;

   for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
   {
      data = data_in[loop_count];
      
      bit_counter = 8;
      do {
         feedback_bit = (crc ^ data) & 0x01;
   
         if ( feedback_bit == 0x01 ) {
            crc = crc ^ CRC8POLY;
         }
         crc = (crc >> 1) & 0x7F;
         if ( feedback_bit == 0x01 ) {
            crc = crc | 0x80;
         }
      
         data = data >> 1;
         bit_counter--;
      
      } while (bit_counter > 0);
   }
   
   return crc;
}


2 var. nebandytas

Kodas:
byte calc_crc(byte buff[], byte num_vals)
{
   byte shift_reg=0, data_bit, sr_lsb, fb_bit, i, j;

   for (i=0; i<num_vals; i++) /* for each byte */
   {
      for(j=0; j<8; j++)   /* for each bit */
      {
         data_bit = (buff[i]>>j)&0x01;
         sr_lsb = shift_reg & 0x01;
         fb_bit = (data_bit ^ sr_lsb) & 0x01;
         shift_reg = shift_reg >> 1;
         if (fb_bit)
         {
            shift_reg = shift_reg ^ 0x8c;
         }
      }
   }
   return(shift_reg);
}


Paskutinį kartą redagavo Dovydas, 2012 03 04, 10:34. Redaguota 1 kartą

_________________
---
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 03 04, 10:27 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasskr
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Dėkui Dovydui už kodą. Bandysim pritaikyti. Mano su sūnumi projektas http://suvis.wu.lt/
Iki galo neišbaigtas ir yra klaidų. Tobulumui ribų nėra, bet veikia jau nuo rudens ir esu patenkintas.

Vytautas
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 06 27, 11:32 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Alv.
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
JOnis rašo:
Pasiknaisiosiu po favoritus darbe, bet jauciu nebebus islike.
Siaip korektiskiausia daryt taip kaip priklauso - atlikt davikliu paieska ir tik tada juos klausinet. Neik paciu lengviausiu keliu, eik teisingu keliu

Gal gali uzvesti ant kelio su kuo braizai grafikus savo puslapyje jonis.eu? Turiu mysql su duomenimis, noriu kazka panasaus nusibraizyti, kad vaizdas patogus butu.
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 06 27, 20:49 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JOnis
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
Paisau su php gd2 bibliotekos pagalba. GD2 paprasciausias rinkinys primityvu paisymo funkciju. Gatavi grafikai nepatiko neivienas isvaizda, teko savo rasytis. O jei nera rasytis - zmones naudoja rdtoolsus
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 14:38 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Signal
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki, kaip teisingai apskaiciuoti ir isvesti i LCD temperaturos dali po kablelio?

Dirbu su mikro C for AVR, Atmega16, simuliuoju su Proteus. Vienas DS18B20 daviklis.

Noriu temperatura isvedineti 0,1 laipsnio tikslumu i LCD. Su teigiamom temperaturum viskas gerai, t.y tiek ir ant daviklio tiek ir LCD reiksmes sutampa, pvz.: - +1,1 laips; +1,2 laips; +1,3 laips ir t.t. Taciau neigiamos nesutampa:

Daviklis: -1,1 Proteus: -1,61
-1,2 ....................... -1,18
-1,3 ...................... -1,31

Kodo dalis atsakinga uz temperaturos dali po kablelio (neigiamai temp.):

Temp_fract = Temp_bytes [0] << 4;
Temp_fract = Temp_fract >> 4;
Temp_fract = ~Temp_fract+1;
Temp_fract = (Temp_fract &= 0xF)*625;
Temp_fract = Temp_fract/100;
ByteToStr(Temp_fract, Bufflcd);
LCD_Out_CP (Ltrim(Bufflcd));

Teigiamai temperaturai kodo dalis ta pati, tik be atitinkamos eilutes su inversija.

Taigi, kaip pataisyti/parasyti is naujo koda, kad viskas veiktu su neigiama temperatura?
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 15:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JOnis
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
Kazkaip sudetingai ten skaiciuoji
deklaruoji signed short tipo kintamaji result
Nuskaitai pirmus du baitus is daviklio ir is ju susiskaiciuoji reiksme bilekokiu budu. As skaiciuoju taip:
result = buf[0];
result = result&0x00FF;
result = result|((unsigned short)buf[1]<<Cool;

Tada persiskaiciuoji rezultata i temperatura su visom simtosiom dalim:

result = ((result>>4)*100 + (result&0xF)100/16 - 25)/10;

Gauni tiek teigiama, tiek neigiama temperatura simtosiomis, norint gaut laipssnius reikia result/100 .
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 15:19 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
tiesiog panaudok float tipo kintamaji arba bent jau signed int,
ir viskas gausis savaime be jokiu sudetingu manipuliaciju bitais.

viskas butu mazdaug taip:

float temp= Temp_bytes [0]+ (int)Temp_bytes [1] << 8
if (temp > 0x8000) temp= 0xFFFF - temp;
temp= temp / 16;

sprintf (Bufflcd, "%f" , temp);
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 15:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
JOnis rašo:

Tada persiskaiciuoji rezultata i temperatura su visom simtosiom dalim:

result = ((result>>4)*100 + (result&0xF)100/16 - 25)/10;

Gauni tiek teigiama, tiek neigiama temperatura simtosiomis, norint gaut laipsnius reikia result/100 .


Kaip ta tavo kasiciavima suprasti?
kam tu atimi tuos 25

tavo eilute turetu buti tiesiog tokia:

result = result * 100 / 16
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 15:46 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JOnis
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
Geras klausimas, taip senai naudosu sita biblioteka kad dabar net pats nesuprantu kam atimu ta 0.25. Objektyviu priezasciu nepamenu. Teoriskai nereikia atimt, gal kur kokiam apnote nuziurejes buvau
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 16:22 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
o ko ne
float temp=(float)((int)buf[1]<<8 | buf[0])/16;
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 19:56 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JonasK
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Apskaičiuojant temperatūrą 0.25 formulėje naudojamas tada kai reikia 0.1C tikslumo. Šiaip matuojama 0.5C tikslumu.

_________________
--
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 21:35 Pranešti apie taisyklių pažeidimą Atsakyti su citata
JOnis
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
0.5C yra daviklio kalibruote, o matuoja 18b20 1/16C rezoliucija.
float nepatinka, labai jau daug uzima vietos, kai 64 davikliai - shortas gerokai taupo resursus. O pries tai darau resulta, nes priklausomai nuo daviklio tipo skirtinga matematika.
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 22:54 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
saugot niek ir nevercia float tipe, cia tik isvedimui zmogui patogia forma.
 Atmega16 ir DS18B20
PranešimasParašytas: 2012 07 24, 23:03 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pas atmega resursu pakanka kad nerieitetu taupyti ant float.
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie Atgal  1, 2, 3, 4, 5, 6  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

Programuotojas Tautvydas – interneto svetainių-sistemų kūrimas

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Must have farming mods
Farming simulator modhub, Best farming simulator mods
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Ets2 mods, Ats mods, Beamng drive mods
allmods.net
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
Mokslo festivalis „Erdvėlaivis žemė“
www.mokslofestivalis.eu
Reklama


Reklama