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

Atmega porty O/I jak to właściwie działa?

changer2004 10 Lut 2011 07:50 4071 3
  • #1 10 Lut 2011 07:50
    changer2004
    Poziom 2  

    Witam serdecznie. Jestem początkującym, jeżeli chodzi o mikrokontrolery. Zainteresowała mnie Atmega8 ale mam pewne wątpliwości co do zasady działania portów O/I. Oto moje pytanie. Zakładam że tak są skonfigurowane porty:
    Atmega porty O/I jak to właściwie działa?

    Czy dobrze rozumuję?
    Piny PB4 - PB7 są wyjściami, dodatkowo w PORTB bity 4 i 7 mają wartość 1 czyli na wyjściu tych pinów będzie stan wysoki. Tzn. jakie napięcie? Napięcie zasilania? Wartość stanu na tych wyjściach możemy odczytać w rejestrze PINB? ale w zasadzie po co? skoro wiemy że stan na pinach PB4 - PB7 zmieniamy za pomocą rejestru PORTB? Kiedy to się przydaje?

    I teraz to co mnie zastanawia. Piny PB0-PB3 są wejściami. Dodatkowo piny 0 i 1 są podciągnięte do nap. zasilania. Czy to znaczy że jeżeli nie podam na te piny stanu wysokiego to odczytując PINB0 i PINB1 tam będzie logiczna 1? czy logiczne 0? Bo domyślam się że piny PB2 i PB3 mają bez podania na nie stanu wysokiego wartość 0 w PINB. Ale jak to jest z PB0 i PB1?Tam jest 0 czy 1? Dodatkowo czy zmiana np na PB0 który jest podciągnięty może polegać na np. dodatniu przycisku zwierającego ten pin do masy?

    Ogólnie chodzi mi o to jaką wartość logiczną ma domyślnie pin skonfigurowany jako wejście , który jest podciągniety do nap. zasilania? a jaką ma ten bez podciągniecia do nap. zasilania?

    Mam nadzieję że przedstawiłem mój problem w zrozumiały sposób:)

    Pozdrawiam

    0 3
  • Megger
  • Pomocny post
    #2 10 Lut 2011 07:58
    mirekk36
    Poziom 42  

    changer2004 napisał:

    Ogólnie chodzi mi o to jaką wartość logiczną ma domyślnie pin skonfigurowany jako wejście , który jest podciągniety do nap. zasilania? a jaką ma ten bez podciągniecia do nap. zasilania?


    Pin będący wejściem, który nie jest podciągnięty do VCC, będzie miał na wejściu trzeci stan ;) Hi-Z (wysokiej impedancji) a co za tym idzie gdy będziesz go programowo odczytywał to raz może to być zero a innym razem jedynka. Mówi się wtedy że napięcie na wejściu "pływa". Gdybyś miał podpięty tu klawisz (słicz do gnd) to jego odczyt dawałby co chwilę bzdurne wyniki, np że jest wciśnięty, podczas gdy jest faktycznie nie wciśnięty. Dlatego stosujemy podciąganie albo wewnętrzne poprzez wystawienie JEDYNKI na PORT albo zewnętrzne rezystorem jakimś do VCC. Teraz jaśniej?

    Jakie są stany na wyjściu??? Oczywiście że dla stanu niskiego (zera) to będzie w uproszczeniu potencjał GND natomiast dla stanu wysokiego to będzie w uproszczeniu potencjał VCC.

    0
  • Megger
  • Pomocny post
    #3 10 Lut 2011 08:32
    Fredy
    Poziom 27  

    changer2004 napisał:

    Piny PB4 - PB7 są wyjściami, dodatkowo w PORTB bity 4 i 7 mają wartość 1 czyli na wyjściu tych pinów będzie stan wysoki. Tzn. jakie napięcie? Napięcie zasilania?


    tak - będzie napięcie bliskie napięciu zasilania. Nie ważne jest czy będzie to np 5V czy 4,8 czy nawet 4.5V - to wszystko w technice cyfrowej będzie cyfrową 1.

    changer2004 napisał:

    Wartość stanu na tych wyjściach możemy odczytać w rejestrze PINB? ale w zasadzie po co? skoro wiemy że stan na pinach PB4 - PB7 zmieniamy za pomocą rejestru PORTB? Kiedy to się przydaje?



    Masz słuszne wątpliwośći - akurat w tej jednej konfiguracji bezsensowny jest odczyt wartości rejestru PIN - zatem zwykle się tego nie używa.


    changer2004 napisał:

    I teraz to co mnie zastanawia. Piny PB0-PB3 są wejściami. Dodatkowo piny 0 i 1 są podciągnięte do nap. zasilania. Czy to znaczy że jeżeli nie podam na te piny stanu wysokiego to odczytując PINB0 i PINB1 tam będzie logiczna 1? czy logiczne 0?


    Skoro piny te są skonfigurowane jako wejścia i dajesz wewnętrzne podciągnięcia - to tak jakbyś wewnątrz łączył je przez rezystor kilkadziesiątk kiloomów do zasilania. A więc będzie tam logiczna 1. Ale jak podłączysz do tych wejść jakieś inne urządzenie czy też np . wyjście innej bramki lub portu to to wyjście wymusi zmianę napięcie na tym wejściu. Inaczej mówiąc to podciągnięcie jest bardzo delikatne i każde zewnętrzne wyjście sobie z nim poradzi aby je zewrzeć do masy.

    changer2004 napisał:

    Ogólnie chodzi mi o to jaką wartość logiczną ma domyślnie pin skonfigurowany jako wejście , który jest podciągniety do nap. zasilania? a jaką ma ten bez podciągniecia do nap. zasilania?


    Wstępnie skonfigurowany pin w ATmega są jako wejście bez podciągnięcie, a wiec to wejście będzie w stanie " wiszącym w próżni" . Napięcie na nim będzie pływać, wejście nie podłączone będzie działać jak antena. Konieczne zatem jest podłączenie do niego czegokolwiek aby ustalić to napięcie albo dodanie wewnętrznego podciągnięcia do zasilania. Wtedy napięcie będzie bezpiecznie stabilne w okolicy Vcc.

    Pozdrawiam

    0
  • #4 11 Lut 2011 21:51
    Sol-Lex
    Poziom 10  

    Też jestem na poziomie 2 części kursu ja to rozumiem tak:
    w rejestrze DDRx ustawiasz czy dany pin ma być wejściem czy wyjściem ( 0 czy 1)
    w PORTx ustawiasz stany wysoki czy niski.
    Jeżeli to jest wyjście to Twoje ustawienie jest takie jak ustawiłeś, natomiast przy wejściu faktyczny stan odczytujesz z rejestru PINx
    ( PINx jest tylko do odczytu) ustawiając 1 podciągasz do napięcia zasilania ponieważ:
    " Pin portu skonfigurowany jako wejście jest "w stanie wysokiej impedancji".
    Dla uproszczenia można przyjąć, że jest on w stanie izolacji galwanicznej
    względem reszty układu. W takim przypadku nie możemy określić jakie napięcie
    na nim panuje (względem masy układu) czyli nie możemy stwierdzić, czy jego
    stan to zero logiczne, czy jedynka logiczna. Podsumowując - mikrokontroler
    będzie z takiego wejścia odczytywał przypadkowy stan logiczny w zależności
    od tego, z której strony wiatr zawieje
    Podciągnięcie wejścia to połączenie pinu z plusem zasilania układu przez
    rezystor o wartości kilku - kilkudziesięciu kiloomów. W ten sposób wymuszamy
    na wejściu stan jedynki logicznej i możemy bezbłędnie wykryć podane na
    wejście zero logiczne (w takim przypadku całe napięcie zasilania odłoży się
    na rezystorze podciągającym a jego dolny zacisk będzie na potencjale bliskim
    zeru) albo jedynkę logiczną (przez rezystor podciągający nie popłynie żaden
    prąd a jego dolny koniec - połączony z pinem mikrokontrolera - będzie miał
    potencjał bliski napięciu zasilania Vcc).
    Rezystor podciągający jest niezbędny, gdy układ zewnętrzny (z którego
    odczytujemy stan) ma wyjście typu otwarty kolektor lub otwarty dren, co
    działa jak styk przekaźnika, który potrafi "zawisnąć w powietrzu" lub
    zewrzeć się do masy."
    Dla rozjaśnienia przykład: po załączeniu miernika na wyświetlacz pojawiają się jakieś śmieci, aby tego uniknąć podciągamy pin do napięcia zasilania (1).
    Jeżeli dany pin jest podpięty do jakiegoś urządzenia zewnętrznego ( wysyłającego stałą informację) to można ustawić stan niski (0),
    natomiast podpinając pod ten pin urządzenie ,które okresowo wysyła informacje lepiej ustawić stan wysoki (1)

    Pozdrawiam

    0