Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

памагите начать выполнение задания , начинается так : " Запишите в регистры R1 и R2 адрес ячейки памяти 001D " С помощью какой "mnemonic" можно это записать??

заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

Недостаточно входных данных. Может конечно для тебя и существует только ОДИН контроллер, но для остальных людей разновидностей контроллеров - море, и для всех них мнемоники ассемблерных комманд могут отличаться.

Судя по наименованию регистров, это контроллер ATMEL, команда загрузки константы в регистр - LDI Rx,K , но если ты внимательно почитаешь документацию на контроллер, ты удивишься что эта команда для многих контроллеров работает только с регистрами R16-R31... поэтому загрузить константу в R1 и R2 можно только через промежуточный регистр, затем используя команду MOV, чтобы загрузить ноль в регистр - не обязательно загружать константу, можно его просто обнулить: CLR Rx.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

спасибо большое! да, да контроллер ATMEL ! а можно сразу вопрос по этому поводу: а какие еще есть контроллеры? просто навскидку назовите еще парочку...

команда LDI загружает именно костанту в регистр, а в задании "адрес ячейки памяти", или это и есть константа??

и почему тогда написано " 001D " а не " 00 и 1D " ?

про то как обнулить младший регистр спасибо отдельное, возьму на заметку!

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Там же говорится Адрес ячейки, а не содержимое.

Адрес - 16 битное число, а регистры 8 бит значит одна половинка адреса идет в один регистр, другая в другой. Надо только уточнить в какой ложить младшую часть адреса, а в какой старшую.

Поскольку регистр этот не индексный, то разницы нет никакой... лишь бы потом не забыть что куда.

Но есть еще индексные регистры, X, Y, Z. Эти регистры 16-битные, и образуются из пар R27-R28, R29-R30, R31-R32. Лучше конечно использовать другие регистры аналогично. Посмотри, как в этих регистрах распределяется старший-младший разряд.

Контроллеры производят Microchip, Atmel, motorola и т.д. и у каждой фирмы есть ряды контроллеров различного назначения.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

тяжеловато, но из сказанного решил написать код:

clr r1

ldi r16 , 1D

mov r2 , r16

во второй строчке ошибка.. " 1D " это в16ричной форме написано что ли? мне надо перевести в 10чную и получившееся значение записать во второй строчке...?

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Почитай хелп к компилятору как указываются 16-ричные числа, во многих записываются как 0x1D

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

просветления какие то есть в голове, Спасибо!

А вот дальше задание:

" Запишите в регистры R1 и R2 адрес ячейки памяти 001D . ЗАПИШИТЕ В ЭТУ ЯЧЕЙКУ ЧИСЛО 44. "

У меня в голове два варианта: 1) это как то сделать через R1 и R2 , но я не знаю как?

2) в програме написать:

ldi 0x001D , 44 но кажется это какойто бред,и прога выдает ошибку

Ссылка на комментарий
Поделиться на другие сайты

Скачай даташит на контроллер, и читай по нему способ адресации.

Для прямой загрузки в ячейку памяти используется команда STS k, Rn где k - адрес ячейки памяти, Rn - регистр значение которого туда загружается. Есть еще ST X,Rn где X - индексный регистр, в котором должен находится адрес ячейки из общего адресного пространства.

Почитай все-таки даташит ... на сайте атмела, есть переведенная документация по всему семейству контроллеров разделенная на части.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

читал читал даташит на русском, ничего не понял.. начал разбираться в ваших словах, пошаговый вывод :

" Для прямой загрузки в ячейку памяти используется команда STS k, Rn где k - адрес ячейки памяти, Rn - регистр значение которого туда загружается. "

ldi r18 , 44 ; т.е. регистру r18 присвоил число 44

sts 0x001D , r18 ; теперь в ячейку памяти загрузил r18 со значением 44

далее складываю число 55 с содержимым ячейки памяти 001D :

ldi r19 , 55

subi r19 , -0x001D ; получается я сложил 55 с числом 0x001D , а мне надо с содержимым ячейки..? вопрос : как обратиться к содержимому ячейки памяти ??

Ссылка на комментарий
Поделиться на другие сайты

Проще всего это делать при помощи регистров X, Y, Z. Нет команд для операций непосредственно над содержимым ячеек памяти, чтобы что-то с ними сделать, надо выгрузить значение в регистр. Хотя, есть исключение - инкремент и декремент можно производить непосредственно с ячейками памяти.

Еще раз посмотри модель памяти контроллера, память адресуемая при помощи регистров X,Y,Z - это общее адресное пространство регистров, портов и RAM... т.е. чтобы регистр X показал на ячейку памяти с адресом, нужно к этому адресу прибавить смещение с которого начинается память.

Кстати, а почему нельзя использовать команду сложения, ADD ?

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

ADD нельзя использовать потому что операндами являются два регистра, а в нашем случае регистр и "ячейка памяти" - это я так думал! :)

просто не хватало вот этих слов для полного правильного понимания : " Нет команд для операций непосредственно над содержимым ячеек памяти, чтобы что-то с ними сделать, надо выгрузить значение в регистр "

теперь все получилось! УРААААААА!!!

Alexeyslav, С П А С И Б О ОГРОМНОЕ!!!

еще надо будет попробовать с регистрами Х, Y, Z....

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Добрый вечер. Такой вот вопрос от начинающего.

При подключенном питании к дисплею WH1602B на выводах 4 (RS), 5 (R/W), 11-14 (D4, D5, D6, D7) напряжение 5 В. При этом вся нижняя сторока засвечена. Вопрос: это нормально?

post-48557-076609300 1286725480_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

из прочитанной мною литературы я понял что r26 это одно и то же что XL ? т.е. я понял что в проге можно писать и то и другое , но почему например на строчку " mov r2 , r26 " компилятор ошибку не выдает, а на " mov r2 , XL " показывает ошибку.?

Ссылка на комментарий
Поделиться на другие сайты

потому что в литературе используют свои обозначения. в своей программе можешь использовать свои определения для регистров (директива DEFINE) или назначит ему такое имя как в книжке, тогда ошибки не будет.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Подскажите, что означаетнадпись обведеная красным (скрин из даташита на mega16)? Нужно припаивать нижнюю часть к общему проводу? Это обязательно?

post-6787-023982500 1287040188_thumb.jpg

С уважением, Дмитрий

Ссылка на комментарий
Поделиться на другие сайты

 Нужно припаивать нижнюю часть к общему проводу? Это обязательно?

post-6787-023982500 1287040188_thumb.jpg

Буквальный перевод надписи.

"Примечание:

Нижний контакт должен бытьприпаян к земле."

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Как вы себе это представляете? Микросхема не выдержит такого издевательства. Скорее всего достаточно пружинящего контакта.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Нижняя часть. Вообще-то, это означает что там как минимум должна быть площадка фольги подключенная на общий для экранирования кристалла. Причем, не абы где - а минимальным путем к контакту общего провода контроллера.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Как вы себе это представляете? Микросхема не выдержит такого издевательства. Скорее всего достаточно пружинящего контакта.

Ничего необычного в пайке термопада нет. Практически все QFN, DFN корпуса паяют в печке или феном. И при этом паяется земляной полигон внизу корпуса. Как пример можно привести трансивер CC1100 Техаса или драйвер МОСФЕТов uCC27324 той же фирмы. Последнюю микросхему вообще нельзя эксплуатировать без припаянного термопада. Она попросту сгорит. Корпус размером 3х3 мм способен рассеять 3 ватта..., ессно, что без термоконтакта он сгорит в первые несколько секунд работы...

Впрочем и трансивер тоже не заработает без паяного основания... Но уже по сигнальным соображениям.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Практически все QFN, DFN корпуса паяют в печке или феном
Не у всех есть такое оборудование.
(скрин из даташита на mega16)
Вроде АТмеги так сильно не греются, если их, конечно, не заводить на слишком высоких частотах и не снимать слишком большой ток с выводов.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Практически все QFN, DFN корпуса паяют в печке или феном
Не у всех есть такое оборудование.
(скрин из даташита на mega16)
Вроде АТмеги так сильно не греются, если их, конечно, не заводить на слишком высоких частотах и не снимать слишком большой ток с выводов.

Причем тут нагрев?

Речь идет о высокочастотной топологии. Хотите уверенной работы МК в условиях помех - делайте как написано в даташите.

Есть допустимая температура и время пайки термопада. Указана в даташите. Фен (технический) никакая не экзотика и его стоит иметь если применяете такие корпуса. А уж демонтаж микросхем с ним вообще плевое дело...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

помогите пожалуйста разобраться:

Вот начало задачи: " наша программа будет просто включать СИД и удерживать его в этом состоянии. Прежде всего, необходимо определить входы и выходы. В этом проекте нам потребуется только один выход, в качестве которого будем использовать вывод RB0. "

почитав теорию я написал такой код:

ldi r16 , 0b11111110

out DDRB , r16 ; т.е.используется только один вывод туда и пишем 0, в остальные 1чки

в учебнике же написан ответ:

ser r16

out DDRB , r16

как я понимаю это ж не одно и то же! в этом случе устанавливаутся все 1чки и получается что ни один вывод не задействован...

Правильна моя логика?

Ссылка на комментарий
Поделиться на другие сайты

Запись в регистр направления DDR лог. 1 превращает его в выход, а лог. 0 превращает в вход

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Когда снова появился интерес к усилителям, тоже хотел всех обмануть, попробовал 7294 в разных схемах, 3886 тоже несколько способов приготовления, вроде и неплохо играет, если ничего другого не слушал, годится. Но червячок сподвиг сделать Натали Хоум, УХ! челюсть отвисла, наслушаться не мог, узнал, что такое сцена в звуке, динамика, детальность, да всё лучше. Вот я всегда и спрашиваю, по сравнению с какими другими УМ играет хорошо расхваливаемый усилитель.
    • @Armenn Хорошо. Сделал резистор на 5 Ом.  Результата два. 1. Если включить блок питания в сеть, а уже потом подключить резистор на 5 Ом в фиолетовый провод, тогда резистор просто будет греться.  2. Если подключить резистор на 5 Ом в фиолетовый провод, а уже потом включить блок питания в сеть, тогда случится следующее: лампочка предохранителя от КЗ засветится (через которую я подключаю БП в сеть), а блок питания начнет пищать. Заснял это на видео -   
    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде. Проверьте монолит 2,12мм, я таким мотаю СТ. Интересно-что там с ним делается на частотах от 30 до 50кГц? Длинна провода примерно 2 метра-На сердечник Е70 влазит 18 витков
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
  • Похожий контент

×
×
  • Создать...