roboforum.ru

Технический форум по робототехнике.

Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение Zoom » 01 окт 2009, 10:35

да, за 2 минуты уже сразу набегает отставание. примерно в 1 сек.
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение contr » 01 окт 2009, 11:05

дык кто мешает вместо
пишите в любом из примеров CVAVR строку delay_ms(1000);

написать delay_ms(980)
Как вариант можно использовать и встроенный генератор с коррекцией частоты в нужную сторону.
Однако и это еще не все. Часики обычно строят на базе кварца 32,768 его делить удобно, а коррекция может осуществляется изменением емкости в цепи обвязки.
Еще один вариант - RC генератор WDT и SLEEP. Это удобно если нужны минутные импульсы.
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение blindman » 01 окт 2009, 11:17

удобство деления на 215 при применении МК - несущественно. Основное преимущество часового кварца - то, что у него лучше относительная термостабильность. Подбирать конденсаторы необязательно, можно скорректировать программно. А вот термостабильность диэлектрика этих конденсаторов в обвязке кварца важна.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение contr » 01 окт 2009, 13:18

я исходил из того, что начинающему программеру на первых порах проще емкость подкрутить - это с любым кварцем работает, чем код подправить.
"Часовые" кварцы на 32768 хорошо стыкуются с постделителями/таймерами. При этом потребление МК минимальное, поскольку большую часть времени он спит, просыпаясь по прерыванию лишь раз в секунду. Да и вообще с НЧ кварцами МК кушает меньше. Для автономных девайсов это существенно. Кроме того, такие кварцы легко найти в часиках и пр. аппаратуре
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение Zoom » 01 окт 2009, 13:36

Код: Выделить всёРазвернуть
$regfile = "m16def.dat"                                     ' specify the used micro

$crystal = 8000000

$lib "lcd4.lib"
                                           

Enable Interrupts                                           'Ðàçðåøàåì ïðåðûâàíèÿ
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.2 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
Config Lcd = 16 * 2

$baud = 19200                                               ' use baud rate

$hwstack = 32                                               ' default use 32 for the hardware stack

$swstack = 10                                               ' default use 10 for the SW stack

$framesize = 40                                             ' default use 40 for the frame space



'*** Config the timer ***

   Config Timer1 = Timer , Prescale = 256

   ' Timer1 is now UP, and an interrupt is only generated
   ' when the Timer1 register reaches 0
   ' To get an interrupt every 1000 timer ticks we load the
   ' TimerStart constant with 65536-1000
   Const Timerstart = 65536 - 1000

   ' Load the TimerStart value into the Timer1 register
   Timer1 = TimerStart

   ' Set the Timer1 interrupt pointer
   ' The Timer_1_int subroutine is executed when Timer1=0
   On Timer1 Timer_1_int


   ' Enable the use of Timer1
   Enable Timer1

   ' Enable the general use of interrupts
   Enable Interrupts


'*** Variables ***
   Dim A as Long
   Dim A2 as Long
   Dim B as Long
   Dim B2 as Long
'   Dim ShowA as Bit



'***** MAIN LOOP *****
Do
Locate 1 , 1
Lcd B


Loop
'***** END - MAIN LOOP *****


End  'end of Main program



'***** Subroutines and data area *****


'Subroutine which is called when Timer1=0
Timer_1_int:

   ' AVR Timers do not need a new START command to automatically keep running
   ' Timer1 is reloaded as to be ready for counting the next time slice
   Timer1 = Timerstart


   B = B + 1

Return


Нашел тут в инете некоторые исходники и выдернул вот это.
Так вот этот процесс идет по таймеру.Он достигает максимального значения дергает за int и начинается снова.Но все равно на разных мегагерцах разная скорость.Возможно тут надо что-то изменять в prescale.
Но а как из этого получить 1 секунду??

Модератор vooon:Буду бить банхамером если не будешь пользоваться тегом CODE!
Последний раз редактировалось Zoom 01 окт 2009, 13:43, всего редактировалось 1 раз.
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение contr » 01 окт 2009, 13:43

всяческих кодов очень много.
Просто задайте в своей первой версии Waitms 998
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение EdGull » 01 окт 2009, 14:06

я так понимаю, Zoom не вносит корректировок на время выполнения остального кода
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение Zoom » 01 окт 2009, 14:13

я понимаю, что его нужно приплюсовывать.А как его высчитывать?
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение EdGull » 01 окт 2009, 14:22

его нужно как раз из задержки вычитать
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение boez » 01 окт 2009, 18:40

Вот это и есть фундаментальная проблема кода на задержках - как вычислить время (возможно переменное) выполнения чужой библиотечной функции например вывода на lcd, чтобы затем его учесть? :)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение galex1981 » 01 окт 2009, 21:48

Только из опыта!
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4362
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение contr » 01 окт 2009, 23:03

не знаю как другие выкручиваются, а в MPLab инструмент специальный встроен. Но, частоту кварца указываешь симулятору сам, а реально она может немножко отличаться. Сверхточные часики не отстроишь, а выровнять время исполнения по разным веткам запросто :)
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение blindman » 02 окт 2009, 05:28

Единственный надёжный способ измерения временных интервалов - использовать аппаратный таймер.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение Zoom » 02 окт 2009, 05:57

Может быть bascom avr не подходит для этого?
Я тут приводил пример программы с таймером, но не совсем понятно это то или нет.
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт

Сообщение EdGull » 02 окт 2009, 08:01

таймер, он и в африке таймер.
причем тут язык?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron