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

Вопросы от начинающих по МК


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

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Было дело. Лепил всякие прогеры джидаевские, и работали. Потом укупил TL-866, и больше в тему про программаторы не заглядываю. Шьет весь ширпотреб. (Не весь ) :wall:

Изменено пользователем koms45

Так ку или не ку ?!

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

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

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

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

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

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

Пытаюсь снова разобраться с прерываниями, забрасывал МК решил вернуться, но не могу понять как сделать на меге16. Для этого нужно использовать Timer/Counter1 Control Register B – TCCR1B, в регистр TCCR1B записываем - 00000011(коэффициент деления 64). При тактовой частоте 8 мГц и времени 125 мс, в OCR1AH и OCR1AL записываем числа - 0x5F 0x5E. А также в TIMSK нужно записать - 00010000 В меге 16 есть два компаратора:

TIM1_COMPA: ; Timer1 CompareA Handler

TIM1_COMPB: ; Timer1 CompareB Handler

Какой из них нужен мне? И все ли правильно я сделал? Просто не работает вообще.

RESET:
ser temp
out DDRB, temp

ldi temp, 0b00010000
out TIMSK,temp
ldi temp,0b00000011
out TCCR1B,temp

ldi temp,0x5F
out OCR1AH,temp
ldi temp,0x5E
out OCR1AL,temp

ldi rab,0b00000001
out PortB,rab
ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
sei

;**************************************
;Основная программа
;**************************************
Main:
rjmp Main

TIM1_COMPB:
ldi temp,0
out TCNT1H,temp
out TCNT1L,temp
m1:
cpi rab,0b10000000
breq m2
lsl rab
rjmp m3
m2:
ldi rab,0b00000001
m3:
out PortB,rab
reti

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

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

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

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

Если "...в OCR1AH и OCR1AL записываем...", то какие сомнения "TIM1_COMPA" или "TIM1_COMPB" могут быть (для последнего существуют OCR1BH и OCR1BL).

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

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

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

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

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

Поставил с "А", но программа все равно не хочет работать. Должен в каждом прерывании совершаться сдвиг влево, но этого не происходит.

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

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

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

Это называется внимательно читай документацию. Попробуй самостоятельно проанализировать что будет делать твоя программа с указанными настройками используя даташит на контроллер с подробным описанием работы таймера. Хватит играть в угадайку.

Учение - изучение правил. Опыт - изучение исключений.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Да все происходит. Проверено. Давайка полный листинг посмотрим. Где-то у тебя ошибка. В тексте имя обработчика TIM1_COMPB, но мало его исправить на А, нужно еще правильный вектор выбрать в таблице.

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

Смотрел я Белова, там немного по другому. Перепроверил по даташиту, вроде все верно, может чего пропустил? Вот вся программа:

;**************************************
;Автор:
;Название:
;Версия:
;
;**************************************
.include "m16def.inc"
;**************************************
;Объявление констант и переменных
;**************************************
.def temp = r16
.def rab = r17

;**************************************
;Таймеры
;**************************************

.dseg ; сегмент ОЗУ

.eseg ; сегмент ЕЕПРОМ

.cseg ; сегмент программы

.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp ADC_COMP ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
;RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
;TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_COMPB: ; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART_RXC: ; USART RX Complete Handler
USART_UDRE: ; UDR Empty Handler
USART_TXC: ; USART TX Complete Handler
ADC_COMP: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TWSI: ; Two-wire Serial Interface Handler
EXT_INT2: ; IRQ2 Handler
TIM0_COMP: ; Timer0 Compare Handler
SPM_RDY: ; Store Program Memory Ready Handler
reti
;**************************************
;Инициализация
;**************************************

RESET:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPH,temp
ser temp
out DDRB, temp ; Настроить порты B на выход

ldi temp, 0b00010000
out TIMSK,temp ;Разрешить прерывания компаратора
ldi temp,0b00000011
out TCCR1B,temp ;Тактовый сигнал, СК/64

ldi temp,0x5F
out OCR1AH,temp
ldi temp,0x5E
out OCR1AL,temp ;
;
ldi rab,0b00000001 ; инициализация индикатора

ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
sei ; разрешить прерывания

;**************************************
;Основная программа
;**************************************
Main:
rjmp Main ;бесконечный цикл

TIM1_COMPA:
ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
m1:
cpi rab,0b10000000 ; сравнивание с крайним значением
breq m2 ; если равно то загрузить начальное
lsl rab ; сдвиг влево
rjmp m3
m2:
ldi rab,0b00000001 ; загрузка начального значения
m3:
out PortB,rab ; вывод значения на индикатор
reti

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

;**************************************
;Автор:
;Название:
;Версия:
;
;**************************************
.include "m16def.inc"
;**************************************
;Объявление констант и переменных
;**************************************
.def temp = r16
.def rab = r17

;**************************************
;Таймеры
;**************************************

.dseg ; сегмент ОЗУ

.eseg ; сегмент ЕЕПРОМ

.cseg ; сегмент программы

.org 0
rjmp RESET ; Reset Handler
nop
reti ; IRQ0 Handler
nop
reti ; IRQ1 Handler
nop
reti ; Timer2 Compare Handler
nop
reti ; Timer2 Overflow Handler
nop
reti ; Timer1 Capture Handler
nop
rjmp TIM1_COMPA ; Timer1 CompareA Handler
nop
reti ; Timer1 CompareB Handler
nop
reti ; Timer1 Overflow Handler
nop
reti ; Timer0 Overflow Handler
nop
reti ; SPI Transfer Complete Handler
nop
reti ; USART RX Complete Handler
nop
reti ; UDR Empty Handler
nop
reti ; USART TX Complete Handler
nop
reti ; ADC Conversion Complete Handler
nop
reti ; EEPROM Ready Handler
nop
reti ; Analog Comparator Handler
nop
reti ; Two-wire Serial Interface Handler
nop
reti ; IRQ2 Handler
nop
reti ; Timer0 Compare Handler
nop
reti ; Store Program Memory Ready Handler
nop
;**************************************
;Инициализация
;**************************************

RESET:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPH,temp
ser temp
out DDRB, temp ; Настроить порты B на выход

ldi temp, 0b00010000
out TIMSK,temp ;Разрешить прерывания компаратора
ldi temp,0b00000011
out TCCR1B,temp ;Тактовый сигнал, СК/64

ldi temp,0x5F
out OCR1AH,temp
ldi temp,0x5E
out OCR1AL,temp ;
;
ldi rab,0b00000001 ; инициализация индикатора

ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
sei ; разрешить прерывания

;**************************************
;Основная программа
;**************************************
Main:
rjmp Main ;бесконечный цикл

TIM1_COMPA:
ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
m1:
cpi rab,0b10000000 ; сравнивание с крайним значением
breq m2 ; если равно то загрузить начальное
lsl rab ; сдвиг влево
rjmp m3
m2:
ldi rab,0b00000001 ; загрузка начального значения
m3:
out PortB,rab ; вывод значения на индикатор
reti

Пробуй. Ошибка была в таблице векторов прерываний. У Меги16 размер вектора прерывания 2 байта. Поэтому, если описывать всю таблицу, не полагаясь на директиву .org, необходимо вставлять пустой оператор nop между адресами вызова. Это нужно делать чтобы соблюсти этот самый размер (2 байта), т.к. команда rjmp занимает 1 байт (+1байт nop).

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

Опа, заработало. Спасибо! А что как-то можно сделать по другому с директивой .org? Кстати, еще работает, если заменить rjmp на jmp.

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

У тебя первое прерывание "Reset" описано с ее помощью (.org [адрес вектора]). Так же можно описывать и другие, которые ты используешь. Для всех остальных (неиспользуемых) компилятор сам вставит коды переходов (возврата).

Вот так может выглядеть твой код:

;**************************************
;Автор:
;Название:
;Версия:
;
;**************************************
.include "m16def.inc"
;**************************************
;Объявление констант и переменных
;**************************************
.def temp = r16
.def rab = r17
;**************************************
;Таймеры
;**************************************
.dseg ; сегмент ОЗУ
.eseg ; сегмент ЕЕПРОМ
.cseg ; сегмент программы
.org 0
rjmp RESET ; Reset Handler
.org 0x0C
rjmp TIM1_COMPA ; Timer1 CompareA Handler
;**************************************
;Инициализация
;**************************************
RESET:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPH,temp
ser temp
out DDRB, temp ; Настроить порты B на выход
ldi temp, 0b00010000
out TIMSK,temp ;Разрешить прерывания компаратора
ldi temp,0b00000011
out TCCR1B,temp ;Тактовый сигнал, СК/64
ldi temp,0x5F
out OCR1AH,temp
ldi temp,0x5E
out OCR1AL,temp ;
;
ldi rab,0b00000001 ; инициализация индикатора
ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
sei ; разрешить прерывания
;**************************************
;Основная программа
;**************************************
Main:
rjmp Main ;бесконечный цикл
TIM1_COMPA:
ldi temp,0 ;обнуление таймера
out TCNT1H,temp
out TCNT1L,temp
m1:
cpi rab,0b10000000 ; сравнивание с крайним значением
breq m2 ; если равно то загрузить начальное
lsl rab ; сдвиг влево
rjmp m3
m2:
ldi rab,0b00000001 ; загрузка начального значения
m3:
out PortB,rab ; вывод значения на индикатор
reti

Согласись, несколько компактнее.

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

Согласен, компактнее стал код. Спасибо, теперь буду так делать. А не можете сказать с чем нужно разобраться в МК, чтоб более менее все понимать. Что-то типа таймеров, далее хочу с ШИМ разобраться, а дальше что? Хочу, так сказать, все функции МК разобрать, чтоб если что-то надо, сразу знать что использовать и как. В планах перейти на СИ,а потом и на ARM:) Если не заброшу. Скажите основные вещи в МК.

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

Компилятор ничего не вставит, будет просто пустое место - в прошивке в этом месте скорей всего будет $FFFF.

Что-то вы разогнались с байтами - команды адресуются машинными словами по 16 бит - т.е. по два байта. и ORG работает так же с машинными словами.

В даташите на контроллер есть целый кусок правильного объявления векторов прерываний - оттуда берешь и вставляешь. Неиспользуемые вектора заменяешь на RETI и никаких проблем.

Учение - изучение правил. Опыт - изучение исключений.

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

Что-то вы разогнались с байтами - команды адресуются машинными словами по 16 бит - т.е. по два байта. и ORG работает так же с машинными словами.

Справедливо. По одному адресу хранится слово. ORG работает с адресами. Однако для МК с памятью 8К размер вектора равен 1 слово (используется rjmp), с большим резмером - 2 слова (используется jmp). Отсюда и отведение адресов под расположение веторов 8К - 1 адрес, и более 8К - 2 адреса. В чем и было несоответствие у автора. Тут я затупил, признаюсь (изучаю другую систему вот и не переключился вовремя).

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

ошибок нет, компилируется. вот еще вариант светодиод загорается, и не тухнет

#include <avr/io.h>
int main(void)
{
DDRB |= (1<<DDB0)|(0<<DDB1);
while(1)
{
PORTB |=(0<<PB0)|(1<<PB1); 
 if (bit_is_set(PINB,PB1)==0)
 {
  PORTB |=(1<<PB0);

 }
}
}

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

Подскажите можно ли сделать на таймере тини13 сигнал в виде трапеции? пилы? это где то делается в настройках?

IMXO

перепутал там PB0 PB1

подскажите где то видел формулу как расщитать частоту ШИМ

Да кстати решил тот вопрос о кнопке

#include <avr/io.h>
int main(void)
{
DDRB |= (1<<PB0)|(0<<PB1);
PORTB |=(0<<PB0)|(1<<PB1);
while(1)
{
 if (bit_is_set (PINB,PB1)) {
	 PORTB |= _BV(PB0);
 } else {
	 PORTB &= ~_BV(PB0);
 }
}
}

#define F_CPU 1000000UL эта строчка устанавливает частоту мк в 1мгц?

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

В тини13 нет ЦАПа, поэтому все что отлично от прямоугольника - только через внешний ЦАП.

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...