Вопрос по оператору $crystal в BASCOM. Написал свою программу часов для Attiny2313 без кварца. Во фьюзах отключил деление частоты на 8 (внутренняя частота вышла 8 MGz). Переполнение таймера выставил именно на эту частоту. Но если в программе ставлю $crystal=8000000, то при динамической индикации четко заметно мигание индикаторов. При установке меньшей величины, вплоть до $crystal=1000000 мигание совершенно не заметно. При этом на ход часов этот параметр не повлиял. Так что же делает оператор $crystal?
Просто сообщает компилятору на какой частоте будет работать МК, а сама частота задаётся кварцем либо фьюзами. А изменения у Вас происходят потому что компилятор исходя из указаной частоты пересчитывает временнЫе задержки.
Небольшие эксперименты показали, что оператор $crystal влияет на длительность выполнения операторов Wait и Waitms. Видимо, величины задержек пересчитываются через этот оператор.
Небольшие эксперименты показали, что оператор $crystal влияет на длительность выполнения операторов Wait и Waitms. Видимо, величины задержек пересчитываются через этот оператор.
Так я ж это и написал. Если Вы через оператор waitms 1 указали задержку в 1 сек, то при частоте 8 МГц это будет одно количество пустых циклов (примерно чуть меньше 8 млн раз), а если Вы через оператор crystal укажите что МК работает на 4 МГц, то компилятор пересчитает, что пустых циклов должно быть около 4 млн и в реале у Вас задержка выйдет в два раза меньше по времени если МК работает на частоте 8 МГц. Процессор от этого работает ни быстрее ни медленнее, а вот временные задержки искажаются. Указывайте только реальную частоту - иначе потом будете долго думать от чего баги ловите.
Да, кажется я немного перемудрил. В динамической индикации я использовал задержку 10 мс на знак. На 4-х - это уже 40 мс. Частота мигания: 1000/40=25 герц. Видимо, нужно просто понизить задержку или привязаться к таймеру.
Да, кажется я немного перемудрил. В динамической индикации я использовал задержку 10 мс на знак. На 4-х - это уже 40 мс. Частота мигания: 1000/40=25 герц. Видимо, нужно просто понизить задержку или привязаться к таймеру.
Для начала правильно указать частоту. А задержка между чем и чем в динамической индикации? Не путаете со временем свечения?
Да, правильнее сказать, время свечения: после включения одного индикатора давал задержку 10 мс до включения другого. Сейчас поставил действительную частоту и снизил время свечения до 2 мс. Часы работают как часы, хотя пока без кварца большой точности хода не будет (а неисправленный код моей программы есть на предыдущей странице форума). А за подсказки спасибо, а то информации в инете и много, и мало. А практика - самый хороший учитель.
max50 , спасибо кое-что прояснилось. Девайс стал нормально реагировать на пульт. Минуты , часы устанавливаются и запоминаются но правда криво . Например часы нормально инкриминиуются только до 15 дальше с 10 до 17 тенденция правильная (24 часа) но вот к примеру 19 часов не выставить . Вот ещё что хотел спросить: на какие ноги тини 2313 цеплять sda и scl есть какая-нибудь разница ? у меня так определены Config Sda = Portb.5 , Config Scl = Portb.6
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Вот ещё что хотел спросить: на какие ноги тини 2313 цеплять sda и scl есть какая-нибудь разница ? у меня так определены Config Sda = Portb.5 , Config Scl = Portb.6
Разницы в принципе нет, так как мы сами указываем Sda и Scl.
dimon-790 писал(а):
Например часы нормально инкриминиуются только до 15 дальше с 10 до 17 тенденция правильная (24 часа) но вот к примеру 19 часов не выставить .
Без кода сложно сказать.
_________________ Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
max50,спасибо попробовал так индикации или нет совсем или пару раз пробежит по разрядам и замирает. P.S. таки завелось !!! разремил этот кусок If Pind.2 = 0 Then 'Getrc5(addres , Command) 'If Addres = 0 Then 'Command = Command And &B01111111 Gosub Rc5 Gosub Setup End If и всё стало почти как надо, выставляется нормально а часы стоят
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Do If Pind.2 = 0 Then 'Getrc5(addres , Command) 'If Addres = 0 Then 'Command = Command And &B01111111 Gosub Rc5 Gosub Setup Gosub Getdatetime End If End If
dimon-790 писал(а):
упс , я за тобой не успеваю
Это я за тобой не успеваю.
_________________ Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Последний раз редактировалось max50 Чт апр 22, 2010 23:27:07, всего редактировалось 1 раз.
блин походу ds-ку подпалил всё выставляется запоминается а время не тикает. Прогу вроде всю перелопатил косяков больше не нашол библиотеки открывал закрывал ни какой разницы.А подпалил походу сам опорник тинька не хотела шиться пока незакоротиш ножки х-тал на дс-ке.Вот видать и докоротился ну да ладно завтра поменяю отпишусь что и как ещё раз большое тебе спасибо мах50.
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
регистр зовётся 74нс164 , поменял дс-ку , те-же "яйца". Полез опять в прогу уже и не помню че менял но всё-таки победил я её вот исправленная пока косяков в работе не заметил
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения