Страница 1 из 1
Генератор, скважность которого можно изменять потенциометром
Добавлено: Пт апр 12, 2019 14:53:58
yan671games
Я всех категорически приветствую. Передо мной поставили задачу: реализовать на микрухе ATMega48PA ШИМ генератор скважность которого можно изменять потенциометром, а также на другом выходе этой микрухи сделать генерацию импульсов длительностью 100микросекунд (+/-20мкс), генерироваться они должны 1 раз в 4 секунды. с ШИМ проблем не возникло, а, вот, с импульсами ничего не выходит
Код: Выделить всё
#define F_CPU 8000000UL
#define XTAL 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
static uint8_t s;
void timer0_init (void){
DDRD=(1<<PD0); /* PD0 в режим выхода*/
TCCR0B|=(1<<CS02)|(1<<CS00);/*Предделитель = 1024*/
TIFR0 = (1<<TOV0);/*флаг прерывания по переполнению*/
TCNT0 = 255;
s = 0;
TIMSK0=(1<<TOIE0);//прерывание по переполнению таймера 1
sei();//Разрешить прерывания
}
ISR(TIMER0_OVF_vect)
{
PORTD=(1<<s);
s++;
if(s==120)
{
s=0;
}
TCNT0= 255;/*начальное значение таймера*/
}
int main(void)
{ timer0_init();
while(1)
{
}
}
попытался сделать через прерывания по переполнению таймера 0, но никак не получается сделать требуемый период. подскажите, что не так
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 15:46:42
Dimon456
yan671games писал(а):сделать генерацию импульсов
Импульса или импульсов?
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 16:03:33
yan671games
Импульсов
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 16:24:36
Z_h_e
volatile static uint8_t s;
upd: Хотя volatile тут не нужен, тут правильнее объявить s статичной, но внутри обработчика прерывания.
Добавлено after 2 minutes 56 seconds:
Re: Генератор, скважность которого можно изменять потенциометром
PORTD=(1<<s);
А это что такое?
Добавлено after 1 minute 15 seconds:
Re: Генератор, скважность которого можно изменять потенциометром
TCNT0= 255;/*начальное значение таймера*/
А это в обработчике прерывания зачем?
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 16:24:50
Dimon456
yan671games писал(а):Импульсов
И так
yan671games писал(а):импульсов длительностью 100микросекунд
yan671games писал(а):генерироваться они должны 1 раз в 4 секунды
значит 1000 импульсов длительностью 100мкс, пауза между импульсами пусть будет то же 100мкс (должна же быть пауза между импульсами?) и вся это пачка импульсов повторяется 1 раз в 4 секунды.
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 16:58:16
yan671games
[uquote="Dimon456",url="/forum/viewtopic.php?p=3614935#p3614935"]йзначит 1000 импульсов длительностью 100мкс, пауза между импульсами пусть будет то же 100мкс (должна же быть пауза между импульсами?) и вся это пачка импульсов повторяется 1 раз в 4 секунды.[/uquote]
Нет, один импульс длительностью 100мкс, который повторяется раз в 4 секунды
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пт апр 12, 2019 17:06:54
Dimon456
yan671games писал(а):Нет, один импульс длительностью 100мкс, который повторяется раз в 4 секунды
Но вот так бы и сразу.
Спойлер
Код: Выделить всё
#define F_CPU 8000000UL
#define XTAL 8000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay_basic.h>
ISR(TIMER1_COMPA_vect){
PORTD |= (1<<(PIND0));
_delay_loop_2(199);
PORTD &= (~(1<<(PIND0)));
}
int main()
{
DDRD |=(1<<DDD0);
PORTD |=(0<<PIND0);
// Timer/Counter 1 initialization
// Timer Period: 3,9999 s
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x7A;
OCR1AL=0x10;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (1<<OCIE1A) | (0<<TOIE1);
// Global enable interrupts
sei();
while (1)
;
return 0;
}
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пн апр 15, 2019 09:16:17
yan671games
А на 8-битном таймере можно этот же процесс сделать? или лучше ШИМ перенести на 8битный?
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Пн апр 15, 2019 12:02:05
Dimon456
yan671games писал(а):А на 8-битном таймере можно этот же процесс сделать?
Можно и на 8-битном таймере, по аналогии с 16-битным таймером.
Re: Генератор, скважность которого можно изменять потенциоме
Добавлено: Чт май 02, 2019 11:07:55
ozonn
я подключал потенциометр к АЦП и переносил значение ADC в OCR