Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

А как можно реализовать разложение двузначного десятичного числа на две цифры, для вывода на индикаторы?
Есть вариант сделать деление на 10 с остатком - на ассемблере не сложно реализовать, но как правильно?

Вот даже примерно набросал, как я себе это представляю. В t число, которое раскладываем. digH и digL - результат (2 цифры). Остальные регистры промежуточные.

Код: Выделить всё

mov rx1,t                       ; реализуем деление
ldi rx2,0                       ; счетчик десятков
ldi rx3,0                       ; остаток
cln                             ; очистим negative флаг                         
l01:
    mov rx3,rx1                 ; остаток = числу
    subi rx1,10                 ; вычитаем из числа 10
    brmi l02                    ; если результат отрицателен - выходим
    inc rx2                     ; иначе увеличиваем десятки
    rjmp l01                    ; и зацикливаем
   
l02:
mov digH, rx2                   ; забираем десятки
mov digL, rx3                   ; забираем остаток
ret
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Engineer_Keen »

Код: Выделить всё

mov rx1,t                       ; реализуем деление
ldi rx2,0                       ; счетчик десятков
ldi rx3,0                       ; остаток ----(лишний регистр)----
cln                             ; очистим negative флаг ----(в принципе не нужно, на subi не влияет, а сравнение идет после subi)----
l01:
    mov rx3,rx1                 ; остаток = числу ----(лишняя строка в цикле)----
    subi rx1,10                 ; вычитаем из числа 10
    BRCS l02                    ; если результат отрицателен - выходим ----(нужно BRCS, BRMI для положительных не прокатит, хотя я забыл что у нас только 2 знака  :)) )----
    inc rx2                     ; иначе увеличиваем десятки
    rjmp l01                    ; и зацикливаем
   
l02:
SUBI rx1,-10 ;----эту строку я добавил----
mov digH, rx2                   ; забираем десятки
mov digL, rx1                   ; забираем остаток ----(а он у нас есть в rx1)----
ret

Подсмотрено у Jack_A в теме по сабжу
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

ploop писал(а):А как можно реализовать разложение двузначного десятичного числа на две цифры, для вывода на индикаторы?

Ищите в аппнотах BCD арифметику. Там и двух-значные, и пяти...
Алгоритм для двух-значных можно описать так:
В цикле вычитаем 10, если результат больше нуля, то инкремент десятков, цикл заново.
Иначе прибавляем 10 и результат помещаем в единицы.
Алгоритм элементарно усовершенствуется до трёх цифр (для вывода, напр., "123").
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Алгоритм для двух-значных можно описать так:
В цикле вычитаем 10, если результат больше нуля, то инкремент десятков, цикл заново.

Дык посмотрите на код - я именно так и набыдлокодил :)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

SUBI rx1,-10 ;----эту строку я добавил----
mov digH, rx2 ; забираем десятки
mov digL, rx1 ; забираем остаток ----(а он у нас есть в rx1)----

Ага, понятно - вычли, потом добавили. Спасибо, суть ясна.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

ploop писал(а):Ага, понятно - вычли, потом добавили. Спасибо, суть ясна.

С пятизначными цифрами хитрее - там прибавляют-сдвигают, да и конечный код получается не в чисто десятичном, а т.н. упакованном (т.е. в одном байте два десятичных числа). Короче, надо курить код аппнота.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
DeltaQ
Открыл глаза
Сообщения: 45
Зарегистрирован: Чт окт 30, 2008 13:26:18

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение DeltaQ »

Хочу начать работать с типами контролеров ATXmega256A3.
Эти контроллеры не имеют режима внутрисхемного программирования такой как SPI. А уже применяется либо DPI либо JTAG.
Прогать под него собираюсь в CodeVisionAVR.
Какой внутрисхемный программатор посоветует?
http://radiokot.ru/circuit/digital/pcmod/21/
И еще возникает вопрос по совмещению программатора, по напряжению, как же быть если напряжение МК питания допустимое 3.6 Вольт, а программатор на выходе выдаёт 5 Вольт?

В общем нужна консультация по возможности работы с ATXmega.
mailjaffka
Родился
Сообщения: 7
Зарегистрирован: Ср янв 12, 2011 17:27:25

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mailjaffka »

Помогите, пожалуйста! Нужно подключить аналоговый датчик уровня воды к микроконтроллеру. Помогите вот в чем разобраться: на схеме датчика указаны 3 проводка так сказать EXC, COM и N. Что из них что??? (выход, питание +-)
Аватара пользователя
INZHENER
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Ср ноя 24, 2010 13:10:53
Откуда: пгт Краснобродский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение INZHENER »

КАк проверить микроконтроллер PIC16F628A, может сгорел а может нет????????
Прогроматор Extra-pic, через переходник с полным интерфейсом RS-232
Мечта - стать модератором и навести порядок)))
[img]http://bws.ucoz.ru/sillki/0.jpg[/img]

[color=#4000FF]Так же известен на других форумах как BWS и INZHENER_BWS[/color]
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Записать и сделать верификацию.
Проверить записанное в работе (вдруг генератор сдох?)
Ну хотя бы пробную прогу - на порты 0xFF, а по нажатию кнопки (прицепить на какой-нибудь вывод) 0x00.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

С пятизначными цифрами хитрее - там прибавляют-сдвигают, да и конечный код получается не в чисто десятичном, а т.н. упакованном (т.е. в одном байте два десятичных числа). Короче, надо курить код аппнота.

Запаял сейчас двузначный семисегментник в динамике. Как ни странно, мой код заработал сразу, хотя писал его на работе, прямо в браузере, поглядывая в даташит.
Пришлось помучиться с выводом - порты PB0 и PB1 мне нужны под компаратор, поэтому пришлось задействовать порт PD2 под сегмент 'g', изгаляясь с выделением бита. Но работает :)

Код: Выделить всё

printL:
ldi rx1,0
ldi ZH,High(matrix*2)           ; загрузка адреса 0-го элемента
ldi ZL,Low(matrix*2)            ; массива индикатора в пару Z
add ZL,digL                     ; увеличение адреса на величину
adc ZH,rx1                      ; цифры
lpm                             ; грузим байт
mov rx1,R0
; в rx1 у нас теперь код символа индикатора. Надо
; разбить его по портам, т.к. B и D используются частично
mov t,rx1
andi t,0b11111100               ; обрежем два младших бита                  
out PORTB,t                     ; для вывода в B
mov t,rx1
lsl t                           ; сдвинем влево, чтоб сегмент g
                                ; был битом №2
andi t,0b00000100               ; выделим бит по маске
ori t,0b01100010                ; поставим биты, чтоб подтяжка осталась
out PORTD,t                     ; выводим

ret
mailjaffka
Родился
Сообщения: 7
Зарегистрирован: Ср янв 12, 2011 17:27:25

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mailjaffka »

Помогите, пожалуйста! Нужно подключить аналоговый датчик уровня воды к микроконтроллеру. Помогите вот в чем разобраться: на схеме датчика указаны 3 проводка так сказать EXC, COM и N. Что из них что??? (выход, питание +-)
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Necroteeth »

добрый вечер!
статья "Таймеры и каунтеры. Бегущий огонек v2.0" http://radiokot.ru/start/mcu_fpga/avr/11/
у меня вопросы следующего плана: могу ли я по аналогии сделать это же, но с МК Atmega16 и его 8-bit Timer/Counter0 with PWM? или для такой цели, как в статье, не любой из трех таймеров подходит? на вопрос меня натолкнуло наблюдение, что регистр TIMSK у моего контроллера и этого таймера несколько иначе выглядит, чем в статье. И почему у него индекс только из цифры 0, а у Timer/Counter1 индексы из цифры и буквы одновременно - 1A/1B?
Ответьте, пожалуйста, а то в обучалке споткнулся на этом этапе и дальше изучать не могу, пока не разберусь :cry: :cry: :cry:
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Igor_67 »

Такие вопросы, мне кажется, лучше задавать в разделе "Статьи", ИМХО!
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
INZHENER
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Ср ноя 24, 2010 13:10:53
Откуда: пгт Краснобродский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение INZHENER »

Chettuser писал(а):Записать и сделать верификацию.
Проверить записанное в работе (вдруг генератор сдох?)
Ну хотя бы пробную прогу - на порты 0xFF, а по нажатию кнопки (прицепить на какой-нибудь вывод) 0x00.


я просто хотел протестить программатор и микроконтроллер, при окончании чтения выпадывает ошибка чтения 0000h, зашита отключена
после чтения данные не соответствуют тому что хотел записать((((((((((
Мечта - стать модератором и навести порядок)))
[img]http://bws.ucoz.ru/sillki/0.jpg[/img]

[color=#4000FF]Так же известен на других форумах как BWS и INZHENER_BWS[/color]
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Meteor »

ПЛИСоводы, прошу помощи
Делаю процесс в тестбэнче

Din:in std_logic_vector(31 downto 0);
.......
data:process
begin
wait for 320 ns; Din<=rol Din;
end process data;

При компиляции МоделСим отказывается переваривать данную конструкцию (выделено синим).
Разделить на 32 строки - можно, но не хочется.
Вот теперь вопрос, что делаю не так?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

0000h говорит о том что он остановил верификацию после того как обнаружил несовпадение. А на других PIC'ах прошивка идёт этим же программатором?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Разобрался со счетчиками, перенёс динамическую индикацию в обработчик прерывания по переполнению 0-го счетчика. Так круче :)

Теперь вот какой вопрос интересует: как работают прерывания, если накладываются друг на друга? Например сработало прерывание по переполнению одного счетчика, пошла обработка его (при этом второй тикает), и тут срабатывает например по компаратору второго. Выполнение уйдёт на второе прерывание или отработает это, а то позже (в очереди)?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Engineer_Keen »

ploop писал(а):как работают прерывания, если накладываются друг на друга?

При переходе на подпрограмму обработки прерывания флаг I сбрасывается и восстанавливается командой RETI. Так что прерывания обрабатываются по очереди.
Хотя можно внутри обработчика вставить SEI и получить хитрые вложенные прерывания, но я так еще не делал :)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Вот мне в принципе это и надо!
Допустим динамическая индикация работает в прерывании. Но основная часть алгоритма должна вызваться по более важному прерыванию, и на это время на индикацию можно забить.
Тогда надо сделать так

Код: Выделить всё

; прерывание по переполнению таймера 0
; тут динамическая индикация
TIM0_OVF:
<... код ...>
reti

; переделываем так

TIM0_OVF:
sei
<... код ...>
reti <<<<< sei не повлияет на reti??

При возникновении "нужного" прерывания цепь исполнения перекинется из индикации на это прерывание, в случае их наложения. Я правильно понимаю?
Ответить

Вернуться в «Разные вопросы по МК»