Guest User

Untitled

a guest
Oct 23rd, 2014
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. /*
  2.  * push_pull.c
  3.  *
  4.  * Created: 2014-10-18 17:24:16
  5.  *  Author: Szymon
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10. #include <stdlib.h>
  11.  
  12. #define nop {asm volatile("nop");}
  13.  
  14. #define T1  PB2
  15. #define ONT1    (PORTB |=(1<<T1))
  16. #define OFFT1   (PORTB &=~(1<<T1))
  17.  
  18. #define T2  PB4
  19. #define ONT2    (PORTB |=(1<<T2))
  20. #define OFFT2   (PORTB &=~(1<<T2))
  21.  
  22. #define LED PB3
  23. #define LED_ON  (PORTB |=(1<<LED))
  24. #define LED_OFF (PORTB &=~(1<<LED))
  25.  
  26. #define OCR_MIN 4
  27. #define OCR_MAX 50
  28.  
  29. int8_t volatile funkcja = 0;
  30. int8_t volatile ocrCnt = OCR_MIN;
  31.  
  32. ISR(ADC_vect,ISR_NAKED){
  33.     uint16_t u = (ADCL>>6)|(ADCH<<2);
  34.     if( u >= 220 ){
  35.         ocrCnt--;
  36.     }else{
  37.         ocrCnt++;
  38.     };
  39.     if(ocrCnt < OCR_MIN)ocrCnt=OCR_MIN;
  40.     if(ocrCnt > OCR_MAX)ocrCnt=OCR_MAX;
  41.     OCR0 = ocrCnt;
  42.     asm volatile("reti");
  43. };
  44.  
  45. ISR(TIMER0_COMP_vect, ISR_NAKED){
  46.     TCNT0 = 0;
  47.     if(funkcja == 0){
  48.         OFFT1;
  49.         nop;
  50.         nop;
  51.         ONT2;
  52.         funkcja = 1;
  53.     }else{
  54.         OFFT2;
  55.         nop;
  56.         nop;
  57.         ONT1;
  58.         funkcja = 0;
  59.     };
  60.     asm volatile("reti");
  61. };
  62.  
  63. int main(void)
  64. {
  65.    
  66.     DDRB = (1<<T1)|(1<<T2)|(1<<LED);
  67.     PORTB = (1<<T1)|(1<<T2)|(1<<LED);
  68.    
  69.     DDRD = (0<<PA0);
  70.     PORTD =(0<<PA0);
  71.    
  72.     TCCR0 = (1<<CS01);  // F_CPU / 8
  73.     OCR0 = 5;
  74.     TIMSK = (1<<OCIE0);
  75.    
  76.     ADMUX = (1<<ADLAR);
  77.     ADCSRA = (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  78.    
  79.     ADCSRA |= (1<<ADSC);
  80.    
  81.     sei();
  82.    
  83.     OFFT1;
  84.     OFFT2;
  85.     while(1){};
  86. };
Advertisement
Add Comment
Please, Sign In to add comment