Forum: Mikrocontroller und Digitale Elektronik Mega328p und RFM69 - Problem mit PCINT


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Elvis (Gast)


Bewertung
0 lesenswert
nicht 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
}

von Elvis (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Soo,

habe jetzt mittels Radio.setPowerLevel() die Sendeleistung reduziert. 
Danach funktioniert der PCINT. Kann mir jemand den Effekt erklären?

von Christian S. (roehrenvorheizer)


Bewertung
0 lesenswert
nicht lesenswert
" Sobald ich jedoch die Funktion radio.sendWithRetry();"



Woher sollte man wissen, was dieses Unterprogramm eigentlich genau 
macht?
OK, es hat etwas mit Senden zu tun und mit Wiederholungen...
mfG

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Neben dem Quelltest der "bösen" Methode wäre sicher auch ein Schaltplan 
hilfreich.

Ein häufiger Fehler sind zu große Pull-Up Widerstände in der Nähe von 
Antennen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.