Вс авг 29, 2021 09:49:16
COKPOWEHEU писал(а):В смысле "где"?
slav0n писал(а):а где же аппаратный ШИМ? где разгрузка ядра?..
Вс авг 29, 2021 09:57:48
Вс авг 29, 2021 10:10:20
/* ADC */
#define ADCW _SFR_IO16(0x04)
#ifndef __ASSEMBLER__
#define ADC _SFR_IO16(0x04)
#endif
#define ADCL _SFR_IO8(0x04)
#define ADCH _SFR_IO8(0x05)
Вс авг 29, 2021 12:29:13
там 2 8-битных регистра (видно в даташите) - старший и младший.Dimon456 писал(а):Теперь вопрос: у мк действительно 16 битный регистр ADCW есть? Или это два 8 битных регистра? и что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт?
Ни возникнет конфликта зипись-чтение и искажение результата?
Вс авг 29, 2021 16:43:44
Поправьте ссылку, а то сейчас она ведет на заготовку кода с cvavr'ным мусором.Следовательно ваш алгоритм ни чем не отличается от моего предложенного ранее.
Очередное преобразование начинается после чтения ADCH. То есть если нам нужна вся 10-битная точность, читаем сначала ADCL, потом ADCH (в Си можно читать сразу 16-битный ADC, он сам разберется). Если достаточно 8-битной, читаем только ADCH.что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт?
Ни возникнет конфликта зипись-чтение и искажение результата?
Вс авг 29, 2021 18:24:02
Это на каком мк?COKPOWEHEU писал(а):Не в начале, а в конце, константа ADC_TIME_TIMER как раз отвечает за то, на сколько тактов старт АЦП возникнет раньше импульса ШИМ.
#define ADCSRA_START (1<<ADEN | 1<<ADSC | 1<<ADFR | 0b110 << ADPS0) //F_CPU/64
ADCSRA = ADCSRA_START;
Это на каком мк?COKPOWEHEU писал(а):Очередное преобразование начинается после чтения ADCH
Вс авг 29, 2021 19:41:28
Вс авг 29, 2021 19:54:02
Но вы-то писали про алгоритм измерения, а не про нечитаемые продукты cvavr'а.И ссылка правильно ведет, единственный генератор начального кода, только код малость неправильный.
Да. Сейчас перечитал:Вы ошибаетесь. Запуск преобразования не связан с чтением/не чтением значений регистров данных АЦП.
То есть при чтении ADCL регистровая пара блокируется до момента чтения ADCH.When ADCL is read, the ADC Data Register is not updated until ADCH is read
Вс авг 29, 2021 22:22:34
// ADC Clock frequency: 125,000 kHz
//ADC Auto Trigger Source: Free Running
ISR(ADC_vect)
{
static uint8_t count = 1;
if(count==3){
adc_data[0] = ADCW;
ADMUX = (0<<REFS1)|(1<<REFS0)| (0<<MUX0);//set ch 0
PWM_pin_clr();//сброс выхода
}
if(count==9) {
adc_data[1] = ADCW;
ADMUX = (0<<REFS1)|(1<<REFS0)| (1<<MUX0);//set ch 1
PWM_pin_set();//установка выхода
}
if(count++>9) count=1;
}
Пн авг 30, 2021 06:48:40
#define ADCW _SFR_IO16(0x04)
#define ADCH _SFR_IO8(0x05)
Пн авг 30, 2021 20:25:38
Теста в реальном устройстве.slav0n писал(а):но для реального использования в нем все-таки кой чего не хватает... чего?
Вт авг 31, 2021 08:20:10
u32 V_sum, A_sum;
u16 period, pulsewidth;
u8 A_round, V_round;
ISR(TIMER1_OVF_vect)
{
if(ADMUX & (1<<MUX0)){
A_sum += ADCW;//get ch 1
ADMUX = (1<<REFS1)|(1<<REFS0)| (0<<MUX0);//set ch 0
PWMpin_clr();//сброс выхода
ICR1 = period - pulsewidth;
A_round++;
}else{
V_sum += ADCW;//get ch 0
ADMUX = (1<<REFS1)|(1<<REFS0)| (1<<MUX0);//set ch 1
PWMpin_set();//установка выхода
ICR1 = pulsewidth;
V_round++;
}
}
Вт авг 31, 2021 09:38:36
ну чего ты докопался до этого таймера?slav0n писал(а):но прежде:
Вт авг 31, 2021 09:47:03
Вт авг 31, 2021 09:56:49
За чем? Если есть возможность синхронизировать, за чем отказываться.slav0n писал(а):я показал не синхронизацию
slav0n писал(а):а способ фильтрации помех средним арифметическим.
A_sum += ADCW;
A_round++;
Вт авг 31, 2021 10:02:37
ну же, прояви фантазию, ты же можешь.Dimon456 писал(а):а где дальше?
Вт авг 31, 2021 10:10:38
Вт авг 31, 2021 10:12:17
Вт сен 07, 2021 19:31:45
Чт ноя 11, 2021 13:38:38