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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

ploop писал(а):Когда в исходном коде мы делаем массив, мы ставим метку. Ну допустим команда rjmp метка сразу заносит адрес метки в счетчик, но как бы поделённый на два, чтоб программа перепрыгнула куда надо. Но нам надо не прыгать туда а извлечь данные, т.е. нужен реальный адрес.

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

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

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

Mr.Denis писал(а):Что-то я там не нашёл ATmega16U2

Значит, не умеете пользоваться поиском по странице :)))
Это семейство "USB AVR". Правда, там действительно есть только U2, да и то с пометкой "1кв 2010", т.е. данные на странице немного устаревшие.
Necroteeth писал(а):а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?

Будет выдавать совсем не тот адрес, т.к. младший бит адреса указывает, старший или младший байт надо брать, а умножение на два эквивалентно сдвигу влево на один разряд.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Такой вопрос: заказывал ща детали, хотел до кучи пару tiny2313 заказать и с удивлением обнаружил, что mega48 чуть ли не пополам дешевле. Читаю даташиты - так она и "нафарширована" покруче (мега же)...
В чём подвох?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Necroteeth, в студии кажется можно было открыть программу сразу в машинных кодах. Попробуйте написать несколько строк (хоть nop'ов) и метку с rjmp. И дальше пойдите отладчиком, поглядывая на счетчик команд и машинный код. И как метка изменяет его. Так же можно добавить данные (.db) их тоже будет видно.
И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

ploop писал(а):В чём подвох?

Может быть, Мега - складская позиция, а Тиньку будут заказывать у других. Корпус, опять же...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

ploop писал(а):И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)

rjmp, если я правильно понял, это относительный переход, а jmp абсолютный, то бишь rjmp имеет ограничения по дальнобойности, но зато меньше байт памяти требует (судя по program counter).
вроде как rjmp 2 байтная команда, а jmp 4-байтная.
если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций? :dont_know:
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение 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

Кстати, так любые константы задавать можно. Очень удобно.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Necroteeth писал(а):если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Можно несколько по другому пояснить:
Программный счетчик (РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика. РС считает строки с дискретностью еденицы. Но в каждой строке - 2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный байтовый адрес, а не словный, как у РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу Ramend вам уже пояснил ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация RAM, т. е. счетчика оперативной памяти - байтовая.
Последний раз редактировалось ValBag Ср янв 19, 2011 00:38:09, всего редактировалось 3 раза.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Necroteeth писал(а): а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?

Да нет, пропускать ничего не будет, но будет их брать совсем из другой области флеши, что лежит "на полпути" между желаемой областью и нулем ( начало памяти ).
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

ValBag писал(а):Можно несколько по другому пояснить:
Программный счетчик (РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика. РС считает строки с дискретностью еденицы. Но в каждой строке - 2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный байтовый адрес, а не словный, как у РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу Ramend вам уже пояснил ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация RAM, т. е. счетчика оперативной памяти - байтовая.

если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Вот в данном случае я правильно написал?

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

LDI ZL, LOW(M1*2)
LDI ZH, HIGH(M1*2)
ICALL M1
M1: NOP
NOP
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Necroteeth писал(а):если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Вот в данном случае я правильно написал?

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

LDI ZL, LOW(M1*2)
LDI ZH, HIGH(M1*2)
ICALL M1
M1: NOP
NOP

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

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

Сообщение ploop »

если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?

Метка, как и в примере выше - константа, тоже подставляется компилятором в hex-файл в виде числа. Разница только в том, что константа сразу интерпретируется как число, а метка вычисляется исходя из того, сколько команд было до неё, начиная с директивы .org только в словах, а не в байтах.
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

кажется, начинает понемногу доходить... во всем виновата команда LPM, которая берет из регистровой пары Z байтовый адрес. она одна такая или какие-то команды тоже работают с байтовыми адресами?
kyraxinoff
Родился
Сообщения: 13
Зарегистрирован: Пн апр 19, 2010 09:58:37

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

Сообщение kyraxinoff »

прошу помощи с прерыванием от компаратора на mega8.
не понимаю как сформировать импульс примерно длительностью 5мс, на одной из ног мк (PB0), при совпадении сигналов на входах компаратора AIN1 и AIN0.
Сам компаратор запускается,
ACSR = 0<<ACD | 1<<ACIE | 1<<ACIC | 0<<ACIS1 | 0<<ACIS0;
на ACO уровень постояно скачет так как и надо.
но как сделать прерывание при любом измении на ACO не могу разобраться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

kyraxinoff писал(а):но как сделать прерывание при любом измении на ACO не могу разобраться.

Глобально прерывания разрешены?
kyraxinoff писал(а):| 1<<ACIC |

Зачем вам ACIC: Analog Comparator Input Capture Enable?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

kyraxinoff писал(а): ACSR |= (0<<ACD) | (1<<ACIE )| (1<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Подскажите, чтоб использовать аппаратный UART (через согласователь уровней с компьютером, например) линии RxD контроллера надо соединять с TxD компа и наоборот?
Или Rx->Rx, Tx->Tx?
Chettuser

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

Сообщение Chettuser »

Rx - приём
Tx - передача
Соответственно Rx-Tx и Tx - Rx.
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

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

Сообщение java »

Подскажите плиз, как выставить RC Генератора 4 мег?CKSEL3..0 0011 я выставил. вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

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

Сообщение DiGiCat »

java писал(а):вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
Написано от внутреннего RC генератора 4МГц, а фьюзы даны под кварц.. Там не перепутано с CKSEL3..0 1100 ? Уточнить бы, от чего тактирование там.

На скрине для прошивки лошадью, под RC на 4МГц (в какой программе прошиваешь не указал)
4mgz.JPG
(31.05 КБ) 363 скачивания


п.с. Не часы Мосина? так там кварц часовой...
scio me nihil scire...
_______________________

Изображение <= Жалобная кнопка в правом нижнем углу... )
Ответить

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