roboforum.ru

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


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

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

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

Сообщение Zoom » 02 окт 2009, 08:23

Язык не причем,согласен.Но а как секунду получить из процесса изменяющихся чисел 0-65536, причем на 4 мгц и на 8 мгц они бегут по разному?
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение boez » 02 окт 2009, 10:58

Зачем 65536? Вот для примера как можно настроить даже 8-битный таймер как часы:

кварц 8 МГц
прескалер 64 (после него 125 кГц)
период 125 (частота переполнений таймера 1 кГц)
на таймер прерывание, в прерывании увеличиваем переменную на 1, если досчитала до 1000 - скидываем в 0 и увеличиваем вторую переменную. В первой получаем миллисекунды, во второй секунды. Ну дальше можно и часы-минуты-дни добавлять.
Для кварца 4 МГц прескалер ставим 32, он правда есть токо на втором таймере.

Если таймер 16-битный - то еще проще, 8 МГц, прескалер 256, период таймера 31250 (для 4 МГц - 15625) и переполнение таймера будет возникать раз в секунду, можно просто в основном цикле программы опрашивать флаг overflow и если он стоит - увеличивать переменную "секунды" на 1. Хотя на прерываниях удобнее для основной программы, если в ней хочется делать длинные задержки.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение SERGEY_M » 02 окт 2009, 11:04

ща будет вопрос, как задать нужный период переполнения :roll:
Аватара пользователя
SERGEY_M
 
Сообщения: 682
Зарегистрирован: 20 мар 2009, 12:45
Откуда: Украина, Одесса
ФИО: Сергей

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

Сообщение boez » 02 окт 2009, 11:25

А вот это уже - читать даташит! :)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение Zoom » 02 окт 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
$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
Dim B As Integer
Config Timer1 = Timer , Prescale = 256                      'Konfiguriere Timer1
Enable Timer1                             'schalte den Timer1 ein
On Timer1 Int_1                                             'verzweige bei Timer1 uberlauf zu   Isr_von_Timer1
Enable Interrupts
Timer1 = 31285                                              'Timer1 soll schon von 34285 wegzahlen
Do
Locate 1 , 1
Lcd B
Loop
End
Int_1:                                                      'ISR von Timer1
Timer1 = 31285                                              'Timer1 soll wieder von 34285 wegzahlen
B = B + 1
Return



вот процесс по таймеру.
взят с немецкого сайта.
указан интервал в 1 секунду.
В реале - отставание.Что здесь не так?
Последний раз редактировалось Zoom 02 окт 2009, 14:07, всего редактировалось 8 раз(а).
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение galex1981 » 02 окт 2009, 13:56

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

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

Сообщение Zoom » 02 окт 2009, 14:03

во. вставил тег :)
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение EdGull » 02 окт 2009, 14:30

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

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

Сообщение Zoom » 02 окт 2009, 14:52

Точно сказать сложно, но за 60 секунд точно на 1 или даже побольше уйдет.
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение EdGull » 02 окт 2009, 14:54

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

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

Сообщение Zoom » 02 окт 2009, 15:18

Я так понимаю, что программа задействует 16 битный таймер (делитель 256)
Видать от него и тактуется.
Или вы о кварце? Тогда int 8 mhz
Последний раз редактировалось Zoom 02 окт 2009, 15:21, всего редактировалось 1 раз.
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение EdGull » 02 окт 2009, 15:21

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

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

Сообщение Zoom » 02 окт 2009, 15:22

int 8 mhz
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение EdGull » 02 окт 2009, 15:23

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

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

Сообщение Myp » 02 окт 2009, 15:24

ну и нормально
за 60 секунд там процессор стока тиков сделает что запросто наберётся погрешности на секунду

внутренний кварц отличается особенной неточностью
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Пред.След.

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

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

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

cron