Обсуждаем контроллеры компании Atmel.
Ответить

Вс апр 13, 2008 00:43:05

очищает все пины порта B кроме 0 и 1
т.е. на 4 линиях даных ЖКИ делает нули, а сигналы RS и E оставляет неизмеными

RS -> PB0
EN -> PB1
DB4 -> PB2
DB5 -> PB3
DB6 -> PB4
DB7 -> PB5

Вс апр 13, 2008 00:45:40

Томатный писал(а):очищает все пины порта B кроме 0 и 1
т.е. на 4 линиях даных ЖКИ делает нули, а сигналы RS и E оставляет неизмеными

по идее должно быть так:
in r16,PORTB
andi r16,$03
out PORTB,r16

Вс апр 13, 2008 00:56:32

ну да, я выложил код, до того как нашел ошибку :) сорри, что забыл сказать

Вс апр 13, 2008 14:06:03

Итак. Хочу тахометр на МК для вентилятора ПК. Хочу на АСМе. Выбор пал мерять длину периода с таходатчика вентилятора. Меряем время одного периода, умножаем на два и делим 60 на то что получилось. Проблема в математике. Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается. Надо реализовать такую формулу 60/(word*0.01024) где word - 16-разр число. полученное число я планирую переделать в BCD и вывести на LCD. А вот с такими вот действиями на асме всё стало. Прошу подробно распиать наиболее выгодный путь. Я читал тут на форуме что можно запятые потом в ответы подставлять и т.д. Поэтому неплохо было бы в ответе написать логику рассуждений - типа "ввиду того что делимое 0,01024 делить мы будем такто потому что если будем делить нетакто то получится вот так". Заранее спасибо

Вс апр 13, 2008 14:09:19

Negor писал(а):Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается.


Дак если на Си УЖЕ написал ... может РАЗУМНО и продолжить на нём ?!

Вс апр 13, 2008 14:34:48

Не - на Си я написал кусочек(ничтожный) который и вычисляет эту формулу. Написал СПЕЦИАЛЬНО чтоб потом заюзать в проэкте на асм. Написать проэкт на АСМе - дело принципа, тем более что столбко уже вложил - осталось чуть меньше половины

Вс апр 13, 2008 15:16:57

извините, что перебиваю, но я снова остановился на проблеме...
как мне вывести число в регистре на символьный ЖКИ?
с делением проблемы...
команда FMUL дает тот же результат что и сдвиг регистра вправо

Вс апр 13, 2008 21:38:22

ложная тревога, тут все есть:
http://elm-chan.org/cc_e.html :oops: :?

пока найдешь, можно подумать что этим никто никогда не занимался...

Сб апр 19, 2008 19:03:19

Господа, вопрос следующий
имеется рабочая прошивка для тини 2313, девайс готов и думаю что исправен. Но есть одно но! Семисегментные индикаторы я воткнул не с общим анодом, как автор статьи просил - а с общим катодом (были у меня под рукой, не стал заморачиваться). В обучалке автор писал что мол замена индикаторов - дело плёвое, 2 строчки в коде и всё ок. Но я уже второй час по форуму в поисках этих двух строчек и ничего вразумительного не нашел. Будьте любезны, не откажите в помощи.

Сб апр 19, 2008 19:21:04

эти строчки надо не на форуме искать, а в исходнике программы :)

кратко: надо инвертировать сигналы на сегменты и общие анлды/катоды. т.е. найти место в программе, где эти данные выводятся и перед выводом проинвертировать их.

Сб апр 19, 2008 19:25:02

Это я догодался, но проблема в том что я очень плохо знаком с синтаксисом ассемблера, потому и спрашиваю, может ли кто-нить подсказать какие комманды мне нужно дописать (или стереть) чтоб инвертировать выход портаБ

Сб апр 19, 2008 19:33:32

GRafGRay писал(а):но проблема в том что я очень плохо знаком с синтаксисом ассемблера

Очень плохо.

Всё засисит от того каким образом идет взаимодействие с портом, т.е. нужные биты устанавливаются/очищаются по одиночке или все сразу.
Если по одиночке, то копайте в сторону команд SBI и CBI.
Если сразу, то чтоб инвертировать значение в регистре юзайте команду COM.

Сб апр 19, 2008 19:54:39

Код и девайс отсюда http://www.radiokot.ru/lab/controller/01/

Вс апр 27, 2008 22:40:22

во вложении два фрагмента кода от программы (контроллер мега64)
один без использования RCALL а второй с использованием вот который без RCALL (MEG1.ASM) он работает на выводе порта D7 пролетает 0 а коде MEG2.ASM этого 0 нет объясните почему хотя компилятор ошибки не выдаёт просто хочу чтобы в основной программе были подпрограммы а неполучается
Вложения
MEG2.ASM
этот код не работает
(1.17 KiB) Скачиваний: 606
MEG1.ASM
этот код работает
(1.21 KiB) Скачиваний: 617

Вс апр 27, 2008 22:56:42

И в MEG2.ASM и MEG1.ASM код почти одинаковый, всё должно работать и в том и в другом случае. Разница только в том, что там где используется RCALL, задержка будет на 7 тактов дольше.

Вс апр 27, 2008 23:10:46

в том то и дело что не работает
я сейчас просто записываю эти короткие коды в мегу и осцилом смотрю в коде где без rcall нолик пробегает а с rcall его нет вот такая вот проблема
а вот ещё если вместо файла m64def.inc подставить 8515def.inc и в коде убрать строку sts XMCRA,temp копилятор при таком раскладе ругается (т.к у 8515 нет такого регистра) всё робит но у меня же мега64

Пн апр 28, 2008 00:37:01

может включен режим совместимости с мега103, как здесь

http://www.radiokot.ru/forum/viewtopic.php?t=8985

Пн апр 28, 2008 16:26:46

пожалуйста наведите на правильный путь :shock: :oops:
когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).
Это видно по тому, что у меня после инициализации на ЖКИ выводится надпись "Хеллоу" и после очистки экрана должна выполняться основная програма, но у меня после очистки экрана снова появляется надпись "Хеллоу" и так происходит пока поступают даные на RXD.
для меги32 векторы прерываний описал так:
Код:
rjmp RESET
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp USART_RXC
reti
reti
reti
reti
reti
reti
reti

в подпрограме USART_RXC пусто:
Код:
USART_RXC:
reti

и ещё вопрос: можно ли в одной подпрограме использовать несколько ret или reti ?

Пн апр 28, 2008 16:36:26

оформите таблицу векторов прерываний, как положено - думаю, проблемы исчезнут. используйте конструкцию
Код:
   .org VECTOR
   rjmp VECTOR_FUNC
вместо кучи бестолковых nop-ов или rjmp-ов. кто вас научил так оформлять таблицу векторов прерываний?!

Пн апр 28, 2008 16:39:05

Томатный писал(а):когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).

для меги32 векторы прерываний описал так:


Как правильно сделать посмотрите в АСМ листинге (файл .lst) в примере к задаче 5 курса - там как раз работа с USART и с LCD.

Или в примере в VMLAB
C:\VMLAB\AVR_demo\UART.ASM
Ответить