Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Микроконтроллеры начинающим
На страницу Пред.  1, 2, 3 ... 9, 10, 11, 12, 13, 14  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Zas
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 04.02.2007
Сообщения: 44

СообщениеДобавлено: 03 Май 2007, 10:53    Заголовок сообщения: Ответить с цитатой

Делание из 2х байтов одно слово:
Код:
var = x<<8+y;


Добавлено:
С начала помещаем в двойную переменную младший байт, потом сдвигаем его на 8 битов - итого он в первом байте 2х байтовой переменной. Потом прибавляем старший байт. Он во 2м байте.
Нет это не ошибка. Младший байт в первом байте, старший во 2м.
Т.е. число 0x0A0B в памяти хранится как:
0B 0A
Кажецца все.

З.З.З.Ы.
От себя добавлю одно. Программируя в WinAvr мне не давали напрямую сделать z = x<<8+y.
Необходимо разбить на 2 етапа:
Код:
z = x<<8
z += y


Последний раз редактировалось: Zas (03 Май 2007, 14:44), всего редактировалось 4 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
banzayy
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 12.09.2006
Сообщения: 287
Откуда: Луганск

СообщениеДобавлено: 03 Май 2007, 15:04    Заголовок сообщения: Ответить с цитатой

Решилось всё просто

z=x;
y=(x>>8);

Т.к. однобайтному числу присваивается двубайтовое значение, то старший бай попросту теряется при присвоении.
Всем спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 03 Май 2007, 15:50    Заголовок сообщения: Ответить с цитатой

Я привел еще более простое решение на 4 поста выше
http://www.remexpert.com/forum/viewtopic.php?p=6245#6245

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

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

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
day177
Знатный посетитель (>20)
Знатный посетитель (>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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
day177
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.12.2006
Сообщения: 51
Откуда: Тула

СообщениеДобавлено: 07 Май 2007, 8:51    Заголовок сообщения: Ответить с цитатой

По поводу проблемы мерцания.
Опрос RTC сделал раз в секунду, при этом осталось моргание (на время опроса и считывания времени) – следствие использования шины i2c. Совсем побороть эту проблему видимо невозможно. Жаль Грусть

По поводу моргающей точки.
Были рассмотрены такие варианты:
1) Проверять какое-то условие и по соблюдению такового выводить точку, т.е. динамически выводим часы, минуты, точку – и так по кругу, пока условие соблюдается. Как только условие перестало выполняться – выводим только часы и минуты. Для всей индикации используются две функции – одна: получение десятков и единиц, вторая: вывод на индикатор цифры.
2) Проверять какое-то условие и по соблюдению такового выводить точку, но не просто отдельно точку, а модифицируя буферную переменную, хранящую значение из знакогенератора. Здесь уже используется три функции: первая – получение десятков и единиц для двух левых знаков, вторая: получение десятков и единиц для двух правых знаков, третья: вывод на индикатор цифры. Минус: больше кода.
3) Проверять какое-то условие и по соблюдению такового выводить точку, но не просто отдельно точку, а дописать второй знакогенератор с точками. Здесь также используется три функции: первая – получение десятков и единиц для двух левых знаков, вторая: получение десятков и единиц для двух правых знаков, третья: вывод на индикатор цифры. Минус: больше кода, наличие двух знакогенераторов.


Все три варианта работают. Вопрос: какой вариант из трех более предпочтительный?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 07 Май 2007, 9:02    Заголовок сообщения: Ответить с цитатой

day177 писал(а):
По поводу проблемы мерцания.
Опрос RTC сделал раз в секунду, при этом осталось моргание (на время опроса и считывания времени) – следствие использования шины i2c. Совсем побороть эту проблему видимо невозможно. Жаль Грусть

Можно. Напишите свою процедуру работы с шиной,куда вставьте регенерацию разрядов дисплея.
Точка - это всего лишь разряд в знакогенераторе - смысл ставить еще что то ??? Если есть точка - значение знакогенератора +80н или сколько там.

_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day177
Знатный посетитель (>20)
Знатный посетитель (>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?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3 ... 9, 10, 11, 12, 13, 14  След.
Страница 10 из 14

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.6235s (PHP: 90% - SQL: 10%) - SQL запросов: 12 - GZIP enabled - Debug on