Dobra rada, nie używaj zapisu:
Zaloguj się, aby zobaczyć kod
tylko zdefiniuj sobie port i wyprowadzenie i używaj:
Zaloguj się, aby zobaczyć kod
a jeszcze czytelniej:
Zaloguj się, aby zobaczyć kod
Za chwilę kod rozrośnie się, będziesz chciał zmienić nr pinu i będziesz miał dużo roboty, w której o pomyłkę łatwo.
Oczywiście nadal uważam, że wyważasz otwarte drzwi, bo jeśli chodzi o konstrukcję:
Zaloguj się, aby zobaczyć kod
To nie wiem co dalej zamierzasz, ale w przypadku symulowanego OC (1-Wire, programowe IIC) wystarczy:
Zaloguj się, aby zobaczyć kod
i
Zaloguj się, aby zobaczyć kod
bo port, po resecie ma ustawione zero. Dla pewności mozna przy inicie 1W ustawić tam zero.
Zaloguj się, aby zobaczyć kod
Ja osobiście steruję zarówno rejestrem kierunku jak i portem, powody są dwa:
- Przy pracy jako wejście włączam podciąganie. Nie wystarcza ono do pracy układów zasilanych pasożytniczo, ale nie mam "zawieszania sie programu" gdy rezystor podciągający jest niedolutowany. W takiej sytuacji magistrala pracuje poprawnie z urzadzeniami z własnym zasilanieniem, ale nie to jest najistotniejsze.
- realizuję silne podciąganie po wysyłaniu "1". Taki tryb pracy mają mastery DS248x. Dzięki temu można realizować szykie transmisje na długich magistralach czy z dużą liczbą urzadzeń.
Dalej. Masz takie "cóś":
Zaloguj się, aby zobaczyć kod
Dlaczego 100 skoro w nocie napisali 15..65? Dajesz 100, będą włączone IRQ dojdzie jeszcze np 15 czy 50us. I co? napisałeś działają do 145. 100+50, ile daje? Nie trzymasz się wytycznych producenta, prosisz się o kłopoty. Załóżmy, że nie używasz IRQ, producent pisze max 65, sprawdziłeś doświadczalnie, że 100 je ok. Ile rodzin układów sprawdziłeś? Powidzmy, że wszystkie, przebadałeś łącznie 100000szt. Przebadałeś układy, których jeszcze nie wyprodukowano?
Akurat w przypadku poziomu H po reset na ten problem się nie napotkasz ale przy innych krytycznych operacjach może być inaczej.
Dlaczego tu:
Zaloguj się, aby zobaczyć kod
dwie zmienne? ystarczyła by jedna, ale nie potrzeba żadnych, bo:
Zaloguj się, aby zobaczyć kod
można zapisać tak:
Zaloguj się, aby zobaczyć kod
a oszczędniej:
Zaloguj się, aby zobaczyć kod
Piszesz jak w Bascom-ie.
Co do "wyważania otwartych drzwi". Namęczyłeś się z presence i pewnie nie będzie działać wysłanie komendy. Nie używasz oscyloskopu czy rejestratora więc nie zobaczysz tego. Po presence nie czekasz, aż magistrala osiągnie "1" w czasie nie dłuższym niż 240us. Pewnie zaraz po twoim "wykryciu" presence zaczniesz wysyłać komendę a presence jeszcze trwa. Domyślasz się co bedzie.
W czasie, który poświeciłeś na reset i presence (nie do końca poprawnie) dawno być wypróbował ze 3 biblioteki z netu, łącznie z odczytem nr rom a kto wie czy nawet nie search rom.
PS
Rezystor podciągający pewnie 4k7?