Часы на PIC16F628
|
|
xaker-sss |
Дата: Вс, 15.07.2012, 19:21 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Здравствуйте форумчане, подскажите новичку, это мой первый проект на Протоне, вернее проект не мой, а взят отсюда http://www.picbasic.ru/forum/5-97-1 , вообщем ситуация такая, мне нужны только часы, я поковырялся день с книгой и проектом, вроде получилось заменить контролер PIC16F870 на PIC16F628 и выкинул ненужные на мой взгляд строчки из программы, вроде все работает, но мне нужно зделать на индикатор с общим анодом, понимаю что нужно менять в последних строчках, но как не пойму, и еще какую переменную нужно изменять для коррекции точности хода.
ПРОТОН ЭТО ВЕЩЬ.
Сообщение отредактировал
xaker-sss - Вс, 15.07.2012, 19:23
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 11:28 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
С общим анодом разобрался, правда больше своего вставил, остается вопрос, какую переменную нужно изменять для коррекции точности хода.
Добавлено (17.07.2012, 11:28) --------------------------------------------- Неужели никто не может подсказать про коррекцию точности хода.
ПРОТОН ЭТО ВЕЩЬ.
Сообщение отредактировал
xaker-sss - Вт, 17.07.2012, 11:29
|
|
|
|
DAlexV |
Дата: Вт, 17.07.2012, 12:22 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (xaker-sss) Неужели никто не может подсказать про коррекцию точности хода На данный вопрос должен ответить автор сиего проджекта. Корректировку хода смотрим в прерывании, а именно переменная SECONDS
Code MYINT: ; Обработчик прерывания Asm Decfsz bres_hi,f ; декрементируем старший байт (вычитаем 65536) GoTo int_exit Tstf bres_hi ; также проверить старший байт на ноль Skpz ; z = и старший, и младший байты равны нулю - прошла секунда! GoTo int_exit Movlw 0x0F ; получаем значение старшего байта Movwf bres_hi ; загружаем его в старший байт нашей переменной Movlw 0x42 ; получаем значение среднего байта Movwf bres_mid ; загружаем его в средний байт Movlw 0x40 ; значение младшего байта, которое нужно прибавить Addwf bres_lo,f ; прибавляем его к остатку, содержащемуся в младшем байте Skpnc ; nc = переполнения нет, то есть значение среднего байта ;не меняется Incf bres_hi,f ; c, переполнение младшего байта - инкрементируем средний байт ;это оптимизировано с расчётом на то, что значение среднего байта известно ; и средний байт не переполнится от одного инкремента. ;------------------------- ; теперь выполним "событие", которое необходимо каждую секунду. Incf SECONDS ;прибавим очередную секунду EndAsm If dot = 128 Then ' если запятая горит, то выключим ее dot = 0 Else dot = 128 ' и наоборот End If SetupFlag = 1 ' установим флаг факта секундного прерывания
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 12:44 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Прерывание написано на АСМе, а в нем я не бум бум, Протон только начинаю осваивать, а если изменять переменную SECONDS то будет коррекция +-1 секунда в минуту, что не есть гуд, хотелось-бы в миллисекундах корректировать, а просто такие часы собирать нет смысла, их китайских на рынке полно, вот и я такие купил, красивые большие индикаторы, но за месяц отстают на три минуты, вот и хотел их переделать.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|
DAlexV |
Дата: Вт, 17.07.2012, 13:56 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (xaker-sss) Прерывание написано на АСМе, а в нем я не бум бум Это видимо Макс решил совместить индикацию и счет времени в одном. На самом деле если есть 2 таймера, то тогда проблем не возникает. Один на точный отсчет времени, второй для индикации(хотя моно обойтись и одним при желании и необязательно на Асме )
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 14:04 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Если-бы знать как, сколько я про эти прерывания читал, ничего в них понять не могу.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|
DAlexV |
Дата: Вт, 17.07.2012, 14:50 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Пример работы с прерываниями выкладывал в здесь: http://www.picbasic.ru/forum/45-1159-3#10933 Или использовать ИМС часов реального времени (будет считать даже при выключении питания(батарея)). То же не раз обсуждалось. Интрефейсы I2C, SPI на выбор.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
Broka |
Дата: Вт, 17.07.2012, 15:51 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Quote (xaker-sss) Протон только начинаю осваивать, а если изменять переменную SECONDS то будет коррекция +-1 секунда в минуту, что не есть гуд Правильно...., не получается так. Надо как то по другому .., я думаю как то наверно можно придумать
Наладчик КИП и А
Сообщение отредактировал
Broka - Вт, 17.07.2012, 15:51
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 17:38 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Я тоже так думаю, но ничего не придумаю.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|
Broka |
Дата: Вт, 17.07.2012, 18:23 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Посмотри вот это например: здесь кварц стоит ровно 4MHz
Symbol RBIF = INTCON.0 ;RB Port Interrupt Flag Symbol INTF = INTCON.1 ; RB0 External Interrupt Flag Symbol T0IF = INTCON.2 ; TMR0 Overflow Interrupt Flag Symbol RBIE = INTCON.3 ; RB Port Change Interrupt Enable Symbol INTE = INTCON.4 ;RB0 External Interrupt Enable Symbol T0IE = INTCON.5 ; TMR0 Overflow Interrupt Enable Symbol PEIE = INTCON.6 ; Peripheral Interrupt Enable Symbol GIE = INTCON.7 ; Global Interrupt Enable Dim BIG As Dword 'переменная для счета секунд Dim BIG1 As BIG.HighWord Dim SECONDS As Byte ; переменная для счета секунд Dim MINUTES As Byte ; для счета минут ' Dim HOUR As Byte ; для счета часов BIG = 1000000 ' Запишем в BIG 1000000 для отсчета секундных интервалов
А вот и сама метка прерывания :
On_Interrupt GoTo MYINT GoTo main ; Переход на начало программы
MYINT: ; Обработчик прерывания big1 = big1 -1 ' отнимаем единицу из старшего байта переменной BIG1 'то же самое, что и вычесть 65536 из BIG , но занимает меньше места If BIG < 0 Then 'Если BIG < 0 то значит прошла секунда BIG = BIG + 1000000 'К этому отрицательному числу прибавляем 1000000 Inc SECONDS t=~t EndIf T0IF = 0 ' сбросить флаг прерываний TOIF регистра TMRO Context Restore Вот подумай чем можно здесь поиграть ,чтобы сделать точный ход часов?
Наладчик КИП и А
Сообщение отредактировал
Broka - Вт, 17.07.2012, 18:24
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 19:38 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Как я понял нужно в BIG загружать не 1000000, а переменную с 1000000, и этой переменной играть. Щас буду разбираться, Спасибо.Добавлено (17.07.2012, 19:38) --------------------------------------------- А что такое t=~t компилятор на нее ругается, как понял переменная, как ее описать.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|
Broka |
Дата: Вт, 17.07.2012, 20:05 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Извиняюсь ..., не много не дописал DIM t as Bit ' это у нас битовая перемененная знак =... это знак присвоения, сам понимаешь. знак ~... это поразрядное НЕ
Наладчик КИП и А
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 20:20 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Ура заработала, пока просто светодиод моргает, при изменении переменной BIG частота меняется, t сделал BYTE, правда не знаю как все это работает, но работает, то-что надо, дальше разберусь, Большое спасибо. Добавлено (17.07.2012, 20:09) --------------------------------------------- Щас исправлю на BIT Добавлено (17.07.2012, 20:20) --------------------------------------------- Еще один вопрос, можно-ли в протоне узнать какие прописанные переменные не используются, а то сейчас буду блоками удалять ненужный код, хотелось-бы почистить чтоб заново не переписывать. Спасибо.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|
Broka |
Дата: Вт, 17.07.2012, 20:25 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Так Вы посмотрите какие переменные в самой программе используются , а какие нет.. это не трудно, просто надо повнимательнее посмотреть и всё.
Наладчик КИП и А
|
|
|
|
xaker-sss |
Дата: Вт, 17.07.2012, 20:37 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
208
Замечания:
±
На сайте с 26.04.2009
Статус:
Offline
|
Думал можно быстрей, ладно разберусь, основное достигнуто, еще раз Спасибо.
ПРОТОН ЭТО ВЕЩЬ.
|
|
|
|