Пн янв 22, 2024 22:31:20
Вт янв 23, 2024 10:12:02
uuu000 писал(а):while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t i;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
i = (ADCL|ADCH << 8); // Считываем ADC
}
void Counter0_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
// инициализация блинков
void blink_ini(void)
{
DDRB|=(1<<PB1);
}
void blink (void)
{
uint16_t u= i;
OCR1A = u;
Counter0_init();
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini ();
blink_ini(); // инициализация блинков
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
Вт янв 23, 2024 10:48:32
Вт янв 23, 2024 11:06:41
Вт янв 23, 2024 11:56:28
Вт янв 23, 2024 15:16:33
Вт янв 23, 2024 16:04:51
Вт янв 23, 2024 17:43:36
Gennadiy писал(а):Из функции blink() исключите Counter0_init().
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t i;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
i = (ADCL|ADCH << 8); // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
// инициализация блинков
void blink_ini(void)
{
DDRB|=(1<<PB1);
}
void blink (void)
{
uint16_t u= i;
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
blink_ini(); // инициализация блинков
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t i;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
i = (ADCL|ADCH << 8); // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
void blink (void)
{
uint16_t u= i;
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t u;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
u = (ADCL|ADCH << 8); // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
void blink (void)
{
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t u;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
u = ADCW; // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
void blink (void)
{
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
Вт янв 23, 2024 18:32:36
Вт янв 23, 2024 21:04:16
uuu000 писал(а):ниже 500мВ (100бит) сильно гуляет частота...
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
u = ADCW; // Считываем ADC
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
ADCSRA |= (1<<ADIF); // сброс флаг ADIF
u = ADCW; // Считываем ADC
}
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t u;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); // Ждем флага окончания преобразования
ADCSRA |= (1<<ADIF); // сброс флаг ADIF
u = ADCW; // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
void blink (void)
{
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADSC))== 1); // Ждем флага окончания преобразования. флаг ADSC сбрасывается аппаратно.
u = ADCW; // Считываем ADC
}
#define F_CPU 8000000UL // тактовая частота мк
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t u;
void adc_ini (void)
{
/*** Настройка АЦП ***/
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель на 8
ADMUX |= (0 << REFS1)|(1 << REFS0) // внешний ИОН
|(1 << MUX0)|(1 << MUX1); // вход PC3
}
void adc (void)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while ((ADCSRA&(1 << ADSC))== 1); // Ждем флаг окончания преобразования (флаг ADSC сбрасывается аппаратно).
u = ADCW; // Считываем ADC
}
/*** Настройка Counter1 ***/
void Counter1_init()
{
TCCR1B |= (1 << CS12);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << WGM10);
TCCR1B &= ~(1 << WGM11);
TCCR1B |= (1 << WGM12);//режим СТС
TCCR1B &= ~(1 << WGM13);
TCCR1A &= ~(1 << COM1A1);
TCCR1A |= (1 << COM1A0);
DDRB |= (1 << PB1);
}
void blink (void)
{
OCR1A = u;
}
int main(void)
{
DDRD|=(1<<PD0)|(1<<PD1);
adc_ini (); // инициализация adc
Counter1_init(); // инициализация Counter1
sei();// глобально разрешить прерывания
while(1)
{
while (!(TIFR &=~(1<<OCF1A))); // флаг OCF1A предел счета Т1
TIFR |=(1<<OCF1A); // сброс флаг OCF1A
adc ();
blink ();
}
}
Вт янв 23, 2024 22:48:43