Mega328p und RFM69 - Problem mit PCINT

Gast #5601676
Lesenswert?

Tuten Gag,

ich möchte einen Atmega328p schlafen legen und diesen per PCINT 
(Tastendruck) wieder wecken. Das klappt soweit auch alles. Sobald ich 
jedoch die Funktion

radio.sendWithRetry();

aufrufe, reagiert der AVR nicht mehr auf einen PCINT. Hat hier jemand 
eine Idee zur Lösung des Problems?
1
/*////////////
2
// Includes //
3
////////////*/
4

5
#include <RFM69.h>
6
#include <SPI.h>
7
#include <avr/interrupt.h>
8
#include <avr/sleep.h>
9

10
/*//////////
11
// Config //
12
//////////*/
13

14
// radio param
15
#define RADIO_NETWORKID 0 // network id
16
#define RADIO_DEVICEID 1 // device id
17
#define RADIO_RECEIVERID 2 // receiver id
18
#define RADIO_FREQUENCY RF69_433MHZ // transmission frequency
19
#define RADIO_ENCRYPT true // use AES-encryption
20
#define RADIO_ENCRYPTIONKEY "TOPSECRETPASSWRD" // 16-byte key for all devices
21
#define RADIO_USEACK true // request ACKs
22
#define RADIO_SENDTIMEOUT 500 // timeout in ms
23
#define RADIO_STATUSLED 8 // pin for led
24

25
// buttons
26
#define BTN_UNFOLD 19
27

28
/*////////////////////
29
// Global Variables //
30
////////////////////*/
31

32
char Buffer[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
33

34
/*///////////
35
// Objects //
36
///////////*/
37

38
RFM69 Radio;
39

40
/*/////////
41
// Setup //
42
/////////*/
43

44
void setup()
45
{
46
  // for debugging
47
  Serial.begin(9600);
48
  
49
  // status-led
50
  pinMode(RADIO_STATUSLED, OUTPUT);
51
   
52
  // set button-pins
53
  pinMode(BTN_UNFOLD, INPUT_PULLUP);
54

55
  // enable pin-change-interrupts for port c
56
  PCICR |= (1 << PCIE1);
57

58
  // enable pin-change-interrupts on port c for specified pins
59
  PCMSK1 |= (1 << PCINT13);
60

61
  // start interrupts
62
  sei();
63

64
  // initialize RFM69
65
  Radio.initialize(RADIO_FREQUENCY, RADIO_DEVICEID, RADIO_NETWORKID);
66
  Radio.setHighPower();
67
  Radio.encrypt(RADIO_ENCRYPTIONKEY);
68
  Radio.sleep();
69
}
70

71
/*////////////
72
// Mainloop //
73
////////////*/
74

75
void loop()
76
{  
77

78
  digitalWrite(RADIO_STATUSLED, HIGH);
79
  delay(100);
80
  //Radio.sendWithRetry(RADIO_RECEIVERID, Buffer, sizeof(Buffer));
81
  Radio.sleep();
82
  digitalWrite(RADIO_STATUSLED, LOW);
83
  delay(100);
84

85
  // zzzz
86
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  
87
  sleep_mode(); 
88
}
89

90
/*///////
91
// ISR //
92
///////*/
93

94
ISR(PCINT1_vect)
95
{
96
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren