Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Arduino - kako DS18B20 očitavanje spakovati u modbus (RTU) registar

[es] :: Elektronika :: Mikrokontroleri :: Arduino - kako DS18B20 očitavanje spakovati u modbus (RTU) registar

[ Pregleda: 1151 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milekNS
Novi Sad

Član broj: 297140
Poruke: 77
93.87.238.*



+8 Profil

icon Arduino - kako DS18B20 očitavanje spakovati u modbus (RTU) registar07.12.2015. u 19:15 - pre 101 meseci
Dakle... trenutno imam arduino uno i tek započet kod za modbus rtu slave, racunar je master naravno. To trenutno se odnosi samo na čitanje analognih ulaza.
E sada, ja bih želeo da na arduino prokačim onewire ds18b20 digitalni temperaturni senzor i nekako njegovo očitavanje recimo 73.5C (samo primer) da spakujem/konvertujem u (mislim da je to Function Code 03 - Read Holding Registers) kao da je očitana analogna vrednost i da tako šalje serijski na aplikaciju na pc-u (posluzice za testiranje qModMaster a dalje u planu neka scada za siromaha m2m mango).

Pretpostavljam da ovo nisam jasno napisao jer evo i ja sam čitao par puta da vidim ima li smisla pa logicno pojasnicu po potrebi :D

p.s. ovako izgleda osnova koda koji radi modbus rtu
Code:


modbusDevice regBank;
modbusSlave slave;

int AI0,AI1,AI2,AI3,AI4,AI5;


void setup()
{   
  regBank.setId(1); ///Set Slave ID

//Analog input registers
  regBank.add(30001);
  regBank.add(30002);
  regBank.add(30003);
  regBank.add(30004);
  regBank.add(30005);
  regBank.add(30006);

  slave._device = &regBank;  
  slave.setBaud(19200);   
  
   
}
void loop(){

  while(1){   
  
  //Analogni ulaz
    AI0 = analogRead(0);
    delay(10);
    AI0 = analogRead(0);
    regBank.set(30001, (word) AI0);
    delay(10);
    
    AI1 = analogRead(1);
    delay(10);
    AI1 = analogRead(1);
    regBank.set(30002, (word) AI1);
    delay(10);
    
    AI2 = analogRead(2);
    delay(10);
    AI2 = analogRead(2);
    regBank.set(30003, (word) AI2);
    delay(10);
    
    AI3 = analogRead(3);
    delay(10);
    AI3 = analogRead(3);
    regBank.set(30004, (word) AI3);
    delay(10);
    
    AI4 = analogRead(4);
    delay(10);
    AI4 = analogRead(4);
    regBank.set(30005, (word) AI4);
    delay(10);
    
    AI5 = analogRead(5);
    delay(10);
    AI5 = analogRead(5);
    regBank.set(30006, (word) AI5);
    delay(10);
        
  
        
  slave.run();  
  }
}



dakle ovo je osnovni deo koda trenutno. kao sto vidite i kao sto je ocigledno kontroler ATmega328p na arduinu čita sve analogne ulaze i "set-uje" vrednosti 0-1023 u registre od 30001 do 30006.
E ja dakle zelim da očitam ds18b20 pomocu biblioteka dalas i onewire i da to spakujem recimo u registar 30007 a na racunaru vidim u nekom zapisu onih 73.5C da lici na ocitanu temperaturu. u inlude i setap bih dodao sve sto je potrebno za taj senzor samo ne znam kako da to pretocim u holding registar. Hvala
 
Odgovor na temu

milekNS
Novi Sad

Član broj: 297140
Poruke: 77
*.dynamic.isp.telekom.rs.



+8 Profil

icon Re: Arduino - kako DS18B20 očitavanje spakovati u modbus (RTU) registar24.12.2015. u 18:51 - pre 101 meseci
u prethodnoj poruci napravio sam veliku grešku, napisao sam Function Code 03 - Read holding registers a trebalo je

Function Code 04 - Read Input Registers mada 157 pregleda i 0 odgovora ne obećava... :D


edit: sam pitam, sam odgovaram - rešeno


u ono loop while(1) sam samo ubacio sensors.requestTemperatures();
i pored 6 postojećih (30001 do 30006) formirao novi registar sa:

Code:


    AI6 = sensors.getTempCByIndex(0);
    delay(10);
    AI6 = sensors.getTempCByIndex(0);
    regBank.set(30007, (word) AI6);
    delay(10);



ali ne uspevam dobiti očitavanje preciznije od okruglog 1°C pa eto ako ko zna šta bih mogao tu da uradim da bude preciznost makar 0.5°C ?
Ono word mi je ok za redovno očitavanje analognih ulaza a A6 je dodat i na početku (ono int A0,A1,...,A6) a u mangoM2M taj registar 30007 je sačuvan pod 2 byte unsigned integer pa se ta preciznost u tom procesu negde gubi, uglavnom ne znam ni ja više šta je šta koliko sam sebe zbunio.

[Ovu poruku je menjao milekNS dana 24.12.2015. u 23:30 GMT+1]

[Ovu poruku je menjao milekNS dana 24.12.2015. u 23:37 GMT+1]

[Ovu poruku je menjao milekNS dana 24.12.2015. u 23:37 GMT+1]
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Arduino - kako DS18B20 očitavanje spakovati u modbus (RTU) registar

[ Pregleda: 1151 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.