Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Port dwukierunkowy - odczytywanie wartosci

17 Kwi 2008 16:26 1209 5
  • Poziom 9  
    Witam,
    Mam następujący problem:
    Chcę mieć port dwukierunkowy: bity 0..3 jako wyjście; bity 4...7 jako wejścia. I tu mam szereg pytań:
    - czy 8bitowa liczba odczytywana z portu ma na bitach porto - wyjściowych, 0,1 czy nieokreślone?
    - czy zapisanie do portu jakiejś liczby po prostu "obcina" ją o bity odpowiadające pinom wejścia?
    - doczytałem nieco że może być istotne wpisanie czegoś najpierw na port a potem dopiero ustawienie maski kierunku pinów (chodziło o jakieś rezystory podciągające), czego niestety nie zrozumiałem.

    Wybaczcie, że stawiam trywialne pytania, ale forum jest strasznie duże, w faq tego nie ma, a w wątku "mikrokontrolery - początkujący" dotarłem do 13 strony i wysiadłem.

    Z góry dziękuję za odpowiedź - może nią być nawet link do źródła, które je wyjaśnia ;-) (ale mam nadzieję że nie dokumentacja do atmeli, bo tej właśnie nie zrozumiałem :P )

    Pozdrawiam,
    Zaqqen
  • Poziom 12  
    Witam

    No to tak...:

    1)jeśli port jest wejściem możesz bezpośrednio odczytać jego stan z rejestru (np w Atmega8 masz rejestr np PIND dla PORTD i tam odczytujesz stan logiczny... '1' lub '0'), jeśli wyjściem - to też możesz odczytać jego stan w tym samym rejestrze....tylko po co ?:). Jeśli chcesz odczytać liczbę 8 bitową na która jest na porcie to odsyłam do rejestru PIND.

    2)Tego Ci raczej nie powiem ... ale bardzo prawdopodobne jest że nie przekaże całej wartości .. tylko część-np starsze/młodsze bity...a resztę pewnie utnie.... Najprościej było by to sprawdzić w symulatorze (np AVRstudio).

    3)Rezystory podciągające... to jest tak jak byś podłączył sobie do '+' rezystor... przez to możesz czerpać prąd.... dokładnie tak jest uC, jeśli ustawisz pull-up'a pin staje się źródłem zasilania...dość małym bo ok 20 mA... ale do sterowania wystarczy :).
    Co do maskowania... nie wiem za bardzo o co Ci chodzi, ale z reguły jak coś chcesz wpisać na port - jak to w Twoim przypadku 0..3 to jeśli odwołujesz się bezpośrednio do portu to wypadało by zamaskować porty które są używane jako wejście... na wszelki wypadek... W ten sposób jeśli np chcesz czymś sterować i na jednym porcie masz kilka wyjść do sterowania kilku rzeczy to lepiej zabezpieczyć te bity który nie chcesz ruszać. czyli np w C:

    Code:
    PORTD=(data&0b00001111);


    To wyrażenie użyje tylko młodsze bity zmiennej data, natomiast starsze zostaną.

    Poza tym następnym razem napisz jakiego procka używasz... kompilator... i do czego konkretnie to ma być :)


    Powodzenia

    Pozdr
  • Specjalista - Mikrokontrolery
    kolejne genialne pytanie... pytasz o C51? AVRa? PICa (jakiego)? ARMa? Motorole? TMS320C6713?

    http://rtfm.killfile.pl/

    0x41 0x56 0x45!!
  • Poziom 9  
    O przepraszam, bez sensu założyłem, że jak atmel i mikrokontroler to wiadomo o co chodzi. Nie pomyslalem, ze tego jest mnostwo roznych grup i sie moga roznic w tej akurat kwestii. Takze pardon...
    Ogolnie uzywam atmel8-16PU i programuje AVRdudem, a pisze w c pod winAVR. Aczkolwiek AVRstudio mam na uczelni.

    Re: Ziggi
    Dzięki za pomoc - odnośnie pyt 1. to wiem ze moge tak oczytywac/zapisywac port - ale chodzilo mi o to jak gdy zapisuje na wartosc wplywa fakt ze czesc bitow jest wejsciami.

    Potestuje to jeszcze chwile, a potem zajrze z kolejnymi pytaniami ;-)
    PS. Czy AVRstudio mozna sicagnac na czyms w rodzaju licencji studenckiej?

    Pozdrawiam,
    Weq
  • Poziom 14  
    Podam ci link który powinien się przydać i rozwiać wszystkie wątpliwości
    Elektronika i programy

    Jeśli chodzi o AVRStudio to wersja 3 jest dostępna normalnie.
    Wersję v4.14 też można pobrać, lecz trzeba zarejestrować
    się na stronie Atmela.
  • Poziom 42  
    zaqqen napisał:
    - czy zapisanie do portu jakiejś liczby po prostu "obcina" ją o bity odpowiadające pinom wejścia?
    Nie obcina, te bity są zapisywane do buforów zewnętrznych, ale przez to że port jest skonfigurowany jako wejście te bufory są odłączone od fizycznego pinu. Jeśli zmienisz kierunek portu, ostatni wpisany stan na nim się pojawi.