Страница 47 из 72

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

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

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

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

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

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

Вы решили все темы засрать подобным текстом?Люди поматерее Вас себя ведут сдержанно и мудро. А метод, как изучать, каждый решает сам. Что ж Вы тогда тут делаете я не пойму? Начинающие Вас раздражают своими вопросами... а ну да за советом пришли,ну так у Вас прекрасный подход к изучению.... Не получается берите книгу перечитывайте!!!

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

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

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

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

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

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

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

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

Ну спасибо за совет,что еще сказать!
Если не секрет,что конкретно Вас побудило поделиться столь ценным?

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

Добавлено: Пт мар 16, 2018 09:05:31
Ivanoff-iv
ROMan2947, да, дефайн OC1A- я проглядел...
) транзистору в базу резистор нужен обязательно, иначе он ногу МК перегружать будет и сам эмиттерный переход будет перегружен (есть случаи, когда резистор не нужен, но твой не из них).
) диод ставится параллельно индуктивной нагрузке (встречно питанию - чтобы при работе нагрузки он был закрыт) и замыкает через себя выброс её индукции при закрытии ключа (ток через индуктивность резко прекратиться не может, вот он и крутится через открывшийся диод, пока не погаснет)

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

Добавлено: Пт мар 16, 2018 13:02:22
ROMan2947
) диод ставится параллельно индуктивной нагрузке
Да, нашел схему в сети, припаял, все стало стабильно работать. Благодарю! :tea:

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

Добавлено: Пт мар 16, 2018 18:10:31
watchmaker
диод ставится параллельно индуктивной нагрузке (встречно питанию - чтобы при работе нагрузки он был закрыт) и замыкает через себя выброс её индукции при закрытии ключа (ток через индуктивность резко прекратиться не может, вот он и крутится через открывшийся диод, пока не погаснет)
Кстати, делал подобное в наручных часах, чтобы механические удары по пищалке не приводили к глюкам или сбросам чипа.

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

Добавлено: Вт июн 05, 2018 08:03:40
rxstart1
Помогите плз. Хочу сделать генератор сигнала с частотой 1МГц. Он мне нужен, чтобы поправить биты в мк. Я понимаю. что можно сделать на К155ЛА3. Но по моему проще запрограммировать ATMEGA8, чтобы он генерил частоту на одной ноге, пайки меньше. Но как я не пытался настраивать таймеры я не мог достигнуть этой частоты, даже если при 8Мгк внутреннего генератора зажигал и тушил пин, все ровно частота меньше 1МГц.
Помогите советом плз. Пишу на AVRC

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

Добавлено: Вт июн 05, 2018 08:10:20
prinv
А как ты пытался настраивать таймеры? На какой частоте у тебя МК работает?

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

Добавлено: Вт июн 05, 2018 08:36:45
akl
OCR2=Fcpu/1000000/2-1
TCCR2=1<<COM20|1<<WGM21|1<<CS20
На лапе PB3/OC2 должен появиться 1МГц

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

Добавлено: Вт июн 05, 2018 08:51:53
prinv
DDRB |= (1<<PB3) не нужно добавить?

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

Добавлено: Вт июн 05, 2018 08:59:13
akl
Разумеется нужно перевести лапу на вывод.

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

Добавлено: Ср июн 06, 2018 10:34:20
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 и тд

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

Добавлено: Ср июн 06, 2018 10:47:56
prinv
Посмотрите какое значение принимает TCCR1B после timer1_ini
У вас в коде нет начальной инициализации TCCR1B

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

Добавлено: Ср июн 06, 2018 10:57:02
bezzabotna
Изображение
Все так же как установлено, но не работает

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

Добавлено: Ср июн 06, 2018 11:08:09
prinv
Как часто (по вашим расчётам) у вас должно вызываться прерывание от таймера? :-)
При частоте МК 8 Мгц таймер будет считать на частоте 8 КГц до 0xFFFF - примерно 8 с лишним секунд получается.

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

Добавлено: Ср июн 06, 2018 12:32:59
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 мкс
но не работает

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

Добавлено: Ср июн 06, 2018 12:38:34
prinv
Вы сначала проверьте, что у вас вообще обработчик прерывания вызывается.

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

Добавлено: Ср июн 06, 2018 12:58:19
bezzabotna
Вызывается
Изображение

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

Добавлено: Ср июн 06, 2018 13:06:05
prinv
Чему равны BUTTON_UP, BUTTON_DOWN, BUTTON_START и BUTTON_STOP?