Обсуждаем контроллеры компании Atmel.
Ответить

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

Чт мар 15, 2018 18:57:16

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

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

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

Чт мар 15, 2018 19:35:51

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

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


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

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

Чт мар 15, 2018 20:27:54

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

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

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

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

Чт мар 15, 2018 20:51:07

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

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

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


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

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

Пт мар 16, 2018 09:05:31

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

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

Пт мар 16, 2018 13:02:22

) диод ставится параллельно индуктивной нагрузке

Да, нашел схему в сети, припаял, все стало стабильно работать. Благодарю! :tea:

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

Пт мар 16, 2018 18:10:31

диод ставится параллельно индуктивной нагрузке (встречно питанию - чтобы при работе нагрузки он был закрыт) и замыкает через себя выброс её индукции при закрытии ключа (ток через индуктивность резко прекратиться не может, вот он и крутится через открывшийся диод, пока не погаснет)

Кстати, делал подобное в наручных часах, чтобы механические удары по пищалке не приводили к глюкам или сбросам чипа.

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

Вт июн 05, 2018 08:03:40

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

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

Вт июн 05, 2018 08:10:20

А как ты пытался настраивать таймеры? На какой частоте у тебя МК работает?

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

Вт июн 05, 2018 08:36:45

OCR2=Fcpu/1000000/2-1
TCCR2=1<<COM20|1<<WGM21|1<<CS20
На лапе PB3/OC2 должен появиться 1МГц

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

Вт июн 05, 2018 08:51:53

DDRB |= (1<<PB3) не нужно добавить?

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

Вт июн 05, 2018 08:59:13

Разумеется нужно перевести лапу на вывод.

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

Ср июн 06, 2018 10:34:20

Настраиваю таймер для обработки кнопки на 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 KiB) Скачиваний: 256

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

Ср июн 06, 2018 10:47:56

Посмотрите какое значение принимает TCCR1B после timer1_ini
У вас в коде нет начальной инициализации TCCR1B

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

Ср июн 06, 2018 10:57:02

Изображение
Все так же как установлено, но не работает

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

Ср июн 06, 2018 11:08:09

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

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

Ср июн 06, 2018 12:32:59

И правда. Добавила еще 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

Вы сначала проверьте, что у вас вообще обработчик прерывания вызывается.

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

Ср июн 06, 2018 12:58:19

Вызывается
Изображение

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

Ср июн 06, 2018 13:06:05

Чему равны BUTTON_UP, BUTTON_DOWN, BUTTON_START и BUTTON_STOP?
Ответить