Forum: Mikrocontroller und Digitale Elektronik Attiny13 INT0 Logical Change Problem


von Werner P. (Gast)


Lesenswert?

Hallo zusammen,

Ich kann in meinem Programm keinen Fehler finden. Lege ich an INT0 (PB1) 
ein Rechtecksignal an dann sollten doch PB4 und PB5 toggeln.

Hier der Code:
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
6
ISR (INT0_vect) {
7
  if (PINB & (1<<PINB1)) {
8
    PORTB &= ~(PB5);
9
    PORTB |= (1<<PB4);
10
  } else {
11
    PORTB &= ~(PB4);
12
    PORTB |= (1<<PB5);
13
  }
14
}
15
int main(void) {
16
17
  // Outputs
18
  DDRB |= (1<<PB4);
19
  DDRB |= (1<<PB5);
20
21
  // Inputs
22
  DDRB &= ~(1<<PB1);
23
  PORTB |= (1<<PB1);
24
25
  // Start Sequenze. Only for test
26
  PORTB |= (1<<PB4);
27
  _delay_ms(200);
28
  PORTB &= ~(1<<PB4);
29
  _delay_ms(400);
30
  PORTB |= (1<<PB4);
31
  _delay_ms(200);
32
  PORTB &= ~(1<<PB4);
33
34
  // Interrupts
35
  // INT0 = Pin Logical Change
36
  MCUCR |= (1<<ISC00);
37
  // INT0 = enable
38
  GIMSK |= (1<<INT0);
39
40
  // Enable Interrupts
41
  sei();
42
43
44
  while(1) {
45
46
47
  }
48
}

Idee? Danke

von Peter II (Gast)


Lesenswert?

das sieht merkwürdig aus:

> PORTB &= ~(PB5);

von Cyblord -. (cyblord)


Lesenswert?

Peter II schrieb:
> das sieht merkwürdig aus:
>
>> PORTB &= ~(PB5);

Weil es so aussehen muss:

PORTB &= ~(1<<PB5);

von Werner P. (Gast)


Lesenswert?

Hallo Peter,

Danke, das wars. Vor lauter Wald sieht man die Bäume nicht mehr.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.