Страница 147 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 09:57:16
Necroteeth
ploop писал(а):
Когда в исходном коде мы делаем массив, мы ставим метку. Ну допустим команда rjmp метка сразу заносит адрес метки в счетчик, но как бы поделённый на два, чтоб программа перепрыгнула куда надо. Но нам надо не прыгать туда а извлечь данные, т.е. нужен реальный адрес.
а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 10:07:30
Gudd-Head
Mr.Denis писал(а):Что-то я там не нашёл ATmega16U2
Значит, не умеете пользоваться поиском по странице
Это семейство "USB AVR". Правда, там действительно есть только U2, да и то с пометкой "1кв 2010", т.е. данные на странице немного устаревшие.
Necroteeth писал(а):а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?
Будет выдавать совсем не тот адрес, т.к. младший бит адреса указывает, старший или младший байт надо брать, а умножение на два эквивалентно сдвигу влево на один разряд.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 11:42:44
ploop
Такой вопрос: заказывал ща детали, хотел до кучи пару tiny2313 заказать и с удивлением обнаружил, что mega48 чуть ли не пополам дешевле. Читаю даташиты - так она и "нафарширована" покруче (мега же)...
В чём подвох?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 11:50:35
ploop
Necroteeth, в студии кажется можно было открыть программу сразу в машинных кодах. Попробуйте написать несколько строк (хоть nop'ов) и метку с rjmp. И дальше пойдите отладчиком, поглядывая на счетчик команд и машинный код. И как метка изменяет его. Так же можно добавить данные (.db) их тоже будет видно.
И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 12:28:30
Gudd-Head
ploop писал(а):В чём подвох?
Может быть, Мега - складская позиция, а Тиньку будут заказывать у других. Корпус, опять же...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 20:22:19
Necroteeth
ploop писал(а):
И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
rjmp, если я правильно понял, это относительный переход, а jmp абсолютный, то бишь rjmp имеет ограничения по дальнобойности, но зато меньше байт памяти требует (судя по program counter).
вроде как rjmp 2 байтная команда, а jmp 4-байтная.
если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 20:39:41
ploop
почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Да потому, что это не метка, а тупо число. Посмотрите, что в файле, который в include прописан. Ну например, у меня в tn2313.inc есть вот что:
Код: Выделить всё
;*****************************************************************************
; Data Memory Declarations
;*****************************************************************************
.equ RAMEND = 0xDF ; Highest internal data memory (SRAM) address.
;(128 Bytes RAM + IO + REG)
.equ EEPROMEND = 0x7F ; Highest EEPROM address.
;(128 Bytes)
.equ EEADRBITS = 7 ; no. of bits in EEPROM address register
.equ RAM_SIZE = 128
.equ говорит компилятору, чтоб вместо слова RAMEND, EEPROMEND и т.д. он подставлял в текст 0xDF или 0x7F. Поэтому ldi R16, RAMEND одно и то же, что ldi R16, 0xDF
Кстати, так любые константы задавать можно. Очень удобно.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 22:46:36
ValBag
Necroteeth писал(а):если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Можно несколько по другому пояснить:
Программный счетчик (
РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика.
РС считает строки с дискретностью еденицы. Но в каждой строке -
2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный
байтовый адрес, а не словный, как у
РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу
Ramend вам уже пояснил
ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация
RAM, т. е. счетчика оперативной памяти - байтовая.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт янв 18, 2011 23:35:02
Jack_A
Necroteeth писал(а): а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?
Да нет, пропускать ничего не будет, но будет их брать совсем из другой области флеши, что лежит "на полпути" между желаемой областью и нулем ( начало памяти ).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 09:06:01
Necroteeth
ValBag писал(а):Можно несколько по другому пояснить:
Программный счетчик (РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика. РС считает строки с дискретностью еденицы. Но в каждой строке - 2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный байтовый адрес, а не словный, как у РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу Ramend вам уже пояснил ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация RAM, т. е. счетчика оперативной памяти - байтовая.
если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Вот в данном случае я правильно написал?
Код: Выделить всё
LDI ZL, LOW(M1*2)
LDI ZH, HIGH(M1*2)
ICALL M1
M1: NOP
NOP
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 11:09:56
Jack_A
Necroteeth писал(а):
если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Вот в данном случае я правильно написал?
Код: Выделить всё
LDI ZL, LOW(M1*2)
LDI ZH, HIGH(M1*2)
ICALL M1
M1: NOP
NOP
Нет, неправильно. Если метка используется для выполнения команды, используется словная адресация, поскольку счетчик команд оперирует словами, а не байтами. А если для команды LPM, то адресация данных БАЙТОВАЯ.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 12:08:57
ploop
если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Метка, как и в примере выше - константа, тоже подставляется компилятором в hex-файл в виде числа. Разница только в том, что константа сразу интерпретируется как число, а метка вычисляется исходя из того, сколько команд было до неё, начиная с директивы
.org только в словах, а не в байтах.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 14:27:16
Necroteeth
кажется, начинает понемногу доходить... во всем виновата команда LPM, которая берет из регистровой пары Z байтовый адрес. она одна такая или какие-то команды тоже работают с байтовыми адресами?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 15:11:09
kyraxinoff
прошу помощи с прерыванием от компаратора на mega8.
не понимаю как сформировать импульс примерно длительностью 5мс, на одной из ног мк (PB0), при совпадении сигналов на входах компаратора AIN1 и AIN0.
Сам компаратор запускается,
ACSR = 0<<ACD | 1<<ACIE | 1<<ACIC | 0<<ACIS1 | 0<<ACIS0;
на ACO уровень постояно скачет так как и надо.
но как сделать прерывание при любом измении на ACO не могу разобраться.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 15:27:50
Gudd-Head
kyraxinoff писал(а):но как сделать прерывание при любом измении на ACO не могу разобраться.
Глобально прерывания разрешены?
kyraxinoff писал(а):| 1<<ACIC |
Зачем вам ACIC: Analog Comparator Input Capture Enable?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 17:11:42
ValBag
kyraxinoff писал(а):
ACSR |= (0<<ACD) | (1<<ACIE )| (1<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 21:34:27
ploop
Подскажите, чтоб использовать аппаратный UART (через согласователь уровней с компьютером, например) линии RxD контроллера надо соединять с TxD компа и наоборот?
Или Rx->Rx, Tx->Tx?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 21:49:32
Chettuser
Rx - приём
Tx - передача
Соответственно Rx-Tx и Tx - Rx.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср янв 19, 2011 22:57:23
java
Подскажите плиз, как выставить RC Генератора 4 мег?CKSEL3..0 0011 я выставил. вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт янв 20, 2011 01:18:00
DiGiCat
java писал(а):вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
Написано от внутреннего RC генератора 4МГц, а фьюзы даны под кварц.. Там не перепутано с CKSEL3..0 1100 ? Уточнить бы, от чего тактирование там.
На скрине для прошивки лошадью, под RC на 4МГц (в какой программе прошиваешь не указал)
п.с. Не часы Мосина? так там кварц часовой...