Jump to content

Recommended Posts

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

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

Share this post


Link to post
Share on other sites

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

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


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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Новые контролллеры VIPerPLUS - практический вебинар 10 июня от ST

В программе вебинара - новые контроллеры VIPerPlus, расширяющие границы применения этих компонентов. Обзор их характеристик и преимуществ. Практика. Демонстрация испытаний из лаборатории ST. Пример моделирования в среде E-DesignSuite.

Зарегистрироваться

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

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

clr r1

ldi r16 , 1D

mov r2 , r16

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

Share this post


Link to post
Share on other sites
                     

Технология SOI против паразитных эффектов в драйверах затвора

Микросхемы драйверов затвора силовых транзисторов, изготавливаемые по технологии монолитного кремния, подвержены негативному влиянию отрицательных напряжений, возникающих на опорном выводе для верхнего плеча. Технология «Кремний-на-изоляторе» (Silicon-on-insulator, SOI) является надежным решением этой проблемы, о чем свидетельствуют результаты испытаний трех микросхем драйверов затвора полумостовой схемы, в том числе – SOI-драйвера производства Infineon.

Читать статью

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


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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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


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

Share this post


Link to post
Share on other sites

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

" Для прямой загрузки в ячейку памяти используется команда 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 , а мне надо с содержимым ячейки..? вопрос : как обратиться к содержимому ячейки памяти ??

Share this post


Link to post
Share on other sites

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

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

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


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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

post-48557-076609300 1286725480_thumb.jpg

Share this post


Link to post
Share on other sites

это нормально?

Да.


Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

post-6787-023982500 1287040188_thumb.jpg


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

Share this post


Link to post
Share on other sites

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

post-6787-023982500 1287040188_thumb.jpg

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

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

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


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

Share this post


Link to post
Share on other sites

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


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

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

Нет фена, кто мешает микропаяльник купить? Свободно паяются 30 микронные золотые выводы  низкотемпературным припоем.  

Share this post


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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

ldi r16 , 0b11111110

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

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

ser r16

out DDRB , r16

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

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

Share this post


Link to post
Share on other sites

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


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

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

  • Similar Content

    • By MirVsem
      Добрый день.
      Есть интересные модули ибп для слаботочки до 1А.
      m.aliexpress.ru/item/4000109380893.html
       По цене идеально подходит для зоопарка роутеров, IoT устройств... Переключение на резерв (туда-обратно) без просадки. Зарядка литиевой банки как положено, всякие защиты от перегрузки и прочее. Казалось бы все замечательно. 
      НО как всегда не без ложки дёгтя.
       Защита от переразрядки работает неадекватно. Хотя возможно это не сама защита, а повышающий модуль. На пороге ~3в у него срабатывает циклический перезапуск и так пока банка не просядет ниже 3в. Точно померять нечем.
      Из наблюдений. Проверил напряжение переключается с 12в на 9в и щелчки. Естественно нагрузка в это время дико насилуется (роутер свистит минут 5 пока полностю не отключится)
      Вопрос к гуру. Возможно ли что-то доработать в даном модуле чтобы исправить этот досадный баг?
    • By Юлия Михайлова
      Требуються люди умеющие работать с микроконтролерами esp 32 и stm32 , так же будет плюсом опыт работы с raspberry , требования опыт работы не мение 1,5 года , возраст не старше 35 лет , готовы взять на удаленную работу просьба отправлять резюме , и звонить по номеру +380 (68) 227 82 52
    • Guest Роман
      By Guest Роман
      Добрый день, форумчане. Такая задача. Хочу создать несколько устройств на светодиодах. Задача каждого в том, чтобы от движения (датчик вибрации, наклона) светодиод начинал моргать, переливаться и т.д. Подпитывается всё от батарейки, конечно же как можно меньших размеров (таблетка).
      Собственно я уже реализовал такое пробное устройство на ATtiny13, вибродатчике 18015 и батарейке CR1220. Всё работает, но хотелось бы это дело и удешевить и уменьшить в размерах, если это конечно же возможно. Особо в параметрах МК я не разбираюсь, но могу сказать что мне от неё точно нужно:
      1) Маленький размер
      2) Как минимум 1 канал ШИМ (а лучше 3, для переливания трёх светодиодов RGB)
      3) Память на 1Кб (программу для одного такого устройства приложу ниже, может её можно и сократить, но не факт что такую же, но на три диода получится ужать)
      4) Низкое потребление или возможность подключения режимов с низким потреблением.
      5) Работа от 3В. (от таблетки)
      6) Возможность программирования через Arduino UNO (но другие варианты тоже рассматриваю, просто Arduino уже есть)

      Повторюсь пока что нашел и использовал только ATtiny13, который меня вполне устроил, но он достаточно дорогой и в корпусе SOIC его найти достаточно проблематично. К тому же как мне показалось, он слишком хорош для такого проекта. Повторюсь, я чайник, и может есть какие-то более дешевые аналоги.

      Очень надеюсь на Вашу помощь. Заранее большое Вам спасибо!
      Прикладываю обещанный мною код:
      int vib = 4; int led = 0; long loopTime = 5000; void setup() { pinMode(led, OUTPUT); pinMode(vib, INPUT); } void loop() { if (digitalRead(vib)){ unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) { for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } digitalWrite(led, LOW); delay(600); } } }  
    • By Sambler
      У меня была похожая тема,  я решил проблему установив в include util/delay.h
      Но возникла еще одна ошибка, не могу понять, что оно хочет


      p.s. Я обещал, что предыдущая - последняя тема, но я ошибся, не думал, что тут 2 разные программы будут. В этот раз 100 процентов последняя тема и пойду сдавать работы Ы)

       

    • By LemonTV
      Есть картинка из сайта с фьюзами, есть программа avrdude_prog3.3 Как выставить правильно фьюзы чтобы не испортить мк? Незнаю как это сделать есть прямые и инверсные фьюзы, ГДЕ СТАВИТЬ ГАЛОЧКИ И КРУЖОЧЕК НА ПРЯМЫХ ИЛИ ИНВЕРСНЫХ?


×
×
  • Create New...