BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Нашел я все таки пример кода, того что мне надо было, только без синусов и косинусов. Теперь все нормально считает. Всем спасибо за ответы. Это нужно было для расчетов разных данных по GPS координатам. И в одном действии получалось число типа 0,000000002314 например, поэтому и нужно было 12 заков после запятой. При использовании переменной типа single от этого числа 0 оставался.
Re: BASCOM AVR в вопросах и ответах
NucLeaR писал(а):число 0,000000002314 .... При использовании переменной типа single от этого числа 0 оставался.
С Баскомом не работал, потому насчет single не в курсе ; но при использовании плавающей арифметики точность представления числа во всем диапазоне практически одинаковая, потому как мантисса представляется нормализованной 0,5 <= M < 1,0. Поэтому 0,000000002314 отобразится практически с той же точностью, как и 0,2314 и никто нигде не теряется. Другое дело если приходится суммировать числа, далекие друг от друга по порядку величины. Ну тут уж надо грамотно продумывать используемые численные методы.
Re: BASCOM AVR в вопросах и ответах
нет, пробовал с single она хранит максимум 9 цыфр вместе с точкой остальное все теряется. Хотя single можно еще как то настроить
Re: BASCOM AVR в вопросах и ответах
Single - диапазон +/- 10^38, длина 32 бита, точность 7-8 значащих цифр.
Double - диапазон +/- 10^308, длина 64 бита, точность до 16 значащих цифр.
Если реально число будет содержать больше цифр, то точность ограничена указанная ранее. И никакая настройка не поможет. Физически негде хранить. Но, например, в виндузном калькуляторе, похоже используется "длинная" арифметика. Это типа представление числа в виде массива. То же путь увеличения реальной значности числа. Или вовсе символьная арифметика, как например в забытом коболе, где разрядность не ограничивалась вовсе.
Double - диапазон +/- 10^308, длина 64 бита, точность до 16 значащих цифр.
Если реально число будет содержать больше цифр, то точность ограничена указанная ранее. И никакая настройка не поможет. Физически негде хранить. Но, например, в виндузном калькуляторе, похоже используется "длинная" арифметика. Это типа представление числа в виде массива. То же путь увеличения реальной значности числа. Или вовсе символьная арифметика, как например в забытом коболе, где разрядность не ограничивалась вовсе.
Re: BASCOM AVR в вопросах и ответах
vem566 писал(а):Single - диапазон +/- 10^38, длина 32 бита, точность 7-8 значащих цифр.
Double - диапазон +/- 10^308, длина 64 бита, точность до 16 значащих цифр.
Single , я думаю, достаточно для большинства реальных приложений, Double - не могу представить себе извращений, для которых и этой точности будет недостаточно. Разве что для погони за рекордом в вычислении числа Пи, но сейчас этот рекорд уже так немыслимо далек, что ну его...
Re: BASCOM AVR в вопросах и ответах
Однажды при мне программисты, занимающиеся расчетом траектории марсианской станции, обсуждали потребность в 24-х значащих цифр. Писали программу на фортране, а там только double. Услышал просто фрагмент беседы. Как решили, и зачем такое количество цифр, не в курсе.
Re: BASCOM AVR в вопросах и ответах
Значит, мне повезло, что не занимался марсианскими делами.
Для моей энергетической аппаратуры хватало 3-байтовой float : знак-порядок и 2 байта мантисса без скрытого разряда. Точность на порядок превышала требуемую железом.
Re: BASCOM AVR в вопросах и ответах
Однажды при мне программисты, занимающиеся расчетом траектории марсианской станции, обсуждали потребность в 24-х значащих цифр. Писали программу на фортране, а там только double. Услышал просто фрагмент беседы.
Так вроде бы куча станций и промахнулась мимо Марса. Что у нас что у американцев. Вот оказывается почему
Как сделать 3 кнопки на часах и будильник
Помогите пожалуйста!!!надо сделать 3 кнопки на часах вот программа,часы уже готовые,нужны кнопки чтобы настроить время и будильник!прошу помогите срочно надо!!!
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 24 ' default use 40 for the frame space
'*** 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 Lcd = 16 * 2
Cursor Off . Noblink
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
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
Do
Locate 1 , 5
Lcd S1
Locate 1 , 6
Lcd S2
Locate 1 , 3
Lcd M1
Locate 1 , 4
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
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 24 ' default use 40 for the frame space
'*** 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 Lcd = 16 * 2
Cursor Off . Noblink
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
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
Do
Locate 1 , 5
Lcd S1
Locate 1 , 6
Lcd S2
Locate 1 , 3
Lcd M1
Locate 1 , 4
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
Re: BASCOM AVR в вопросах и ответах
toxai007, что то не понятна проблема. Ну взять готовый будильник на меге8 и прошить. Делов то. Все равно схему доделывать - кнопки прикручивать. Если идея нужна, проще простого. Если дописывать программу - на хрена(см. выше)? Навалом готовых.
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
Приветствую!
приобрёл два дисплея с T6963c, модель apex HG241281 и Bolynim BG240128A1fpcb$
не могу запустить, самое лучшее - при нажатии Сброс на экране горизонтальная полоска, которая потом гаснет (мгновенно)
поделитесь hex для проверки!
мега8/16/328 128 - что есть в наличии
пробовал примеры из КодеВижен и Баском - фиг вам...
приобрёл два дисплея с T6963c, модель apex HG241281 и Bolynim BG240128A1fpcb$
не могу запустить, самое лучшее - при нажатии Сброс на экране горизонтальная полоска, которая потом гаснет (мгновенно)
поделитесь hex для проверки!
мега8/16/328 128 - что есть в наличии
пробовал примеры из КодеВижен и Баском - фиг вам...
Re: BASCOM AVR в вопросах и ответах
Приветствую котов 
Пришел к Вам за помощью.
Сделал себе ДХО на тиньке, установил в авто и все тип-топ работает. На бортовую эл. никаких наводок и помех. Частота ШИМ 136Гц.
Появилась у меня мысль прикошачить к схеме контрольный светодиод.
Своими вспышками он будет показывать выбранный уровень ШИМ. Ну, так сказать, красивости ради и мозг потренировать.
Кажись, код прост до ужаса, а вот мигает ни так и с задержкой.
Алгоритм такой
Если ШИМ = 30, то мигаем 3-мя короткими вспышками каждый 2сек. (т.е. помигали 3 раза, пауза 2сек. помигали 3 раза и т.д.)
Если ШИМ = 40, то 4 короткие вспышки -- пауза 2сек. -- опять 4 короткие вспышки - и т.д.
...
А вот если ШИМ = 0 (т.е. ДХО выключены) - одна короткая вспышка -- пауза 2сек. -- одна короткая вспышка - и т.д.
Пробовал так (код немного урезанный)
и так:
Временные задержки между включенным и выключенным получился одинаковый, а отработка кнопки настройки ШИМ работает через раз в обоих случаях.
Буду признателен, если направите на путь праведный. Помогите разобраться
Пришел к Вам за помощью.
Сделал себе ДХО на тиньке, установил в авто и все тип-топ работает. На бортовую эл. никаких наводок и помех. Частота ШИМ 136Гц.
Появилась у меня мысль прикошачить к схеме контрольный светодиод.
Своими вспышками он будет показывать выбранный уровень ШИМ. Ну, так сказать, красивости ради и мозг потренировать.
Кажись, код прост до ужаса, а вот мигает ни так и с задержкой.
Алгоритм такой
Если ШИМ = 30, то мигаем 3-мя короткими вспышками каждый 2сек. (т.е. помигали 3 раза, пауза 2сек. помигали 3 раза и т.д.)
Если ШИМ = 40, то 4 короткие вспышки -- пауза 2сек. -- опять 4 короткие вспышки - и т.д.
...
А вот если ШИМ = 0 (т.е. ДХО выключены) - одна короткая вспышка -- пауза 2сек. -- одна короткая вспышка - и т.д.
Пробовал так (код немного урезанный)
Код: Выделить всё
...
Config Portb.0 = Output 'PWM OUT
Config Portb.2 = Output 'STATUS LED
Status Alias Pinb.2 'светодиод для STATUS
Do
...
Gosub Pwm30
Loop
Pwm30:
Do
Status = 1 : Waitms 300
Status = 0 : Wait 2
Loop Until Pwm0a <> 76
и так:
Код: Выделить всё
Do
For N_blink = 0 To 3
Toggle Status : Waitms 500 ' в таком случае мигание каждые 0,5сек., а куда добавить паузу в 2сек. ?
Next
Временные задержки между включенным и выключенным получился одинаковый, а отработка кнопки настройки ШИМ работает через раз в обоих случаях.
Буду признателен, если направите на путь праведный. Помогите разобраться
Re: BASCOM AVR в вопросах и ответах
Do
For N_blink = 0 To 3 <- вместо цифры 3 поставить переменную, в зависимости от требуемого количества миганий
Toggle Status : Waitms 500
Next
Wait 2 <- пауза 2 секунды
...
Как то так, исходя из приведенного фрагмента кода.
For N_blink = 0 To 3 <- вместо цифры 3 поставить переменную, в зависимости от требуемого количества миганий
Toggle Status : Waitms 500
Next
Wait 2 <- пауза 2 секунды
...
Как то так, исходя из приведенного фрагмента кода.
Re: BASCOM AVR в вопросах и ответах
Доброго времени суток всем.
Не подскажут ли благородные доны алгоритм управления нагрузкой по времени, если время работы нагрузки переходит через 0 часов 0 минут.
Хотя бы на пальцах.
Время читаю с ds1307.
пока только есть мысль проверять условие для такого случая (Твыкл < Твкл) и моргать портом от Твкл до 00.00 и от 00.00 до Твыкл
C уважением....
Не подскажут ли благородные доны алгоритм управления нагрузкой по времени, если время работы нагрузки переходит через 0 часов 0 минут.
Хотя бы на пальцах.
Время читаю с ds1307.
пока только есть мысль проверять условие для такого случая (Твыкл < Твкл) и моргать портом от Твкл до 00.00 и от 00.00 до Твыкл
C уважением....
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
самое простое, что придумал: делать внутренний счетчик, самому считать относительно секунд часов
или при получении задания вычислять время срабатывания
например, задание: 25 часов и 10 минут
сейчас 11:30, прибавить и получить время
или при получении задания вычислять время срабатывания
например, задание: 25 часов и 10 минут
сейчас 11:30, прибавить и получить время
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
в библиотеке для ds1307 есть системные переменные - _часы, _минуты, _секунды... Или как то так...
Я проверяю на совпадение значений часов, минут, секунд заданного "будильника" с этими системными перемененными, часы и минуты по строгому равно, а секунды больше или равно...
ЗЫ Там же есть и системные переменные для дат.
ЗЫЗЫ Я пользуюсь библиотекой из примеров пакета установки Баском.
Я проверяю на совпадение значений часов, минут, секунд заданного "будильника" с этими системными перемененными, часы и минуты по строгому равно, а секунды больше или равно...
ЗЫ Там же есть и системные переменные для дат.
ЗЫЗЫ Я пользуюсь библиотекой из примеров пакета установки Баском.
Последний раз редактировалось pavel123 Пн июл 14, 2014 14:26:12, всего редактировалось 1 раз.
Re: BASCOM AVR в вопросах и ответах
vem566 писал(а):Do
For N_blink = 0 To 3 <- вместо цифры 3 поставить переменную, в зависимости от требуемого количества миганий
Toggle Status : Waitms 500
Next
Wait 2 <- пауза 2 секунды
...
Как то так, исходя из приведенного фрагмента кода.
Не пашет
Мигает не по времени и тормозит отработку кнопки.Какие еще есть варианты?
Re: BASCOM AVR в вопросах и ответах
KOTик писал(а):Какие еще есть варианты?
Весь код предоставить. Чем заняты прерывания?
Re: BASCOM AVR в вопросах и ответах
vem566 писал(а):Весь код предоставить. Чем заняты прерывания?
Вот весь проект.
Помогите, пожалуйста. Уже который день бьюсь над индикацией.
Схема исправно работает в авто, а индикацию потом надумал замутить.
"мигание" тормозит весь проект, отработку нажатия на кнопку настройки и мигает неправильно.
Re: BASCOM AVR в вопросах и ответах
Ну было бы странно, если бы такая конструкция работала.
Можно попробовать проще. Мелкие косяки программы выясняются сравнением текстов myDRL и myDRL1.
В протеусе все нормально.
Можно попробовать проще. Мелкие косяки программы выясняются сравнением текстов myDRL и myDRL1.
В протеусе все нормально.
- Вложения
-
- myDRL.rar
- (51.32 КБ) 241 скачивание