Forum: Mikrocontroller und Digitale Elektronik RFM12 Wakeup nIRQ


von Gerry L. (Gast)


Lesenswert?

Hallo,

ich versuche seit 2 Tagen einen ATmega32 per nIRQ aus dem power_down 
modus zu wecken.

Benutzen tu ich den RFM12 von Beitrag "bidirektionale RS232 Funkbrücke mit RFM12" 
file: Beitrag "Re: bidirektionale RS232 Funkbrücke mit RFM12" .

Den Wakup versuch ich per
1
rf12_trans(0xEA08);    // Wakup Timer initialisieren 8192 ms
2
rf12_trans(0x820B);    // Wakeup Timer aktivieren, Clockoutput

einzuschalten.

Meine code sieht so aus
1
rf12.h
2
3
/******************************************************************
4
 RFM12 wakup einschalten  
5
 *****************************************************************/
6
void rf12_enable_wakeup(void)
7
{
8
  rf12_trans(0xEA08);    // Wakup Timer initialisieren 8192 ms
9
  rf12_trans(0x820B);    // Wakeup Timer aktivieren, Clockoutput
10
}
11
12
main.c
13
14
ISR(INT0_vect) 
15
{
16
}
17
18
void init(void)
19
{
20
  cli();
21
  
22
  /***********************************************
23
  Initialisierung
24
  ***********************************************/
25
  DDRA   = 0x00;
26
  PORTA   = 0x00;
27
  DDRB   = 0x00;
28
  PORTB   = 0x00;
29
  DDRC   = 0xFF;
30
  PORTC   = 0xFF;
31
  DDRD   = 0xFB;          // PD2 = INT0 = Eingang
32
  PORTD   = 0x04;         // Pull Up aktivieren
33
34
  MCUCR &= ~0x3;
35
  
36
  sei();
37
        
38
  rf12_init();
39
  rf12_config(RF_BAUDRATE, CHANNEL, 7, NORMAL);
40
  rf12_rxmode();
41
}
42
43
int main()
44
{
45
   for (;;)
46
   {  
47
    init();
48
49
    rf12_enable_wakeup();
50
      
51
    GICR |= (1 << INT0);
52
 
53
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
54
    sleep_mode();                  
55
 
56
    GICR &= ~(1 << INT0);          
57
   }
58
}


Nun zum Problem:
- Der wakuptimer scheint nicht zu laufen.
- nIRQ ist immer LOW

Wer hat das Problem lösen können den Wakuptimer des RFM12 zu benutzen 
und einen ATmega aus dem power_down Modus zu holen?

Gerry

von Gerry L. (Gast)


Lesenswert?

okay Problem gelöst.

Für alle die es noch interessiert.
Ich musste das Statusregister noch auslesen.

1
/******************************************************************
2
 RFM12 wakup einschalten  
3
 *****************************************************************/
4
void rf12_enable_wakeup(void)
5
{
6
  rf12_trans(0xE730);    // Wakup-Timer 6144 ms
7
  rf12_trans(0x820B);    // Wakeup aktivieren, Clockoutput aus
8
  rf12_trans(0x0000);    // Statusregister auslesen;
9
}

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.