logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR C++ 1wire rejestr DDR

młodyeltronik 18 Maj 2011 19:00 2288 3
REKLAMA
  • #1 9520319
    młodyeltronik
    Poziom 11  
    Witam .
    Ucząc się programowania trochę wyższego poziomu niż zapalanie ledów napotkałem na problem, mianowicie zająłem się interfejsem 1wire :
    Cezary Klimasz w swoim opracowaniu 1wire na przykładzie ds18b20 pisze :
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Moje pytanie Brzmi :
    Jeśli rejestr DDR mówi procesorowi czy dany bit to wejście czy wyjście , czemu tu jest to wykorzystane do podania na danym pinie stanu wysokiego/niskiego ?
    Jeśli dobrze rozumiem, definicja CLEAR_1WIRE nadaje bitowi nr WE kierunek wyjściowy, a SET odwrotnie, nie widze tu żadnego związku ze stanem bitu ..
    Zupełnie tego nie rozumiem, ponieważ w ogóle nie używamy tutaj rejestru PORTC = xxx jako wpisania na pin jedynki/zera lub rejestru PINC do odczytu z pinów wartości ..
  • REKLAMA
  • Pomocny post
    #2 9520723
    Andrzej__S
    Poziom 28  
    1-wire jest magistralą wired-and. Jeśli pin WE rejestru PORTC jest ustawiony na stan niski i zmienisz kierunek tego pinu za pomocą rejestru DDRC, to na magistrali pojawi się stan niski (tranzystor wyjściowy procesora zewrze magistrale do masy). Jeśli ustawisz pin WE za pomocą rejestru DDRC jako wejście, wtedy pin ten jest w stanie wysokiej impedancji i na magistrali pojawi się stan wysoki (poprzez rezystor podciągający do Vcc).
    Na magistrali wired-and nie można używać pinu jako wyjścia w stanie wysokim, ponieważ grozi to zwarciem w momencie, gdy inne wyjście podłączone do magistrali będzie w stanie niskim.
  • REKLAMA
  • Pomocny post
    #3 9520981
    hotdog
    Poziom 26  
    jedyne co trzeba w zasadzie dodać, to że w rejestrze PORTC musi być 0, bo w przeciwnym wypadku po ustawieniu portu na wyjście przez DDRC na pinie będzie błędnie stan wysoki.

    Po resecie jest tam zero, więc w zasadzie może nie potrzebnie o tym wspominam, ale czasami możemy omyłkowo zapisać do tego rejestru i wtedy szukać błędu tam gdzie się go nie spodziewamy. Różnie też jest na różnych procesorach (np na LPC1xxx trzeba zawsze ręcznie zapisywać 0 do rejestru po zmianie kierunku portu).
  • #4 10709104
    młodyeltronik
    Poziom 11  
    Swój problem już dawno rozwiązałem i chciałem podziękować za wyczerpujące tłumaczenia .
    Do zamknięcia .
REKLAMA