roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 15:37

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 02 окт 2009, 15:26 
Не в сети
Аватара пользователя

Зарегистрирован: 20 мар 2009, 12:45
Сообщения: 682
Откуда: Украина, Одесса
ФИО: Сергей
внутреннего кварца нет!!!
там RC генератор


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 02 окт 2009, 15:28 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 02 окт 2009, 15:30 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Я пробовал с внешним 8.000 mhz.Установил в avr prog ext hi frequency (не дословно) там это последняя опция.Так же выбрал "full amplitude".Вообщем тоже самое.Секунды не совпадают с реальными.
====
Калибровать - это как? Менять число в программе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 02 окт 2009, 18:27 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
А че за число такое странное 31285 (и 34285, причем одно из другого не получается никак...)? Написано же - 31250 и таймер запускать в режиме CTC (Clear on Timer Compare), а не вписывать в прерывании число в счетчик, это тоже неточный метод. Не знаю я как это делается в вашем васике, а на сях так
Код:
OCR1A = 31250
TCCR1A = 0
TCCR1B = (1<<WGM12)|(1<<CS12)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 03 окт 2009, 00:02 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Код:
$regfile = "m16def.dat"                                     ' specify the used micro
$crystal = 8000000
$lib "lcd4.lib"
'*** Config the timer ***

   Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1

   ' Load the TimerLimit value into the Compare1A (OCR1A) register
   Compare1a = 31250

   ' Set interrupt pointers

   On Timer1 Int_1
   ' When Timer1 moves from 65535 to 0 - not just when it becomes 0
   ' as Timer1 moves between 0 and 10000, the Timer1 interrupt flag is never set.

   On Compare1A Compare_1a_int
   ' Wwhen Timer1 = Compare1A register

   ' Enable the use of Timer1
Enable Compare1a
Enable Interrupts
'**************END config Timer**************

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 H1 As Integer
Dim H2 As Integer
Dim M1 As Integer
Dim M2 As Integer
Dim S1 As Integer
Dim S2 As Integer

Gosub Clockzero

Locate 2 , 1
Lcd "Hour:"
Locate 2 , 8
Lcd "Min:"
Locate 2 , 13
Lcd "Sec:"
Do
Locate 1 , 13
Lcd S1
Locate 1 , 14
Lcd S2
Locate 1 , 8
Lcd M1
Locate 1 , 9
Lcd M2
Locate 1 , 1
Lcd H1
Locate 1 , 2
Lcd H2
Loop

Int_1:
'empty
Return

Compare_1a_int:
   ' Reset the Compare1A interrupt flag,
   ' as this flag is not reset automatically
Reset Tifr.5
S2 = S2 + 1
If S2 = 10 Then S1 = S1 + 1
If S2 = 10 Then S2 = 0
If S1 = 6 Then M2 = M2 + 1
If S1 = 6 Then S1 = 0
If M2 = 10 Then M1 = M1 + 1
If M2 = 10 Then M2 = 0
If M1 = 6 Then H2 = H2 + 1
If M1 = 6 Then M1 = 0
If H2 = 10 Then H1 = H1 + 1
If H2 = 10 Then H2 = 0
If H1 = 2 And H2 = 4 Then Gosub Clockzero
Return


Clockzero:


Let S1 = 0
Let S2 = 0
Let H1 = 0
Let H2 = 0
Let M1 = 0
Let M2 = 0
Let M1 = 0
Let M2 = 0
Return


Переделал программу, учитывая подсказку boez.Нарыл шаблоны с примерами.Запустил на внешнем кварце 8 мгц.Хочу сказать, что это реально работает и за 30 минут никаких отставаний не было.Так же радует и то, что это написано на Бейсике(имхо).
Благодарю за советы.

Добавлено спустя 3 часа 18 минут 5 секунд:
Проверил далее.
За 3 часа 25 минут оставание на 1 секунду.Но тем не менее результат уже есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 03 окт 2009, 20:35 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
кстати, создатели баскома позаботились о либе, реализующей функционал часов, читать в справке по ключевику
Код:
CONFIG CLOCK

Например,
Код:
'-----------------------------------------------------------------------------------------
'name                     : megaclock.bas
'copyright                : (c) 1995-2005, MCS Electronics
'purpose                  : shows the new TIME$ and DATE$ reserved variables
'micro                    : Mega103
'suited for demo          : yes
'commercial addon needed  : no
'-----------------------------------------------------------------------------------------

$regfile = "m103def.dat"                                   ' specify the used micro
$crystal = 4000000                                         ' used crystal frequency
$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

'With the 8535 and timer2 or the Mega103 and TIMER0 you can
'easily implement a clock by attaching a 32768 Hz xtal to the timer
'And of course some BASCOM code

'This example is written for the STK300 with M103
Enable Interrupts

'[configure LCD]
$lcd = &HC000                                               'address for E and RS
$lcdrs = &H8000                                             'address for only E
Config Lcd = 20 * 4                                         'nice display from bg micro
Config Lcdbus = 4                                           'we run it in bus mode and I hooked up only db4-db7
Config Lcdmode = Bus                                       'tell about the bus mode

'[now init the clock]
Config Date = Mdy , Separator = /                           ' ANSI-Format
Config Clock = Soft                                         'this is how simple it is
'The above statement will bind in an ISR so you can not use the TIMER anymore!

'For the M103 in this case it means that TIMER0 can not be used by the user anymore
'assign the date to the reserved date$
'The format is MM/DD/YY
Date$ = "11/11/00"
'assign the time, format in hh:mm:ss military format(24 hours)
'You may not use 1:2:3 !! adding support for this would mean overhead
'But of course you can alter the library routines used
Time$ = "02:20:00"
'---------------------------------------------------
'clear the LCD display
Cls

Do
Home                                                     'cursor home
Lcd Date$ ; "  " ; Time$                                 'show the date and time
Loop

'The clock routine does use the following internal variables:
'_day , _month, _year , _sec, _hour, _min
'These are all bytes. You can assign or use them directly
_day = 1
'For the _year variable only the year is stored, not the century
End

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 04:53 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Странно, но на самой атмеге эта прога стоит на месте и время не идет.А на эмуляторе работает.Какой-то глюк.Непонятно, что делать..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 08:25 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
нужен часовой кварц на ноге

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 13:03 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Да, жаль, что это не реализовано как штатная задача без переделок.
Вроде на атмеге есть 2 ноги под кварц.Никак не получится отдельно еще часовой повесить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 21:44 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
В даташите на МК написано на какие ноги часовой кварц вешать

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 23:16 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Есть 2 ноги.Штатно, кварц вешается на обе, но я подавал 1 мегагерц на одну из ног и мега работала.Вторая нога, соот, была свободная.Я не знаю всех фокусов, поэтому и спрашиваю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 04 окт 2009, 23:49 
Не в сети
Аватара пользователя

Зарегистрирован: 20 мар 2009, 12:45
Сообщения: 682
Откуда: Украина, Одесса
ФИО: Сергей
цитата из ДШ
Вложение:
32768.JPG
32768.JPG [ 48.67 КиБ | Просмотров: 1872 ]

я так понимаю, что они рекомендуют на эти ноги вешать кварц 32768 кГц
и НЕ рекомендуют туда подавать внешний такт...
мож я че не так понял, в АнглиЦком не сильно :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 05 окт 2009, 00:14 
Не в сети
Аватара пользователя

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

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 05 окт 2009, 00:24 
Не в сети

Зарегистрирован: 28 сен 2009, 15:35
Сообщения: 38
Откуда: Москва
Я тож не очень в аглицком.Похоже, что действительно рекомендуется на 2 эти ноги вешать 32,768 кгц.А я то имел ввиду ноги Xtal1 и Xtal2 и здесь они оказались не причем. Galex1981, да следовало бы посмотреть, вы правы.Теперь надо искать это кварц, чтобы проверить...
SERGEY_M, спасибо за инфу.
Вообщем, буду искать и проверять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как организовать задержку на секунду в Bascom?Wait(ms) врёт
СообщениеДобавлено: 05 окт 2009, 00:26 
Не в сети
Аватара пользователя

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

ноги таймера TOSC1 и TOSC2 предназначены для подключения кварца
они оптимизированы под кварц 32768кГц
на них не нужно вешать доп. емкостей
и на TOSC1 не рекомендуют подавать внешний такт...

или я чето не так понял? :pardon:

Добавлено спустя 2 минуты 10 секунд:
Цитата:
а сам МК будет работать от внутреннего тактирования...

ну это здесь вообще нипричем
тактирование МК никак не касается таймера и его кварца...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO