leg dich schlafen

Gast #578012
Lesenswert?
• ▲
▼
Wenn ich das richtig verstanden habe brauche ich um den Pic schlafen zu 
legen:

Eine INT-Routine welche alles abspeichert was vorher war und den schlaf 
an sich.


INTCON2bits.INTEDG0=1  // Flanke  0 auf 1
INTCONbits.INT0IE=1  //INT RB erlauben
INTCONbits.GIEH=1;           // INT Überhaupt erlauben


kann ich jett einfach schreiben

Sleep()
INTCON2bits.INTEDG0=1  // Flanke  0 auf 1
INTCONbits.INT0IE=1  //INT RB erlauben
INTCONbits.GIEH=1;           // INT Überhaupt erlauben

reicht das?
Gast #578028
Lesenswert?
• ▲
▼
1
void 1 (void)
2
{
3
INTCON2bits.INTEDG0=1;            //PORTRBx als int für Flanke 0-1
4
INTCONbits.INT0IE=1;            //Int Port RB0 erlauben
5
INTCONbits.GIEH=1;              //Int erlauben
6
}
7

8
void 2 (void)
9
{
10
INTCONbits.INT0IF=1;            //IntPort RB0 löschen
Gast #578092
Lesenswert?
• ▲
▼
was fehlt da noch
1
void INT1_Init(void)
2
{
3
        INTCON2bits.INTEDG0=1;            //PORTRBx als interrrupteingang für Flanke 1-0
4
    INTCONbits.INT0IE=1;            //Interrupt vom Port RB0 erlauben
5
    INTCONbits.GIEH=1;              //Interrupts überhaupt erlauben
6
        
7
}
8

9

10
void main (void){
11
        
12
        TRISD = 0x0000;         /* LEDs on dsPICDEM 1.1 board are connected to RD0-RD3 */
13
        LATD = 0x0000;          /* We will configure Port D to be output so we can use */
14
                                /* use LEDs as an indicator of the occurrence of external */
15
                                /* interrupts */
16

17
        INT1_Init();            /* Call function to initialize the External Interrupt- INT1 */
18
        while (1)               /* Loop endlessly */
19
        {
20
                Sleep();        /* View the time between the falling edge on the INT1 pin*/
21
                                
22
        }
23
}
Gast #578348
Lesenswert?
• ▲
▼
Hi

Zuerst musst du mal den ganzen Kram so einstellen, dass er auch vom 
Sleep aufgeweckt wird.
Durch welches Ereignis soll das denn bei dir geschehen und was soll er 
danach machen? Das musst du dir dann halt genau im Datenblatt 
durchlesen. Und danach brauchst du nur an geeigneter Stelle:
1
Sleep();
einfügen.

mfg Schoasch

PS.: Dein Programm mag vl richtig sein, jedoch würd ich da einfach den 
PIC aus der fassung nehmen und alles mit fest verdrahtet gegen Masse 
schalten ;-). sorry... aber ohne mehr Informationen kann ich dir leider 
nicht weiter helfen. Wichtige Infos wären zb: Compiler (wird wohl der 
C18 sein).. welchen µC?! Was willst du machen?
#578635
Lesenswert?
• ▲
▼
fertzu wrote:
> Eine INT-Routine welche alles abspeichert was vorher war und den schlaf
> an sich.


Nö.

Der Interrupt muß enabled werden, damit man wieder aufwachen kann, sonst 
gehts nur mit Reset.

Es reicht also völlig ein Interrupt nur mit RETI drin.

Damit ist auch klar, daß Sleep keinesfalls innerhalb eines 
Interrupthandlers stehen darf.

Der Sleep-Befehl muß der letzte sein und nach dem Aufwachen gehts 
einfach danach weiter.


Das wichtigste am Sleep ist aber, vorher alle IO-Pins so zu setzen, daß 
kein Strom fließt, also alle Ausgänge so, daß sie nichts treiben und 
keinen  Eingang floatend.

Das Sleep macht ja nur bei Batteriebetrieb Sinn, um Strom zu sparen.

Bei Netzbetrieb ist es Mumpitz (Verbrauch durch Trafo, Spannungsregler 
ist viel höher).


Peter
Gast #579040
Lesenswert?
• ▲
▼
Er soll per Timer INT am Ausgang Low High aufwachen. Die Ports für die 
LED zum ansteuern mache ich wo anders.

Wie muss ich das Programm jetzt verändern?

bisher habe ich das und es geht nicht:
1
void int_sleep_lade_tag(void)
2
  {
3
    alles_out();
4
  while(1)
5
  {
6
  Sleep();
7
  }
8
  
9
void int_interr(void)
10
{
11
       INTCON2bits.INTEDG0=1;            
12
    INTCONbits.INT0IE=1;            
13
    INTCONbits.GIEH=1;                    
14
}

Antwort schreiben

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.

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.