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

[tiny13a] [tiny13a][C/WinAVR] - odczyt stanu wejścia, dioda gaśnie bez naciskania przycisku

sever82 13 Kwi 2015 19:04 879 5
REKLAMA
  • #1 14614421
    sever82
    Poziom 2  
    Jako, że to mój pierwszy temat na elektrodzie, to pozdrawiam wszystkich.

    Na początku chciałem zaznaczyć, że jestem na początku nauki C i kontaktów z AVR.

    Problem jest pewnie banalny, bo w kursach i tutorialach opis jak odczytać stan wejścia kończy się na tym że należy posłużyć się rejestrem PINx. W poniższym kodzie wkleiłem 3 warunki if, po których gaszę diodę na PB3, sprawdzałem oczywiście każdą linie osobno. W każdym przypadku dioda gaśnie, bez naciskania przycisku. Napięcie mierzone multimetrem wskazuje że pull-up jest włączony.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Inne pytanie na które nie mogę znaleźć odpowiedzi, to jakiego typu powinna być zmienna w której chcę przechować stan PINx, aby np porównać go ze stanem podczas następnego przebiegu pętli.
    Z góry dziękuję za pomoc.
  • REKLAMA
  • Pomocny post
    #2 14614464
    alagner
    Poziom 26  
    Warunek drugi będzie zawsze spełniony jeśli dioda się świeci, bo jeśli pin jest wyjściem to na PINB będziesz miał PORTB (w uproszczeniu). Ostatni warunek w związku z tym jest w zasadzie bez sensu.

    Pierwszy warunek - jak masz pullupa to w sumie też jest zawsze spełniony.
  • REKLAMA
  • #3 14614627
    sever82
    Poziom 2  
    Faktycznie pomyliłem wciśnięty przycisk z jedynką, a wciśnięty to zero.

    Czy PINB z jednym zadeklarowanym wejściem - PB0 i włączonym na nim pull-upie to 00000001?

    Nie wiem czy dobrze rozumiem:
    Cytat:
    Warunek drugi będzie zawsze spełniony jeśli dioda się świeci, bo jeśli pin jest wyjściem to na PINB będziesz miał PORTB (w uproszczeniu)


    Znaczy że jak mam na PORTB wyjścia 00000110 to mój PINB to jednak 00000111, a nie tak jak napisałem wyżej?

    A jakiego typu powinna być zmienna w której chcę przechować stan PINx? uint8_t?
  • REKLAMA
  • Pomocny post
    #4 14614859
    tmf
    VIP Zasłużony dla elektroda
    Do przechowywania PINB użyj uint8_t. Wszystkie piny domyślnie są wejściami, jeśli chcesz włączyć pullupa to odpowiedni bit rejestru PORTB ustaw na jeden. Co do warunków - jeśli masz warunek if(PINB) to on jest spełniony jeśli PINB jest różne od zera. Pamiętaj, że jeśli ustawisz w stan jeden lub zero bit PORTB, który jest wyjściem, to przeniesie się to także na rejestr PINB - w końcu on odczytuje stan bitów portu, niezależnie czy dana linia jest wejściem, czy wyjściem.
  • REKLAMA
  • #5 14616754
    sever82
    Poziom 2  
    Dziękuję za odpowiedzi, już wszystko działa jak powinno.
REKLAMA