Вс май 16, 2021 14:44:05
Пн май 17, 2021 22:45:35
//----------
ISR(ADC_vect)
{
low_adc = ADCL;
high_adc = ADCH;//Старшая часть регистра ADC должна быть считана последней, иначе не продолжится преобразование
if(adc_counter<20) {adc_tmp+=high_adc;adc_counter++;}
else {adc_value=adc_tmp/20;adc_counter=0;adc_tmp=0;}
}
//----------
void ADC_Init(void)
{
ADCSRA |= (1<<ADEN) // Разрешение использования АЦП
|(1<<ADSC)//Запуск преобразования
|(1<<ADFR)//Непрерывный режим работы АЦП
|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)//Делитель 128 = 128 кГц
|(1<<ADIE);//Разрешение прерывания от АЦП
ADMUX |= (1<<ADLAR)|(0<<REFS1)|(1<<REFS0); //Внутренний Источник ОН 5в, вход ADC0
}
//----------
void init_button_timer(void)
{
TIMSK |= (1<<TOIE0); //устанавливаем бит разрешения прерывания 0-ого счетчика по переполнению
TCCR0 |= (0<<CS02)|(1<<CS01)|(1<<CS00); // устанавливаем предделитель 64
//тем самым получаем - частота тактирования / предделитель / 256 = 976,5625 (около милисекунды)
//делим на 256, так как таймер нулевой всегда считает от 0x00 до 0xFF и это не регулируется никак
}
//----------
ISR (TIMER0_OVF_vect)
{
Read_Button_State(Button_Right);
Read_Button_State(Button_Up);
Read_Button_State(Button_Down);
Read_Button_State(Button_Left);
Read_Button_State(Button_Select);
tim_cnt++;
if(tim_cnt>=1000) tim_cnt=0;
}
//----------
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
Read_Button_State(Button_Right); //читаем состояние кнопки вправо
Read_Button_State(Button_Up); //читаем состояние кнопки вверх
Read_Button_State(Button_Down); //читаем состояние кнопки вниз
Read_Button_State(Button_Left); //читаем состояние кнопки влево
Read_Button_State(Button_Select); //читаем состояние кнопки выбор
tim_cnt++;
if(tim_cnt>=1000) {tim_cnt=0;}
}
......................
// Clock value: 125,000 kHz
// Mode: Fast PWM top=OCR0A
// OC0B output: Non-Inverted PWM
// Timer Period: 1 ms
// OC0B Period: 1 ms Width: 0 us
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (1<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(1<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x7C;
OCR0B=0x00;
TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0);
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On, ADC4: On, ADC5: On
DIDR0=(0<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); //(1<<ADATE) - используется в режиме по событию
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
Вт май 18, 2021 10:08:02
TCCR2 = 0x00;
TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (1<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
Вт май 18, 2021 11:44:59
TCCR2=(1<<PWM2) | (1<<COM21) | (1<<CTC2) ;
Вт май 18, 2021 14:38:08
Вт май 18, 2021 15:07:41
Ср май 19, 2021 09:51:21
Сб авг 21, 2021 22:34:13
TCNT1 = TCNT1H<<8; //с начало старший
TCNT1 = TCNT1 + TCNT1L; //потом младший
TCNT1 = TCNT1H<<8 | TCNT1L;
Вс авг 22, 2021 10:34:58
Вс авг 22, 2021 11:11:17
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
Вс авг 22, 2021 11:26:40
...
#define TCCR1A (*(unsigned char *) 0x80)
#define TCCR1B (*(unsigned char *) 0x81)
#define TCCR1C (*(unsigned char *) 0x82)
#define TCNT1L (*(unsigned char *) 0x84)
#define TCNT1H (*(unsigned char *) 0x85)
#define TCNT1 (*(unsigned char *) 0x84) // мое творчество
...
TCNT1 = TCNT1L; //младший
TCNT1 |= (unsigned int) TCNT1H<<8; //потом старший
Вс авг 22, 2021 11:28:06
#define TCNT1L (*(volatile unsigned char *) 0x84)
#define TCNT1H (*(volatile unsigned char *) 0x85)
#define TCNT1 (*(volatile unsigned int *) 0x84) // мое творчество
Вс авг 22, 2021 12:16:11
kote52 писал(а):TCNT1 = TCNT1L; //младший
TCNT1 |= (unsigned int) TCNT1H<<8; //потом старший
TCNT1 |= ( (unsigned int)TCNT1H ) << 8;
Вс авг 22, 2021 12:24:59
#define TCNT1L (*(volatile unsigned char *) 0x84)
#define TCNT1H (*(volatile unsigned char *) 0x85)
#define TCNT1 (*(volatile unsigned int *) 0x84) // мое творчество
Сб окт 30, 2021 18:21:53
Сб окт 30, 2021 19:07:04
Пн ноя 08, 2021 22:24:59
Сб дек 04, 2021 20:34:56
for(int i=0;i<3;i++){
}
Вс дек 05, 2021 18:35:40
Вт дек 14, 2021 13:47:08