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

ATMEGA328P-PU - Sprawdzanie stanu pinu przy logice negatywnej tranzystorów

apollo1412 13 Sty 2015 17:50 2679 3
REKLAMA
  • #1 14326018
    apollo1412
    Poziom 11  
    Witam, posiadame ATmege328p-pu. Potrzebuje sprawdzać stan pinu, aby przeciwdziałać włączniu się dwóch tranzystorów naraz.

    Przy włączaniu ich stanem wysokim miałem takie fukcje:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    ale teraz włączam tranzystory stanem niskim (logika negatywna w sterowniku) i coś nie bardzo wiem co gdzie zanegować bo przy takim kodzie nie działa:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 14326058
    BlueDraco
    Specjalista - Mikrokontrolery
    #define TRANZ_GORNY_STAN (!(PINB & 1<<PB4))
    #define TRANZ_DOLNY_STAN (!(PINB & 1<<PB3))

    Czy nie uważasz, że głupio wygląda zapis (poprawny zresztą jeśli chodzi o samo działanie), który sugeruje, że testujesz bity portu D odczytując port B?
  • REKLAMA
  • #3 14326095
    apollo1412
    Poziom 11  
    Dzięki bardzo, teraz działa. Czemu akurat negacja całości?
  • Pomocny post
    #4 14326368
    BlueDraco
    Specjalista - Mikrokontrolery
    Bo "całość" to stan jednego bitu - ten, który Cię interesuje.

    Inne rozwiązanie:
    #define TRANZ_GORNY_STAN (~PINB & 1<<PB4)
    #define TRANZ_DOLNY_STAN (~PINB & 1<<PB3)

    - tym razem negujemy cały port przed wycięciem bitu.

    Wyrażenie (!(1<<PD4)) ma zawsze wartość 0.
REKLAMA