gaskoin napisał: Zrobienie OW na USARCIE moim zdaniem jest prostsze i bardziej efektywnie niż pajacowanie z delayami i ustawieniami portów, tym bardziej, że schemat takiego połączenia jest bardzo prosty i wszystko sprowadza do wysłania/odbierania pojedynczych bajtów z USARTu, co jest dobrze opisane na stronie MAXIMa
A mi się wydaje, że pajacowaniem jest twierdzenie, że obsługa 1wire DOBRZE to może wyjść tylko na UART. Ponieważ:
1. jeśli mam procek tylko z jednym UART'em to marnowanie go na 1wire jest jak dla mnie totalną porażką. Zwykle UART jest dla mnie ważniejszy jak nie do debugowania to do jakiejkolwiek komunikacji z otoczeniem, z innym prockiem, z terminalem - przez Bluetooth czy przez kabel - obojętnie
2. obsługa za pomocą UART'a i tak wymaga DELAY'ów więc ktoś tu sam sobie zaprzecza
3. bo można wykorzystać dowolny pin dowolnego procesora, nawet tego, który nie ma UART'a !!!
3. WCALE ANI W ZĄB TYPOWA obsługa 1wire nie koliduje z OBSŁUGĄ WYŚWIETLACZY 7-SEGMENTOWYCH, które są multipleksowane ani z żadnymi innymi przerwaniami w zdecydowanej większości przypadków.
Tylko trzeba sobie porządnie tą obsługę 1wire napisać i korzystać umiejętnie z cli oraz sei a w zasadzie to nie sei tylko przywracania ustawień rejestru SREG. Przede wszystkim CLI można wykonywać tylko na czas najbardziej krytycznych opóźnień, które są w obsłudze 1wire na tyle krótkie że wręcz pomijalne. Proszę bardzo poniżej film z działania na jednym procku AVR
1. obsługi 1wire - akurat tylko 1 czujnik DS18B20 miałem pod ręką
2. wyświetlacza 4 pozycyjnego 7segm (odświeżanie 200Hz)
3. obsługa LCD
4. Nie widać na filmie ale działa w tle także BEZ PROBLEMÓW, komunikacja przez UART z terminalem na PC
czy coś migocze na wyświetlaczu LED ???
czy są jakieś błędne odczyty temperatury?
czy zakłóca się praca LCD?
czy zakłóca się działanie UART ??? tego nie widzicie ale podpowiadam że NIE
dodam, że jednocześnie jeszcze obsługuję odbiornik podczerwieni TFMS i też nadal NIC A NIC się nie kłóci.
więc o czym w tych tematach na elektrodzie ostatnio wszystkim chodzi? bo wciąż widzę, że obsługa 1wire bez udziału UART'a jest już prawie odżegnana od wiary.
Uważam, wprawdzie, że obsługa 1wire przez UART może się przydać ale jeśli mam akurat dwa UARTY w procku i drugi leży odłogiem - to z nudów bym może tak zrobił albo wtedy gdyby mi rzeczywiście zaczęło przeszkadzać coś w projekcie. Tylko nie wiem jak on by musiał być rozbudowany.
Więc panowie - nie opowiadajcie, że tradycyjna obsługa 1wire jest BEE
a poniżej filmik żebyście panowie mogli ocenić własnymi oczkami czy coś jest "nieteges":
a poniżej jeszcze mały przykład kodu, bo wielu np już przy samej funkcji RESET wrzuca blokowanie przerwań na cały długi czas opóźnienia 480us a po co ??? ważniejsze czasowo jest to co potem czyli odpowiedź, zatem robimy to tak:
Zaloguj się, aby zobaczyć kod
I podobnie trzeba w TYLKO odpowiednich miejscach funkcji przesyłających/odbierających poszczególne bity robić - a nie! wyłączać TAK NA WSZELKI wypadek przerwania na cały czas / na całą pętlę przesyłającą cały bajt informacji. Wtedy rzeczywiście będą problemy