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

[Mega8][Bascom/c] ustawienie wysokiej impedancji na porcie

mkpl 10 Paź 2012 22:43 2067 12
REKLAMA
  • #1 11399117
    mkpl
    Poziom 37  
    Witam

    Jak ustawić porty atmegi tak aby w stanie aktywnym "niskim" zwierały sygnał do masy a "wysokim" port był wstanie wysokiej impedancji?

    Zależy mi aby porty zachowywały się jak bramka typu OC. Porty mają zwierać na masę różne rezystancję i symulować klawiaturę rezystancyjną
  • REKLAMA
  • #2 11399224
    kiziu13
    Poziom 17  
    Wystarczy, że zmienisz kierunek pinu na wejście, pozostawiając w rejestrze PORTn-u 0 na odpowiednim bicie, to spowoduje przełączenie portu w stan Hi-Z.
  • #3 11399236
    dondu
    Moderator na urlopie...
    .... o czym pisze w datasheet, do którego nie zaglądasz:

    Cytat:
    When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn, PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) must occur.


    [Mega8][Bascom/c] ustawienie wysokiej impedancji na porcie
  • REKLAMA
  • #4 11399261
    mkpl
    Poziom 37  
    dondu napisał:
    .... o czym pisze w datasheet, do którego nie zaglądasz:

    Cytat:
    When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn, PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) must occur.


    [Mega8][Bascom/c] ustawienie wysokiej impedancji na porcie


    Wygląda na to, że się nie da zrobić wyjścia HiZ co mnie bardzo martwi...
  • #5 11399275
    kiziu13
    Poziom 17  
    A czym Twoim zdaniem różni się wejście Hi-Z od wyjścia Hi-Z? O ile w ogóle istnieje coś takiego jak wyjście Hi-Z, ba, o ile można w ogóle mówić o kierunku przy Hi-Z.
  • REKLAMA
  • REKLAMA
  • #7 11399318
    mkpl
    Poziom 37  
    [syntax]
    Config Rc5 = Pind.3
    Ddrb = &B11111111
    Portb = &B00000000
    Config Portd = Output
    [/syntax]

    Wystawiam na port B kolejno H i L w pętli. Do portów mam podłączone rezystory z zakresu 1.2k - 40k i o ile na porcie jest stan L to rezystancja wynosi 4.3k (nie ma takiej wartości w układzie) i się nie zmienia
  • #8 11399326
    dondu
    Moderator na urlopie...
    mkpl napisał:
    ... o ile na porcie jest stan L to rezystancja wynosi 4.3k (nie ma takiej wartości w układzie) i się nie zmienia

    Jak to mierzysz?
    Opisz dokładniej, bo to co piszesz kupy się nie trzyma.
    A najlepiej to pokaż schemat.


    A patrząc na Twój kod i to co piszesz poniżej wychodzi, że nadal nie rozumiesz tabelki, którą podałem i tego co napisaliśmy z kolegą wcześniej.

    mkpl napisał:
    Wystawiam na port B kolejno H i L w pętli. .... i się nie zmienia

    choć BASCOMa nie znam więc mogę się mylić.

    EDIT:
    Ponieważ podajesz w tytule, że C także operujesz to pokaż kod w C.
  • #9 11399809
    mkpl
    Poziom 37  
    No ok.

    Dokładnie chodzi o układ jak na schemacie. Za pomocą uart wysyłam instrukcje do procesora aby zwarł na masę odpowiedni rezystor symulując odpowiedni przycisk.

    Układ od strony urządzenia sterującego jest rozwiązany tak, że wejście przetwornika ADC jest podciągnięte rezystorem około 2k do napięcia 3.3V.

    Dlatego tak ważne jest dla mnie aby procesor nie wystawiał napięcia na port.

    [Mega8][Bascom/c] ustawienie wysokiej impedancji na porcie

    Będę miał chwile to napiszę to w C. Ewentualnie poproszę o gotowe rozwiązanie w C/Bascom bo coś tego nie ogarniam. Wyczytałem gdzieś na internecie aby port ustawić jako wejściowy w Hiz i wystawiać na niego wartości co w zasadzie kłóci się z kierunkiem działania portu
  • Pomocny post
    #10 11400615
    M. S.
    Poziom 34  
    Prosty program zmieniający z częstotliwością 0,5Hz stan końcówki PXY raz jako zwarcie z masą (logiczne zero) wmuszone stanem rejestru PORTX.Y, a po sekundzie wystawiający na końcówkę PXY wysoką impedancję.
    Fakt, jedynką ustawiasz masę, a zerem ustawiasz wysoką impedancję. Z tym chyba sobie poradzisz.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Poczytaj o rejestrach PORT, PIN, DDR.
  • #11 11402529
    mkpl
    Poziom 37  
    No i teraz rozumiem :D w zasadzie zrodził mi się podobny pomysł w głowie ale nie miałem czasu zastosować. Klepię kod i testuję
  • #12 11403229
    dondu
    Moderator na urlopie...
    mkpl napisał:
    No i teraz rozumiem :D

    Wszystko to jest napisane w tabelce którą Ci pokazałem, a która jest w datasheet.
    Wystarczyło ją przeanalizować. Bez czytania datasheet daleko nie zajedziesz.

    BTW. Kodu C nie podałeś.
  • #13 11403541
    mkpl
    Poziom 37  
    dondu napisał:
    mkpl napisał:
    No i teraz rozumiem :D

    Wszystko to jest napisane w tabelce którą Ci pokazałem, a która jest w datasheet.
    Wystarczyło ją przeanalizować. Bez czytania datasheet daleko nie zajedziesz.

    BTW. Kodu C nie podałeś.


    Owszem ale jakoś nie wpadłem na to aby zmieniać wejście wysokiej impedancji na wyjście z stanem niskim. Ubzdurałem sobie, że raz na początku zadeklarowane kierunki portów się nie zmienia.

    Kod w C będzie bo deklaracje portów tam są praktycznie indentycznie. Na razie powstał kod w Basicu którego lepiej znam i prościej się takie rzeczy pisze
REKLAMA