Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Bin-клоки на Attiny2313.

Чт дек 25, 2008 13:47:47

Сделал бинарные часики на Attiny2313 но настроить никак не могу. Число сравнения не работает сколько не меняю все равно отстают на 13 сек за минуту.

http://radiokot.ru/circuit/digital/home/36/

Чт дек 25, 2008 13:53:25

Вот исходник
Вложения
code.asm
(6.16 KiB) Скачиваний: 994

Чт дек 25, 2008 14:20:02

SeamaNCOS писал(а):Вот исходник

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

Чт дек 25, 2008 14:27:17

smac писал(а):
SeamaNCOS писал(а):Вот исходник

Бегло просмотрев, заметил следующее:
При входе в прерывание вы не сохраняете в стеке статус-регистр (SREG) и регистры, которые используются не только в прерывании. .

как их настроить??

СТС в смысле писать за место
mov st,temp1
через
.dseg
Digit: .byte 6

sts Digit+1Temp1 и т.д. ????

Чт дек 25, 2008 21:54:46

SeamaNCOS писал(а):как их настроить??

Я вам конечно помогу, но вы литературу почитайте, на этом сайте обучалка есть и в интернете информации полно. Для начала узнайте и что такое стек, что такое указатель стека и для чего они используется.
Объясню кратко: стек - область ОЗУ, организованная по принципу первым вошел-последним вышел.
Теперь собственно по теме.
1. Сохранение регистров общего назначения (r0-r31)
Код:
push r16 ; "заталкиваем" регистр r16  в стек
push r17 ; "заталкиваем" регистр r17  в стек
; теперь мы може пользоваться сохраненными регистрами как нам угодно
...some code
pop r17; "вынимаем " регистры из стека обязательно в порядке обратном "заталкиванию"
pop r16;
; теперь в регистрах появилисль значения, которые были в них до прерывания

2. Сохранение регистра SREG в стеке:
Код:
push r16; "заталкиваем" регистр r16  в стек
in r16, SREG; читаем в r16 регистр SREG
push r16; сохраняем прочитанное значение в стеке.
.... some code
pop r16 ; читаем в r16 из стека значение, соответствующее регистру SREG до вход в обработчик прерывания
out SREG, r16; пишем это значение в SREG
pop r16; читаем из стека значение r16.
; после данных действий и в SREG и в r16 значения которые были в них до входа в обработчик прерывания.

Важное замечание: при операциях со стеком порядок извлечения регистров из стека всегда должен быть обратным относительно порядка сохранения "заталкивания" регистров в стек.

Чт дек 25, 2008 21:58:51

SeamaNCOS писал(а):СТС в смысле писать за место
mov st,temp1
через
.dseg
Digit: .byte 6

sts Digit+1Temp1 и т.д. ????

Нет, CTC (clear timer on compare) - это режим работы таймера, при котором он автоматически очищается при совпадении с регистром сравнения. Используется для обеспечения точного отсчета временных интервалов. Скачайте даташит на контроллер и посмотрите в нем (искать по слову CTC).

Чт дек 25, 2008 22:05:20

Вот сейчас еще косяк заметил:
Вы выходите из обработчика прерывания командой ret. это значит, что после выхода у вас глобально запрещены прерывания, поскольку при входе в обработчик прерывания, автоматически глобально запрещаются прерывания (равносильно команде cli).
Если вы хотите, чтобы при выходе из обработчика прерывания, глобально разрешались прерывания, то следует использовать команду reti. Собственно отличие reti от ret состоит именно в том что первая глобально разрешает прерывания при выходе из подпрограммы, а вторая - нет.

Чт дек 25, 2008 22:11:29

Писал прошивку на основе http://radiokot.ru/circuit/digital/home/33/.
В этих исходниках ничего подобного не было. В коментах пишут что часы работают нормально. А я максимум чего добился (расчетом и подборкой задержки) это отставание на 2 минуты за 4 часа.
Немогу понять как расчитывать

ldi Temp1,0b00000100
out Tccr1b,Temp1 ;тактовый сигнал /256

ldi Temp1,0x7a
out Ocr1ah,Temp1
ldi Temp1,0x12
out Ocr1al,Temp1 ;запись числа сравнения 31250 (0.4сек. при 8мгц)

и где ставить

ldi Temp1,0
out Tcnt1h,Temp1
out Tcnt1l,Temp1 ;обнуление счетчика

Чт дек 25, 2008 22:19:58

А вот собственно и сам девайс в сборе. Кому понравиться могу скинуть схемку и ПП.
Вложения
Картинки(025).jpg
(40.92 KiB) Скачиваний: 1662

Чт дек 25, 2008 23:08:21

SeamaNCOS писал(а):Писал прошивку на основе http://radiokot.ru/circuit/digital/home/33/.
В этих исходниках ничего подобного не было. В коментах пишут что часы работают нормально.

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

Б. По-моему ваш исходник все-же отличается от оригинала.
SeamaNCOS писал(а):Немогу понять как расчитывать

В. Я вам уже ответил куда копать, еще раз поясню: скачайте даташит и прочитайте хотя бы про таймеры (а желательно весь). Если плохо с английсиким, то на сайте www.gaw.ru есть некоторая информация на русском языке, хотя я рекоммендую все-таки читать даташит на английском.

Re: Помогите настроить часы на Attiny2313

Пт дек 26, 2008 07:21:27

SeamaNCOS писал(а):Сделал бинарные часики на Attiny2313 но настроить никак не могу. Число сравнения не работает сколько не меняю все равно отстают на 13 сек за минуту.

Здравствуйте.
- Проверьте, как запрограммированы биты CSEL3...0=1111 и SUT1,0=11.
- откорректировал Ваш текст, проверил формирование интервала 1 сек.
При резонаторе 8.(0) МГц интервал формируется 1 сек
С индикацией не разбирался. Часы в таком представлении индикации выше моего понимания :oops:

Пт дек 26, 2008 09:40:11

Вдогонку. Добавить еще одну строку
"
...
inc sek ; увелечение секунд
cpi sek,60 ; разность 60*1.0c=60c=1мин
;cpi sek,150 ; разность 150*0.4c=60c=1мин
brne Out3 ; если не ноль то выход

CLR sek ; !!!!!!!!!
...."

Пт дек 26, 2008 09:58:01

Вот коменты на простые часы на МК http://www.radiokot.ru/forum/viewtopic. ... B%E5%F0%E5

Читаю датыш. пока мало чего понимаю но буду разбираться.

На счет индикации смотреть вот здесь http://dariod.cjb.net/ (Binary Clock)

Пт дек 26, 2008 10:43:00

akl с test2 сеунды вообще не идут. 1 и все.

я прошиваю через Uniprof как там фьюзы настроить CKEL3...0=1111 и SUT1,0=11 непонятно. Там просто галочки ставить можно.
Вложения
fuses.GIF
(95.21 KiB) Скачиваний: 1033

Пт дек 26, 2008 13:04:55

Как запрограммировать правильно FUSE-биты Вашим программатором, не знаю, потому что пользуюсь другими (AS1...AS4).
Если будет выложена схема, будет проще. Пока по программе не видно, куда выводится секунда.
Расчет простой
за 60 секунд при частоте 8000000:256 будет 31250 прерываний.
Если часы отстают на 1 секунду в минуту, то те же 31250 прерываний придут за 61 секунду. Значит частота кварца ниже, чем 8 МГц. Тогда 60:61*Х=31250 и Х=30737,705. Реальная частота кварца получается 30737,709*256=7868852 Гц.

Пт дек 26, 2008 13:53:48

Вот схема

Не поставил галочки на Lock и теперь МК не определяеться :cry: .
завтра куплю новай тогда буду пробовать.
Вложения
Bin CLOCK bu SeamaN.JPG
(73.92 KiB) Скачиваний: 962

Вс дек 28, 2008 10:31:13

Здравствуйте. Вот что получилось после просмотра схемы и прогона в студии; если еще актуально

Вс дек 28, 2008 22:11:31

akl СПАСИБО ОГРОМНОЕ ! ! ! ! !
вот только теперь 1 секунда длиться 8сек....
Всетаки грешу на Фьюзы. Т.К. без кварца работает так же как и с ним.

Пн дек 29, 2008 06:16:11

Здравствуйте. Да, конечно, это FUSE. И еще, в обработчике прерывания вставьте две команды.
Timer1_comp1:
;*******************************************
IN R1,SREG
;*******************************************
.
.
.
;**********
out3:
;*******************************************
OUT SREG,R1
;*******************************************
RETI
Для повышения временнОй стабильности попробуйте (после получения удовлетворительных результатов) "загрунтовать" корпус резонатора и убрать конденсаторы с его лап. Если кварц достаточно активен и SUT1,0 =11 (настроены на задержку 65 ms) выиграите пару порядков по стабильности. Далее, для повышения точности можно организовать иной алгоритм, который позволит уменьшить дискрет подстройки с 32 мкс до 0.125 мкс.

Пн дек 29, 2008 09:45:32

Уже 2а трупика есть :? с корявыми фьюзами.
uniprof не хочет считывать заводские настройки. А другие проги с программатором 5 проводков работать не хотят. Собрал программатор из обучалки и он неработает.
Подскожите пожалуйста(Хватит трупов с откл ISP)
какие галки должны стоять при проге фьюзов(рис проги выше)???
Ответить