Например TDA7294

Форум РадиоКот • Просмотр темы - Таймеры/счётчики в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт мар 29, 2024 07:36:26

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 40, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн апр 24, 2017 19:12:23 
Мудрый кот

Карма: 34
Рейтинг сообщений: 284
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1806
Откуда: Харьков
Рейтинг сообщения: 0
Кстати, цеплял к тиньке кварц 3.2768 МГц - тоже завышало порядка 0.1% независимо от конденсаторов. ЧЯДНТ?

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт июн 20, 2017 10:24:04 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: -2
Зарегистрирован: Пт сен 04, 2015 13:10:49
Сообщений: 121
Откуда: г. Ижевск
Рейтинг сообщения: 0
Подскажите, пожалуйста, почему не срабатывает прерывание по совпадению таймера, точнее прерывание то есть, только оно попадает на другой вектор почему то. МК - ATmega164. Вроде все перепроверил, все настройки правильные, но в AVR Studio 6 и в Proteuse прерывание попадает на строку компаратора или АЦП в таблице векторов :dont_know:


Вложения:
ATmega164.gif [188.49 KiB]
Скачиваний: 500

_________________
Истина где-то рядом...
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июн 24, 2017 06:15:13 
Друг Кота

Карма: 64
Рейтинг сообщений: 964
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4210
Откуда: Ижевск
Рейтинг сообщения: 1
Если ещё актуально. Проще явно указать адрес вектора
Регистр OCR1A двухбайтовый и для таких регистров периферии есть определенный порядок записи/чтения


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июн 24, 2017 11:17:28 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2687
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
artemik32 писал(а):
только оно попадает на другой вектор почему то.
Попадает оно на тот вектор, это Вы таблицу векторов неправильно заполнили. Поглядите таблицу векторов в ДШ, у данного камня один вектор занимает два слова памяти программ. Команда-затычка RETI однословная команда. На Вашем скрине как раз видно, что программный счетчик указывает на 0x1A, т.е. это адрес нужного Вам вектора.


Можно вставить двухсловные команды на неиспользуемые вектора, например
Код:
jmp  RESET

, или две однословные команды на один вектор, например
Код:
nop
nop
.
Можно в вектор вставить директиву .dw 0x0000.
Или воспользуйтесь директивой .ORG, как указал akl.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июн 24, 2017 11:44:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
akl писал(а):
Проще явно указать адрес вектора
тем более что для каждого адреса вектора уже определены соответствующие символьные константы. И это не только проще, но и правильнее - я об этом неоднократно говорил, и буду говорить.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

скушно, бабоньки!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 02, 2017 19:41:29 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: -2
Зарегистрирован: Пт сен 04, 2015 13:10:49
Сообщений: 121
Откуда: г. Ижевск
Рейтинг сообщения: 0
Да спасибо, я уже написал конкретный адрес перехода на вектор как предложил akl. Так нормально работает, а с младшими мегами таких проблем не было, у которых используется команда rjmp вместо jmp, и памяти у них 8 кб и меньше.

_________________
Истина где-то рядом...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июл 26, 2017 05:27:12 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1382
Рейтинг сообщения: 0
Код:
      .org   0                  ; Установка текущего адреса на ноль

               jmp   RESET           ; Переход на начало программы
      reti                        ; jmp EXT_INT0   ; Внешнее прерывание 0
       reti                        ; jmp INT1        ; Внешнее прерывание 1
      reti                        ; jmp INT2
      reti                        ; jmp PCINT0 ; PCINT0 Handler
        reti                        ; jmp PCINT1 ; PCINT1 Handler
        reti                        ; jmp PCINT2 ; PCINT2 Handler
      reti                        ; jmp PCINT3
        reti                        ; jmp WDT ; Watchdog Timer Handler
        reti                        ; jmp TIMER2_COMPA ; Timer2 Compare A Handler
        reti                        ; jmp TIMER2_COMPB ; Timer2 Compare B Handler
        reti                        ; jmp TIMER2_OVF ; Timer2 Overflow Handler
        reti                        ; jmp TIMER1_CAPT ; Timer1 Capture Handler

      .org   0x001A                  ; Установка вектора сравнения таймера 1А
                jmp TIMER1_COMPA    ; Timer1 Compare A Handler

Неправильно! JMP - два слова. RETI - одно слово. И два RETI займет один вектор. Правильно нужно писать так:
Код:
.org 0x0000
      jmp RESET ; Reset Handler
.org   OC2addr
      jmp TIM2_COMP ; Timer2 Compare Handler
.org URXC0addr
      jmp RS232_VESS; USART0 RX Complete Handler
.org ADCCaddr
      jmp ADC_Complet
.org URXC1addr
      jmp USART1_RXC; USART1 RX Complete Handler
.org UDRE1addr
      jmp USART1_UDRE; USART1 TX Complete Handler


Такая запись будет верной:
Код:
.org UDRE1addr
      reti ; jmp USART1_UDRE; USART1 TX Complete Handler


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс авг 13, 2017 19:10:13 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 542
Откуда: Николаев / Украина
Рейтинг сообщения: 0
Друзья, всем привет.
Пытаюсь разобраться с таймерами, и столкнулся с непонятной для меня информацией. Пишу в Ардуино ИДЕ. Микроконтроллер: Атмега168
Цель: нужно вызывать функцию 1 раз в секунду (по сути это часы, только назначение другое). Решил все это делать на таймере. Залез в даташит: 0-й и 2-й таймеры 8-мибитные, значит отпадают, остается 1-й таймер. По настройке немного сложно, делаю в первый раз, но в принципе разобраться можно.
Вот примерно что я собираюсь делать, Так правильно? и нужно ли делать сброс таймера?:

Код:
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS12); // делитель 256
TIMSK |=(1<<OCIE1A); // прерывание по совпадению
OCR1AH = 0b11110100; // число для сравнения 62500
OCR1AL = 0b00100100;
 
....
ISR (TIMER1_COMPA_vect)
{
    // какое-то действие
}


Добавлено after 44 minutes 55 seconds:
Пробую, но ничего не работает... код:
Код:
int i=10;

ISR (TIM1_COMPA)
{
  // какое-то действие
  i=i+1;
}

void setup(void) {
  // flip screen, if required
  // u8g.setRot180();
  TCCR1B |= (1<<WGM12);
  TCCR1B |= (1<<CS12); // делитель 256
  TIMSK1 |=(1<<OCIE1A); // прерывание по совпадению
  OCR1AH = 0b11110100; // число для сравнения 62500
  OCR1AL = 0b00100100;
  Serial.begin(9600);
}

void loop(void) {
  Serial.println(i);
 
  // rebuild the picture after some delay
  delay(100);
}

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс авг 13, 2017 20:30:19 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
в режиме СТС он сам сбрасывается

Добавлено after 2 minutes 38 seconds:
разрешение прерываний (глобальное)?

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс авг 13, 2017 20:46:15 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 542
Откуда: Николаев / Украина
Рейтинг сообщения: 0
Да вроде как по умолчанию они включены.
Пробовал дописывать sei() но это ничего не изменило. В общем я в ступоре... Может что-то элементарное пропускаю? С тем же ISR не все понятно. В одних местах он прописан как TIM1_COMPA в других по-другому. Пробовал и так и так - нет результата.

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс авг 13, 2017 21:31:38 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
Пробую, но ничего не работает...

Попробуйте так. Глобальные прерывания нужно разрешать в вашем случае.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн авг 14, 2017 05:13:40 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2687
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
forfrends писал(а):
Пробую, но ничего не работает
volatile int i=10;

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн авг 14, 2017 07:04:31 
Друг Кота

Карма: 64
Рейтинг сообщений: 964
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4210
Откуда: Ижевск
Рейтинг сообщения: 0
... Так правильно?
Код:
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS12); // делитель 256
TIMSK |=(1<<OCIE1A); // прерывание по совпадению
OCR1AH = 0b11110100; // число для сравнения 62500
OCR1AL = 0b00100100;
...
ISR (TIMER1_COMPA_vect)
{
    // какое-то действие
}
Замечу, в OCR1x(ICR1) для точной выдержки времени нужно заносить значение на 1 меньшее, особенно при использовании предделителя. Т.е. 62500-1


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Чт окт 12, 2017 18:42:08 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 13, 2017 05:53:24
Сообщений: 31
Рейтинг сообщения: 0
Помогите. В протеусе все симулирует чётко. Загружаю в МК не отрабатывает прерывание по переполнению таймера1. Мк аттини85.
Правильно ли инициализировал прерывание?

Код:
//инициализация таймера1
void timer1_ini (void){
   TCCR1 |= (1 << CTC1) //режим CTC
   |(0<<COM1A1)|(0<<COM1A0) //отключаем OC1A
   |(1 << CS13)|(0 << CS12)|(1 << CS11)|(0 << CS10);  //Делитель 512
   TCNT1 = 0x00;                  //сброс счетчика
   OCR1A = 0xFF;                //регистр сравнения
   TIMSK |=(1<<TOIE1);      //включаем прерывания по переполнению   
 }

//обработка прерывания таймера1
ISR(TIMER1_OVF_vect){
   PORTB |= (1<<PB1);         
   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 03:49:59 
Друг Кота

Карма: 64
Рейтинг сообщений: 964
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4210
Откуда: Ижевск
Рейтинг сообщения: 0
SEI не хватает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 04:54:47 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1382
Рейтинг сообщения: 0
SEI не хватает.

В функции инициализации глобальное включение прерываний не обязано быть. Только после инициализации всей нужной периферии.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 07:57:47 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 13, 2017 05:53:24
Сообщений: 31
Рейтинг сообщения: 0
SEI есть в программе, даже есть ещё одно прерывание по таймеру0 (TIMER0_COMPA_vect) и оно работает, а по этому вектору нет, да и интересно почему в протеусе все как надо работает, а в реальном МК нет? мб МК бракованный >_<


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 08:06:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
fulky писал(а):
интересно почему в протеусе все как надо работает, а в реальном МК нет? мб МК бракованный
МК бракованный... еще может быть компилятор лажает - это две любимые причины всех проблем начинающих.

у вас схема протеуса на 100% соответствует реальной? в реальной ошибок нет? что вы ждете от обработчика с единственным оператором, какие эффекты быть должны, а их нет? ни схемы, ни всей программы, одни загадки-догадки.

я вам точно скажу, в чем причина: у вас есть ошибка. полегчало? ;) только где именно - не скажу

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

скушно, бабоньки!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 08:09:45 
Друг Кота

Карма: 64
Рейтинг сообщений: 964
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4210
Откуда: Ижевск
Рейтинг сообщения: 0
Думаю, прерывание по переполнению никогда не возникает, т.к. таймер работает до 0xFF. Попробуйте прерывание OCIE1A


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт окт 13, 2017 09:06:06 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 13, 2017 05:53:24
Сообщений: 31
Рейтинг сообщения: 0
Цитата:
МК бракованный... еще может быть компилятор лажает - это две любимые причины всех проблем начинающих.


из-за оптимизации такое может происходить, (-O) выставлена?

Режимы работы реле
Изображение

1. Потенциометром задается режим от 1 до 4, как на картинке, удержанием кнопки переход на следующий шаг
2. Задается время t1
3. Указываются в чем считать С, М, Ч
4. Задается время t2
5. Указываются в чем считать С, М, Ч
6. Происходит запуск (PB1 рулит реле по выбранному режиму)

Косяк в том, что нет бегающей индикации во время работы

Добавлено after 31 minute 54 seconds:
Думаю, прерывание по переполнению никогда не возникает, т.к. таймер работает до 0xFF. Попробуйте прерывание OCIE1A

т.е. сделать по вектору TIMER1_COMPA и через сравнение с OCR1A??


Вложения:
Комментарий к файлу: код и протеус
AVR.rar [85.26 KiB]
Скачиваний: 188
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 40, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y