PINB bit test

Arduino specifieke Software
Berichten: 5
Geregistreerd: 24 Mei 2021, 20:03
Woonplaats: Boom, België

PINB bit test

Berichtdoor michel.de.meester » 15 Jul 2021, 08:44

Hallo,

Ik wil testen of bit 0 van PINB laag (0) is (in een ISR(PCINT_vect) PinChange interrupt routine)
Uiteraard is de Serial.print enkel voor Debug, nadien wordt hij verwijderd.

Code: Alles selecteren
if(PINB | 0b11111110 == 0b11111110) {
  Serial.print("Condition is True")
}


Dit lijkt echter niet te werken, geeft altijd 'condition is True', ongeacht wat Bit 0 is.

Als ik hetzelfde doe om te checken of Bit 0 hoog (1) is werkt het wel


Code: Alles selecteren
if(PINB & 0b00000001 == 0b00000001) {
  Serial.print("Condition is True")
}


Iemand enig idee?

Alvast bedankt,
Michel

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: PINB bit test

Berichtdoor shooter » 15 Jul 2021, 09:44

in de bovenste staat een OR en een == tegelijk mag er maar 1 zijn
dus if (PINB &0b11111110){serial.print ("true")}
dit is de oplossing
er zijn nog wel meer mogelijkheden zoals direct in de interupt want je mag ook PIN HIGH etc schrijven maar dat staat er niet bij


attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (recommended)
attachInterrupt(interrupt, ISR, mode) (not recommended)
attachInterrupt(pin, ISR, mode) (Not recommended. Additionally, this syntax only works on Arduino SAMD Boards, Uno WiFi Rev2, Due, and 101.)
Parameters

interrupt: the number of the interrupt. Allowed data types: int.
pin: the Arduino pin number.
ISR: the ISR to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine.
mode: defines when the interrupt should be triggered. Four constants are predefined as valid values:

LOW to trigger the interrupt whenever the pin is low,

CHANGE to trigger the interrupt whenever the pin changes value

RISING to trigger when the pin goes from low to high,

FALLING for when the pin goes from high to low.

The Due, Zero and MKR1000 boards allow also:

HIGH to trigger the interrupt whenever the pin is high.

Returns
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 24 Mei 2021, 20:03
Woonplaats: Boom, België

Re: PINB bit test

Berichtdoor michel.de.meester » 15 Jul 2021, 12:02

Hallo Shooter,

shooter schreef:in de bovenste staat een OR en een == tegelijk mag er maar 1 zijn


Ben er even zoet mee geweest....

Is volgens mij iets met de volgorde van bewerkingen.....
Als ik PINB | 0b11111110 tussen extra haakjes zet lukt het wel

Code: Alles selecteren
if((PINB | 0b11111110) == 0b11111110) {
  Serial.print("Condition is True")
}


Strange dat het met AND wel werkt zonder die extra haakjes.

Michel

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: PINB bit test

Berichtdoor ctunes » 15 Jul 2021, 21:13

michel.de.meester schreef:Hallo,


Hallo.

(X OF Y == Y) is altijd Y , ongeacht de X en de haakjes.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: PINB bit test

Berichtdoor ctunes » 15 Jul 2021, 21:21

Je bent verward door de vele onduidelijke voorbeelden van mensen die menen veel slimmer dan jij te zijn.

Als A = 0b0010 en jij wil weten of bit1, en enkel bit 1, gezet is, dan doe je meestal een &.

If (A & 0010 == true) {bit1 is set.}

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: PINB bit test

Berichtdoor ctunes » 15 Jul 2021, 21:27

OF gebruik je meestal om een bit te "zetten"

A = 0b0000

B = A | 0010.

Bit 1 van B is dan zeker 1.

Berichten: 5
Geregistreerd: 24 Mei 2021, 20:03
Woonplaats: Boom, België

Re: PINB bit test

Berichtdoor michel.de.meester » 16 Jul 2021, 07:45

ctunes schreef:OF gebruik je meestal om een bit te "zetten"



Of ook om te checken of een bepaalde bit 0 is.

Voorbeeld:
Byte = 0101
Mask = 1101 (checken of bit 1 laag is, zet een nul voor de bits die je wil checken)

Indien Byte OR Mask is gelijk aan Mask dan is de 'condition True' en is dus bit1 laag:

Byte | Mask = 1101 is zelfde als Mask
0101 | 1101 = 1101 is zelfde als Mask


Groetjes,
Michel

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: PINB bit test

Berichtdoor ctunes » 18 Jul 2021, 00:05

Het kan op meer manieren, dat klopt.

Maar waarom zou je je alle bits controleren, terwijl je er maar in 1 geïnteresseerd bent?

if (BYTE[1] == 0) ???

Berichten: 68
Geregistreerd: 04 Sep 2021, 08:31

Re: PINB bit test

Berichtdoor RobGood » 07 Sep 2021, 10:31

bool resultaat;
resultaat=~PINB & (1<<0)

thats all...
Rob

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Google [Bot], odixlpihmave en 20 gasten