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

Uart / Usart На Ассемблере


Юстас

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

Там вроде нет регистра TCCR0...

есть регистры TCCR0A и TCCR0B...

попробуй поменять на TCCR0B...

и да... из обработчика нельзя безнаказанно выскакивать по goto...

как вариант - делай goto на последний reti в обработчике... или просто reti...

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

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

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

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

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

Изображения в теме

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

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

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

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

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

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

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

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

Я бы еще порекомендовал выкинуть эту какашку (AtTiny2313).....
Нармальная какашка :)....

А моя любимая какашка - вообще tiny13A.....

Мега по сути тоже какашка... по сравнению с STM32... :)...

как же быть тогда?
Если нужно организовать ветвление в обработчике, то устанавливай в обработчике нужные флаги, а в фоне их контролируй и отрабатывай соответствующие действия....
Ссылка на комментарий
Поделиться на другие сайты

Давайте еще с Интелом сравним. :) Мы уже научились выжимать из Мег все до капли? И даже мало-мальски STM32 умеем завести? Чем же он лучше? Быстрее? Можно много медлительных алгоритмов засунуть и он вытянет их за счет быстродействия. У Мег еще и ветка AtxMega есть. Кто-нибудь ее "пощупал"? У нас, как компьютерщиков, новй чип (!), быстрее (!!!). А мы еще и старые не умеем использовать как следует. Вот печаль.

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

А как лучше\правильнее сделать?

Как надо так и сделаю...

Зависит от задачи, для контроллеров лучше большую часть вынести в #define'ы, чтобы не перегружать его вычислениями констант каждый раз заново. Но вдруг надо будет по ходу работы менять скорость передачи например, или еще что.

Могу подкинуть для инклюда набор макросов для удобного объявления и использования портов в стиле #define port_io D,4 , который программа сможет настраивать DDRD?=(1<<4), PORTD?=(1<<4), и т.д. (файлы .h загружать отказывается, будет .txt)

А моя любимая какашка - вообще tiny13A.....
Маловата она, 5 ног ввода-вывода всего (не считая ресета).
Генадий, едрён батон, как обидно со стеком-то вышло, а как же быть тогда?
Использовать прерывания как прерывания а не как процедуры. Суть прерываний: независимо от того что контроллер делает, при наступлении события (поменялось напряжение, или там байт пришел), быстро его обработать и продолжить заниматься своими делами, как будто ничего и не было. Есть, конечно, исключения, но у них достаточно специфичное применение.

pinmacro.txt

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

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

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

...Маловата она, 5 ног ввода-вывода всего (не считая ресета).

Ничего страшного, WH1602 может обслужить в 8-битном режиме и 6 светодиодов. Еще и линия для кнопки остается. Или 6 кнопок, но без светодиодов... А может и больше, но помедленней.

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

Я так понял, можно в принципе вообще отказаться от ret - reti, а просто пользоваться условными/безусловными переходами?

можно, до определенного размера прошивки, дальше адресоваться поможет только call, а из него выход только ret.

И как? Меня система событий интерсует. Насколько удачно задумана?

крапаль не понял, событий чего?

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

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

Думаю совсем не сложно будет сбацать вариант либы, где можно будет по ходу управлять параметрами...

Могу подкинуть для инклюда набор макросов для удобного объявления и использования портов в стиле #define port_io D,4 , который программа сможет настраивать DDRD?=(1<<4), PORTD?=(1<<4), и т.д.
Вот скажу честно - макросы терпеть не могу.....

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

В общем - спасибо, но не пользуюсь :)... Может кому то другому пригодятся...

tiny13A..... Маловата она, 5 ног ввода-вывода всего (не считая ресета).
Мне нравится использовать ее на 100%... это начинает быть похожим на искусство :)...

Вон скока я ее (какашку) мучил раньше...

http://asis-kbr.ru/f....php?f=17&t=171

http://asis-kbr.ru/f...c.php?f=9&t=107

http://asis-kbr.ru/f....php?f=11&t=122

http://asis-kbr.ru/f....php?f=11&t=162

самый упакованный вариант тут

http://asis-kbr.ru/f....php?f=11&t=115

из 1024 байта, занято 1024 :).....

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

крапаль не понял, событий чего?

Значит вы ее не "щупали", а только повертели в руках. :)

В AtxMega производители засунули, кроме DMA еще и так называемую "систему событий" - набор возможностей, предназначенных для организации внутренней связи. С ее помощью можно добиться автоматического запуска действий в одном или нескольких УВВ при изменении состояния в другом УВВ. Какие именно изменения в УВВ приводят к запуску действий в других УВВ, задается программно. Данная система, хотя и простая, но достаточно эффективная. С ее помощью можно организовать автономную совместную работу нескольких УВВ, не используя для этого прерывания, ЦПУ или каналы DMA. Как видно из описания, она позволяет производить обмен между устройствами минуя ЦПУ, а также позволяет запускать работу одного узла, в соответствии с событием на другом.

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

__alexander, ага понятно. Ща я ещё разок простыню раскину, не умею я в окно со скролом оформлять. Кстати, один фиг не работает. Народ, ну если не трудно, подправте мою импровизацию, лучше один раз увидеть.

.include "2313def.inc"

.cseg

rjmp RESET

.org 0x06 ; адрес прерывания по переполнению

rjmp TIM0

RESET:

; === настраиваем вершину стека ===

.def temp = r16

.def sthet = r17

ldi sthet, 10

ldi temp, RAMEND

out SPL, temp

; === Порты ===

ldi temp, 0xFF

out DDRD, temp

out DDRB, temp

clr temp

out PORTB, temp

out PORTD, temp

;=== инициализация таймер 0 ===

ldi temp, (1<<TOIE0) ; маска прерываний, включаем прерывание по переполнению

out TIMSK, temp

ldi temp, 0x05 ; предделитель 1/1024

out TCCR0B, temp

clr temp ; обнуляем таймер

out TCNT0, temp

sei

CIKLE:

nop

rjmp CIKLE

TIM0:

dec sthet ; запускаем отсчёт прерываний

cpi sthet, 0 ; сравниваем

brne CIKLE ; если не 0, продалжаем крутиться в цикле

rjmp LED_MIG ; а если 0, тогда дёрнем светодиод

; === а сдесь вообще такое важное, что даже прерывания запрещаю ))) ===

LED_MIG:

cli

sbis PINB, 0 ; если бит0 в PORTB в 1, то пропускаем следующую команду

sbi PINB, 0 ; устанавливаем бит0 PORTB в 1

sbic PINB, 0 ; если бит0 в PORTB в 0, то пропускаем следующую команду

cbi PINB, 0 ; сбрасываем бит0 PORTB

ldi sthet, 10

clr temp ; обнуляем таймер

out TCNT0, temp

sei

rjmp CIKLE

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

Мне нравится использовать ее на 100%... это начинает быть похожим на искусство :)...

Мне не нравятся Тиньки из-за укороченного набора команд. Люблю на Ассме поизвращаться.

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

Мне нравится использовать ее на 100%... это начинает быть похожим на искусство :)...

Мне не нравятся Тиньки из-за укороченного набора команд. Люблю на Ассме поизвращаться.

А я кстати, начал изучать AVR именно с тинек, так для меня открытием было, что на мегах еще какие то команды есть :)...

Я кстати на асме ими так и не попользовался, т.к. к моменту освоения мег - уже перешел на Си...

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

Чуть-чуть причесал, но это не влияет на вызов прерывания.

CIKLE:
 nop
 rjmp CIKLE

TIM0:
 dec sthet ; запускаем отсчёт прерываний
 tst sthet ; сравниваем
 brne exit_tim0 ; если не 0, выходим в главный цикл
LED_MIG:
 sbis PINB, 0 ; если бит0 в PORTB в 1, то пропускаем следующую команду
 sbi PINB, 0 ; устанавливаем бит0 PORTB в 1
 sbic PINB, 0 ; если бит0 в PORTB в 0, то пропускаем следующую команду
 cbi PINB, 0 ; сбрасываем бит0 PORTB
    ldi sthet, 10 ; 
exit_tim0:	
 reti

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

Народ..........
Ну дык опять в конце обработчика - делаеш rjmp CIKLE... те же грабли.....

Ты чтото из ранешнего разговора не правильно понял.....

Ты вообще убрал reti в обработчике прерывания... А на сам деле выходить из обработчика можно только по reti... никакие goto во внешний код не допустимы...

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

крапаль не понял, событий чего?

Значит вы ее не "щупали", а только повертели в руках. :)

В AtxMega производители засунули, кроме DMA еще и так называемую "систему событий" - набор возможностей, предназначенных для организации внутренней связи. С ее помощью можно добиться автоматического запуска действий в одном или нескольких УВВ при изменении состояния в другом УВВ. Какие именно изменения в УВВ приводят к запуску действий в других УВВ, задается программно. Данная система, хотя и простая, но достаточно эффективная. С ее помощью можно организовать автономную совместную работу нескольких УВВ, не используя для этого прерывания, ЦПУ или каналы DMA. Как видно из описания, она позволяет производить обмен между устройствами минуя ЦПУ, а также позволяет запускать работу одного узла, в соответствии с событием на другом.

Ну можно сказать что просто повертел в руках, т.к. до этого места я еще не дошел, да и мне не особо надо было, т.к. я переводил на этот мк прогу с простой меги128. есть так называемые витруальные порты это да, через них идет работа с обычным портом но реально быстрее. Если Вы меня крапаль просветите где почитать и попробовать, то я завтра с утра этим и займусь. Есть 128а1 и 32.

Кстати, насчет вертел в руках.

Вот на хмеге32 чтение с SD (под катом видео):

Вот текущий проект на 128а1. под катом картинка.

OQd_Ies_Tb_R8.jpg

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

Генадий, спс! shads. Теперь до меня дошло как надо выходить из прерывания по переполнению. Всё конечно хорошо, только в протеусе, МК на отрез отказывается дёргать лапкой. Я грешу на инициализацию таймера, как ваше мнение?

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

Ну можно сказать что просто повертел в руках, т.к. до этого места я еще не дошел,

Жаль. Думал вы мне расскажете. Ну ладно, подожду. http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh_xmega/index.htm

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

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

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

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

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

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

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

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

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

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

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

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