Страница 131 из 400

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Сб май 12, 2012 21:07:11
DX168B
если это tiny2313, то там нет АЦП. за то есть аналоговый компаратор.
далее, если включить мозг, то можно и его использовать для опроса клавы.
всего два вывода МК. обвяз - два резистора и один кондер (не считая резисторной линейки под кнопки)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Сб май 12, 2012 22:40:52
ILYAUL
Можно и его , только он не любит дребезг , что Ацп практически не замечает

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Сб май 12, 2012 23:10:41
Alexeyslav
Резистивный сенсор рассчитан исключительно под прямоугольную область и выдает координаты а не номера кнопок. Емкостные кнопки, могут иметь любую конфигурацию - шины строк и столбцов чисто условные, и могут проявлятся только вблизи самих кнопок в виде площадок. Работают при этом практически через любой диэлектрик, однако в любительских условиях при толщине более 1мм появляются технические проблемы связанные с надежной регистрацией столь малых емкостей - десяток-другой пикофарад.
Но в качестве преимущества, клавиатура может быть многомерной матрицей, например в 3-х измерениях : 3x3x3 = 27 кнопок 9-ю выводами против матрицы 4x5 = 20 кнопок(если не использовать диодное разделение кнопок умножающее количество определяемых кнопок на 2) те же 9 выводов.


Использование АЦП для заведения нескольких кнопок при помощи резисторной матрицы тоже имеют свои недостатки, особенно при плохих кнопках и отсутствии защиты нажатия ДВУХ И БОЛЕЕ кнопок одновременно. К тому же надо еще следить за стабильностью показаний АЦП и только после этого принимать какое-то решение - а это все огромные накладные расходы.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 00:11:51
DX168B
на счет резистивника. я и говорил про координаты.
а остальное - просто варианты опроса кнопок, если ног не хватает и АЦП нет.
кондер параллельно кнопке решает на половину проблему дребезга.
остальное душится программно. номиналы линейки резисторов подбираются таким образом, чтобы сопротивление при нескольких зажатых кнопках отличалось от сопротивления отдельно взятой кнопки.
#ариантов масса.
зы: я недавно напарника отучил от цифровой фильтрации данных из АЦП. оставили только программные методы борьбы с собственными шумами АЦП. остальное решает аппаратная фильтрация. например, кондер или мост в цепи ООС операционника, стоящего на входе АЦП. нефиг камень грузить лишними задачами, когда это решается аналоговыми методами.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 16:50:37
MS24
Ребят, подскажите пожалуйста, у меня с компа по юарту поступают числа, которые варьируются от 0 до 10 000, как мне передавать их, ведь в регистр может прийти только одно байтное число?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 17:00:38
Alexeyslav
Передавать по два байта... и считывать их вовремя - в прерывании по приему байта например.
Вереней даже 4 байта. первый $FFFF - будет означать начало передачи, а дальше два байта самого числа. Такая синхронизация нужна для того чтобы если вдруг будет пропущен один байт ограничить по времени сбой.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 17:14:49
MS24
Так, я получу по юарту 2 значения, т.е 1 байт я сохраню в один регистр. второй в другой. А как мне их снова в одно число востановить?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 17:22:17
ILYAUL
MS24 писал(а):Ребят, подскажите пожалуйста, у меня с компа по юарту поступают числа, которые варьируются от 0 до 10 000, как мне передавать их, ведь в регистр может прийти только одно байтное число?
Можете передавать сразу в ASCII коде Начало посылки ,либо предложенное выше либо из той же таблицы ASCII выбрать символы которые не встретятся в вашей посылке. Ну а заканчивать символами CR+LF

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 17:26:51
ILYAUL
MS24 писал(а):Так, я получу по юарту 2 значения, т.е 1 байт я сохраню в один регистр. второй в другой. А как мне их снова в одно число востановить?
Стандартные подпрограммы прервода из десятич. в hex и обратно

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 17:27:55
MS24
ILYAUL писал(а):
MS24 писал(а):Так, я получу по юарту 2 значения, т.е 1 байт я сохраню в один регистр. второй в другой. А как мне их снова в одно число востановить?
Стандартные подпрограммы прервода из десятич. в hex и обратно
А где их взять эти подпрограммы? )

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 18:40:43
Леонид Иванович
Написать.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 19:34:39
MS24
Леонид Иванович писал(а):Написать.
если бы я мог, я бы не задовал таких вопросо сдесь -)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 19:40:07
Alexeyslav
А собственно в чем проблема хранить в памяти контроллера 16-битное "слово" как два отдельных байта? Так делается всегда и во всех 8-битных процессорах.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вс май 13, 2012 21:15:51
ILYAUL
Леонид Иванович писал(а):Написать.
Леонид Иванович , за него это уже сделал ATMEL, как Вы знаете. Может - Поискать :)))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт май 15, 2012 21:19:36
MS24
ILYAUL писал(а):
Леонид Иванович писал(а):Написать.
Леонид Иванович , за него это уже сделал ATMEL, как Вы знаете. Может - Поискать :)))
Ребят, вот я принимаю данные таки макаром:
Uart_Send:
sbis UCSR0A,UDRE0 ;пропуск если нет флага готовности
rjmp Uart_Send ;ждем готовности - флага UDRE

out UDR0, Uart_Trans ;шлем байт
ret ;Возврат
Ребят, объясните пожалуйста как слать цифры с компа, я могу только символы слать, а как цифровое значение принять от 10 до 10000 ??? спасите плиз, у меня диплом горит((

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт май 15, 2012 21:26:51
Alexeyslav
Считваешь два байта подряд, и рассматриваешь их как одно 16-бит слово. В чем проблема-то?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт май 15, 2012 21:59:15
ILYAUL
MS24 писал(а): .....а как цифровое значение принять от 10 до 10000 ??? ((
Знакомтесь
Кстати что посылать символы , что посылать цифры - USART пофинг - индеференден он к этому

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт май 15, 2012 22:01:18
DX168B
Поддерживаю.
Потом, в компе это дело превращаем в unsigned short int примерно так: (с/с++)

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

unsigned char buff[16]; //буфер приема
unsigned short int var = 0;
// далее, принимаем данные и проверяем их.

//извлекаем наши байты из пакета в двухбаййтную переменную
var = (unsigned short int)(buff[1]<<8) | (buff[0]); //пои условии, что младший байт был отправлен первым

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 18, 2012 11:38:18
Land
День добрый. Помогите разобраться с прерыванием от таймера. В общем первая моя программа на ассме. Нет, вообще можно сказать моя первая программа :)
Вкратце суть вопроса в том, что не происходит перехода по вектору прерывания таймера. Сам таймер крутиться не в основном цикле программы, а вызывается по событию -- сработке компаратора. Т.е. срабатывает компаратор, происходит переход по его вектору к месту, где запоминается его выходной сигнал, делается пауза (вот этот чертов таймер!!!), опять снимается выходной сигнал и сравнивается с запомненным. Если совпали -- дальше передача кода по UART (но это уже к вопросу отношения не имеет). Да! Тинька 45, 1МГц тактовая.
Таблица векторов выглядит так:
.org 0 ;Задание нулевого адреса старта программы
rjmp Reset ;Безусловный переход к метке reset
.org OVF0addr ;Задание адреса прерывания по переполнению таймера 0
rjmp timer0_ovf ;Безусловный переход к метке timer0_ovf
.org ACIaddr
rjmp Compare
т.е. в ней есть вектор по прерыванию компаратора. Работает правильно.
Разрешение прерываний от таймера:
ldi r16, (1<<TOIE0) ;Загрузка в регистр r16 "1", смещенной на TOIE0
out TIMSK,r16 ;Копирование значения из R16 в регистр TIMSK0,
;разрешение прерывания таймера
тоже вроде все правильно. Дальше собственно сама пауза таймера:
;формирование задержки
ldi r18,20 ; Задаем кол-во прерываний таймера
ldi r16,(1<<CS00) ;Загрузка двух "1", смещенных на CS00 и CS02
out TCCR0B,r16 ;Копирование значения из регистра r16 в регистр TCCR0B
sei
Pause:
rjmp Pause
tmr_clr: ;Прерывание по переполнению таймера 0
clr r16 ; Очистка регистра R16
out TCCR0B,r16 ; Остановка таймера
А по прерыванию таймера должен уходить на счетчик циклов таймера:
; Таймер===========
timer0_ovf:
dec r18
cpi r18,0
brne Pause
rjmp tmr_clr
Вроде все правильно, а не работает.
На картинке видно состояние регистров таймера, флаг переполнения стоит -- а перехода нет :o
ИзображениеКонечно, могу эту задержку реализовать на вложенных циклах, памяти хватает и за строку кода давиться не надо, но... Блин, хочется разобраться, чтобы потом с этим не сталкиваться!

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 18, 2012 11:49:39
akl
1. Думаю, что стек Вы установили
2. При входе в прерывание I-флаг сбрасывается аппаратно, а выходите Вы RJMPом, естественно, зависая навсегда на PAUSE.