Таймеры/счётчики в AVR

Обсуждаем контроллеры компании Atmel.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение Demiurg »

Никогда не понимал такого подхода, захотелось запрограммировать, быстро хватаем, быстро ляпаем свой код или воруем с инета чужой. Бац, ни хрена не работает. ААААА!!!! Памагыте! Ниче не работает!!!! Ну конечно же, все люди братья, добренькие дяди на форумах на пальцах разжуют, что да как. А вот хрена лысого на лопате!
Берешь нормальную книгу по МК и начинаешь читать. А потом пошагово что-то начинаешь пробовать. Как же! Это не наш метод. Нам сейчас все и сразу! Вот вы все начинающие и получаете граблями по лобешнику.

Планировать нужно свои действия! МК с наскоку не освоить. Покупаешь книги, изучаешь архитектуру. И только потом пошагово начинать пробовать. Не получилось? Лезем в книгу. Опять пробуем.
Реклама
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: Таймеры/счётчики в AVR

Сообщение ROMan2947 »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3331670#p3331670"]Никогда не понимал такого подхода, захотелось запрограммировать, быстро хватаем, быстро ляпаем свой код или воруем с инета чужой. Бац, ни хрена не работает. ААААА!!!! Памагыте! Ниче не работает!!!! Ну конечно же, все люди братья, добренькие дяди на форумах на пальцах разжуют, что да как. А вот хрена лысого на лопате!
Берешь нормальную книгу по МК и начинаешь читать. А потом пошагово что-то начинаешь пробовать. Как же! Это не наш метод. Нам сейчас все и сразу! Вот вы все начинающие и получаете граблями по лобешнику.

Планировать нужно свои действия! МК с наскоку не освоить. Покупаешь книги, изучаешь архитектуру. И только потом пошагово начинать пробовать. Не получилось? Лезем в книгу. Опять пробуем.[/uquote]

Вы решили все темы засрать подобным текстом?Люди поматерее Вас себя ведут сдержанно и мудро. А метод, как изучать, каждый решает сам. Что ж Вы тогда тут делаете я не пойму? Начинающие Вас раздражают своими вопросами... а ну да за советом пришли,ну так у Вас прекрасный подход к изучению.... Не получается берите книгу перечитывайте!!!
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение Demiurg »

Вы только что сами своими словами доказали, что советовать вам что либо бесполезно. По простой причине. Вы не слушаете. Начинаете обижаться, огрызаться.
Давайте посмотрим на ситуацию со стороны, как наблюдатели. И мысленно проводим следующий эксперимент. Вы не читаете книги как вам советуют. А снова и снова приходите на форум. Тратите свое время. То что мы тратим свое время, я даже упоминать не буду. Вам плевать на это с высокой колокольни. И не спорьте даже. Вы уже это доказали своими действиями и словами.
То есть вы размышляете не то что на несколько шагов вперед, а на четверть шага в лучшем случае. Отдаетесь своим инстинктам. Все и сразу, никакого управления своими сиюминутными хотелками.

Другой подход. Взять хорошую толковую книжку. И просто ее прочитать. Постепенно. Пусть вы не все и не сразу поймете. Но вы увидите какие-то термины, упоминания, что-то отложится в памяти. Естественно, придется перечитать не раз. Дошли до практики. И так как вы не бегаете на форумы, не получаете какую-то обрывочную, расплывчатую информацию, а пользуетесь готовой переработанной из книги и конкретной, то есть той, что нужна на данный момент. В этом случае вы не бегаете на форумы, не тратите свое и наше время, а вспоминаете прочитанное. Притом сразу. Эту информацию не нужно ждать часами и днями с форумов. А в определенный момент накапливается критическая масса и приходит понимание. Вот про что я говорю. Этот принцип вы должны запомнить. Собирать качественную информацию, а не обрывочную и зачастую ложную, ведущую в никуда.

На форумы обращаться только в том случае, если вы честно перепробовали все что только можно и зашли в тупик.
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: Таймеры/счётчики в AVR

Сообщение ROMan2947 »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3331743#p3331743"]Вы только что сами своими словами доказали, что советовать вам что либо бесполезно. По простой причине. Вы не слушаете. Начинаете обижаться, огрызаться.
Давайте посмотрим на ситуацию со стороны, как наблюдатели. И мысленно проводим следующий эксперимент. Вы не читаете книги как вам советуют. А снова и снова приходите на форум. Тратите свое время. То что мы тратим свое время, я даже упоминать не буду. Вам плевать на это с высокой колокольни. И не спорьте даже. Вы уже это доказали своими действиями и словами.
То есть вы размышляете не то что на несколько шагов вперед, а на четверть шага в лучшем случае. Отдаетесь своим инстинктам. Все и сразу, никакого управления своими сиюминутными хотелками.

Другой подход. Взять хорошую толковую книжку. И просто ее прочитать. Постепенно. Пусть вы не все и не сразу поймете. Но вы увидите какие-то термины, упоминания, что-то отложится в памяти. Естественно, придется перечитать не раз. Дошли до практики. И так как вы не бегаете на форумы, не получаете какую-то обрывочную, расплывчатую информацию, а пользуетесь готовой переработанной из книги и конкретной, то есть той, что нужна на данный момент. В этом случае вы не бегаете на форумы, не тратите свое и наше время, а вспоминаете прочитанное. Притом сразу. Эту информацию не нужно ждать часами и днями с форумов. А в определенный момент накапливается критическая масса и приходит понимание. Вот про что я говорю. Этот принцип вы должны запомнить. Собирать качественную информацию, а не обрывочную и зачастую ложную, ведущую в никуда.

На форумы обращаться только в том случае, если вы честно перепробовали все что только можно и зашли в тупик.[/uquote]

Ну спасибо за совет,что еще сказать!
Если не секрет,что конкретно Вас побудило поделиться столь ценным?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Таймеры/счётчики в AVR

Сообщение Ivanoff-iv »

ROMan2947, да, дефайн OC1A- я проглядел...
) транзистору в базу резистор нужен обязательно, иначе он ногу МК перегружать будет и сам эмиттерный переход будет перегружен (есть случаи, когда резистор не нужен, но твой не из них).
) диод ставится параллельно индуктивной нагрузке (встречно питанию - чтобы при работе нагрузки он был закрыт) и замыкает через себя выброс её индукции при закрытии ключа (ток через индуктивность резко прекратиться не может, вот он и крутится через открывшийся диод, пока не погаснет)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: Таймеры/счётчики в AVR

Сообщение ROMan2947 »

) диод ставится параллельно индуктивной нагрузке
Да, нашел схему в сети, припаял, все стало стабильно работать. Благодарю! :tea:
Реклама
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2183
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение watchmaker »

диод ставится параллельно индуктивной нагрузке (встречно питанию - чтобы при работе нагрузки он был закрыт) и замыкает через себя выброс её индукции при закрытии ключа (ток через индуктивность резко прекратиться не может, вот он и крутится через открывшийся диод, пока не погаснет)
Кстати, делал подобное в наручных часах, чтобы механические удары по пищалке не приводили к глюкам или сбросам чипа.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Таймеры/счётчики в AVR

Сообщение rxstart1 »

Помогите плз. Хочу сделать генератор сигнала с частотой 1МГц. Он мне нужен, чтобы поправить биты в мк. Я понимаю. что можно сделать на К155ЛА3. Но по моему проще запрограммировать ATMEGA8, чтобы он генерил частоту на одной ноге, пайки меньше. Но как я не пытался настраивать таймеры я не мог достигнуть этой частоты, даже если при 8Мгк внутреннего генератора зажигал и тушил пин, все ровно частота меньше 1МГц.
Помогите советом плз. Пишу на AVRC
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

А как ты пытался настраивать таймеры? На какой частоте у тебя МК работает?
Никакая контра не уйдёт от нас
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Таймеры/счётчики в AVR

Сообщение akl »

OCR2=Fcpu/1000000/2-1
TCCR2=1<<COM20|1<<WGM21|1<<CS20
На лапе PB3/OC2 должен появиться 1МГц
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

DDRB |= (1<<PB3) не нужно добавить?
Никакая контра не уйдёт от нас
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Таймеры/счётчики в AVR

Сообщение akl »

Разумеется нужно перевести лапу на вывод.
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: Таймеры/счётчики в AVR

Сообщение bezzabotna »

Настраиваю таймер для обработки кнопки на Atmega32. Вроде делаю все по инструкции, но контроллер на кнопки не реагирует. Не могу понять, что не так.

Вот код:

Код: Выделить всё

int main(void)
{
	port_ini();											//инициализация портов
	timer1_ini();										//инициализация таймера
	lcd_display_init();									//инициализация дисплея
	while (1) 
    {
		Main_Menu();									//вызов меню
    }
}

//----------------------------------------------------------------------------------------------------//
void BUTTON_Handler(int *Key_pntr, int pin_state)			//обработка нажатия любой кнопки
{
	int Button_count=0,Button_state=0,key_delay=0,Flag=0;	//служебные переменные
	
	if (!(PIND & pin_state))								//если кнопка физически нажата (логический 0 на n ножке порта D)
	{
		if(Button_count<20)	Button_count++;					//подавление дребезга при нажатии (кнопка физически нажата 20 тактов)
		else
		{
			Button_state=1;									//регистрируем нажатие кнопки
			key_delay++;									//как долго кнопка нажата
		}
	}
	else													//если кнопка физически отжата
	{
		if (Button_count>0)Button_count--;					//подавление дребезга при отжатии
		else
		{
			Button_state=0;									//регистрируем отжатие кнопки
			if (key_delay<20000)	Flag=1;					//регистрируем короткое нажатие
			else					Flag=2;					//регистрируем длительное нажатие
		}
	}
	
	if ((Button_state==0)&&(Flag==1))						//если кнопка была "кратко" нажата
	{
		*Key_pntr=1;
		Flag=0;
	}
	if ((Button_state==0)&&(Flag==2))						//если кнопка была "долго" нажата
	{
		*Key_pntr=1;
		Flag=0;
	}
	
	else *Key_pntr=0;										//кнопку вообще не нажимали
}

//----------------------------------------------------------------------------------------------------//
ISR (TIMER1_OVF_vect)									//обработчик прерывания по переполнению таймера 1
{
	BUTTON_Handler(&Key_up, BUTTON_UP);					//опрос кнопки UP
	BUTTON_Handler(&Key_down, BUTTON_DOWN);				//опрос кнопки DOWN
	BUTTON_Handler(&Key_start, BUTTON_START);			//опрос кнопки START
	BUTTON_Handler(&Key_return, BUTTON_STOP);			//опрос кнопки STOP
}

//----------------------------------------------------------------------------------------------------//
void timer1_ini(void)									//инициализация таймера 1
{                                                                                                                        //
	TCCR1B	|=	(1<<CS10) | (1<<CS12);					//предделитель 1024
	TCCR1B	&=~	(1<<WGM11);
	TIMSK	|=	(1<<TOIE1);								//разрешение прерывания по переполнению счетчика
	asm("sei");											//разрешение прерываний
}

//----------------------------------------------------------------------------------------------------//
void port_ini(void)										//инициализация портов
{
	DDRD=0;												//порт D настроен на вход
	PORTD=0xF0;											//4,5,6,7 ножки порта D подтянуты к питанию
	DDRC=0xFF;											//порт С настроен на выход
	DDRA=0xFF;											//порт А настроен на выход
}

//----------------------------------------------------------------------------------------------------//
схема ниже.

По факту нажатия кнопки должна установиться в 1 одна из переменных Key_up,Key_down и тд
Вложения
фвпфвпф.png
(98.25 КБ) 275 скачиваний
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

Посмотрите какое значение принимает TCCR1B после timer1_ini
У вас в коде нет начальной инициализации TCCR1B
Никакая контра не уйдёт от нас
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: Таймеры/счётчики в AVR

Сообщение bezzabotna »

Изображение
Все так же как установлено, но не работает
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

Как часто (по вашим расчётам) у вас должно вызываться прерывание от таймера? :-)
При частоте МК 8 Мгц таймер будет считать на частоте 8 КГц до 0xFFFF - примерно 8 с лишним секунд получается.
Никакая контра не уйдёт от нас
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: Таймеры/счётчики в AVR

Сообщение bezzabotna »

И правда. Добавила еще TCNT1

Код: Выделить всё

void timer1_ini(void)									//инициализация таймера 1
{                                                                                                                        //
	TCCR1B	|=	(1<<CS10) | (1<<CS12);					//предделитель 1024
	TCCR1B	&=~	(1<<WGM11);
	TIMSK	|=(1<<TOIE1);								//разрешение прерывания по переполнению счетчика
	TCNT1=65530;										//
	asm("sei");										//разрешение прерываний
}
8000000/1024=7812 тактов в секунду
65535-65530=5 тактов до переполнения
5/7812=640 мкс
но не работает
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

Вы сначала проверьте, что у вас вообще обработчик прерывания вызывается.
Никакая контра не уйдёт от нас
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: Таймеры/счётчики в AVR

Сообщение bezzabotna »

Вызывается
Изображение
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение prinv »

Чему равны BUTTON_UP, BUTTON_DOWN, BUTTON_START и BUTTON_STOP?
Никакая контра не уйдёт от нас
Ответить

Вернуться в «AVR»