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

Светомузыка На Pic16F84A


NikolayZ

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

Доброго времени суток!

movf f,d -Содержимое регистра f пересылается в регистр W, если d = 0, и в тот же регистр f, если d = 1. Назначение d=1 имеет смысл использовать для проверки регистра на ноль, покскольку команда изменяет флаг Z (movf Segment_LED_L ,W - так как W=0, то то содержимое регистра Segment_LED_xx пересылаем в W)

а

movlw - Пересылка константы в W, Команда MOVLW загружает в аккумулятор КОНСТАНТУ, которая следует за самой командой.

Это опять моя невнимательность :( (как и с флагом и с сбросом PIN_ST) (наверное сказывается 3-я неделя ночной выхты, еще неделька в ночь и домой :) )

А по последнему замечанию ни как не могу понять :(:(:( Программа состоит как бы из 4-х разделов (это я образно, что бы понять правильность моих мыслей)

по порядку: 1- пп прерываний - в ней мы выводим (зажигаем светодиоды) данные на регистр 74НС595,

2- инициализация (устанавливаем порты, записываем значения в регистр Segmeht_LED_xx,

3- основной алгаритм, здесь мы меняем значение Segmeht_LED_xx

4- "зона " разрешения прерываний- здесь мы просто ждем прерывание? Этот момент я ни как не могу понять до конца

Вы уж простите за мою "недоходчивость", я правда стараюсь понять :wall:

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

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

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

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

movlw - Пересылка константы в W, Команда MOVLW загружает в аккумулятор КОНСТАНТУ,

тогда вопрос :

Segmeht_LED    equ   17
Reg1  equ  18
Reg2  equ   19

movlw 100
movwf  Segmeht_LED 

movlw Segmeht_LED 
movwf Reg1

movf  Segmeht_LED ,w
movwf Reg2

чему будут равны значения в регистрах Reg1 и Reg2?

Программа состоит как бы из 4-х разделов
программа состоит из двух разделов: основной алгоритм и прерывание....

основной алгоритм делится на инициализацию переменных/регистров (или выполнение команд/процедур которые требуется выполнить один раз при запуске МК) и главный цикл ( бесконечное последовательное повторение команд или процедур)....

вам разрешить прерывания нужно всего один раз при инициализации...

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

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

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

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

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

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

Segmeht_LED equ 17

Reg1 equ 18

Reg2 equ 19

movlw 100

movwf Segmeht_LED - запишется значение 100

movlw Segmeht_LED

movwf Reg1 - после выполнения будет 100

movf Segmeht_LED ,w - сохраняем значение Segmeht_LED в аккумулятор = 17

movwf Reg2 - будет 17

----------------------------------------------------------------------------------------------------------------------

Не правильно,да? :unsure:

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

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

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

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

Segmeht_LED equ 17

Reg1 equ 18

Reg2 equ 19

equ - это команда "замены" компилятору

Segmeht_LED equ 17 - означает ничто иное как выражение Segmeht_LED при компеляции заменить на число 17

и

movlw 100
movwf Segmeht_LED

movlw Segmeht_LED
movwf Reg1		

movf Segmeht_LED ,w
movwf Reg2 

будет иметь вид

 movlw 100 ; константу 100 поместить в аккамулятор w=100
movwf 17 ; в регистор с адресом 17 поместить значение аккамулятора регистр№17=100


movlw 17 ; константу 17 поместить в аккамулятор w=17
movwf 18 ; в регистор с адресом 18 поместить значение аккамулятора регистр№18=17

movf 17,w ; значение регистра с адресом 17 поместить в аккамулятор w=100
movwf 19 ; в регистор с адресом 19 поместить значение аккамулятора регистр№18=100

как-то так...

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

Здравствуйте! Спасибо за пояснение, очень доходчиво показали.

Вроде все исправил, прерывание теперь в инициализации, основной цикл сделал по вашему примеру, посмотрите пожалуйста, сейчас нормально?

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

нормально... осталось только задержку допилить....

pause:
  movwf	 Reg_1
wr   btfss FLAG, mc_1
  goto wr
  bcf FLAG, mc_1
  decfsz	 Reg_1, F
 goto wr
return

добавить в прерывание установку флага

bsf FLAG, mc_1

и вызывать как

movlw .100 ; мс - задержка в пределах 5...255 миллисекунд
call pause

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

Прошу прошенья, опять моя невнимательность, выложил не тот архив (старый)

Вот правельный, с схемой в протеусе, в симуляции все работает :dance2::D :D :D

нормально... осталось только задержку допилить....

pause:
movwf	 Reg_1
wr btfss FLAG, mc_1
goto wr
bcf FLAG, mc_1
decfsz	 Reg_1, F
goto wr
return

добавить в прерывание установку флага

bsf FLAG, mc_1

и вызывать как

movlw .100 ; мс - задержка в пределах 5...255 миллисекунд
call pause

А это флаг чего??? Что то я совсем не пойму :(

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

А это флаг чего??? Что то я совсем не пойму :(

флаг того что прошла одна милисекунда....

в описание переменных добавляете

FLAG EQU	 17h
; ----------- биты регистра FLAG
mc_1 EQU	 1h ; - флаг одна 1мс

а ваша задержка не дает 0,1сек... она у вас больше...

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

Вы извините за "трудность", но я все равно не могу понять...

Сначала мы присваиваем FLAG регистр 17h,

Потом в инициализации (INIT) мне нужно записатисать в него число - .100 (это 01100100) - это и будут -Биты регистра флаг? правильно понимаю?

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

нет FLAG - регистр в котором храним флаги каких либо событий и директивой

mc_1 EQU 1h указали название флага, те флаг mc_1 определили как бит1 регистра FLAG.... при инициализации регистру FLAG ненужно ничего присваивать...

число 100 вы заносите в аккумулятор и вызываете процедуру пауза...

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

Блин.... Объясните пожалуйста еще раз про флаг и mc_1 EQU 1h, я не могу понять как, зачем и почему :(

В протеусе красиво мигают :) (только что посмотрел), но есть наложение при сдвиге в лево (захватывается 4-й сдвиговый регистр), при сдвиге в право, такого нет

Не могу посмотреть в реальном времени, протеус пишет "Не могу отобразить в реальном времени, процессор загружен на 99%"

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

Не могу посмотреть в реальном времени, протеус пишет "Не могу отобразить в реальном времени, процессор загружен на 99%"

меняйте процессор :) , у меня на пьне D915 идет в реале + жена на втором монике киношку в онлайн смотрит... :)

и протез загружен 12%...

там где захватывается 4-й регистр это не глюк , а выполняется кусок кода написанный вами , я его не удалял , а дописал свой...

ну что тут объяснять , вы написали задержку на 0,1сек pause на двух счетчиках используя генератор кода...

если в прогамме нет прерываний ваша задержка в 100000маш.циклов*1мкс=0,1с выполняется правильно, но прерывания возникают каждые 1000маш.циклов, те в процессе выполнения задержки прерывание возникнет 100раз , время прерывания примерно 260маш.циклов , те ваша задержка увеличится на 26000 маш.циклов и составит 0,126сек... 25% ошибки

используя флаг устанавливаемый в прерывании мы уменьшаем счетчик Reg1 на 1 каждую 1мс. те при установке счетчика в 100 получим 100мс + 400\500мкс на проверку флага и на декримент счетчика ошибка < 1%

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

процессор поменять не выйдет, у меня ноут бук:-) уже старенький конечно, но зато у него есть сом порт (через слот расширения, пробовал ради интереса прошить пик на других ноутах, через свой адаптер, не получалось, а со своего бука прошиваю спокойно) есть еще на работе "гетакс"- бук просто сказка, и сом и лпт есть, не боится ни воды не грязи(правда тоже старенький,еще 4 пень стоит) но его отдали на время другой лужбе...

про разъяснение спасибо:-) я потом убрал ту бяку, что написал и все замигало красиво:-) ( хоть и медленно). Счастью нет придела:-)

А как теперь к музыке привязаться? Нужно еще одно прерывание делать?

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

Или просто активацию музыкой, а когда звука нет, просто какой нить эффект...

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

А как теперь к музыке привязаться? Нужно еще одно прерывание делать?
как уже говорилось у 84а нет АЦП , те нужно или сделать внешний АЦП или псевдо АЦП

в первом случае к 4-5 выводам подключить резистивную матрицу R-2R и сравнивать с сигналом внешним компаратором, полученные данные пропускаем через ЦФ(цифровой фильтр используем простейший НЧ фильтр) и выводим в 595 регистр ....

во втором случае сигнал заводить на пин МК и тупо каждую 1мс значение на пине, складывать 16 значений , если уровень сигнал будет большой, будет больше лог.1, если малый будет больше лог.0, в итоге получим данные с диапазоном 0-16 , полученное значение пропускаем через ЦФ и выводим в 595 регистр

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

Эээ... так, ладно...

про то что у 84 нет ацп, это я помню (Вы говорили в начале темы). прлучается с прошивкой больше ничего делать не нужно, только дописать эффектов побольше и все?

ацп и псевдо ацп это просто схемы? (в смысле что прошивать не нужно ничего)

Где можно посмотреть эту схемку, и какую лучше использовать?

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

ацп и псевдо ацп это просто схемы? (в смысле что прошивать не нужно ничего)

Где можно посмотреть эту схемку, и какую лучше использовать?

это не только схемы , это еще с программная часть МК , лучше АЦП , схему если получится вечером выложу...

хотя самым правильным будет взять МК с АЦП на борту тот же pic12f675 ...

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

У меня есть пара pic12F675, но с ними я еще не работал (куда там, если я с 84 еще не разобрался совсем...)

Спасибо за схему, буду ждать

С 675 сильно сложно? Скачал мануал, сижу читаю... В описании написанно что у него 4 АЦП )

Скажите, на нем можно сделать такую же "моргалку" как на видео?

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

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

нынешний код с 84 переносится на 675 с минимальными изменениями

АЦП у него один , переключается на разные выводы

принципиально можно

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

Доброго времени сток,еще раз.

В общем попытался переделать под 675 (почитал мануал на русском, + рядом на аглицком), честно говоря запутался сильно, с 84А было полегче, с 675 вообще ужас...

Взял часть программы (до разрешения прерываний), попробовал переписать под 675, в итоге куча предупреждений и ошибок :( С портами ввода вывода вообще пока не понятно( сижу читаю мануал с начала... но похоже без объяснений понять будет тяжело :( жалко самоучителей по 675-м нет как для 84А....)

Похоже переоценил я свои способности :unsure:

Прикладываю архив с моей попыткой переделать.... может хоть что то правильное там есть... (готов к моральным :vava: )

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

В общем попытался переделать под 675 (почитал мануал на русском, + рядом на аглицком), честно говоря запутался сильно, с 84А было полегче, с 675 вообще ужас...

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

все сделали практически правильно, но есть пару замечаний:

1. регистры сохранения контента - нужен другой адрес ,

2. биты конфигурации пишим , а не ставим магические числа... названия битов берем из P12F675.INC

3. пин GP3 не может быть выходом....

4. а кучу предупреждений выдает потому что удалили строку :

errorlevel -302 ; suppress message 302 from list file

блокировка предупреждений о контроле Банков памяти регистров

заготовки кода для пиков лежат в папках мрлаба:

c:\Program Files\Microchip\MPASM Suite\Template\Code\ для 675-го файл: 12F675TEMP.ASM

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

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

вечером попробую все исправить ( днем сплю, ночью работаю и так уже 3 недели, голова плоховато по ночам думает..., еще неделя и домой к семье :-) )

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

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

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

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

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

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

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

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

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

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

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

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