Aktykuły które nie zmieściły się w żadnej kategorii

Przedstawiam prosty sposób, wprowadzenia procesor w tryb SLEEP oraz jego budzenia, jednym klawiszem.

  1. #define F_CPU 16000000UL // Atmega644  
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4. #include <avr/interrupt.h>
  5. #include <avr/sleep.h>
  6. #include "uart.h"
  7. #define sckInit DDRB |=(1<<PB7)
  8. #define sck1 PORTB |=(1<<PB7)
  9. #define sck0 PORTB &=~(1<<PB7)
  10. volatile uint8_t stan; 
  11. ISR (INT2_vect) //obsługa przerwania INT2
  12.         stan = ~ stan; // zmiana stanu na przeciwny
  13. int main(void)
  14. {
  15.     initUsart();
  16.     sckInit;
  17.     stan = 0xFF; // 0xFF = procesor aktywny, 0x00 = procesor w trybie sleep
  18.     DDRB &=~(1<<PB2);   // pin od INT2
  19.     PORTB |=(1<<PB2);   // włacz rezystor podciągający
  20.     // 00 Niski poziom INT2 generuje żądanie przerwania.
  21.     // 01 Każda zmiana logiczna w INT2 generuje żądanie przerwania.
  22.     // 10 Spadające zbocze INT2 generuje żądanie przerwania.
  23.     // 11 Rosnące zbocze INT2 generuje żądanie przerwania.
  24.     EICRA = (1 << ISC21); // 0b00100000 włącz tylko INT2, 
  25.                           // reakcja na zbocze opadające
  26.     EIMSK = (1 << INT2);  // włacz tylko przerwanie INT2
  27.     sei();
  28.     while(1)
  29.     {
  30.       // blokując ten warunek zobaczymy jak działa przerwanie i zmienna stan
  31.       if (stan==0) 
  32.        {  
  33.          _delay_ms(20);
  34.          while(!(PINB) & 0x01);  // opuść pętlę jeżeli stan logiczny = 0
  35.          sck0;
  36.          //...... kontrola wszystkiego co trzeba !!!
  37.          set_sleep_mode(SLEEP_MODE_PWR_SAVE);
  38.          sleep_mode();
  39.          _delay_ms(20);
  40.          while(!(PINB) & 0x01);  // opuść pętlę jeżeli stan logiczny = 0
  41.        }
  42.        sck1;
  43.        rsPrint("Terminal stan >> ");
  44.        rsInt(stan); // wyprowadź liczbę do terminala
  45.        rsPrint("\n\r");
  46.     }
  47. }
Schemat poglądowy do powyższego algorytmu.

Power sleep



Dasej (C) 2019 : 5081