Форум по микроконтроллерам: Любителям часов и счета - Форум по микроконтроллерам

Перейти к содержимому

  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Любителям часов и счета

#1 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 386
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 27 Июнь 2011 - 23:26

Статья находится здесь Есть о чем поговорить, на мой взгляд.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#2 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 28 Июнь 2011 - 10:15

Отличная статья, навела меня на мысль использовать П/П управления мощностью посредством пропуска полупериодов, для отсчета времени. Алгоритм очень похож по описанию.
0

#3 Пользователь офлайн   SanSanich 

  • Завсегдатай
  • PipPipPip
  • Группа: SuperMod
  • Сообщений: 289
  • Регистрация: 21 Февраль 11
  • ГородСевастополь

Отправлено 28 Июнь 2011 - 12:52

Александр, этот метод должен хорошо подойти для частотомера. Там как раз нужна идеальная секунда и досчёт до ближайшего фронта. Спасибо, буду разбираться!
0

#4 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 28 Июнь 2011 - 14:05

Из статьи:

MAZ сказал:

- когда старший и младший байты равны нулю, заканчиваем счет 256 и прибавляем 1.000.000 в 24- битную переменную.
Хочу немного поправить Александра.
Прибавлять 1 000 000 нужно не когда байты равны нулю, а когда 24-х битная переменная будет отрицательной. Т.е. старший бит будет равен 1. И в начале 256 прибавлять не нужно, а просто записывать 1 000 000

Цитата

Александр, этот метод должен хорошо подойти для частотомера.
Саныч. Этот метод не пойдёт для частотомера. Тут секунда всегда не ровная, она колеблется +- лапоть. Но в среднем, за определённое кол-во таких периодов, будет приближённо к 1 сек.

Добавил такой метод себе в часы. Очень понравился тем, что легко можно делать коррекцию. Увеличивая/уменьшая то число, которое прибавляешь, можно добиться коррекции с точностью до 1 МЦ/сек.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#5 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 386
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 28 Июнь 2011 - 14:53

Просмотр сообщенияAlex (28 Июнь 2011 - 14:05) писал:

Из статьи:

MAZ сказал:

- когда старший и младший байты равны нулю, заканчиваем счет 256 и прибавляем 1.000.000 в 24- битную переменную.
Хочу немного поправить Александра.
Прибавлять 1 000 000 нужно не когда байты равны нулю, а когда 24-х битная переменная будет отрицательной. Т.е. старший бит будет равен 1. И в начале 256 прибавлять не нужно, а просто записывать 1 000 000

Я прибавлял, при инициализации значение периода опроса (256 или 256х256)Ошибка почти ни когда не становилось отрицательной. Правильней, чтобы она колебалась возле истинного значения , +/-.
Спасибо за уточнение.
На мой взгляд, также очень интересна программа десятичного счета. Счет идет сразу в десятичной, не нужны никакие преобразования. Есть уже несколько поправок, буду проверять.
Спасибо, кого заинтересовала данная тема.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#6 Пользователь офлайн   SanSanich 

  • Завсегдатай
  • PipPipPip
  • Группа: SuperMod
  • Сообщений: 289
  • Регистрация: 21 Февраль 11
  • ГородСевастополь

Отправлено 28 Июнь 2011 - 14:58

Просмотр сообщенияAlex (28 Июнь 2011 - 14:05) писал:

Саныч. Этот метод не пойдёт для частотомера. Тут секунда всегда не ровная, она колеблется +- лапоть.

Ну а как тогда лучше отсчитать ровно 1 сек, да так, чтобы МК в это время ещё и входные импульсы подсчитывал? Понимаю что по таймеру, но вот как его переполнения подсчитывать не отвлекаясь от подсчёта на входе?
0

#7 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 386
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 28 Июнь 2011 - 15:01

Я думаю двумя таймерами. Один считает секунду, другой импульсы.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#8 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 28 Июнь 2011 - 19:30

Полюбому 2 таймера. Иначе никак.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#9 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 30 Июнь 2011 - 13:24

Цитата

На мой взгляд, также очень интересна программа десятичного счета. Счет идет сразу в десятичной, не нужны никакие преобразования.
Интересно. Мне идея понравилась.
Т.к. в ней я разобраться не смог, решил написать свой вариант.
Получилась вот такая процедурка десятичного инкремента:
inc_sub        movlw     val_size  ; Инициализация
               banksel   val_cnt   ; счётчика байтов
               movwf     val_cnt   ; т.е. запись в него кол-ва байт (константа val_size)
inc_label      incf      INDF,f    ; Инкремент переменной
               movlw     0x06      ; Проверка на переполнение младшей тетрады (>9)
               addwf     INDF,f    ; посредством сложения её с числом 6
               btfss     STATUS,DC ; Если переполнения не было
               goto      inc_ret   ; Идём на выход
               movlw     0x60      ; Проверка на переполнение старшей тетрады (>9)
               addwf     INDF,f    ; посредством сложения её с числом 6
               btfss     STATUS,C  ; Если переполнения не было
               goto      inc_ret   ; Идём на выход
               incf      FSR       ; Если было, выбираем адрес следущего байта
               decfsz    val_cnt,f ; Проверяем счётчик байтов на 0 с его декрементом
               goto      inc_label ; Если счётчик не пуст - идём на обработку следующего байта
               return              ; Иначе (если счётчик пуст) - выходим из ПП
inc_ret        subwf     INDF,f    ; Вычитаем обратно число 6
               return              ; и возвращаемся

Перед её вызовом необходимо в FSR записать начальный адрес переменной.
Так-же в программе должна быть определена константа val_size указывающая на размер переменной в байтах и переменная val_cnt для внутреннего перебора байтов по очереди.

Проект с примером использования ПП
Прикрепленный файл  prov_2.rar (14,24К)
Количество загрузок:: 281
Смотрим, критикуем, коментируем ... :rolleyes:
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#10 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 386
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 30 Июнь 2011 - 21:51

хорошая программа получилась. И быстрей и компактней.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#11 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 30 Июнь 2011 - 23:08

Немного усовершенствовал её по быстродействию. Все исправления и новый проект выше.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#12 Пользователь офлайн   fox 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 42
  • Регистрация: 19 Март 11

Отправлено 21 Август 2011 - 16:50

По поводу ПП секундной задержки: я хочу заюзать под него TMR1 в 628-м Pic. Там двухрегистровый счетчик на 65535. Значит, действия такие: Загружаю 1 000 000 в переменную. При прерываниях, декрементирую старший байт, проверяя старший бит, или флаг заема. Как только сойдет на минус, значит, типа, секунда прошла. Затем гружу в старший байт OF, а средний с младшим складываю с 4240, при переносе - инкрементируя старший? Ничего не пропустил? С однорегистровым таймером арифметика, конечно, полегче реализуется в данном случае.
0

#13 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 21 Август 2011 - 18:35

Цитата

Затем гружу в старший байт OF, а средний с младшим складываю с 4240, при переносе - инкрементируя старший?
Ничего загружать не нужно, только сложение. Сначала младший сложить, если переполнение - инкремент среднего. Затем сложить средний, инкрементируя старший. И потом старший.

В остальном - всё верно.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#14 Пользователь офлайн   fox 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 42
  • Регистрация: 19 Март 11

Отправлено 21 Август 2011 - 21:17

Ну вот, как-то заработало.
На вид мигает похоже на секунду :) Надо будет проверить по хронометру.
Хотел вставить текст ПП, в окошке редактирования вроде красиво получается листинг. А как отправлю - все сбивается. Как это у вас такие красивые листинги выходят.. :)

Сообщение отредактировал fox: 21 Август 2011 - 21:23

0

#15 Пользователь офлайн   medved 

  • Завсегдатай
  • PipPipPip
  • Группа: SuperMod
  • Сообщений: 366
  • Регистрация: 15 Февраль 11
  • ГородЕкатеринбург

Отправлено 21 Август 2011 - 21:33

Просмотр сообщенияfox (21 Август 2011 - 21:17) писал:

Хотел вставить текст ПП, в окошке редактирования вроде красиво получается листинг. А как отправлю - все сбивается. Как это у вас такие красивые листинги выходят.. :)

Кнопочка "КОД" вам в помощь
0

#16 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 21 Август 2011 - 21:35

Сверху, над редактором есть всё, что необходимо для этого.
Тег code в помощь :)

PS: Упс, меня опередили :rolleyes:

Сообщение отредактировал Alex: 21 Август 2011 - 21:35

Не говорите что мне делать, и я не скажу куда Вам идти !
0

#17 Пользователь офлайн   fox 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 42
  • Регистрация: 19 Март 11

Отправлено 22 Август 2011 - 09:34

Вот, односекундный счетчик на TMR1. Все работает (Точность не проверялась пока что). Меня сейчас другой вопрос интересует - процесс инциализации TMR1. 628-ю только осваиваю (курю даташит :D). Вот такие вопросы пока не вкурю: TMR1 - считается периферийным модулем, в отличие от TMR0? И еще - как соотносятся по приоритету INTCON и PIE1. Мож, из блока TMR1 init что-то можно выбросить?

Скрытый текст

Сообщение отредактировал fox: 22 Август 2011 - 09:38

0

#18 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 888
  • Регистрация: 15 Февраль 11

Отправлено 22 Август 2011 - 15:11

Цитата

TMR1 - считается периферийным модулем, в отличие от TMR0 ?
По всей видимости - да.

Цитата

как соотносятся по приоритету INTCON и PIE1
Не понятен вопрос. Какие приоритеты между этими двумя регистрами ? :unsure:

Скрытый текст


Прикрепленный файл  mig.rar (22,46К)
Количество загрузок:: 203
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#19 Пользователь офлайн   fox 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 42
  • Регистрация: 19 Март 11

Отправлено 22 Август 2011 - 18:25

Просмотр сообщенияAlex (22 Август 2011 - 15:11) писал:


Цитата

как соотносятся по приоритету INTCON и PIE1
Не понятен вопрос. Какие приоритеты между этими двумя регистрами ? :unsure:



Ну, вот INTCON,PEIE - разрешение-запрещение прерывания от периферийных модулей.,
а PIE1 - разрешение запрещение от них же поотдельности. Если я в INTCON запрещаю - можно уже не париться насчет PIE1?
Скорее всего, да..
А ПП сложения - спасибо, компактно и быстро. А то ж я из Самоучителя тяну все подряд :D
0

#20 Пользователь офлайн   fox 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 42
  • Регистрация: 19 Март 11

Отправлено 22 Август 2011 - 18:33

А можно быть уверенным, что в PIE1 по сбросу - всегда нули? Если да, тогда, конечно, нет необходимости туда байт грузить. Это я для перестраховки так сделал.
0

Поделиться темой:


  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей