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

Stan portów wejścia, odczytane wartości to 2^n, gdzie chce tylko n+1

baracuda2 23 Maj 2013 00:24 882 2
  • #1 23 Maj 2013 00:24
    baracuda2
    Poziom 13  

    Witam

    Mam pytanko, buduje układzik licznika rowerowego i przy odczytaniu stanu portu zamiast standardowego 1 (wewnętrzne podciągniecie do Vcc) wyświetla mi odpowiednio 1 dla PC0, 2 dla PC1, 4 dla PC2, aż do 32 dla PC5.

    Nie wiem co tam musiałem zmienić że zaczeło wyświetlać takie wyniki.

    Krótki programik który wyśiwetla mi 32 i 16 (0 po wciśnieciu przycisku)

    Code:
    #include <avr/io.h>
    
    #include <util/delay.h>
    #include "hd44780.h"

    void przyciski(void)
    {
       //Switch 1
       DDRC  &= ~_BV(5);
        PORTC |=  _BV(5);
       //Switch 2
       DDRC  &= ~_BV(4);
        PORTC |=  _BV(4);
       
    }

    int main(void)
    {
     
       przyciski();
     
        lcd_init();
     
        LCD_DISPLAY(LCDDISPLAY);

       char buf2[10];
       char buf[10];
        while(1)
        {   
           LCD_LOCATE(0,0);
             
            itoa(PINC & _BV(5), buf,10);
            lcd_puts(buf);
           
           LCD_LOCATE(0,1);
             
            itoa(PINC & _BV(4), buf2,10);
            lcd_puts(buf2);
           
        }
        return 0;
    }

    0 2
  • Pomocny post
    #2 23 Maj 2013 00:33
    loczi
    Poziom 13  

    PINC & _BV(4) zwraca 0B00010000 lub 0B00000000, ponieważ _BV(4) to 0B00010000

    PC0 to jest pierwszy bit więc oddaje 2^0
    PC1 to jest 2bit więc oddaje 2^1
    PC2 to jest 3bit więc oddaje 2^2
    ...
    PC7 to jest 8bit więc oddaje 2^8

    Taka jest zasada liczb binarnych.

    Jeśli chcesz z PC4 zrobić wynik 4 to musisz zrobić

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Tylko musisz pamiętać, że w takim wypadku będą problemy przy 2 przyciskach na raz(będzie łapać tylko ten z wyższym numerem).

    0
  • #3 13 Lis 2013 20:18
    baracuda2
    Poziom 13  

    Wszystko zgodne z tym co podał loczi.

    0