Forum

Forum

1-Wire / Loxone / Arduino UDP  

Page 3 / 3
  RSS

David
(@david-pr)
Reputable Member
Joined: 2 years ago
Posts: 397
06/05/2019 8:53 pm  

zkus verzi 1.8.4

Arduino

This post was modified 5 months ago by David

ReplyQuote
killeriq
(@killeriq)
Reputable Member
Joined: 3 years ago
Posts: 311
07/05/2019 12:07 am  

ja som na Arduino IDE 1.8.9 ale pouzivam na vsetko radsej "Programino IDE" je to prehladnejsie.

 

@msk : tak som to skusal a vacsinou po zapojeni 11 senzora to seklo pripadne nacitalo 0, skusim este nejaky "cisty" detekovaci kod


ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
07/05/2019 12:09 am  

Downgrade na Arduino IDE 1.8.4. Warnnings v logu zmizely, ale problém s detekováním senzorů trvá. Ale i tak, díky za tip.


ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
08/05/2019 12:43 pm  

Tak jsem to našel. Skeč nechává senzorům příliš málo času na konverzi. Ostatním to očividně problémy nedělá, ale v mém případě to vadí. Tady je řešení:

OneWireReading.cpp, řádek 179 za ds1820->read(); doplňte zpoždění 1000ms:

unsigned long startMillis = millis();
while(millis() - startMillis < 1000);

 

@jirin.sv : Prosím o kontrolu a případně o aktualizaci tvého kódu na wiki.


David and Aleq liked
ReplyQuote
msk
 msk
(@dusanmsk)
Prominent Member Moderator
Joined: 3 years ago
Posts: 989
09/05/2019 11:18 am  

Cize to bol timing, ako som tvrdil od zaciatku. Preco tam namiesto toho podivneho cyklu nedas delay(1000)?

Inak sekunda mi pripada moc, ked som ladil 1wire na railduino tak som bol na nejakych nizsich stovkach milisekund. Zaroven som nacitavanie hodnot prekladal vyhladavanim novych cidiel. Pozeram ze to v medzicase Pavel prepisal, ale myslienka zostala, vid processOneWire() v https://github.com/dusanmsk/railduino-udp/blob/master/railduino_udp_485_official/Railduino_1_3_485_UDP.ino

This post was modified 4 months ago by msk

ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
09/05/2019 11:56 am  

Přečetl jsem si na netu pár děsně chytrých článků, které tvrdily, že delay blokuje procesor, zatěžuje Arduino, přispívá k oteplování planety a vymírání druhů...

Ale vážně. Mám špatnou praktickou zkušenost s delay. Na mém Nano (čínský klon) se mi stávalo, že skutečné zpoždění bylo mnohem kratší než mělo být (stávalo se mi to hlavně na začátku skeče, v setupu). Takže delay příliš nevěřím a zkouším používat millis, i za cenu toho, že potřebuju další unsigned long proměnnou (tj. ukrajuju z paměti).

Jo, 1000ms asi bude s dostatečnou rezervou. Ale mě ta 1s nezabije.

Ještě mě napadlo, pokud mám víc sběrnic, bude Arduino jednotlivé sběrnice zpracovávat paralelně nebo za sebou? Pokud paralelně, tak máme další důvod pro millis.


ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
09/05/2019 12:08 pm  

Jinak původně jsem chtěl na 1-wire zkusit kód z Railduina (buď ten tvůj nebo od P. Sedláčka). Ale neuměl jsem ho přepsat tak, aby fungoval na vícero sběrnic.


ReplyQuote
msk
 msk
(@dusanmsk)
Prominent Member Moderator
Joined: 3 years ago
Posts: 989
09/05/2019 12:43 pm  

Samozrejme ze delay blokuje procesor, ale to blokuje aj ten tvoj while. Arduino je single-threaded, takze pokial mas nejake casove okna medzi ktorymi nechces blokovat procesor, musis to riesit tokom kodu tak, ako som to ja robil timermi v railduine. Ze delay nespi presne urceny cas ma prekvapuje, skusim k tomu nieco dohladat.Identicky aj v pripade obsluhy roznych zbernic budes musiet raz komunikovat jednou a raz druhou v rozumne prekrytych casovych oknach.


ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
01/06/2019 1:37 pm  

Zdar,

dávám dohromady Arduino s několika 1-wire sběrnicemi. Zároveň chci přes Arduino vypínat napájení těchto 1-wire sběrnic. Kvůli větší spolehlivosti - při vypnutí a zapnutí napájení se znovu "nahodí" senzory, na kterých byla chyba čtení.

Postavil jsem to, funguje to, ale stejně bych poprosil někoho zkušenějšího o kontrolu. Napájení sběrnic zapínám přes PNP tranzistor (max proud má 200mA, to stačí). Pull-up rezistory mám nakonec 1k.

Díky moc!

A2


ReplyQuote
msk
 msk
(@dusanmsk)
Prominent Member Moderator
Joined: 3 years ago
Posts: 989
03/06/2019 1:19 pm  

Nevidim v tom zasadny problem. Mozno by som zvazil dat na tie pullupy trimmer.

 

 

 


ReplyQuote
zigy
 zigy
(@zigy)
Active Member
Joined: 2 years ago
Posts: 9
05/06/2019 5:59 pm  

Ahoj, fungují Vám SEDtronic senzory s Arduino 1wire?

Na arduinu ds18b20 přečtu v pohodě. U SEDtronicu ds2438 přečtu pouze teplotu, vad a vdd. Vsens je stále na nule. S originál Loxone 1wire SEDtronici jedou v pohodě.

Na přiloženém obrázku je screen ze sériové komunikace s Arduinem. Na čidlo jsem dýchnul aby bylo vidět změny hodnot.

ds2438

 

na dalších přílohách je screen z logického analyzátoru, ch 0 je arduino 1wire a připojené jedno čidlo, ch 2 je originál Loxone extension a připojené také jedno čidlo.

la0

la1

la2

la3

This post was modified 4 months ago by zigy

ReplyQuote
Sedtronic
(@sedtronic)
Trusted Member
Joined: 2 years ago
Posts: 58
10/06/2019 2:17 pm  

@zigy

Doporučuji pročíst zdrojový kód pro Railduino 2.0, kde se pracuje s 1wire čidly DS2438 (Unica 1wire) - viz. knihovna DS2438.h

 


ReplyQuote
budulinek
(@budulinek)
Trusted Member
Joined: 2 years ago
Posts: 81
22/06/2019 2:19 am  

Zdar,

hodil jsem na Github skeč na multibus 1-wire. Je to postavené na firmwaru k Railduinu.

https://github.com/budulinek/OneWire-Multibus-UDP

@dusanmsk díky za tip s trimmerem.

Využil jsem ty fígle s tokem kódu, co jsou v Railduinu. Postavil jsem to tak, abych ve funkci processOnewire() neměl žádné for a while loopy ani nic jiného, co by mohlo blokovat procesor.

@sedtronic eliminoval jsem i to pětisekundové čekání na konverzi 1-wire (oneWireSubCycle). Pokud použiješ DallasTemperature.h tak je to úplně zbytečné.

Ta knihovna umožňuje jednoduše poslat požadavek na konverzi na všechny senzory na sběrnici naráz (viz fce requestTemperatures() ). Mám nastavený "asynchronní mód" přes setWaitForConversion(false), takže Arduino nečeká, až konverze proběhne, a pokračuje (přes hlavní loop) v exekuci kódu. Teprve když isConversionComplete (všechny senzory na sběrnici dokončily konverzi), tak se přečte teplota. To vypínání napájení sběrnice přes oneWirePowerPin tam mám kvůli zvýšení spolehlivosti. Občas se mi jeden senzor dostal do chybového stavu (a pak v něm zůstal). Zjistil jsem, že pokud vypnu a zapnu napájení, tak senzor znovu "naskočí".

Snažil jsem se zachovat strukturu a logiku Railduina, pokud by to Pavel chtěl použít v Railduinu na rozšíření počtu 1-wire senzorů. Ale udělal jsem pár změn. Kvůli malé paměti (mám jenom Nano, ne Mega) jsem musel optimalizovat kód (vyhodit pole sensors2438 a senzory filtrovat podle typu až ve fci processOnewire).

Udělal jsem pár změn v syntaxi. Doplnil jsem "error" a "detected" pro hlášení chyb a nových senzorů. Proto jsem musel do syntaxe k DS18B20 vložil ten "temp" (pokud bych to tam nedal, tak by Loxone parsoval "error" a "detected" zprávu jako  hodnotu teploty nula. Syntax DS2438 jsem neměnil. Vlastně kód DS2438 jsem prostě převzal, neupravoval a vůbec netestoval, páč DS2438 fyzicky nemám.

@killeriq v syntaxi je i číslo sběrnice, tak můžeš vyzkoušet.

This post was modified 3 months ago by budulinek

msk liked
ReplyQuote
killeriq
(@killeriq)
Reputable Member
Joined: 3 years ago
Posts: 311
09/09/2019 10:27 pm  

BTW: vyriesil uz niekto viac ako 10 senzorov na jednu zbernicu?

 


ReplyQuote
Page 3 / 3
Share:
  
Working

Please Login or Register