Jak wysyłać sygnał 1-Wire z Arduino ? - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Sieciowe Protokoły i Urządzenia (https://forum.arduinopolska.pl/dzial-sieciowe-protoko%C5%82y-i-urz%C4%85dzenia) +--- Wątek: Jak wysyłać sygnał 1-Wire z Arduino ? (/watek-jak-wysy%C5%82a%C4%87-sygna%C5%82-1-wire-z-arduino) |
Jak wysyłać sygnał 1-Wire z Arduino ? - HAL_9000_PL - 13-02-2021 Cześć, Zbieram dane z kilku czujników DS18B20 w Arduino. Obrabiam je (licze średnią temperaturę) następnie chcę przesłać wynik do innego mikrokontrolera STM32 (w którym nie mogę grzebać i go programować). Sygnał musi być przesyłany po 1-Wire. Czy da sie w Arduino zasymulować sygnał 1-Wire na wyjściu aby był widoczny jako jeden sensor DS18B20 ? RE: Jak wysyłać sygnał 1-Wire z Arduino ? - Agregacik - 13-02-2021 Może to Ci pomoże. RE: Jak wysyłać sygnał 1-Wire z Arduino ? - HAL_9000_PL - 13-02-2021 Tak o coś takiego chodziło. Przykład z biblioteki dla Arduino Uno kompiluje się bez problemu. Problem pojawia się gdy próbuję skompilować go dla Arduino Mega: Kompilowanie szkicu... "F:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IF:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IF:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\mega" "-IF:\Program Files (x86)\Arduino\libraries\onewirearduinoslave\src" "C:\Users\HAL9000\AppData\Local\Temp\arduino_build_620321\sketch\FakeDS18B20.ino.cpp" -o "C:\Users\HAL9000\AppData\Local\Temp\arduino_build_620321\sketch\FakeDS18B20.ino.cpp.o" In file included from F:\Program Files (x86)\Arduino\libraries\onewirearduinoslave\src/OneWireSlave.h:5:0, from F:\Program Files (x86)\Arduino\libraries\onewirearduinoslave\examples\FakeDS18B20\FakeDS18B20.ino:2: F:\Program Files (x86)\Arduino\libraries\onewirearduinoslave\src/utility/LowLevel.h: In member function 'void Pin::attachInterrupt(void (*)(), int)': F:\Program Files (x86)\Arduino\libraries\onewirearduinoslave\src/utility/LowLevel.h:157:3: error: 'CLEARINTERRUPT' was not declared in this scope CLEARINTERRUPT; // clear any pending interrupt (we want to call the handler only for interrupts happening after it is attached) ^ Użycie biblioteki onewirearduinoslave w wersji 0.1 z folderu: F:\Program Files (x86)\Arduino\libraries\onewirearduinoslave exit status 1 Błąd kompilacji dla płytki Arduino/Genuino Mega or Mega 2560. Czy jest na to jakaś rada ? RE: Jak wysyłać sygnał 1-Wire z Arduino ? - Agregacik - 14-02-2021 Poszukaj w necie podobnych rozwiązań. Są zapewne inne biblioteki. Ja bawiłem się tylko z nano lub uno i działało. Robiłem to z ciekawości i nie zastosowałem tego w praktyce. RE: Jak wysyłać sygnał 1-Wire z Arduino ? - kaczakat - 19-02-2021 W tej bibliotece do DS slave w lowlevel.h jest używany dostęp do przerwań na niskim poziomie w taki sposób, że są one zdefiniowane tylko dla wybranych uC, np. 328P i Attiny85, innych z AVR nie widzę, tak że użyj tych lub szukaj innej biblioteki. Zresztą jak będziesz używał dość mocno uC to i tak się wszystko rozjedzie, więc po prostu weź 328P, wgraj ten szkic, wyślij mu dane po UART z MEGA, a ten dalej będzie udawał DS'a dla STM32. RE: Jak wysyłać sygnał 1-Wire z Arduino ? - HAL_9000_PL - 19-02-2021 Zaczęło mi działać ! Więc to już coś. Kod z przykładu FakeDS18B20. Mam jedynie problemy z tym, że gdy robię to pomiędzy dwoma Arduino to co jakiś czas zamiast wpisanej wartości (42) wywala mi wartość -127 czyli nie czyta. Musi coś być z brakiem dokładnego "zgrania się" mastera i slava. Doszedłem do tego, że za to odpowiada ta funkcja IF, ale niestety , nie rozumiem jej: Kod: if (localState == DS_ConvertingTemperature && millis() > localConversionStartTime + 750) |