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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 15
  • 1
  • 2
  • 3
  • 14
  • 15
  • »
Модератор форума: demanik, ivan_fd  
Часы на PIC16F628
xaker-sss Дата: Вс, 15.07.2012, 19:21  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Здравствуйте форумчане, подскажите новичку, это мой первый проект на Протоне, вернее проект не мой, а взят отсюда http://www.picbasic.ru/forum/5-97-1 , вообщем ситуация такая, мне нужны только часы, я поковырялся день с книгой и проектом, вроде получилось заменить контролер PIC16F870 на PIC16F628 и выкинул ненужные на мой взгляд строчки из программы, вроде все работает, но мне нужно зделать на индикатор с общим анодом, понимаю что нужно менять в последних строчках, но как не пойму, и еще какую переменную нужно изменять для коррекции точности хода.
Прикрепления: TimeProg_int_65.rar (67.6 Kb)


ПРОТОН ЭТО ВЕЩЬ.
Сообщение отредактировал xaker-sss - Вс, 15.07.2012, 19:23
ЯНДЕКС Дата: 15.07.2012
xaker-sss Дата: Вт, 17.07.2012, 11:28  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

С общим анодом разобрался, правда больше своего вставил, остается вопрос, какую переменную нужно изменять для коррекции точности хода.

Добавлено (17.07.2012, 11:28)
---------------------------------------------
Неужели никто не может подсказать про коррекцию точности хода.
Прикрепления: _628__.rar (47.1 Kb)


ПРОТОН ЭТО ВЕЩЬ.
Сообщение отредактировал xaker-sss - Вт, 17.07.2012, 11:29
DAlexV Дата: Вт, 17.07.2012, 12:22  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Прерывание написано на АСМе, а в нем я не бум бум, Протон только начинаю осваивать, а если изменять переменную SECONDS то будет коррекция +-1 секунда в минуту, что не есть гуд, хотелось-бы в миллисекундах корректировать, а просто такие часы собирать нет смысла, их китайских на рынке полно, вот и я такие купил, красивые большие индикаторы, но за месяц отстают на три минуты, вот и хотел их переделать.

ПРОТОН ЭТО ВЕЩЬ.
DAlexV Дата: Вт, 17.07.2012, 13:56  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (xaker-sss)
Прерывание написано на АСМе, а в нем я не бум бум
Это видимо Макс решил совместить индикацию и счет времени в одном. На самом деле если есть 2 таймера, то тогда проблем не возникает. Один на точный отсчет времени, второй для индикации(хотя моно обойтись и одним при желании и необязательно на Асме )


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
xaker-sss Дата: Вт, 17.07.2012, 14:04  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Если-бы знать как, сколько я про эти прерывания читал, ничего в них понять не могу.

ПРОТОН ЭТО ВЕЩЬ.
DAlexV Дата: Вт, 17.07.2012, 14:50  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Quote (xaker-sss)
Протон только начинаю осваивать, а если изменять переменную SECONDS то будет коррекция +-1 секунда в минуту, что не есть гуд

Правильно...., не получается так. Надо как то по другому .., я думаю как то наверно можно придумать cool


Наладчик КИП и А
Сообщение отредактировал Broka - Вт, 17.07.2012, 15:51
xaker-sss Дата: Вт, 17.07.2012, 17:38  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Я тоже так думаю, но ничего не придумаю.

ПРОТОН ЭТО ВЕЩЬ.
Broka Дата: Вт, 17.07.2012, 18:23  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 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
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Как я понял нужно в BIG загружать не 1000000, а переменную с 1000000, и этой переменной играть.
Щас буду разбираться, Спасибо.

Добавлено (17.07.2012, 19:38)
---------------------------------------------
А что такое t=~t компилятор на нее ругается, как понял переменная, как ее описать.


ПРОТОН ЭТО ВЕЩЬ.
ЯНДЕКС Дата: 17.07.2012
Broka Дата: Вт, 17.07.2012, 20:05  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Извиняюсь ..., не много не дописал
DIM t as Bit ' это у нас битовая перемененная
знак =... это знак присвоения, сам понимаешь.
знак ~... это поразрядное НЕ


Наладчик КИП и А
xaker-sss Дата: Вт, 17.07.2012, 20:20  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 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
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Так Вы посмотрите какие переменные в самой программе используются , а какие нет.. это не трудно, просто надо повнимательнее посмотреть и всё.

Наладчик КИП и А
xaker-sss Дата: Вт, 17.07.2012, 20:37  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 208
Репутация: 6   ±
Замечания:   ±
На сайте с 26.04.2009

Статус: Offline

Думал можно быстрей, ладно разберусь, основное достигнуто, еще раз Спасибо.

ПРОТОН ЭТО ВЕЩЬ.
  • Страница 1 из 15
  • 1
  • 2
  • 3
  • 14
  • 15
  • »
Поиск: