Interrupt INT0 mit Atmel Studio6/7 aktivieren!?

Gast #4418522
Hallo,
ich wollte den Aufbau (Siehe Link im Quellcode) nachbauen und setze 
dafür ein Atmega328PU ein. Dieser wird über ein 16Mhz Quarz angesteuert. 
Ich setze ein TSOP4838 am INT0 ein.
Ich arbeite mit AtmelStudio6. Es scheint hier aber so, als wenn INT0 
nicht arbeitet. Der Code scheint für AtmelStudio < 6 erstellt worden zu 
sein, weil er "GICR" nicht kennt. Ich habe folgendes gefunden:
1
#define GIMSK _SFR_IO8(0x3B)
2
#define GICR GIMSK
Scheint aber nicht zu funktionieren....

Hat jemand eine Idee, wie ich diesen Code für AtmelStudio6 bauen kann, 
so dass INT0 auslöst?

Danke!
1
// Avr rc5 remote control:
2
// http://wiki.electronics-irc.net/Avr_rc5_remote_control
3
// mein Testaufbau: Atmega328PU @ 16Mhz Quarz (nicht 3,...Mhz)
4

5
#include <avr/interrupt.h>
6
#include <avr/io.h>
7
#include <util/delay.h>
8

9
// definiere für Atmega328p --> GICR (richtig?)
10
#define GIMSK _SFR_IO8(0x3B)
11
#define GICR GIMSK
12

13
//#define PB5 (1 << 5)
14

15
typedef union {
16
  uint16_t raw;
17
  struct {
18
    unsigned cmd    : 6;  // LSB
19
    unsigned addr   : 5;
20
    unsigned toggle : 1;
21
    unsigned start  : 2;
22
    unsigned        : 2;  // MSB
23
  };
24
} rc5data;
25

26
static volatile int flag = 0;
27
static volatile rc5data data;
28

29
void init_int0()
30
{
31
  // Interrupt on INT0 pin going low
32
  MCUCR = (1 << ISC01);
33
  
34
  // Turn on INT0!
35
  GICR |= (1 << INT0);
36
}
37

38
ISR (INT0_vect)
39
{
40
  int pos = 0;
41
  
42
  if (!flag) {
43
    data.raw = 0;
44
    
45
    // triggers on falling edge of start bit 1.
46
    _delay_ms(1);//_delay_ms(0.2);
47
    
48
    while (pos < 14) {
49
      data.raw = (data.raw << 1) | ((~PIND & 0x04) >> 2); //PIND2 <-- IR Empfänger
50
      _delay_ms(10); //_delay_ms(1.8);
51
      pos++;
52
    }
53
    
54
    flag = 1;
55
  }
56
}
57

58
int main()
59
{
60
  init_int0();
61
  DDRB = 0xFF;
62
  
63
  sei();     // Enable interrupts
64

65
  while(1) {
66
    
67
    while(!flag);
68

69
    /* set PB5 pin of PORTB high */
70
    PORTB = (1 << PB5); 
71
    _delay_ms(500);
72

73
    /* set all pins of PORTB low */
74
    PORTB = 0x00;
75
    _delay_ms(500);
76
      
77
    // Do with data from the remote control here what you like.
78
    flag = 0;
79
    
80
  }
81
  
82

83
  return 0;
84
}
Gast
Im MCUCR im ATmega328P findet sich nix zu INT0. Schaue mal ins 
Datenblatt zum ATmega328P unter External Interrupts.

MCUCR muss geändert werden in EICRA und GIMSK wird zu EIMSK.
Gast
Ich greife mir mal virtuell an den Kopf.

Warum schaust Du nicht direkt in das Datenblatt ?
Mit einer einfachen Suche wäre die Antwort doch direkt selbst zu finden 
gewesen.

Naja - lesen will gelernt sein.
Gast
U. schrieb:
> _delay_ms(1);//_delay_ms(0.2);

Weißt Du eigentlich auch nur ansatzweise, was Du da machst?

U. schrieb:
> // mein Testaufbau: Atmega328PU @ 16Mhz Quarz (nicht 3,...Mhz)

Scharf - und deshalb meinst Du, alles durch ungefähr mal 5 - passt schon 
:-)

Ich hasse diese Hinweise eigentlich - aber wie wäre es mit einem 
Einstieg über LED's blinken lassen etc. ?

Also entweder Du findest jemanden, der Dir das hinbiegt oder Du musst 
Dich halt selbst schlau machen. Das fängt bei den Grundlagen an ...

Ach ja, Datenblätter muss man dabei auch lesen - Englisch-Kenntnisse 
sind da von Vorteil. Das ist eine "harte Schule" - aber da muss man 
durch (wenn man es selbst machen will).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.