Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- uint8_t inc=0,turn=0, c=0;
- int main()
- {
- DDRC = 0xff;
- DDRB = 0xff;
- TCCR0 =(1 << CS00) | (1 << WGM01) | (1 << WGM00)| (1<< COM01); //pwm bez preskalera
- TCCR2 =(1<<WGM21)|(1<<CS20)|(1<<CS21)|(1<<CS22); //timer2 w trybie CTC preskaler 1024
- OCR2=160; //przerwanie co 10ms
- TIMSK|=(1<<OCIE2); // maska przerwań
- sei();
- ADMUX = 0x60; // ADC Multiplexer Selection Register
- // REFS1 = 0 - AVCC with external capacitor at AREF pin
- // REFS0 = 1 - AVCC with external capacitor at AREF pin
- // ADLAR = 1 - left adjust the result
- // MUX4 = 0 - single end input ADC0
- // MUX3 = 0 - single end input ADC0
- // MUX2 = 0 - single end input ADC0
- // MUX1 = 0 - single end input ADC0
- // MUX0 = 0 - single end input ADC0
- ADCSRA = 0x87; // ADC Control and Status Register A dla 4MHz
- // ADEN = 1 - ADC Enable
- // ADSC = 0 - ADC Start Conversion
- // ADATE = 0 - ADC Single mode conversion
- // ADIF = 0 - ADC Interrupt Flag
- // ADIE = 0 - ADC Interrupt Enable
- // ADPS2 = 1 - ADC Prescaler Select Bits - fosc/128 dla 16MHz
- // ADPS1 = 1 - ADC Prescaler Select Bits - fosc/128 dla 16MHz
- // ADPS0 = 1 - ADC Prescaler Select Bits - fosc/128 dla 16MHz
- ADCSRA = ADCSRA | 0x40; // start konwersji
- while (1)
- {
- if(turn == 0)
- {
- OCR0=turn+inc; // zwiększanie wartości rejestru
- }
- else
- {
- OCR0=turn-inc; // zmniejszanie wartości rejestru
- }
- if ( ADCSRA & 0x10)
- {
- PORTC = ADCH;
- ADCSRA = ADCSRA | 0x10; // skasowanie flagi zakończenia konwersji
- ADCSRA = ADCSRA | 0x40; // start konwersji
- }
- }
- }
- ISR(TIMER2_COMP_vect)
- {
- c++;
- if(c%25==0) // spowolnienie zmian wartości rejestru OCR2
- {
- inc++; // inkrementacja zmiennej inc
- if(inc==160) // odwrócenie kierunku "przekręcania potencjometrem"
- {
- c=0;
- turn ^=160;
- inc=0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement