Forum

Forum

1-Wire / Loxone / A...
 
Notifications
Clear all

1-Wire / Loxone / Arduino UDP

70 Posts
12 Users
4 Likes
16.4 K Views
(@david-pr)
Honorable Member
Joined: 6 years ago
Posts: 643
 

zkus verzi 1.8.4

Arduino


   
ReplyQuote
(@killeriq)
Prominent Member
Joined: 7 years ago
Posts: 816
Topic starter  

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)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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 reacted
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1880
 

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


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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)
Member
Joined: 7 years ago
Posts: 1880
 

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)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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)
Member
Joined: 7 years ago
Posts: 1880
 

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

 

 

 


   
ReplyQuote
 zigy
(@zigy)
Active Member
Joined: 6 years ago
Posts: 13
 

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 5 years ago by zigy

   
ReplyQuote
Sedtronic
(@sedtronic)
Trusted Member
Joined: 7 years ago
Posts: 61
 

@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)
Reputable Member
Joined: 7 years ago
Posts: 355
 

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.


   
msk reacted
ReplyQuote
(@killeriq)
Prominent Member
Joined: 7 years ago
Posts: 816
Topic starter  

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

 


   
ReplyQuote
 Bery
(@bery)
Reputable Member
Joined: 7 years ago
Posts: 379
 

Já jsem vyřešil proč mi některá čidla ukazovala na Loxone 1 wire občas 25°C a občas ta sběrnice nefungovala vůbec. Chovalo se to tak že třeba na 30 minut sběrnice vypadla uplně. Dělali to vadná čidla, z gme.cz a arduinoshopu jsem nakoupil čidla DS18B20 v kovovém pouzdru a 90% z nich bylo vadných. Vyměnil jsem všechny kovové čidla za klasiku v TO92 přetažených bužírkou a řídím s tím vytápění, ohřev vody a rekuperaci v celém domě bez jediného problému cca měsíc v kuse. A to má téměř každé čidlo svůj kabel z rozvaděče a mám bungalov, takže dlouhé vedení. Celkem mám 14 čidel a budu přidávat další.


   
ReplyQuote
Page 3 / 5
Share: