Forum: Mikrocontroller und Digitale Elektronik AtTiny85 externer Interrupt (INT0)


von Toni (Gast)


Lesenswert?

Unzählige mal bin ich jetzt schon durchs Datenblatt, hab mir Beispiele 
angeschaut und trotzdem funktioniert der Interrupt nicht...
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
void interrupt_init()
5
{
6
  // rising edge on INT0 creates an interrupt
7
  MCUCR |= (1 << ISC00)|(1 << ISC01);
8
  // turns on interrupt for INT0
9
  GIMSK |= (1 << INT0);
10
  // allow global interrupts
11
  sei();
12
  //or 'SREG |= (1 <<  7);'
13
14
}
15
16
int main(void)
17
{  
18
  //PB1 as OUTPUT
19
  DDRB |= (1 << PB1);
20
  //PB2 as INPUT
21
  DDRB &= ~(1<<PB2);
22
  //PB2 PULLUP
23
  PORTB |= (1 << PB2);
24
25
  // initialize interrupt
26
  interrupt_init();
27
  
28
  // loop forever
29
  while(1)
30
  {
31
  }
32
}
33
34
35
36
ISR(INT0_vect){
37
  PORTB ^= ( 1 << PB1 );  
38
}

Hab Vcc über einen Taster an PB2, also INT0 angebracht, während der 
Logic-Analyzer Daten von PB1 sammelt betätige ich den Schalter, ohne 
jegliche Änderung an PB1 festzustellen.

von Toni (Gast)


Lesenswert?

Ouh... der Pullup...

von Peter II (Gast)


Lesenswert?

Toni schrieb:
> Hab Vcc über einen Taster an PB2

und das ganze mit

//PB2 PULLUP


was soll dann an dem Port passieren?

von Cyblord -. (cyblord)


Lesenswert?

Toni schrieb:
> Hab Vcc über einen Taster an PB2, also INT0 angebracht, während der
> Logic-Analyzer Daten von PB1 sammelt betätige ich den Schalter, ohne
> jegliche Änderung an PB1 festzustellen.

Hättest mal lieber an deinem Taster bzw. PB2 gemessen. Dann hättest du 
bemerkt dass sich da beim Drücken nichts tut.

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.