Obok jest wątek o problemach z tymi układami. Czy jest jakaś cyfrowa alternatywa dla nivh, co miałaby prosty interfejs, najlepiej jednoprzewodowy? Używając 1wire na słabych mcu, jest problem w zmieszczeniem się w slotach czasowych gdy akurat w trakcie komunikacji 1wire przychodzi przerwanie z innego peryferium...
Alternatywa dla DS18B20
Dec 08, 2014
23 Replies
Marek pisze:
Przerwanie można zablokować, rozwiązaniem byłby interfejs sprzętowy, a te już raczej wielożyłowe. A problemem z czujnikami temperatury 1-wire jest niedostateczne ich zabezpieczenie przed wpływem warunków pogodowych.
Co masz na myśli, konkretnie? I dlaczego czujniki z innym interface miałyby być łatwiejsze do zabezpieczenia?
Wiedziałem, że ktoś zaraz coś takiego napisze. Nie po to są przerwania, żeby je blokować, dla mnie jest to niedopuszczalne pójście na łatwiznę, świadczące o bezradności programisty albo sprzętu.
Jedno nie detrminuje drugiego. Zdaje się, są jakieś egzotyczne mcu ze sprzętowym 1wire.
A wystarczyłoby aby okna transmisyjne w 1wire były w ms a nie us. O ile w trybie pasożytniczym jest zrozumiałe użycie us, to w trybie z normalnym zasilaniem okna mogłyby być dłuższe. Czy naprawdę wszyscy muszą mieć odczytaną temp. poniżej 1ms? Szczególnie to jest nonsens, gdy i tak trzeba czekać na konwersję w liczoną w ms (tak wiem, 1wire to nie tylko termometry).
A jakiej rady się spodziewałeś skoro nie przewidziałeś sprzętowego generowania bitów? Jak przerwań nie jest za dużo i są w miarę przewidywalne (np. od timera) to możesz jeszcze próbować synchronizować wysyłanie bitów z przerwaniem tak żeby mieć pewność, że przerwanie nie wlezie w środek bitu.
Ten egzotyczny sprzęt nazywa się UART.
formatting link
Napisałem propozycję, dłuższe okno. Ale może niepotrzebnie upieram się przy cyfrowym. Może są tanie i proste analogi V=f(T)?
Wiedziałem, ze ktoś to zaproponuje ;). Uart potrzebny mi jest do czegoś innego. To ma być propozycja do małych mcu, gdzie z reguły jest tylko jeden uart.
W dniu 2014-12-09 00:12, Marek pisze:
no czy lepszym to nie wiem, ale alternatywą może być tmp102, też cyfrowy. i całe mnóstwo analogów
Mierzysz tylko temperaturę czy coś jeszcze? Bo obecnie z większości cyfrowych barometrów, akceleratorów/gyro można też odczytywać temperaturę.
LM35 i podobne.
Pozdrawiam
Marek
Ale to do dallasa napisz, żeby ci zrobił krzem z wolniejszą transmisją.
Oczywiście że są, np. LM35 itp.
Impuls możesz generować czymkolwiek np. timerem, spi itd.
Spojrzałem jeszcze na czasy w 1wire. Impulsy są od 1us do max 60us. Przerwania blokujesz tylko na czas trwania stanu niskiego, bo odległość między bitami nie jest krytyczna. Masz taką aplikację, że opóźnienie przerwania o max. 60us zrobi ci różnicę?
odległość
Przy wysyłaniu owszem, ale przy odczycie nie wiem czy czujnik chce nadać 0 czy 1, stąd przerwania musiałyby być blokowane też w czasie odczytu.
Jeśli w trakcie komunikacji 1wire zdaży mi przerwanie mam bzdety na
1wire bo crc się nie zgadza. Na razie rozwiązałem to tak, że ignoruję taką błędna transmisję i korzystam z prawidłowej wartości odczytanej poprzednio. System kontroluje liczbę błędnych transmisji i jeśli zdarzają się pod rząd zbyt dużą ilość razy to sygnalizowany jest problem.
Wiedziałem, ze ktoś to zaproponuje ;). Uart potrzebny mi jest do czegoś innego. To ma być propozycja do małych mcu, gdzie z reguły jest tylko jeden uart.
Jeśli w systemie masz przerwanie zegarowe np. co 1ms, to możesz tam obsługiwać 1-wire po jednym bicie na przerwanie. Impuls resetu też można załączać na określoną ilość taktów. Warunkiem jest to aby to przerwanie miało najwyższy priorytet. Metoda sprawdzona praktycznie.
W dniu 2014-12-09 01:13, AlexY pisze:
Istnieją sprzętowe interfejsy 1-wire. Układy takie produkuje Dallas. Podłączasz to z jednej strony do I2C, z drugiej masz 1wire. Największą zaletą jest możliwość postawienia galwanicznej izolacji pomiędzy takim układem a MCU.
Odczyt bitu możesz zrobić w połowie maksymalnej długości, czyli po 30us i tylko na tyle zablokować przerwania. Kolejne 30us do końca bitu możesz czekać już przy włączonych przerwaniach.
A co się stanie jeśli przerwanie zostanie odebrane te 60us później?
Masz dostępny konkretny standard którego nie zmienisz, nie walcz z tym, dostosuj się/swój projekt, albo zmień magistralę.
Po kawałku i za kilka dni będziemy wiedzieć wszystko co powinno znaleźć się w pierwszym poście.
Zostanie naruszony paradygmat, że przerwania mają być obsługiwane realtime a nie odkładane na później :).
Pszemol pisze:
1-wire jest popularny wśród majsterkowiczów, tanie, względnie proste, dużo opisów, przykładów. Tacy ludzie najczęściej uczą się na swoich błędach np że termokurczka nie zabezpieczy wyprowadzeń przed wilgocią i temperaturą na zewnątrz.
Ale termokurczka z klejem całkiem sprawnie izoluje :)
Dokładnie, jedną tak zabezpieczałem ze 4-5 lat temu. zacisnąłem na czujniku, zalałem epoksydem nóżki z przewodem i dogrzałem resztę na nóżkach. Jakoś działa do dzisiaj. Termo bez kleju było :) Podejrzewam, że epoksyd uszczelnił nóżki.
W dniu 2014-12-09 o 20:54, Jawi pisze:
Po co kombinować jak można psiknąć Plastikiem przez zaciśnięciem w termokurczliwce.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required