Страница 143 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 15:16:00
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
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 15:55:27
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 в теме
по сабжу
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 16:15:31
Gudd-Head
ploop писал(а):А как можно реализовать разложение двузначного десятичного числа на две цифры, для вывода на индикаторы?
Ищите в аппнотах BCD арифметику. Там и двух-значные, и пяти...
Алгоритм для двух-значных можно описать так:
В цикле вычитаем 10, если результат больше нуля, то инкремент десятков, цикл заново.
Иначе прибавляем 10 и результат помещаем в единицы.
Алгоритм элементарно усовершенствуется до трёх цифр (для вывода, напр., "123").
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 16:32:50
ploop
Алгоритм для двух-значных можно описать так:
В цикле вычитаем 10, если результат больше нуля, то инкремент десятков, цикл заново.
Дык посмотрите на код - я именно так и набыдлокодил

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 16:35:41
ploop
SUBI rx1,-10 ;----эту строку я добавил----
mov digH, rx2 ; забираем десятки
mov digL, rx1 ; забираем остаток ----(а он у нас есть в rx1)----
Ага, понятно - вычли, потом добавили. Спасибо, суть ясна.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 17:12:28
Gudd-Head
ploop писал(а):Ага, понятно - вычли, потом добавили. Спасибо, суть ясна.
С пятизначными цифрами хитрее - там прибавляют-сдвигают, да и конечный код получается не в чисто десятичном, а т.н. упакованном (т.е. в одном байте два десятичных числа). Короче, надо курить код аппнота.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 17:29:56
DeltaQ
Хочу начать работать с типами контролеров ATXmega256A3.
Эти контроллеры не имеют режима внутрисхемного программирования такой как SPI. А уже применяется либо DPI либо JTAG.
Прогать под него собираюсь в CodeVisionAVR.
Какой внутрисхемный программатор посоветует?
http://radiokot.ru/circuit/digital/pcmod/21/
И еще возникает вопрос по совмещению программатора, по напряжению, как же быть если напряжение МК питания допустимое 3.6 Вольт, а программатор на выходе выдаёт 5 Вольт?
В общем нужна консультация по возможности работы с ATXmega.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 18:23:00
mailjaffka
Помогите, пожалуйста! Нужно подключить аналоговый датчик уровня воды к микроконтроллеру. Помогите вот в чем разобраться: на схеме датчика указаны 3 проводка так сказать EXC, COM и N. Что из них что??? (выход, питание +-)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 19:01:59
INZHENER
КАк проверить микроконтроллер PIC16F628A, может сгорел а может нет????????
Прогроматор Extra-pic, через переходник с полным интерфейсом RS-232
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 20:48:12
Chettuser
Записать и сделать верификацию.
Проверить записанное в работе (вдруг генератор сдох?)
Ну хотя бы пробную прогу - на порты 0xFF, а по нажатию кнопки (прицепить на какой-нибудь вывод) 0x00.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 21:58:15
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
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 22:31:16
mailjaffka
Помогите, пожалуйста! Нужно подключить аналоговый датчик уровня воды к микроконтроллеру. Помогите вот в чем разобраться: на схеме датчика указаны 3 проводка так сказать EXC, COM и N. Что из них что??? (выход, питание +-)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 22:45:56
Necroteeth
добрый вечер!
статья "Таймеры и каунтеры. Бегущий огонек v2.0"
http://radiokot.ru/start/mcu_fpga/avr/11/
у меня вопросы следующего плана: могу ли я по аналогии сделать это же, но с МК Atmega16 и его 8-bit Timer/Counter0 with PWM? или для такой цели, как в статье, не любой из трех таймеров подходит? на вопрос меня натолкнуло наблюдение, что регистр TIMSK у моего контроллера и этого таймера несколько иначе выглядит, чем в статье. И почему у него индекс только из цифры 0, а у Timer/Counter1 индексы из цифры и буквы одновременно - 1A/1B?
Ответьте, пожалуйста, а то в обучалке споткнулся на этом этапе и дальше изучать не могу, пока не разберусь

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 22:49:46
Igor_67
Такие вопросы, мне кажется, лучше задавать в разделе "Статьи", ИМХО!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 22:58:44
INZHENER
Chettuser писал(а):Записать и сделать верификацию.
Проверить записанное в работе (вдруг генератор сдох?)
Ну хотя бы пробную прогу - на порты 0xFF, а по нажатию кнопки (прицепить на какой-нибудь вывод) 0x00.
я просто хотел протестить программатор и микроконтроллер, при окончании чтения выпадывает ошибка чтения 0000h, зашита отключена
после чтения данные не соответствуют тому что хотел записать((((((((((
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 13, 2011 23:06:20
Meteor
ПЛИСоводы, прошу помощи
Делаю процесс в тестбэнче
Din:in std_logic_vector(31 downto 0);
.......
data:process
begin
wait for 320 ns; Din<=rol Din;
end process data;
При компиляции МоделСим отказывается переваривать данную конструкцию (выделено синим).
Разделить на 32 строки - можно, но не хочется.
Вот теперь вопрос, что делаю не так?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт янв 14, 2011 06:54:50
Chettuser
0000h говорит о том что он остановил верификацию после того как обнаружил несовпадение. А на других PIC'ах прошивка идёт этим же программатором?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт янв 14, 2011 09:48:42
ploop
Разобрался со счетчиками, перенёс динамическую индикацию в обработчик прерывания по переполнению 0-го счетчика. Так круче
Теперь вот какой вопрос интересует: как работают прерывания, если накладываются друг на друга? Например сработало прерывание по переполнению одного счетчика, пошла обработка его (при этом второй тикает), и тут срабатывает например по компаратору второго. Выполнение уйдёт на второе прерывание или отработает это, а то позже (в очереди)?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт янв 14, 2011 11:01:25
Engineer_Keen
ploop писал(а):как работают прерывания, если накладываются друг на друга?
При переходе на подпрограмму обработки прерывания флаг I сбрасывается и восстанавливается командой RETI. Так что прерывания обрабатываются по очереди.
Хотя можно внутри обработчика вставить SEI и получить хитрые вложенные прерывания, но я так еще не делал

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт янв 14, 2011 11:17:07
ploop
Вот мне в принципе это и надо!
Допустим динамическая индикация работает в прерывании. Но основная часть алгоритма должна вызваться по более важному прерыванию, и на это время на индикацию можно забить.
Тогда надо сделать так
Код: Выделить всё
; прерывание по переполнению таймера 0
; тут динамическая индикация
TIM0_OVF:
<... код ...>
reti
; переделываем так
TIM0_OVF:
sei
<... код ...>
reti <<<<< sei не повлияет на reti??
При возникновении "нужного" прерывания цепь исполнения перекинется из индикации на это прерывание, в случае их наложения. Я правильно понимаю?