Перейти к содержанию

Прерывание Каждую Секунду


ВэйДлин

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

есть разные реализации

к примеру берём кварц 4.194304Mhz

настраиваем предделитель на /1024 и прерывание таймера по переполнению /256 получаем 1/16 секунды подобрать кварц под секунду либо считать прерывания

Ваши права преследуются по закону!

Ссылка на комментарий
Поделиться на другие сайты

...к примеру берём кварц 32768hz

настраиваем предделитель на /1024 и прерывание таймера по совпадению со значением регистра 32 получаем 1 секунду...

Ну, или так...

Ссылка на комментарий
Поделиться на другие сайты

Вот наслаждайтесь прерывание каждую секунду, инкремент регистра и вывод значения в портВ

;CKSEL3..0  = 1011 ext 0.9 - 3Mhz
;SUT1..   = 10
;CKDIV8   = 0
;BODLEVEL2..1 = 100 4.3v
;---------------------------------
;определение регистров
.def tmp  =r16
.def tmp2  =r17
;==========================================
rjmp RESET ; Reset Handler
rjmp _INT0 ; External Interrupt0 Handler
rjmp _INT1 ; External Interrupt1 Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
rjmp USART0_TXC ; USART0 TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp PCINT ; Pin Change Interrupt
rjmp TIMER1_COMPB ; Timer1 Compare B Handler
rjmp TIMER0_COMPA ; Timer0 Compare A Handler
rjmp TIMER0_COMPB ; Timer0 Compare B Handler
rjmp USI_START ; USI Start Handler
rjmp USI_OVERFLOW ; USI Overflow Handler
rjmp EE_READY ; EEPROM Ready Handler
rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
_INT0: ; External Interrupt0 Handler
_INT1: ; External Interrupt1 Handler
TIM1_CAPT: ; Timer1 Capture Handler
TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
push tmp
in tmp,SREG
push tmp
inc tmp2
pop tmp
out SREG,tmp
pop tmp
reti
USART0_RXC: ; USART0 RX Complete Handler
USART0_DRE: ; USART0,UDR Empty Handler
USART0_TXC: ; USART0 TX Complete Handler
ANA_COMP: ; Analog Comparator Handler
PCINT: ; Pin Change Interrupt
TIMER1_COMPB: ; Timer1 Compare B Handler
TIMER0_COMPA: ; Timer0 Compare A Handler
TIMER0_COMPB: ; Timer0 Compare B Handler
USI_START: ; USI Start Handler
USI_OVERFLOW: ; USI Overflow Handler
EE_READY: ; EEPROM Ready Handler
WDT_OVERFLOW: ; Watchdog Overflow Handler
reti
RESET:  ; Reset Handler:
cli
LDI tmp,$DF
OUT SPL,tmp ;указатель стека в конец памяти
;===============================================================
ldi tmp,$FF
out PORTB,tmp
out DDRB,tmp
ldi tmp,$81 ;предделитель
out CLKPR,tmp

ldi tmp,0
out TCCR0A,tmp
ldi tmp,5
out TCCR0B,tmp ;делитель на 1024
ldi tmp,2; прирывание по переполнению таймера 1
out TIMSK,tmp
sei

loop_:
out PORTB,tmp2
rjmp loop_

контроллер tiny2313

кварц 2.097152Mhz

Ваши права преследуются по закону!

Ссылка на комментарий
Поделиться на другие сайты

RTC вроде умеют генерировать прерывание раз в секунду, только настроить надо. Зато потребление гораздо меньше чем у контроллеров.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

RTC вроде умеют генерировать прерывание раз в секунду, только настроить надо. Зато потребление гораздо меньше чем у контроллеров.

в AVR нет аппаратного RTC, и прерывание чего они должны генерировать?

Ваши права преследуются по закону!

Ссылка на комментарий
Поделиться на другие сайты

//--------------------------------------------------------------------------------------------------------------------------
//ATmega8A F_CPU 8000000
//пример организации прерываний с частотой 1Гц

#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>

//--------------------------------------------------------------------------------------------------------------------------
//ГЛАВНАЯ ФУНКЦИЯ
int main (void)
{
 //настройка прерываний 125Гц на таймере счетчике T2
 TCCR2 = (1<<WGM21)| (0<<WGM20)| //режим CTC (сброс при совпадении)
   (1<<CS22)| (1<<CS21)| (0<<CS20)|//предделитель на 256 (частота счета 8000000 / 256 = 31250 Hz)
   (0<<COM21)| (0<<COM20); //таймер\счетчик отключен от вывода OC2
 TCNT2 = 0; //счетчик таймера
 TIMSK |= (1<<OCIE2); //прерывание при совпадении TCNT2 c OCR2
 OCR2 = 250 - 1; //при 8000000(тактовая) / 256(предделитель) / 250(значение) = 125 (ЧАСТОТА ПРЕРЫВАНИЯ)

 //ГЛАВНЫЙ ЦИКЛ
 sei ();
 while (1){}
}

//--------------------------------------------------------------------------------------------------------------------------
//прерывание с частотой 125Гц
ISR (TIMER2_COMP_vect)
{
 static uint8_t Div125; //делитель до частоты 1Гц
 if (++Div125 == 125){
   Div125 = 0;

   //тут частота прохода = 1Гц
   //КОД
 }
}

//--------------------------------------------------------------------------------------------------------------------------

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...
В общем, кто может привести рабочий пример кода для прерывания каждую секунду?

И расписать, почему все так

Видимо вам необходимо разобраться с таймерами счетчиками

Есть норм статья + видео объяснение : http://www.doneathome.ru/#/archives/364

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...