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

PortC w Atmega8: Równoczesne użycie jako wejście i ADC? Możliwości konfiguracji?

toradek 02 Gru 2006 01:09 3626 6
REKLAMA
  • #1 3284990
    toradek
    Poziom 17  
    Posty: 289
    Pomógł: 4
    Ocena: 20
    Witam. Mam krotkie pytanie, na ktore nie znam odpowiedzi i prosze o pomoc.
    Czy PortC w Atmedze8 moze byc JEDNOCZESNIE wykorzystywany jako np. wejscie dla przycisku oraz jako przetwornik ADC?

    Problem mam taki, ze pod PortC mam podpiete kilka interfejsow, miedzy innymi termometr na 1Wire (PC1) oraz wlasnie przetwornik ADC (na linii PC0). I nie jestem pewien, czy tak moge miec zrobione. Czy jest to mozliwe do wykonania w ten sposob, ze na przyklad przed odczytem napiecia w przerwaniu zmieniam konfiguracje portu C na ADC, a po wyjsciu zmieniam konfiguracje znowu na INPUT?

    Jako poczatkujacy pisze w Bascomie, wszelkie podpowiedzi mile widziane.

    Pozdrawiam.
  • REKLAMA
  • #2 3285024
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    Można bez problemu zmieniać konfiguracje portów w trakcie programu aby mogły pracować jako wejścia lub wyjścia lub pełnić funkcje specjalne, trzeba poprostu zapisywać odpowiednie wartości bitów w odpowiednich rejestrach konfiguracyjnych i być świadomym tego co sie robi. Zwłaszcza asembler daje pełną kontrole nad mikrokontrolerem a z bascomem różnie to bywa, ale myśle ze i tu nie powinno być problemów.

    Pozdrawiam
    Paweł
  • REKLAMA
  • #3 3285168
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 55
    Nie musisz nic przekonfigurowywać w trakcie pracy, po prostu każdy pin portu możesz na pczątku skonfigurować indywidualnie (np. PC0 jako wejście z wyłączonym pullupem jako wejście ADC, a na PC1 normlanie obsługujesz 1wire, bo ten pin raz jest wejściem, a raz wwyjściem, na PC2 możesz mieć przycisk i zadklrowane jako wejście z włączonym pullupem).
  • REKLAMA
  • #4 3285604
    toradek
    Poziom 17  
    Posty: 289
    Pomógł: 4
    Ocena: 20
    O i oto mi chodzilo :) Dziekuje Wam bardzo za odpowiedzi :)

    Na ASM przeniose sie za niedlugo, znam jego przewage (opanowalem dosc dobrze asm motoroli 68k) niestety mam do wykonania projekt i malo czasu na dokladne poznanie architektury Atmegi.

    Jeszcze takie male pytanie na szybko - jesli konfiguruje porty za pomoca polecenia Config PortC = &B10000000 to najmlodszy bit oznacza PoirtC.0? I 0 oznacza wejscie?
  • REKLAMA
  • #5 3286572
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    Config PortC = &B10000000 najmłodszy jest od prawej strony, 0 konfigurujesz jako wejscie, 1 jako wyjscie, w ten sposób ustawiłes PB7 jako wyjscie a pozostałe piny jako wejscia

    nie zapomnij tez nadac poczatkowych stanów na wyjsciu piszac portc = &bxxxxxxxx, jesli chcesz zeby pin pracował jako wejscie musisz do jego rejestru port zapisać 1, np portc.0 = 1
  • #6 3286773
    toradek
    Poziom 17  
    Posty: 289
    Pomógł: 4
    Ocena: 20
    Elektrooonik napisał:

    nie zapomnij tez nadac poczatkowych stanów na wyjsciu piszac portc = &bxxxxxxxx, jesli chcesz zeby pin pracował jako wejscie musisz do jego rejestru port zapisać 1, np portc.0 = 1


    Czyli rozumiem, ze nadajac poczatkowe wartosci, w trybie input okreslam atmedze czy maja byc podlaczone pull-up ?
  • #7 3287080
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    W AVR od każdego portu wejścia/wyjścia masz dostępne 3 rejestry. Rejestr DDR, PORT i rejestr PIN, na przykładzie portu C jest to rejestr PORTC i rejestr PINC i DDRC.

    Rejestr DDR

    Określa tryb pracy wyprowadzenia jako wejście lub wyjście, zapisujac odpowiedni bit jako 1 ustawiasz go jako wyjscie a 0 jako wejscie. W trybie pracy jako wejscie jest podłaczone przez pullupa jesli ustawisz w port 1.

    w asm piszesz sobie tak

    ldi r16, 0b11111011
    out ddrc, r16

    a w bascomie odwołujesz sie do tego rejestru poprzez config

    rejestr port
    tu ustawiasz w jakim stanie ma byc wyprowadzenie (niskim czy wysokim) gdy wyprowadzenie pracuje jako wyjscie to w stanie 1 i 0 masz podobną wydajnosc prądową (kilkadziesiat mA) mozna to porównac do wyjscia komplementarnego

    rejestr PIN
    z tego rejestru odczytujesz stan wejscia, ten rejestr mozesz tylko odczytywać

    Dodano po 2 [minuty]:

    zeby uzywac wyprowadzenia jako wejscia zapisujesz do ddr 0, do port 1 i odczytujesz stan z rejestru pin, ale stan aktywny jest wtedy gdy podasz 0 na wejscie, wtedy zwiera pullupa do masy.

    Dodano po 3 [minuty]:

    w '51 było fajnie bo byl tylko jeden rejestr ;) a stan wysoki był osiagany tylko przez przez pullupa

Podsumowanie tematu

LABEL_AI_GENERATED
Port C w mikrokontrolerze Atmega8 może być jednocześnie wykorzystywany jako wejście cyfrowe (np. dla przycisku lub interfejsu 1-Wire) oraz jako wejście analogowe dla przetwornika ADC. Nie jest konieczne dynamiczne przełączanie konfiguracji pinów w trakcie działania programu – każdy pin można skonfigurować indywidualnie na początku, np. PC0 jako wejście ADC bez włączonego pull-up, PC1 jako pin obsługujący 1-Wire (tryb wejścia/wyjścia), a PC2 jako wejście z włączonym pull-up dla przycisku. Konfiguracja portów odbywa się poprzez odpowiednie ustawienie bitów w rejestrach DDRx (Data Direction Register), PORTx (ustawianie stanu wyjścia lub włączenie pull-up przy wejściu) oraz odczyt stanu z PINx. W Bascomie można używać polecenia Config PortC = &Bxxxxxxx, gdzie najmłodszy bit odpowiada PC0, a wartość 0 oznacza wejście, 1 wyjście. Aby wejście miało aktywny pull-up, należy ustawić odpowiedni bit w rejestrze PORT na 1 przy jednoczesnym ustawieniu DDR na 0. Takie podejście pozwala na jednoczesne korzystanie z funkcji ADC i cyfrowych wejść na różnych pinach portu C bez konieczności przełączania konfiguracji w trakcie działania programu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA