Elektronika.lt
 2024 m. balandžio 19 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 2024 04 19, 16:59. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Vienas laidas "1-Wire"
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 13
Pereiti prie 1, 2, 3  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Ar aktuali tema?
Ar aktuali tema?
Taip
59%
 59%  [ 13 ]
Ne
27%
 27%  [ 6 ]
Elemento ID
0%
 0%  [ 0 ]
Programa
0%
 0%  [ 0 ]
Nedomina
13%
 13%  [ 3 ]
Iš viso balsų : 22
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 13, 23:45 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nagrinėsim vieno laido elementus, ir kaip su jais kalbėtis... Very Happy
Kviečiu dalyvauti... Very Happy
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 14, 21:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Na matau, kad yra žmonių kuriuos tai domina paaiškinsiu kiek galėsiu.
Mano žinios remiasi kelių metų darytu projektu, gal ne viską pamiršau... Very Happy
Teko dirbti su termometrais, potenciometrais ir diskretiniais outputais.
Aiškinimui už pagridą imsiu DS18B20 nors teko ir kitokių naudoti...
Projetas darytas Atmega16 po to sėkmingai perkeltas į Armus STM32F101 ir STM32F303.
Su termometrais dar ir dabar daug kas daro bizniuką
Atspirties taškas DS18B20 jo aprašymas: http://neutrino.phys.ksu.edu/~gahs/doublechooz/DC_SlowMRS/DS/DS18B20.pdf
Imsiu variantą kai jie sujungti lygiagrečiai ir visi kalbėsis per vieną atmegos koją, nes kur vienas daviklis prijungtas prie kojos pvz. pilnas internetas.
Daviklis turi tris kojas: Gnd, +5V arba +3...+5V, signalinį. Maitinimo galima nejungti, bet jei atstumai nemaži ir jų nemažai tai jis nepakenks.
Visus elektrinius parametrus rasite nurodytame pdf.
Dirbant lygiagrečiai reikia žinoti 64 bitų ID iš kurių 8 vyriausi bitai CRC.
ID kiekvienam įrenginiui skirtingas unikalus, bent taip teigia.
Šie 64 bitai suskirsto programuotojus....
Tai pirma problema iš kur gaut ID, galima atspėti Very Happy , gal draugas pasakys, galima ir nusiskaityti. Du budai: skaityti prijungiant po 1 ir skaityti visą krūvą pajungtų, ir po to ieškoti kurio tai daviklio ID. Su termometrais tai paprasta skaitant temperatūrą šildai termometrą.
Galima jau pereiti ir prie konkretumų... Very Happy
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 14, 21:55 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Atmegos16 atveju naudosiu PC7 koją, bet ji turi būti atviro kolektoriaus arba atviros santakos jungime dar vadinama OD, na ir aišku 4.7k rezistorius tarp šios kojos ir +5v. Push pull šiuo atveju netinka.
OD režimas daromas Atmegos atveju siakančiai.
Kodas:

#define send_0 DDRC |=0b10000000;
#define send_1 DDRC &=0b01111111;
#define nulis  PORTC &=0b01111111;

PORTC naudosim vieną kartą ir jos neliesim, o siusim 1 arba 0 naudodami krypties registrus DDRC tokiu būdu Atmega nepereis į Push Pull.
Kadangi koją sukonfiguravom, galima rašytis funkcijas... Very Happy
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 14, 22:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Dabar reikės kelių žemiausio lygio funkcijų. Kadangi per vieną koją reikės rašyti, skaityti.
Resetas: remiantis INITIALIZATION TIMING Figure 13 .
http://neutrino.phys.ksu.edu/~gahs/doublechooz/DC_SlowMRS/DS/DS18B20.pdf
Reikės per koją išvesti 0 ir išlaikyti 480 us, po to koją paleisti išlaukti 15...60us tada tik pradės 1-wire įrenginys pradės savo prisistatymo impulsą tai 0 trukmės 60... 240us. Iškart matosi laikai užduoti diapazonais, nes tai priklauso nuo daviklių sujungimo laidų atstumo gal ir pačių daviklių. Gali pasidaryti automatinį paderinimą. Resetas nutraukia daviklio komandą, bet ne būseną, jei matuoti ir konvertuotis tai jis toliau darys, bet jei nepabaigėt nusiųsti komandos tai ją nutrauks.
Mes galim sužinoti ar įrenginys pajungtas ir ar netrumpina, tik tam tikrais tarpais pasitikrinti kas ant kojos.
Kodas:

unsigned char ResetImpulsas ()
{
unsigned char pozymis, b;

send_0;
 delejus (250);
delejus (250);
send_1;
delejus (60);
b = (PINC & 0b10000000)>>7;
if (b == 0){
pozymis = 1;}else {pozymis = 0;}
delejus (250);
delejus (250);
b = (PINC & 0b10000000)>>7;
if (b != 0){pozymis = 1;}else {pozymis = 0;}
return pozymis;
}

Čia vienas iš variantų;
Kadangi naudojau Atmega16 be kvarco su vidiniu RC ir kalibraciniu registru. Dar matau reikia dviejų funkcijų.
Kodas:

ISR (TIMER0_OVF_vect)
{
  delejaus_flagas = 0x00;
}

Tai pertraukimai:
Ir funkcija..
Kodas:

void delejus (unsigned char a){
TCCR0 = 0x02;
TIFR &= 0xFF;
TIMSK |= 0b00000001;
TCNT0 = 0xFF - a;
delejaus_flagas = 0x01;
while (delejaus_flagas){
}
}
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 14, 23:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sekantis žingsnis:
Turim išmokti siusti 1 ir 0, remiantis to paties pdf informacija READ/WRITE TIME SLOT TIMING DIAGRAM Figure 14.
Kad siųsti 0 reikia linijoje išlaikyti 0 tarp 60...120 us, o kad siusti 1 reikia išlaikyti 0 truputi daugiau už 1 us ir koją paleisti.
Reziume: 0 koja 0 išlaikymas daugiau 60 us ir paleidžiam koją, 1 koja 0 išlaikom truputi daugiau 1 us ir paleidžiam koją.
Kodas:

void sendBit (char bit)
{
send_0;
delejus (0);
   if (bit != 0)
   {send_1;
   delejus (55);
   }else {delejus (65);
   send_1;}
delejus (8);
}
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 14, 23:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sekantis žingsnis nuskaityti bitą. Skaitant 1 arba 0 reikia į koja išvesti 0 ir paleisti. Remiantis pdf READ/WRITE TIME SLOT TIMING DIAGRAM Figure 14
Paveikslu skaitant 0 turim 15 us garantuotų ir 45 us neapibrežtų, tai kad nedaryti mandros funkcijos reikia tiksliai parinkti laikus kada skaityti kojos būseną, gali abiem atvejais gauti 1.
Kodas:

unsigned char readBit (void)
{
unsigned char reiksme, b;
send_0;
asm volatile ("nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
::);
send_1;
delejus (4);
b = (PINC & 0b10000000)>>7;
if (b != 0){reiksme = 1;}else {reiksme = 0;}
delejus (45);
return reiksme;
}

Teko net nopus panaudoti, kad surasti aukso vidurį.... Very Happy
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 00:56 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Šiais funkcijas reikia apjungti, kad rašytų ir skaitytų baitą, nes jis mums tik aktualus. Na jei ką sudomins idėsiu... Very Happy
Čia buvo lengvoji dalis:
SEARCH ROM [F0h] arba musų atveju ID nuskaitymas, aprašymas buvo tame pdf linkas jis ir dabar yra prie komandos, tik kaip supratau Dallas nupirko Maxim nukreipia į maxim puslapį ir ten reikia ieškoti.
Na truputi yra algoritme.
Paleidus komandą F0 visi įrenginiai ją vykdys. Turim atlikti du skaitymus vienu skaitymu gausim tikrą bito reikšmę kitu invertuotą, jei bito reikšmė 0 tai pirmu skaitymu nuskaitysi gausi 0 antru 1. Nuskaitant antrą bitą reikia siusti tikrąją prieš tai buvusio bito reikšmę. Jei įrengimas vienas tai du skaitymai vienas įrašymas ir kartoti iki pabaigos, visą 64 bitų ID turi. Jei įrašysi netą reikšmę daviklis išeis iš komandos ir nuskaitymas nutrūks.
Turint du daviklius, ir jų ID skiriasi kokiam 5 bite, o iki tol sutampa. Paleidus komandą F0 visi davikliai pradeda atsakinėti į skaitymus ir elgiasi tai pat. Tik skaitant 5 bitą pirmu skaitymu atsakys vienas atsakys 1 kitas 0, bet pas mus atviras kolektorius gausim 0, antru abu invertuotais atsakys. Vienas 0 kitas 1 i vėl gausime 0. Gaunasi konfliktas arba sankryža, turim pasirinkti, kuriuo keliu eisim jei vesim 0 tai tas daviklis kuria reikėjo 1 atsijungs ir daugiau netrukdys. Gaunasi turi tik vieno daviklio ID, o reikia abiejų. Tai turim praeiti dar kartą ir konflikto vietoje pakeisti kelią priešingu nei prieš tai eitu, tai tada atsijungs pirmas daviklis ir netrukdys. Turėsime ir antro daviklio ID.
Algoritmo sudėtingumą sudaro, kad reikia praeiti visus kelius, nei vieno daviklio nepraleisti, neiti tuo pačiu keliu antrą kartą, tai reiškia turi asiminti konflikto vietą ir kuriuo keliu praėjai.
Du davikliai vienas konfliktas, penki davikliai keturi konfliktai....
Gal klausimų yra.... Very Happy Very Happy Very Happy Very Happy Very Happy
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 12:11 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Geriau parasyk tokias 1-Wire tvarkykles, kurios ir 1-Wire standartus tenkintu, bet ir kitu komunikaciju netrikdytu.
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 14:35 Pranešti apie taisyklių pažeidimą Atsakyti su citata
andriusa
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
Gal gali kas nors išversti iš senovės baltų į šiuolaikinę lietuvių kalbą? Rolling Eyes
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 19:19 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Badas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Cia hackeriu kalba parasyta. Ja reikia atskirai mokytis Smile
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 21:43 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
andriusa rašo:
Gal gali kas nors išversti iš senovės baltų į šiuolaikinę lietuvių kalbą? Rolling Eyes
simple:
I2C 400kHz vyksta iki 50000 rasymo/skaitymo operaciju per sekunde...
SPI ir Serial komunikacijos imanomos dar didesniais greiciais...
todel jei 1-Wire tvarkykle kreiva, tai neradusi daviklio ar ivykus kokiai nors klaidai buse, per ilgai uzlokina uCU, todel prarandami kitu komunikaciju simboliai ir sistema tampa jautri trikdziams.
Defaultines 1-Wire bibliotekos tokios ir yra, o aparatinis I2C, SPI ir USART buferizavimas bei DMA pigiuose uCU nenumatytas arba max 2 simboliai.
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 23:20 Pranešti apie taisyklių pažeidimą Atsakyti su citata
andriusa
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
AlgisL rašo:
andriusa rašo:
Gal gali kas nors išversti iš senovės baltų į šiuolaikinę lietuvių kalbą? Rolling Eyes
simple:
I2C 400kHz vyksta iki 50000 rasymo/skaitymo operaciju per sekunde...
SPI ir Serial komunikacijos imanomos dar didesniais greiciais...
todel jei 1-Wire tvarkykle kreiva, tai neradusi daviklio ar ivykus kokiai nors klaidai buse, per ilgai uzlokina uCU, todel prarandami kitu komunikaciju simboliai ir sistema tampa jautri trikdziams.
Defaultines 1-Wire bibliotekos tokios ir yra, o aparatinis I2C, SPI ir USART buferizavimas bei DMA pigiuose uCU nenumatytas arba max 2 simboliai.


Ne tai, man pono krieno aprašymas neįkandamas Smile
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 23:32 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Very Happy Very Happy Very Happy Kuri dalis....
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 15, 23:45 Pranešti apie taisyklių pažeidimą Atsakyti su citata
sopkls
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
krienas rašo:
Very Happy Very Happy Very Happy Kuri dalis....

Visos. Sakyčiau kas smegenų turi tai datašytą ir aplication notes skaitydamas geriau supras visą veikimą, o kokiam pradedančiajam visas tavo parašytas jovalas bus nesuprantamas, jau geriau kokį tutorialą žinoma užsienio kalba susirasti ir perskaityti - tikrai bus informatyviau ir lengviau suprantama.
Panašu kad rašai tik dėl to kad rašyti, o ne dėl to kad suteikti kažkam realios pagalbos.
 Vienas laidas "1-Wire"
PranešimasParašytas: 2016 12 16, 00:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kadangi truputi apšilot.
Pasidalinsiu savo brangenybe, paieškos funkcija. Ji rasta internete, bet mokėjo surasti tik vieną daviklį nors parašyta ieškoti daug. Teko pavargti apie dvi savaites, kol ji pradėjo veikti, tad nenustebkit rade daug anglišku žodžiu, net jos pavadinimą originalų palikau...
Kodas:

int OWSearch()
{ char krypciu_seka [10]= {0,0,0,0,0,0,0,0,0,0};
   int id_bit_number;
   int last_zero, search_result;
   int id_bit, cmp_id_bit;
   char i;
   char riba = 0;
   unsigned char rom_byte_mask, Paieskos_kryptis;
int Daviklio_indeksas;
char EinamasKonfliktas;
char Konfliktu_suma;
unsigned char rom_byte_number;
int Davikliu_skaicius;
    Davikliu_skaicius = 0 ;
   id_bit_number = 0;
   last_zero = 0;
   rom_byte_number = 0;
   rom_byte_mask = 1;
   search_result = 0;
   crc8 = 0;
Daviklio_indeksas = 0;
EinamasKonfliktas = 0;
Konfliktu_suma = 0;

 Konfliktas = 0;          //globalus
         LastDeviceFlag = FALSE;     //globalus
         LastFamilyDiscrepancy = 0;

   if (!LastDeviceFlag)
   {
   
do {
    ResetImpulsas ();
     
   //Siunciu komanda
      send_Baita (0xF0); 

      // paieškos kilpa
     do
     {
      do
      {
     
         id_bit = readBit();          // Du skirtingi turi buti
         cmp_id_bit = readBit();

   
            if (id_bit != cmp_id_bit)
               {Paieskos_kryptis = id_bit;} 
            else
            {
         EinamasKonfliktas++ ;
           
               if ( krypciu_seka[   EinamasKonfliktas]  == 0 )
                  {Paieskos_kryptis = 0;}
                 
                   else
                { Paieskos_kryptis = 1;
            
              
             }
            
         
             
            }
            if (Paieskos_kryptis == 1)
              {ROM_NO [Daviklio_indeksas] [rom_byte_number] |= rom_byte_mask;}
            else
              {ROM_NO [Daviklio_indeksas] [rom_byte_number] &= ~rom_byte_mask;}

            sendBit(Paieskos_kryptis);

   
            id_bit_number++;
            rom_byte_mask <<= 1;

           
         }
     
      while(id_bit_number < 8);
          rom_byte_number++;
             id_bit_number = 0;
          rom_byte_mask =0x01;
      
        }
      while (rom_byte_number < 8);
      //Davikliu_skaicius++;
     //---------------------------------------------
    Daviklio_indeksas++;
                rom_byte_number = 0;
             id_bit_number = 0;
          rom_byte_mask =0x01;
//===================================
if (krypciu_seka[EinamasKonfliktas] == 0){
krypciu_seka[EinamasKonfliktas] = 1;
}
if (EinamasKonfliktas > Konfliktu_suma){
Konfliktu_suma = EinamasKonfliktas;
}
if (riba == 0){
if (Daviklio_indeksas >= Konfliktu_suma){
 for (i=Konfliktu_suma; i >1; i--){

 if (krypciu_seka [i] == 0){
 riba = 1;
krypciu_seka [i] = 1;


 }else {krypciu_seka [i] = 0;}
}
 }
}
EinamasKonfliktas = 0;
//===================================     
        
      }
     while (Daviklio_indeksas < 10);       
         
}

 search_result = Davikliu_skaicius ;

   return Daviklio_indeksas;
}

Kaip matau ją suprast, neužteks dviejų savaičių.
Funkcija veikianti ieško 10 daviklių nesunku pakeisti, kad ir šimtą ieškotų.
Prižiūrėkit, lepinkit ją, nepamirškit, tobulinkit, neleiskite dulkėti... Very Happy Very Happy Very Happy
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2, 3  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

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

„Deinavos baldai“ — šeimos baldai

FS 22 Tractors
Farming Simulator 19 Mods, FS 22 Maps, FS22 Mods
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS22 Trucks
VAT calculator
VAT number check, What is VAT, How much is VAT
Paskola internetu
Vartojimo paskola, paskola automobiliui, paskola būsto remontui
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS22 Mods
FS22 Harvesters, FS22 Tractors Mods, FS22 Maps Mods
FS22 Mods
FS22 Maps,
FS22 Harvesters,
FS22 Tractors
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
Sims 4 Mods
Sims 4 CC Clothes,
Sims 4 Hair CC,
Sims 4 Skill Cheat
Optic sight
Binoculars for hunting elk,
Best compact binoculars,
Riflescope hunting
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
Farming Simulator 2019 Mods, FS22 Mods, FS22 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama