Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * push_pull.c
- *
- * Created: 2014-10-18 17:24:16
- * Author: Szymon
- */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdlib.h>
- #define nop {asm volatile("nop");}
- #define T1 PB2
- #define ONT1 (PORTB |=(1<<T1))
- #define OFFT1 (PORTB &=~(1<<T1))
- #define T2 PB4
- #define ONT2 (PORTB |=(1<<T2))
- #define OFFT2 (PORTB &=~(1<<T2))
- #define LED PB3
- #define LED_ON (PORTB |=(1<<LED))
- #define LED_OFF (PORTB &=~(1<<LED))
- #define OCR_MIN 4
- #define OCR_MAX 50
- int8_t volatile funkcja = 0;
- int8_t volatile ocrCnt = OCR_MIN;
- ISR(ADC_vect,ISR_NAKED){
- uint16_t u = (ADCL>>6)|(ADCH<<2);
- if( u >= 220 ){
- ocrCnt--;
- }else{
- ocrCnt++;
- };
- if(ocrCnt < OCR_MIN)ocrCnt=OCR_MIN;
- if(ocrCnt > OCR_MAX)ocrCnt=OCR_MAX;
- OCR0 = ocrCnt;
- asm volatile("reti");
- };
- ISR(TIMER0_COMP_vect, ISR_NAKED){
- TCNT0 = 0;
- if(funkcja == 0){
- OFFT1;
- nop;
- nop;
- ONT2;
- funkcja = 1;
- }else{
- OFFT2;
- nop;
- nop;
- ONT1;
- funkcja = 0;
- };
- asm volatile("reti");
- };
- int main(void)
- {
- DDRB = (1<<T1)|(1<<T2)|(1<<LED);
- PORTB = (1<<T1)|(1<<T2)|(1<<LED);
- DDRD = (0<<PA0);
- PORTD =(0<<PA0);
- TCCR0 = (1<<CS01); // F_CPU / 8
- OCR0 = 5;
- TIMSK = (1<<OCIE0);
- ADMUX = (1<<ADLAR);
- ADCSRA = (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
- ADCSRA |= (1<<ADSC);
- sei();
- OFFT1;
- OFFT2;
- while(1){};
- };
Advertisement
Add Comment
Please, Sign In to add comment