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

Асемблер Для Мк Avr Подскажите Плз


HOT ICE

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

РАботает только вот не особо правильно:

1)Нужно держать кнопку нажатой чтоб начали светиться светодиоды ровно столько же сколько они после этого светяца) Тоесть если они должны светица 1 мин то для этого нужно держать кнопку 1 мин и после этого они начнут светицо(

2)Я так и не понял как на Асемблере выщитавать задержку если делать её програмно,Частота кварца 12000000 нужна задержка 1минб30 сек

3)Объясни пожалуйста что это за функцыи?:

,high(RAMEND)

out SPH,

,low(RAMEND)

out SPL,

???

Я таких в книге не нашол

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

1) а я тебе сразу сказал, работать будет, но задом-наперёд. Потому, как сама логика программы неправильна.

sbic PinD,4 означает "пропустить следующую команду, если 4 разряд PinD равен нулю". Таким образом при отпущеной кнопке у тебя постоянно происходит переход на ledon, и задержка. А так как задержка большая, то чтобы прога словила нажатие кнопки её придётся держать долго.

3) high(RAMEND) и low(RAMEND) возвращают старший и младший байты от значения RAMEND. RAMEND - это последний адрес ОЗУ. Константа RAMEND определена в файле m8def.inc. Можешь заглянуть в него и посмотреть, чего там ещё есть.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1) а я тебе сразу сказал, работать будет, но задом-наперёд. Потому, как сама логика программы неправильна.

sbic PinD,4 означает "пропустить следующую команду, если 4 разряд PinD равен нулю". Таким образом при отпущеной кнопке у тебя постоянно происходит переход на ledon, и задержка. А так как задержка большая, то чтобы прога словила нажатие кнопки её придётся держать долго.

всёравно не понимаю,если переход на ледон проискодит даже если кнопка не нажата то почему светодиоды не светяца постоянно?

Ведь когда я вкл питание светодиоды не светяца а делают это только после удержания кнопки

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

Что и требовалось доказать....

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

ledon:

cbi PortB,1;вкл СИд

sbi PortC,2;А это тот который через полевик

Выводишь на B1 ноль!! Как он у тебя загориться, если второй конец светодиода тоже на нуле???

То же самое с полевиком.

Ну ёлы-палы!! Это ж элементарная невнимательность!!!

Переверни все cbi на sbi и наоборот.

ps: кстати, про резистор 100...200 Ом в цепи светодиода не забыл? - а то рискуешь спалить вывод В1.

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

Я не знаю блин может у меня какието глюки с виндой а из за этого и компилятором какимто образом,но все светодиоды светяца когда нажимаю кнопку(когда нет не светяца исходное положение кнопки не нажата),но для этого просто кнопку нужно подержать ровно столько же сколько и будут светодиоды светица(((

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

это в железе или в симуляторе ?

если в железе может с питание косяк ? и при нажатии паразитное лезет ?

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

это в железе или в симуляторе ?

если в железе может с питание косяк ? и при нажатии паразитное лезет ?

В железе,питание от 3х пальцев,паразитного нет вроде

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

Я не знаю блин может у меня какието глюки с виндой а из за этого и компилятором какимто образом,но все светодиоды светяца когда нажимаю кнопку(когда нет не светяца исходное положение кнопки не нажата)...

Никаких глюков здесь нет. Внимателней надо быть. В твоём варианте ошибки две и они взаимоисправляют друг друга (частично).

А именно:

1) вместо sbic PinD,4 должно быть sbis PIND,4

2) везде, где вывод на зажигание/выключение, перевёрнута полярность.

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

Я не знаю блин может у меня какието глюки с виндой а из за этого и компилятором какимто образом,но все светодиоды светяца когда нажимаю кнопку(когда нет не светяца исходное положение кнопки не нажата)...

Никаких глюков здесь нет. Внимателней надо быть. В твоём варианте ошибки две и они взаимоисправляют друг друга (частично).

А именно:

1) вместо sbic PinD,4 должно быть sbis PIND,4

2) везде, где вывод на зажигание/выключение, перевёрнута полярность.

Привет!Спасибо за помощь!Всё работает :rolleyes: !Там ещё одна ошибка была "rcall d"нужно было писатьпосле строчек которые вкл светодиоды,а у меня перед было написано!Теперь я разобрался!Спасибо!

Единственное я так и не понял как выщитать задержку без таймера подскажеш?

Частота кварца 12000000

Задержка нужна 1 мин30сек или 90 сек

12000000/

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

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

Loop:

subi delay,1;вычитаю 1 из делаи

sbci delay2,0;вычитаю 1 из делаи 2 если флвг С=1

brcc loop;возвращаюсь в лоп если флаг C сброшен

и поделить нужное время на результат. Тогда получим значение, которое надо забить в delay:delay2

...щас пощитаю

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

subi delay,1 - 1 такт

sbci delay2,0 - 1 такт

brcc loop - 2 или 1 (вот тут я задумался... надо проверить). Скорей всего 2, когда выполняется переход и 1, когда идем дальше.

Итого 4 такта. При 12МГц один такт выполняется за 0.083333333... мкс, округлим маленько =0.0833мкс. Один цикл=4*0.0833 = 0.3332мкс. 90сек/0.3332*1000000=270108043 Во как!!! Тут двумя байтами delay не обойдёшься, нужно аж четыре!!

На самом деле таким идиотизмом никто не занимается. Для этого есть таймеры.

ps: Странно, а как это у тебя получалась одна минута :huh: Вроде я не мог на столько ошибиться...

...Вот так получается 90сек:

.........
.def delay = r18
.def delay2 = r19
.def delay3 = r20
.def delay4 = r21
.equ c_time = 180072028;для 90сек
...............
_delay:
	ldi  delay,low(c_time)
	ldi  delay2,byte2(c_time)
	ldi  delay3,byte3(c_time)
	ldi  delay4,byte4(c_time)
_loop:
	subi  delay,1
	sbci  delay2,0
	sbci  delay3,0
	sbci  delay4,0
	brcc  _loop
	ret

ps: решил от нечего делать в симуляторе проверить... Дык два часа этот кусок крутился!!! Это на 2-х ядернике. Блин зараза этот АВРстудио, второе ядро совсем не использует :angry:

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

Ок попробую чуть поже зашить!Если тебе не трудно роспиши пожалуйста что зачем ты пишеш,и росщёты.

Да кстатти я заливал туда задержку предыдущую так оно длилось 2мин и 15 сек))И если выкл питание а потом опять вкл то отщет времени продолжается с места розъеденения)Нужно програмный сброс делать.\

Я так писал в конце строки Init

clr delay

clr delay2

clr delay3

clr delay4

Но не пашет

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

Супер всё отлично работает,единственное что не сбрасываеца,когда вкл то начинается отщет с того момента где откл)

Просто понимаеш я спрашиваю примеры чтоб разбираца,а ты пощитал это супер СПАСИБО!Но я не могу всёравно понять как ты щитал и какие коды использовал

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

Пожалуйста скажите как узнать за сколько времени вполняеца один такт?Что на что делить?

Чтото я жостко торможу

Единицу дели на тактовую частоту, не прогодаешь ;) .

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

1/12МГц = 0.083333333... мкс - это один такт. Команды бывают разные, некоторые выполняются за 1 такт, некоторые за 2 или больше... Считаем, сколько всего тактов надо для выполнения одного цикла подпрограммы задержки:

subi delay,1 - 1 такт

sbci delay2,0 - 1 такт

sbci delay3,0 - 1 такт

sbci delay4,0 - 1 такт

brcc _loop - 2 такта

Итого: 6 тактов. (Я не учитываю команду ret и то, что в последнем цикле brcc _loop выполнется за 1, а не 2 такта, но это микроскопическая неточность и ей в данном случае пренебрегаем)

Значит один цикл ПП задержки займёт 6тактов*0.0833мкс = 0.4998мкс

Делим твои 90сек на 0.4998мкс : 90/(0.4998*0.000001)=180072028

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

1/12МГц = 0.083333333... мкс - это один такт. Команды бывают разные, некоторые выполняются за 1 такт, некоторые за 2 или больше... Считаем, сколько всего тактов надо для выполнения одного цикла подпрограммы задержки:

subi delay,1 - 1 такт

sbci delay2,0 - 1 такт

sbci delay3,0 - 1 такт

sbci delay4,0 - 1 такт

brcc _loop - 2 такта

Итого: 6 тактов. (Я не учитываю команду ret и то, что в последнем цикле brcc _loop выполнется за 1, а не 2 такта, но это микроскопическая неточность и ей в данном случае пренебрегаем)

Значит один цикл ПП задержки займёт 6тактов*0.0833мкс = 0.4998мкс

Делим твои 90сек на 0.4998мкс : 90/(0.4998*0.000001)=180072028

Огромнейшее спасибо тебе!!!!!!Теперь я всё понял.Спасибо

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

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

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

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

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

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

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

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

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

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

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

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...