- posted
16 years ago
avr-gcc i 1wire - ponownie
- Vote on answer
- posted
16 years ago
Jaki masz zegar? Wnioskuje, ze 8MHz? Moze lepiej skorzystac z delay z biblioteki standardowej gcc?
^^^^^^^^^^^^^ A tu chyba ma byc DDR, a nie port. Bo tak wystawiasz silne 0 na magistrale i nie dajesz mozliwosci wymuszenia stanu przez slave 1-wire.
Troche za krotko, bezpieczniej bedzie poczekac z 15us, bo 1-wire co prawda szybciej zwykle wystawia wartosc, ale nie zapominaj, ze szyna pracuje z pull-upem i potrzebuje troche czasu na przejscie z 0 do 1.
Bezpieczniej bedzie czekac az pojawi sie ponownie "1". To ma tez ta kozysc, ze mozesz skrocic czas transmisji bitu "1", co ci przyspieszy cala transmisje po 1-wire.
To nie blad, ale mozna zastosowac maly myk. Wpisujac 0 do port, wystawianie 0 lub 1 na 1-wire bedzie polegalo po prostu na przelaczaniu tylko DDR. Czyli DDR 1->out, na wyjsciu masz 0, jesli chcesz 1 to DDR=0 i szyna jest w stanie "1" utrzymywanym przez zewnetrzny pull=up.
Tu musisz poczekac az szyna po 0 wroci do 1, inaczej pierwsze transmisje po 1-wire moga trafic jeszcze na presence pulse.
Dodaj male opoznienie. Bo write_bit konczy sie szybko i jesli wystawia "0" to szyna przed nastepnym bitem moze nie zdazyc wrocic do "1".
Tutaj analogicznie, read_bit nie czekasz az szyna wroci do "1" i jesli ds dluzej trzyma niz 80us szyne to masz kaszane.
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
Jakies info o licencji na jakiej to udostepniasz dodaj, bo takie czasy, ze strach cos sciagac z netu :) Dobra robota, tylko dodaj jeszcze SearchROM i MatchROM (to drugie latwe do zaimplementowania). Bo bez tego trudno z tego korzystac. No i jesli chce ci sie bawic przerob te wymuszanie stanow tak, zeby wystarczylo zmieniac DDR, bez PORT, zawsze to pare bajtow mozna zaoszczedzic. Ale gratuluje roboty.
- Vote on answer
- posted
16 years ago