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.

[ATMEGA32][AVRDUDE] Krótkie pytanie początkującego:stan na pinach.

09 Cze 2011 05:25 970 5
  • Poziom 8  
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Efekt: stan na wyprowadzeniu wysoki. Dokumentacja mówi:
    "If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is
    activated."
    Czyli się zgadza, jeśli PORTA jest wejściem to rezystor podciąga wyporowadzenie do zasilania
    Drugą linijkę można zakomentować, efekt ten sam, bo przy wyjściu domyślnie PORTA jest podciągnięty do zasilania.
    Ale czemu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Też daje na wyjściu stan wysoki?
    W dokumentacji stoi zaraz po poprzednim cytacie:
    "To switch the pull-up resistor off, PORTxn has to be written logic zero"
    Czyli jest taka możliwość. Czego nie wiem?
  • Pomocny post
    Poziom 28  
    zapominalski2 napisał:

    Drugą linijkę można zakomentować, efekt ten sam, bo przy wyjściu domyślnie PORTA jest podciągnięty do zasilania.

    Nieprawda. Wartość początkowa rejestru PORTA jest równa 0, czyli pull-up'y nie są włączone.

    zapominalski2 napisał:

    Ale czemu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Też daje na wyjściu stan wysoki?

    Skąd takie przypuszczenie? Jak to stwierdziłeś? Jeżeli pin jest ustawiony jako wejście, wewnętrzny pull-up jest wyłączony i nie masz zewnętrznego pull-up'a to pin będzie w stanie wysokiej impedancji. Napięcie na pinie (sprawnego mikrokontrolera) będzie w stanie nieustalonym i będzie się zmieniać np. pod wpływem zakłóceń elektromagnetycznych. Sam fakt, że np. warunek (PINA & _BV(PA0)) zwraca prawdę, jeszcze o niczym nie świadczy, bo przy następnych odczytach z PINA stan tego pinu może się zmieniać.
    ...no chyba, że do pinu masz z zewnątrz podłączone coś, co wymusza stan wysoki.
  • Pomocny post
    Specjalista - Mikrokontrolery
    Pewnie mierzył multimetrem, a multimetry są dość ospałe i czasem nie reagują na te oscylacje stanu nieustalonego i mogą pokazać przy krótkim pomiarze po prostu stan wysoki.
    Ale kod:
    Code:

    DDRA &=~ _BV(PA0) ;      
    PORTA &=~  _BV(PA0) ;

    nie oznacza wejścia ze ze stanem niskim.
    Code:

    PORTA &=~  _BV(PA0) ;

    To nie jest pull-down ale po prostu wyłączony pull_up.
  • Poziom 8  
    Dziękuje za cenne wskazówki. Poprawione, to reszta układu wymuszała stan wysoki.
    Zapamiętam ponadto, że brak ustawionego stanu wysokiego nie oznacza od razu, że na pinie jest stan niski oraz, żeby nie ufać bezgranicznie multimetrowi.

    Wyczytałem, że aby zapewnić stan niski na wejściu należy użyć rezystora pul down.
    Czy 10kOhm jest dobrą wartością? Wyprowadzenie bierze udział w handshakingu: 5V lub 0V po RS232, czy po dolutowaniu rezystora komendy
    Kod: c
    Zaloguj się, aby zobaczyć kod

    są właściwymi aby poprawnie odczytać sygnał?
  • Specjalista - Mikrokontrolery
    Rezystor pull-down dobierasz do obciążalności urządzeń podpiętych do pinu. Ale 10 K powinno być ok, na logikę komendy powinny działać poprawnie choć nigdy jeszcze pull_down nie stosowałem, ze względu na to, że zawsze lepiej aktywować jest coś stanem niskim "0" bo w układzie nie ma nic pewnejszego niż masa .
  • Poziom 8  
    Dziękuje za podzielenie się wiedzą. Temat zamykam.
    Pozdrawiam.