Jump to content

Search the Community

Showing results for tags 'TIMER1'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 5 results

  1. Добрый день. Опять ATMega, опять таймер 1, вопрос рутинный, но я за сегодня уже извёлся. Что я хотел сделать: МК должен рассчитывать положения моторов (SG90, регулируются временем импульса), включать их все вместе по совпадению таймера 2, затем рассчитывать, когда какой мотор надо отключить, получившийся список сортировать и ставить таймер 1. Таймер 1 сработал - выключили мотор, переставили таймер 1 на подальше. Снова сработал - снова что-то там сделали, увеличили OCR1A и так далее. Конечно же с первого раза не заработало и я начал упрощать и локализировать проблему. Получилось вот что: при срабатывании прерывания на совпадение таймера 1 с OCR1A я смотрю в отладчик - а там во-первых TIFR = OCF1A + OCF1B + TOV1, а TCNT1 равен чему угодно, но не OCR1A. Таймер как будто срабатывает не тогда. А когда я ставлю значение поменьше, допустим, OCR1A = 1000 и перехожу в пустой цикл while(1){}, то при наступлении OCR1A == 1000 просто ничего не происходит, прерывание не срабатывает. В целом так. Сейчас очень упрощённый, минимально не работающий код выглядит так: #define SET(_REGISTER, _BIT) _REGISTER |= 1 << _BIT #define UNSET(_REGISTER, _BIT) _REGISTER &= ~(1 << _BIT) void local_timer_setup(void) { SET(TCCR1B, CS10); //Setting timer 1 to x1 mode }; void local_timer_start(void) { TCNT1 = 0; SET(TIMSK, OCIE1A); //Allow timer 1 match A interruption }; void local_timer_off(void) { UNSET(TIMSK, OCIE1A); //Prohibit timer 1 match A interruption }; ISR(TIMER1_COMPA_vect) { PORTD = 0xFF; local_timer_off(); }; ISR(TIMER2_COMP_vect) { if (global_timer_count == 2) { global_timer_count = 0; TIFR = 0; PORTD = 0; if (current_step < 10) OCR1A = 0xFFF; else OCR1A = 0xFFFF; if (current_step == 20) current_step = 0; else current_step++; local_timer_start(); } else global_timer_count++; }; Полный код в файле. sei() не забыл. Кстати, таймер нормально выключать/включать через TIMSK, как у меня? Заранее спасибо. Scarecrow_embeded.rar
  2. myhhyk

    Timer1 PWM AtMega8A

    .include "m8adef.inc" .cseg main1: LDI R16,Low(RAMEND) ; тут стэк инициализирую OUT SPL,R16 ; LDI R16,High(RAMEND) OUT SPH,R16 ldi r20,1 reset: ldi r16,$02;--ICR1H значение $222 при заданом режиме счетчик должен считать до $222 и сбрасывать в ноль ldi r17,$22;--ICR1L OUT ICR1H,r16;--выводим сначала старший байт, как учили OUT ICR1l,r17;--затем младший ldi r16,$1;---OCR1AH при значении $1AA должен менять пин OCR1A ldi r17,$AA;--OCR1AL OUT OCR1AH,r16;--старший OUT OCR1AL,r17;--и младший ldi r17,$82;--TCCR1A режим такой: WGM-1110 COM-10 ldi r16,$19;--TCCR1B OUT TCCR1B,r16 OUT TCCR1A,r17 ldi r16,$FF OUT DDRB,r16;-- порт б на выход main:;--должны получать шим rjmp main Здравствуйте, помогите пожалуйста. Хочу сделать плавное включение светодиода с помощью ШИМа и Timer1,чтобы плавненько было. Устанавливаю WGM 1110 т.е. быстрый шим и со счетом до ICR1, а счетчик считает почему то до $1ff и потом начинает уменьшать счет до нуля, т.е. как будто я выбрал режим WGM 0110 быстрый ШИМ 9 бит. Пробовал всякие разные комбинации. На значения COM не обращаю пока, он просто меняет момент срабатывания пина, мне нужно, чтобы я мог задавать до скольки считать, потом чтобы в ноль счетчик сбрасывался и менялось состояние пина по OCR1A.В общем принцип работы Timer2, только чтобы счет был больше. Помогите плиз :*) Ах да, AtMega8A микроконтроллер.
  3. K.A.

    STM32F1 TIM1

    Добрый день. Пытаюсь разобраться с таймерами в stm32f10x (stm32f100c8t6b), на просторах всего русскоязычного интернета есть примеры практически под все таймеры кроме TIM1, который как раз меня и интересует. Собрал проект, работающий с другими таймерами, например TIM3, пытаюсь переделать для TIM1, выскакивает ошибка в строке NVIC_EnableIRQ(TIM1_IRQn); (строки 36, 43, 98) - error: 'TIM1_IRQn' undeclared (first use in this function). Если я правильно понял, то компилятор не понимает, что такое TIM1_IRQn (хотя с TIM3_IRQn все в порядке). Полез в библиотеки, там написано , что полный список источников, которые могут вызывать прерывания, описан в stm32f10x.h stm32f10x.c. Списка, где хотя бы упоминались TIM3_IRQn и прочие, к сожалению, не обнаружил ни в одной подключаемой библиотеке. Среда CoIDE. Проект прикладываю к сообщению. Вопрос заключается в следующем - как в стандартной библиотеке называется источник прерывания от TIM1 и где это можно посмотреть. Заранее большое спасибо. TIM_3.rar
  4. Добрый день, по ходу работы над 7-ми сегментными часами на ATmega8515 вылезла проблема с прерываниями, по счетчику. Перелопатил кучу информации и даташит, но в данном виде программы прерывания не работают, в чем может быть проблема? #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define digit_display_time 10 unsigned char milliseconds, seconds, ten_seconds, minutes, ten_minutes, hours, ten_hours; ISR(TIMER1_COMPA_vect) { milliseconds++; TCNT1H=0x00; TCNT1L=0x00; if (milliseconds >= 1000 ) { milliseconds = 0; seconds++; }; if (seconds >= 10) { seconds = 0; ten_seconds++; }; if (ten_seconds >= 6) { ten_seconds = 0; minutes++; }; if (minutes >= 10) { minutes = 0; ten_minutes++; }; if (ten_minutes >= 6) { ten_minutes = 0; hours++; }; if (hours >= 10) { hours = 0; ten_hours++; }; if (ten_hours >= 2 && hours == 4) { ten_hours = 0; hours=0; }; } void timer_init() { //OCR1A=125; OCR1AH = 0b00000000;// 125 OCR1AL = 0b01111101; //Предделитель на х64 TCCR1B = (0<<CS12)|(1<<CS11)|(1<<CS10); //Прерывание по совпадению TC1 A TIMSK=(1<<OCIE1A); sei(); } int main(void) { timer_init(); unsigned char digits[10] = {63,6, 91, 79, 102, 109, 125, 7, 127, 111}; DDRA = 0b11111111; DDRC = 0b11111111; PORTC = 0b00000000; while(1) { PORTA = digits[seconds]; DDRC = 0b00001000; _delay_ms(digit_display_time); PORTA = digits[ten_seconds]; DDRC = 0b00000100; _delay_ms(digit_display_time); PORTA = digits[minutes]; DDRC = 0b00000010; _delay_ms(digit_display_time); PORTA = digits[ten_minutes]; DDRC = 0b00000001; _delay_ms(digit_display_time); } } Clock.rar
  5. Доброго времени суток! Я новичек и сейчас работаю над первым своим устройством на МК. Отлаживая в протеусе схему, столкнулся со странным поведением. В общих чертах: делаю код в CodeVisionAVR 3.12 Evaluation, пишу на С. Задача - разработать простенький электронный таймер, до 99 мин. Методом исключения выяснилось, что при разрешении прерываний командой sei программа начинает выполнятся сначала. Пошел по пути наименьшего сопротивления, просто разрешил прерывания в самом начале программы. В таком случае глобальная переменная time_sec, в которой хранится оставшееся время или недоступна, или сбрасывается в ноль при нажатии на любую кнопку. Нагугленые варианты решения проблемы не помогли, поэтому я вернулся к исходному варианту (код которого привел). Проект в протеусе и кодвижине прикрепил в архиве timer.rar, код также под спойлером. Я конечно понимаю, что возможно допустил какой-то банальный косяк, но найти не могу, нужен "свежий взгляд". Прошу вашей помощи! Примечание: я закомментировал кусок кода, так что выводиться только один разряд (минуты). Это связано с тем, что у меня протеус не успевает корректно отрисовывать зажигание разрядов семисегментника по-очереди. timer.rar
×
×
  • Create New...