Forum: Mikrocontroller und Digitale Elektronik AVR interuppr und rfm69


von Matthias T. (matthias_199)


Lesenswert?

Hallo,

ich habe ein atmega644p und ein rfm69 und will 2 interrupts mit int2 und 
int1 abfangen.

mit int2 lief immer alles gut damit sehe ich wenn meine daten bereit 
sind um abgeholt zu werden :)

aber irgendwie wird meine isr routine für int1 immer gleich 
mitaktiviert....

so aktiviere ich beide interupts
1
    //PD2 aka INT1 als eingang für interrupt
2
    EICRA |= (1<<ISC10)|(1<<ISC11);//steigende taktflanke
3
4
5
    //PB2 aka INT2 als eingang für interrupt
6
    EICRA |= (1<<ISC20)|(1<<ISC21);//steigende taktflanke
7
8
    EIMSK |= (1<<INT1); //aktiviere INt1
9
    EIMSK |= (1<<INT2); //aktiviere INt2
1
//code für den ISR von int_vect von DIO1
2
ISR(INT1_vect)
3
{
4
    uart_puts_P("int1");
5
    uart_puts_P("\n\r");
6
       cli();
7
       //rfm_switch_mode(0); //0 ist sleep
8
       //rfm_switch_mode(4); //4 ist rx mode
9
       rfm_reset_by_timer = true;
10
       sei();
11
12
}
13
14
//code für den ISR von int_vect von DIO0
15
ISR(INT2_vect)
16
{
17
    uart_puts_P("int2");
18
    uart_puts_P("\n\r");
19
    cli();
20
    uint8_t rfm_Mode_temp = rfm_Mode; //kopieren wegen votaile
21
22
    if (rfm_Mode_temp == 0)
23
    {
24
25
    }
26
    else if  (rfm_Mode_temp == 1)
27
    {
28
29
    }
30
    else if  (rfm_Mode_temp == 2)
31
    {
32
33
    }
34
    else if  (rfm_Mode_temp == 3)
35
    {
36
37
        //power boost auschalten
38
        if (rfm_dbi_boost_value)
39
        rfm_dbi_boost_aktivate(false);
40
        //TXmode nach dem senden in den RX mode
41
         rfm_switch_mode(4);
42
    }
43
    else if  (rfm_Mode_temp == 4)
44
    {
45
        rfm_paket_RSSI = rfm_read_rssi_value();
46
        rfm_paket_GAIN = rfm_read_langain();
47
        rfm_paket_AFC = rfm_read_afc_value();
48
        rfm_paket_CRC = rfm_read_CrcOk();
49
        rfm_spi_read_FIFO_burst();
50
    }
51
    sei();
52
}

jemand eien idee ?

MFG Matze

EDIT:
Kleiner nachtrag ich habe das RFM kurz umgestellt das nach int1 kein 
signal mehr kommt und in meiner debug serial console bekomme ich 
trotzdem noch die ausgabe int1 so als würde es jedes mal auslösen wenn 
int2 auslöst.....

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

wie hast du die Ausgänge am RFM konfiguriert? Unter bestimmten 
Bedingungen (z.B. im Listenmode beim Wechsel zwischen Sleep und RX hab 
ich das schon gehabt) kommt da auch mal ein kurzer Spike obwohl kein 
Ereignis vorliegt.
Klemm dIe Verbindung mal ab, dann weißt du schon mal wo du suchen musst.
In den ISRs kannst du dir CLI/SEI sparen, während der Abarbeitung der 
ISR sind die Interrups sowieso gesperrt. Des weiteren sollten die ISRs 
so kurz wie möglich sein. UART-Ausgaben und die SPI-Kommunikation mit 
dem RFM brauchen auch Zeit.

Sascha

von Matthias T. (matthias_199)


Lesenswert?

sorry, war einfach nur dumm, hab mich im pin vermessen ;(

Läuft nun alles wie gewünscht.


MFG
Matze

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.