 |
|
|
|
| Автор |
Сообщение |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 03 Май 2007, 10:33 Заголовок сообщения: |
|
|
123...
Поправил ... сайтик переделал .. вот ссылка и умерла.
http://andryg.ho.com.ua/contents/test/addons/ns182.bin
day177
Не проглядел ... я добавил утром Ну пошутил немного ... всё одно уберу позже эти посты.
На счет RTC в реале -- скорее всего не завелась микросхема - вот время и не считает .. читал не помню где ... там хитрости есть по ее заоду ... посмотри внимательно схему с набора ns182 ... там критична емкость пар. кварцу, критична емкость кварца и, вроде, нужно одну ногу кварца обязательно на питание прицепить .... НО Я НЕ УВЕРЕН!!! ПОСМОТРИ СХЕМУ _________________ AndryG |
|
| Вернуться к началу |
|
 |
Zas Знатный посетитель (>20)


Зарегистрирован: 04.02.2007 Сообщения: 44
|
Добавлено: 03 Май 2007, 10:53 Заголовок сообщения: |
|
|
Делание из 2х байтов одно слово:
Добавлено:
С начала помещаем в двойную переменную младший байт, потом сдвигаем его на 8 битов - итого он в первом байте 2х байтовой переменной. Потом прибавляем старший байт. Он во 2м байте.
Нет это не ошибка. Младший байт в первом байте, старший во 2м.
Т.е. число 0x0A0B в памяти хранится как:
0B 0A
Кажецца все.
З.З.З.Ы.
От себя добавлю одно. Программируя в WinAvr мне не давали напрямую сделать z = x<<8+y.
Необходимо разбить на 2 етапа:
Последний раз редактировалось: Zas (03 Май 2007, 14:44), всего редактировалось 4 раз(а) |
|
| Вернуться к началу |
|
 |
banzayy Живет здесь... (>100)


Зарегистрирован: 12.09.2006 Сообщения: 287 Откуда: Луганск
|
Добавлено: 03 Май 2007, 15:04 Заголовок сообщения: |
|
|
Решилось всё просто
z=x;
y=(x>>8);
Т.к. однобайтному числу присваивается двубайтовое значение, то старший бай попросту теряется при присвоении.
Всем спасибо |
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 03 Май 2007, 15:50 Заголовок сообщения: |
|
|
Я привел еще более простое решение на 4 поста выше
http://www.remexpert.com/forum/viewtopic.php?p=6245#6245
Вы выполняете операции (сдвиг) -- тем самым тратите время и ресурсы ... я же предалагал прямую адресацию к нужному байту!
Никаких лишних ресурсов не используется. Адрес вычисляется на этапе компиляции.
Ваше решение нелья назвать "красивым" или "правильным" ... скорее "допустимым" _________________ AndryG |
|
| Вернуться к началу |
|
 |
day177 Знатный посетитель (>20)


Зарегистрирован: 25.12.2006 Сообщения: 51 Откуда: Тула
|
Добавлено: 04 Май 2007, 8:53 Заголовок сообщения: |
|
|
Таки завелась PCF8583 - тикает. В чем было дело непонятно
Опять вопросы:
1. Опрос часов происходит в прерывании, но из-за этого возникает мерцание индикаторов. Как с этим бороться???
соображение по этому вопросу: прерывания происходят слишком часто, нужно сделать их реже. Например использовать вывод INT (нога 7) PCF-ки, чтобы вызывать внешнее прерывание раз в секунду и в этом прерывании считывать текущее время. Или же есть еще варианты?
2. Как организовать мигание точки после младшего разряда часов для индикации хода?
соображение: дописать в знакогенаратор символ точки и выводить его например при условии seconds%2=0 - выводим иначе не выводим...
В общем как-то так
Последний раз редактировалось: day177 (04 Май 2007, 10:20), всего редактировалось 1 раз |
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 04 Май 2007, 9:31 Заголовок сообщения: |
|
|
DAY177 учится не хочет
Как человек с педагогическим образованием я за Вас возьмусь
Давайте менять репродуктивный подход на проблемный.
Отредактируйте Ваш предыдущий пост ...
Вы описали проблему... добавьте ВАШИ соображения о причине, последствиях, возможных вариантах решениях ... Мы поможем выбрать стоящее и довести идеи до конкретных действий...
Вы написали вопрос ... добавьте ВАШИ мысли по сему поводу ... опишите задачу на более элемнтарном уровне и Вы увидите решение ... или мы подскажем немного и Вы точно увидите!
Научится - это не "знать ответы на вопросы" ... научится - это "уметь НАХОДИТЬ ответы на вопросы" ... так что давайте учится заниматься поиском, а собирать пары "вопрос-ответ".
____
P.S.
Ваши вопросы просты и решение их - пара строк кода ... но я думаю. что вы будете больше довольны. если это будут ВАШИ строки! _________________ AndryG |
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 04 Май 2007, 11:11 Заголовок сообщения: |
|
|
Не хотите вникать .. сразу на форум стучитесь ... пробуйте максимально сами рассмотреть проблему - максимально точно описать (хоть в голове хоть на листе хоть на мониторе) .. тогда и решение придет
| Цитата: |
1. Опрос часов происходит в прерывании, но из-за этого возникает мерцание индикаторов. Как с этим бороться???
соображение по этому вопросу: прерывания происходят слишком часто, нужно сделать их реже. Например использовать вывод INT (нога 7) PCF-ки, чтобы вызывать внешнее прерывание раз в секунду и в этом прерывании считывать текущее время. Или же есть еще варианты?
|
Прерывания идут и пусть себе идут с указаной частотой.
Опрос часов идет в прерывании.
Опрос часов занимает много времени -- больше, чем период прерыания ... посему прерывания "накладываются" - одно еще не отработало, а тут второе просится! Но так-как прерывания запрещаются при входе в обработку прерывания, то второе "наложившееся" прерывания у нас пропадает - отсюда и моргания.
Варианты сами просятся ...
- (1)увеличить период прерывания (Вы предлагали)
- (2-А)укоротить обработку прерывания (укоротить время опроса)
- (2-Б)вообще убрать опрос с прерывания (и вообще нужно ли он (опрос) именно здесь?)
- (3)разрешить вложенность прерываний ... даже если одно не отработало - пусть второе обрабатывается.
Анализируем варианты:
- (1)впринципе решает проблему, но тогда развалится динамическая индикация - не подходит
- (3)так-как прерывания генеррируются всё время работы программы, то мы получаем лавинный процес - уже настораживает. При каждом входе в обработку прерывания контроллер расходует память на стек (сохр. регистров и т.д.) .. если процес лавинный, то памяти нужно бесконечное к-во -- су нас немного меньше - не подходит.
-(2-А)ужать время опроса трудновато - протокол обмена имеет свои временные характеристики - не подходит
-(2-Б)А для чего вообще опрос я запихнул в прерывание? Для того, что бы он проводился с указанной периодичностью.
Если перенести опрос часов в основной цикл, то опрос будет происходить постоянно. А если для опроса использовать"флаг старта опроса" ... в прерывании я поднимаю флаг ... а уже в основном цикле смотрю на флаг .. можно - опрашиваю и сбрасываю флаг ... и жду следующего разрешения? Идея!
Опрашивать часы чаще 1-2 раз в секунду бесполезно ... прерывание у меня вызывается каждые 20мс ... значит можно поднимать флаг каждое 50-е прерывание.
Следует также запомнить, что нельзя поднимать флаг быстрее длительности опроса, иначе пять получу "накладывания".
| Цитата: |
2. Как организовать мигание точки после младшего разряда часов для индикации хода?
соображение: дописать в знакогенаратор символ точки и выводить его например при условии seconds%2=0 - выводим иначе не выводим...
|
Сию задачу можно разбить на две:
-(1) вывод числа с точкой и без точки
-(2) попеременный вывод обоих вариантов.
Анализ:
(1) напрашивается сразу два варианта: либо сотворить два знакогенератора "с точками" и "без точек" либо завести флаг "нужна точка" и по этому флагу модифицировать не сам знакогенератор, а переменную, куда мы считываем с знакогенератора значение для сдвига.
(2) попеременный вывод ... в прерывании таймера заводим переменную-счетчик ... каждый раз ее плюсуем ... и дальше делим - смотрим остаток, если равен нулю, то обнуляем счетчик и делаем что надо и т.д. .. тут всё ясно. ... хотя .... пишем в столбик значения этой перменной ...
[code]
0000
0001
0010
0011
0100
0101
0110
0111
1000
...... Получается, что каждые 4 плюсовки младшие два бита равны 00. а каждые 8 плюсовок младшие три бита 000
значит можно проверять просто младшие биты и всё! и не нужно обнулять ничего - счетчик будет по кругу крутится и всё!
Уже меньше кода.
А еще прикол! второй (от нуля) бит 4 раза нолик. потом 4 раза единица ... чем не флаг для моргания точкой! (хотя тустовато моргать будет .. надо 4 или 5 бит брать)
[code]
Объедияем ... заводим счетчик, который будем постоянно в прерывании "+1" ... после вытягивания с знакогенератора маски для вывода в индкатор смотрим на нужный (зависит от частоты ) бит счетчика ... если 0 - ничего не делаем, если 1 - то в маске добавляем 1 в битик, который за точку отвечает.
УСЁ!
Я ожидал примерно такое. И не ленитесь писать ... думаете мне не лень?  _________________ AndryG |
|
| Вернуться к началу |
|
 |
day177 Знатный посетитель (>20)


Зарегистрирован: 25.12.2006 Сообщения: 51 Откуда: Тула
|
Добавлено: 07 Май 2007, 8:51 Заголовок сообщения: |
|
|
По поводу проблемы мерцания.
Опрос RTC сделал раз в секунду, при этом осталось моргание (на время опроса и считывания времени) – следствие использования шины i2c. Совсем побороть эту проблему видимо невозможно. Жаль
По поводу моргающей точки.
Были рассмотрены такие варианты:
1) Проверять какое-то условие и по соблюдению такового выводить точку, т.е. динамически выводим часы, минуты, точку – и так по кругу, пока условие соблюдается. Как только условие перестало выполняться – выводим только часы и минуты. Для всей индикации используются две функции – одна: получение десятков и единиц, вторая: вывод на индикатор цифры.
2) Проверять какое-то условие и по соблюдению такового выводить точку, но не просто отдельно точку, а модифицируя буферную переменную, хранящую значение из знакогенератора. Здесь уже используется три функции: первая – получение десятков и единиц для двух левых знаков, вторая: получение десятков и единиц для двух правых знаков, третья: вывод на индикатор цифры. Минус: больше кода.
3) Проверять какое-то условие и по соблюдению такового выводить точку, но не просто отдельно точку, а дописать второй знакогенератор с точками. Здесь также используется три функции: первая – получение десятков и единиц для двух левых знаков, вторая: получение десятков и единиц для двух правых знаков, третья: вывод на индикатор цифры. Минус: больше кода, наличие двух знакогенераторов.
Все три варианта работают. Вопрос: какой вариант из трех более предпочтительный? |
|
| Вернуться к началу |
|
 |
urry Живет здесь... (>100)


Зарегистрирован: 23.10.2006 Сообщения: 243
|
Добавлено: 07 Май 2007, 9:02 Заголовок сообщения: |
|
|
| day177 писал(а): | По поводу проблемы мерцания.
Опрос RTC сделал раз в секунду, при этом осталось моргание (на время опроса и считывания времени) – следствие использования шины i2c. Совсем побороть эту проблему видимо невозможно. Жаль
|
Можно. Напишите свою процедуру работы с шиной,куда вставьте регенерацию разрядов дисплея.
Точка - это всего лишь разряд в знакогенераторе - смысл ставить еще что то ??? Если есть точка - значение знакогенератора +80н или сколько там. _________________ меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн) |
|
| Вернуться к началу |
|
 |
day177 Знатный посетитель (>20)


Зарегистрирован: 25.12.2006 Сообщения: 51 Откуда: Тула
|
Добавлено: 07 Май 2007, 9:29 Заголовок сообщения: |
|
|
| Цитата: | | Можно. Напишите свою процедуру работы с шиной,куда вставьте регенерацию разрядов дисплея. |
Спасибо за идею
| Цитата: | | Если есть точка - значение знакогенератора +80н или сколько там. |
в одном из отработанных вариантов так и сделано
| Цитата: | | Точка - это всего лишь разряд в знакогенераторе - смысл ставить еще что то??? |
вся "закавыка" в том чтобы отобразить точку в нужном месте - вот и пришлось изворачиваться
кстати вопросец: в даташите на PCF написаны адреса ячеек памяти типа 08h, FFh и т.п. Как записываются эти адреса в CV при использовании функции типа unsigned char rtc_read(unsigned char chip, unsigned char address)? Т.е. в проге я пишу rtc_read(0,???) - что должно быть вместо знаков вопроса при обращении например к ячейке 0Fh? |
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять вложения в этом форуме Вы можете просматривать вложения в этом форуме
|
|