roboforum.ru

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

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

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

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

Сообщение Zoom » 30 сен 2009, 15:57

Возникла проблема.В программе на bascom организация задержки в 1 секунду дает отставание от реального времени.Использовался оператор wait и waitms.
Может какая-то вставка на asm поможет или настройка таймера?
Как сделать?
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение avr123.nm.ru » 30 сен 2009, 16:10

Выяснить почему отстает и исправить. Возможно коэффициентом а более точно операторами NOP. Если отсавание в разы или очень значительно, то наверно с частотой такта путаница.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение galex1981 » 30 сен 2009, 16:42

Выложи код пожалуйста
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 » 30 сен 2009, 18:54

я делаю задержку waitms 1000.
написанием на asm не владею.
это программа часов. кривая, но рабочая.
Код: Выделить всёРазвернуть
$regfile = "m16def.dat"
$crystal = 8000000                                         
$lib "lcd4.lib"
'$lib "mcsbyte.lbx"                                         
'Config Rc5 = Pind.2
'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
Dim H1 As Integer
Dim H2 As Integer
Dim M1 As Integer
Dim M2 As Integer
Dim S1 As Integer
Dim S2 As Integer
Dim B As Integer
Dim Ndat As Byte
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


Cls
Locate 2 , 1
Lcd "Hour:"
Locate 2 , 8
Lcd "Min:"
Locate 2 , 13
Lcd "Sec:"
Do
Seconds:
If S1 = 6 Then M2 = M2 + 1
If S1 = 6 Then S1 = 0
Locate 1 , 13
Lcd S1
If S2 = 10 Then S2 = 0
Locate 1 , 14
Lcd S2
Minutes:
Locate 1 , 8
Lcd M1
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
Locate 1 , 9
Lcd M2
Houres:
If H1 = 6 Then Goto Clockzero
Locate 1 , 1
Lcd H1
If H2 = 10 Then H1 = H1 + 1
If H2 = 10 Then H2 = 0
Locate 1 , 2
Lcd H2
S2 = S2 + 1
If S2 = 10 Then S1 = S1 + 1
Waitms  1000
Loop


в тексте указан внутренний кварц, но на самом деле уже сделал внешний 8.000 мгц.
как указывать внешний я не знаю.
Последний раз редактировалось Vooon 30 сен 2009, 19:21, всего редактировалось 2 раз(а).
Причина: CODE!!!
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение avr123.nm.ru » 30 сен 2009, 19:01

Чтобы не заблуждаться про внутренние кварцы советую почитать - Устройство микроконтроллера AVR - http://avr123.nm.ru/02.htm - возможно вы станете более осознано подходить к программированию AVR зная больше о его устройстве.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение boez » 30 сен 2009, 19:33

И вообще - делать часы на задержках - гнилая затея, точно идти не будут. Часы надо делать на таймере. Не обязательно на часовом кварце, можно на основном - но на таймере. Даже можно без прерываний, если не хочется.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение Zoom » 30 сен 2009, 19:35

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

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

Сообщение galex1981 » 30 сен 2009, 20:49

Если ты ее вгонишь также в цикл - точное время так и не получишь - делай на таймере
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 » 30 сен 2009, 20:55

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

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

Сообщение galex1981 » 30 сен 2009, 20:57

что значит бейсиковский таймер? Есть таймеры у МК timer0, timer1 иногда timer2...
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 » 30 сен 2009, 21:11

ну а бейсик работает своими средстивами с этими таймерами, не выходя за рамки бейсика?
Zoom
 
Сообщения: 38
Зарегистрирован: 28 сен 2009, 15:35
Откуда: Москва

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

Сообщение avr123.nm.ru » 30 сен 2009, 21:29

Zoom писал(а):а как например написать на asm задержку по таймеру на 1 секунду, чтобы ее всавить в качестве паузы?
Как вариант - пишите в любом из примеров CVAVR строку delay_ms(1000); подключаете delay.h ? компилите и смотрите АСМ код в файле листинга.

Так же можно узнать как сделать на АСМ-е другие функции и задачи.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Duhas » 30 сен 2009, 21:54

имхо некоторые вещи могут быть сделаны через опу... мб я и ошибаюсь...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

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

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

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

Сообщение galex1981 » 01 окт 2009, 10:29

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

След.

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

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

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