roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 04:32

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 90 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 03 авг 2013, 01:27 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
а ещё лучше на перфокартах обычной почтой. :) есть dropbox и куча других нормальных сервисов, зачем емыло для обмена файлами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 03 авг 2013, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
arm-17 писал(а):
Не получается добавить программу можно я на Mail скину

Здесь не все расширения файлов разрешены, переименуй расширение своего файла в pdf
Ты уже на эти грабли наступал, когда пытался мой файл открыть...

Добавлено спустя 1 минуту 26 секунд:
Ангел, хватит человека пугать, не видишь он педали путает? Все были такими :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 03 авг 2013, 02:23 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
я не пугаю, просто почта для обмена файлами не очень удобная штука, да и доставки/не попадание в спам не гарантировано (особо приятно, если не с сайта почту смотришь, а в почтовом клиенте) + у каждой почты свои завихи (как минимум размер или расширение файлов). :oops: в общем, как будет время, рекомендую присмотреться к альтернативам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 03 авг 2013, 03:54 
Не в сети
Аватара пользователя

Зарегистрирован: 15 июл 2013, 15:15
Сообщения: 46
Откуда: г.Москва
прог. языки: ASM
Вот программа. С прерываниями все понятно. А главный вопрос как число 9999 до 0 преобразовать для отображение в LCD c помощью bin16ASCII15? Как подставить допустим число 35?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 04 авг 2013, 05:19 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Хм, посмотрел...
А зачем ты заменил:
.include "2313def.inc"
на
.include file "C:\AVR\AvrAssembler2\Appnotes\tn2313def.inc"
???
2313def.inc стандартный файл, зачем его менять на экзотику? Как ты понимаешь у меня по твоему пути нет такого файла, соотв. студия выдает ошибку при компиляции. Я поменял обратно...

А зачем ты дал русское название своей программе? Это плохой тон, в мире люди плохо себе представляют, что такое "русский". Соотв. студия отказывается его компилить. Переименовал в impulse.asm

Ошибка на ссылку:
.include file "C:\AVR\WH4\hd44780.asm"
закомментировал...
Соотв. появились ошибки на "rcall LCD_WriteCommand" и.т.д. Закомментировал.
Зачем ты их вообще сейчас включаешь, если до вывода на индикатор как до луны пешком?

Начало компилиться, теперь появились варнинги:
Код:
C:\avr\test\impulse.asm(23): warning: Register r11 already defined by the .DEF directive
C:\avr\test\impulse.asm(29): warning: Register r16 already defined by the .DEF directive


Так, становится скучновато. Ладно, разберемся потом с этим. Запускаем дебагер, жмем f11
Доходим до основного цикла "Inf". Йо майо, зачем ты опять засунул разрешение глобального прерывания в основной цикл? Ты когда ходишь по коридору туда сюда, жмешь выключатель чтоб включить свет, даже когда он горит? Или делаешь это один раз? Убрал sei из цикла.
Так, почему идет опрос флагов, которые не инициировались раньше? "sbrc flags, EventForward ". Почему ты убрал "clr flags" в инициализации ???
Куда делось опять форматирование программы? Почему команды начинаются с начала строки? Почитай это:
http://kazus.ru/forums/showpost.php?p=5 ... ostcount=4
Взял тута:
http://kazus.ru/forums/showthread.php?p=576123
Пожалей меня и нас :)
Вот как должны выглядеть программы:
http://www.electroclub.fatal.ru/RusAVR/ ... CDapp2.htm
http://caxapa.ru/49289.html

Ты дебагером пользуешься?
Ладно, мы зациклены в основном цикле "inf", в котором ничего не происходит. Давай поставим курсор на "rjmp Forward" и правой кнопкой мыши выберем "set next Statement". Жмем f11, перешли на "Forward:" . Тут делается "inc temp1", это твой двоичный счетчик, который, кста, нигде не инициирован, т.е. там мусор от использования этого регистра для настройки портов. Ладно, он инкрементировался, у меня он стал 0xC1 (R19). Ок, давай посмотрим как его будет преобразовывать bin2ASCII16 в ascii код. bin2ASCII16 пытается преобразовать двоичный код в регистрах fASCIIL,fASCIIH, которые дефайном сделаны r11,r12. A твой счетчик в temp1, который в R19. С чего он должен правильно считать???
Так, пойду покурю, т.е. я не курю, но теперь курю :)

Добавлено спустя 51 минуту 18 секунд:
Курнул, ща пойдет лучше :)
Делаем ресет в дебагере. Тактика: попробуем проверить работоспособность bin2ASCII16, мы знаем, что двоичный код должен быть в fASCIIL,fASCIIH (r11,r12). При подходе к этой процедуре, засунем в эти регистры ff ff , это 0xffff - в десятичном виде это 65535.
Поехали...
Цитата:
Ладно, мы зациклены в основном цикле "inf", в котором ничего не происходит. Давай поставим курсор на "rjmp Forward" и правой кнопкой мыши выберем "set next Statement". Жмем f11, перешли на "Forward:"

Попадаем в bin2ASCII16. В регистры r11 и r12 забиваем "ff"
Все пока хорошо, bin2ASCII_digit_loop вычитает из нашего 0xffff число 10000, пока не произойдет переполнение. Колич. вычетов подсчитывается в cnt16a, это и будет наше десятичное число пятого знака "65535". Йес, cnt16a (r16) насчитал "6" и вывалился из цикла. Опс, пошли какие-то:
Код:
ldi r16,0x01 ;Команда очистки дисплея

Ну йо майо, там наш "6" многострадальный был. Стоп дебагер. Удаляем весь бред до "ret". Компилим. Доходим до этого места. Во, сбросим "Cycle counter", посмотрим сколько циклов занимает преобразование.
Поехали, ура, преобразовалась одна цифра "6", прошло 49 тактов, цифра записалась в:
Код:
mov     tASCII4, cnt16a

Так, мы знаем что теперь все работает, чтоб не жамкать пошагово f11, поставим точку останова на ret в bin2ASCII_digit_loop. И будем запускать отладку f5, в нужном месте прога остановится и мы будем видеть как преобразовывается число.
Опс, получили 4-й знак и он = 5 :)
Код:
mov     tASCII3, cnt16a

Опс, получили 3-й знак и он = 5 :)
Код:
mov     tASCII2, cnt16a

Опс, получили 2-й знак и он = 3 :), и почему-то вывалились из bin2ASCII16, полученное число осталось в cnt16a, а остаток единиц "5" остался в fASCIIL, ок, будем знать.
Итог, число 0xffff преобразовалось в 65535 (десятичное) и лежит в tASCII4,tASCII3,tASCII2,cnt16a,fASCIIL. Заняло 162 такта. Все работает.
Сложно? Кассандра? Ушел курить :)
Вложение:
impulse.asm.pdf [4.8 КиБ]
Скачиваний: 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 05 авг 2013, 01:57 
Не в сети
Аватара пользователя

Зарегистрирован: 15 июл 2013, 15:15
Сообщения: 46
Откуда: г.Москва
прог. языки: ASM
А я курю. Чувствую скоро пить начну :)
пошел курить материал

Добавлено спустя 32 минуты:
Проверил и правду все работает :)
"Итог, число 0xffff преобразовалось в 65535 (десятичное) и лежит в tASCII4,tASCII3,tASCII2,cnt16a,fASCIIL. Заняло 162 такта. Все работает."
А как теперь вытащить это число? Собрать все воедино, чтоб передать в подпрограмму (LCD_WriteData).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 05 авг 2013, 03:16 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, сначала вызываешь rcall bin2ASCII16, а потом своей функцией печати на lcd:
Код:
;**********************************************************************
;Печать счетчика на lcd
   rcall   bin2ASCII16
   mov   temp1,0x30   ;смещение для ASCII кода
   _add_   tASCII4,temp1    ;преобразовать десятичный код в ASCII
   _add_   tASCII3,temp1    ;
   _add_   tASCII2,temp1    ;
   _add_   cnt16a,temp1    ;
   _add_   fASCIIL,temp1    ;

;вывод на lcd
   mov   temp1,tASCII4
   rcall   LCD_WriteData
   mov   temp1,tASCII3
   rcall   LCD_WriteData
   mov   temp1,tASCII2
   rcall   LCD_WriteData
   mov   temp1,cnt16a
   rcall   LCD_WriteData
   mov   temp1,fASCIIL
   rcall   LCD_WriteData
;**********************************************************************


Только смотри чтоб опять регистры не пересекались, у тебя вроде так:
Код:
;Число должно быть в r16,чтоб отобразить на LCD
;   rcall LCD_WriteData


Не дает форум текст программы нормально вставлять. смотри файл:
Вложение:
read.txt.pdf [1.01 КиБ]
Скачиваний: 0


Последний раз редактировалось Dmitry__ 05 авг 2013, 19:00, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 05 авг 2013, 18:58 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Поправил пост, запрещенное слово для форума взято в _ _


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 08 авг 2013, 00:05 
Не в сети
Аватара пользователя

Зарегистрирован: 15 июл 2013, 15:15
Сообщения: 46
Откуда: г.Москва
прог. языки: ASM
Привет! Вывел на LCD 65535 :good: .А как из этого числа отнять или прибавить 1-у? :crazy:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 08 авг 2013, 20:02 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, тенденции есть :good:

arm-17 писал(а):
А как из этого числа отнять или прибавить 1-у?

Я так всю программу тебе напишу, мы так не договаривались :)

Твоему двоичному счетчику надо выделить память, чтоб он спокойно там считал и его никто не затирал. Т.к он у тебя 16-ти битный, надо выделить 2 байта, обзовем например CountLow и CountHigh и обнулить их при инициализации программы:
Код:
.def   CountLow   =r24
.def   CountHigh   =r25

   clr   flags      ;сбросить флаги
   clr   CountLow    ;сбросить двоичный счетчи
   clr   CountHigh    ;



Инкремент и декремент счетчика надо делать по правилу 16-ти битной арифм. В авр есть adiw и sbiw, но у этих команд есть ограничение на используемые регистр, см. соотв. доку, поэтому наши регистры в r25:r24
Код:
;**********************************************************************
Forward:
   cbr   flags, (1__EventForward);сбросить флаг,обработали событие
   adiw   CountHigh:CountLow,1   ;инкремент 16-ти битного счетчика
   rcall   PrintASCII
   ret
;**********************************************************************
Back:
   cbr   flags, (1__EventRevers)   ;сбросить флаг,обработали событие
   sbiw   CountHigh:CountLow,1   ;декремент 16-ти битного счетчика
   rcall   PrintASCII
   ret
;**********************************************************************

Коррекцию и вывод на печать оформим подпрограммой:
Код:
;**********************************************************************
PrintASCII:
   mov   fASCIIL,CountLow   ;переслать счетчик в регистры 10-ой коррекции
   mov   fASCIIH,CountHigh   ;

   rcall   bin2ASCII16   ;десятичная коррекция
;преобразовать десятичный код в ASCII   
   ldi   temp1,0x30   ;Смещение для ASCII кода
   _add_   tASCII4,temp1    ;r15
   _add_   tASCII3,temp1    ;r14
   _add_   tASCII2,temp1    ;r13
   _add_   cnt16a, temp1    ;r19
   _add_   fASCIIL,temp1    ;r23

;вывод на lcd
   mov   temp1,tASCII4
;   rcall   LCD_WriteData
   mov   temp1,tASCII3
;   rcall   LCD_WriteData
   mov   temp1,tASCII2
;   rcall   LCD_WriteData
   mov   temp1,cnt16a
;   rcall   LCD_WriteData
   mov   temp1,fASCIIL
;   rcall   LCD_WriteData
   ret
;**********************************************************************


Вот тебе домашнее задание :)
Твой счетчик при инкременте с 0xffff (65535 десятичное значение) сбросится в 0. И соотв. при декременте с 0 станет: 0xffff, надо бы дописать ограничивалку минимального и максимального значения. А кто сказал что будет легко?

Ты там не диплом сдаешь? :D
Оцени какую я красоту навел в файле :P
Вложение:
STENDIMPULS4.asm.pdf [5.96 КиБ]
Скачиваний: 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 08 авг 2013, 23:47 
Не в сети
Аватара пользователя

Зарегистрирован: 15 июл 2013, 15:15
Сообщения: 46
Откуда: г.Москва
прог. языки: ASM
Я работаю в очень крупной лифтовой компании Ведущим инженером. Эта штука мне нужна для ремонта Тахо-датчиков от частотных преобразователей, а то они летят как семечки и разработчики дерут не малые деньги за ремонт надо утереть им нос :).Может я смогу оказать какую-нибуть услугу вам Dmitry__?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 08 авг 2013, 23:53 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
arm-17 писал(а):
Я работаю в очень крупной лифтовой компании Ведущим инженером.

ВАУУУУУУУУУУУУУУУУУУУУУУУУУУ!!!
Я пытаюсь сделать знакомому лифт в коттедж, ТЫ МНЕ НУЖЕН!!! :Yahoo!:
А что за компания?
Фсеееее, начинаем делать свои контроллеры, я весь твой :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 09 авг 2013, 00:03 
Не в сети
Аватара пользователя

Зарегистрирован: 15 июл 2013, 15:15
Сообщения: 46
Откуда: г.Москва
прог. языки: ASM
Круто :D .Весь к вашим услугам. :) :) :) Вот уж не думал что пригожусь :good:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 09 авг 2013, 00:12 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Я щаз пляшу как у тебя на аватарке. :)
Давай в личку...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразования 16 bit to 5 digit ASCII
СообщениеДобавлено: 09 авг 2013, 04:56 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
о, уже в отдел хардкорщиков/оптимизиторов переманиваешь :D ну ничё, ничё, скоро и до кратеньких нормальных мануальчиков, тип такого Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes:1, 2A, 2B, 2C, 3A, 3B, and 3C дойдёт


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 90 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO