Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
13.06.2012, 23:00
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
miwutka, а что это вообще программа должна делать? Опишите вкратце логику программы.
Последний раз редактировалось Flopix; 13.06.2012 в 23:11.
|
|
|
|
13.06.2012, 23:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Сообщение от Flopix
|
miwutka, а что это вообще программа должна делать? Раскажите вкратце что должна делать программа.
|
На сколько я знаю прога должна работать так:
есть кнопка выбора программы для светодиодов(штук 30 примерно). По каждому нажатию запускается своя прога где светодиоды все то пробегут просто, то поморгают как звезды(с разными паузами), то еще чтото в этом роде. Кнопка выбирает свою программу для светодиодов и все. Скажем гирлянда на которой ест ь30 программ и все светодиоды(30 штук) мигают независимо. Чуток понятно рассказал?
|
|
|
|
13.06.2012, 23:22
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
miwutka, предлагаю последовательность состояний светодиодов хранить в массиве. Для записи состояния каждого светодиода служит 1 бит информации. Если взять массив 4 * n байт, то хватит запомнить состояние 32 светодиодов.
В программе будет цикл с определенной паузой. После каждой паузы программа будет брать следующие 4 байта из массива и выводить их значения на порт вывода.
Так можно сделать достаточно компактную программу.
Если сделать массив 3х мерным то можно в нем хранить несколько последовательностей для разных программ мигания.
Последний раз редактировалось Flopix; 13.06.2012 в 23:25.
|
|
|
|
13.06.2012, 23:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Сообщение от Flopix
|
miwutka, предлагаю последовательность состояний светодиодов хранить в массиве. Для записи состояния каждого светодиода служит 1 бит информации. Если взять массив 4 * n байт, то хватит запомнить состояние 32 светодиодов.
В программе будет цикл с определенной паузой. После каждой паузы программа будет брать следующие 4 байта из массива и выводить их значения на порт вывода.
Так можно сделать достаточно компактную программу.
Если сделать массив 3х мерным то можно в нем хранить несколько последовательностей для разных программ мигания.
|
Я так понимаю:
unsigned int a[32]; - немножко не пойму зачем такой массив...
массивы я определю a[0]=0b01010000; a[1]=0b10000010; - и т.д.?
но цикл будет же одного определенного периода. То есть несколько светодиодов будут работать с одинаковой паузой(которые в масиве включены).А мне надо каждый чтоб своей жизнью жил. 30 светодиодов живут типа своей жизнью в 30 программах разных...
Поправьте чего я в массиве не понял...
Последний раз редактировалось miwutka; 13.06.2012 в 23:34.
|
|
|
|
13.06.2012, 23:44
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
miwutka, массив можно объявить например так:
unsigned char [4, 100]
Где 4 - это 4 байта для запоминания состояния 32 светодиодов на определенном шаге, а 100 - это количество шагов (может быть и другим я взял условно).
Светодиоды и будут каждый жить своей жизнью, просто нужно взять более мелкий шаг. Например для 2 светодиодов:
шаг 1: 00 - оба светодиода потушены
шаг 2: 10 - первый горит второй потушен
шаг 3: 11 - оба горят
шаг 4: 01 - первый потух а второй все еще горит
Как видите при таком подходе светодиоды могут загораться/гаснуть как угодно и не синхронно, главное выбрать достаточно мелкий шаг, но тут нужно не перестараться а то массив получится слишком большим и не хватит памяти.
|
|
|
|
14.06.2012, 00:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
а как же паузу выбирать между шагами? Тем же delay? Если ним то это тоже самое по сути...
|
|
|
|
14.06.2012, 00:34
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
miwutka, да delay не проблема, можно самому написать подпрограмму например:
void MyDelay(unsigned int delayVal)
{
for (unsigned int i = 0;i ‹ delayVal; i++)
{
for (unsigned int j = 0; j ‹ 65535; j++);
}
}
Только тут нужно опытным путем подобрать нужное значение задержки в зависимости от частоты контроллера.
|
|
|
|
15.06.2012, 08:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Если нужно обеспечить независимое переключение большого количества источников, то без диспетчера не обойтись. Вариант:
В таймерном прерывании изменяем счетчик. Для каждого элемента управления храним:
-Значение счетчика для включения
-Значение счетчика для выключения
-маску включения
-маску выключения
В основной программе сравниваем текущее значение счетчика с необходимым для каждого элемента и при необходимости устанавливаем/сбрасываем соответствующие биты. Кроме того опрашиваем устройство выбора программы и меняем значения элементов управления. Как-то так.
__________________
misterdi<@>i.ua
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:53.
|
|