Страница 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?
Ответьте, пожалуйста, а то в обучалке споткнулся на этом этапе и дальше изучать не могу, пока не разберусь :cry: :cry: :cry:

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??
При возникновении "нужного" прерывания цепь исполнения перекинется из индикации на это прерывание, в случае их наложения. Я правильно понимаю?