BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
а в баскоме есть многомерные массивы ? в хелпе ищу-ищу, никак не найду, совсем плохо аглицкий знаю
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Увы, нет.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
Здравствуйте!!!
Есть небольшая проблема, помогите пожалуйста - как говориться кто чем сможет!!!
Есть некая задачка сделать так называемый прибор который бы делал расчет расстояния между двумя указанными точками и определял курс. Известно 2-е координаты GPS одной точки (LAT1,LON1) и 2-е координаты GPS другой точки (LAT2,LON2). Например - (LAT1=51.0366, LON1=31.5474) и (LAT2=50.2673, LON2=30.3109), первая задача ввести их с помощью например 4-ох кнопок. Потом нажатием кнопки на экран выводилось бы значения distance и course вот и все - казалось бы ничего сложного но пробовал по разному - не получается.....! Уже согласен и на использование внешней памяти и изменить например ввод данных, но... Может кто подскажет свой вариант решения буду очень признателен.
-Имеем следующее:
процессор Atmega8, Atmega16,Atmega128 не важно, экран от NOKIA6610, 4 кнопки управления. (GPS в приборе не участвует, данные вводятся уже как бы известные).
Подскажите как решить проблему.
Все нужные файлы прилагаю...
Разница между файлом distance between GPS coordinates1 и enter_data-coordinates в том, что в первой программе ничего не нужно вводить из-за наличия строки процедуры
Call Get_distance_course(51.0366 , 31.5474 , 50.2673 , 30.3109), а нужно как раз вводить координаты GPS из вне... В Баскоме не силен поэтому прошу помощи.
""""""""""""""""""""""""""""""""""Помогите пожалуйста"""""""""""""""""""""""""""""""""""
Есть небольшая проблема, помогите пожалуйста - как говориться кто чем сможет!!!
Есть некая задачка сделать так называемый прибор который бы делал расчет расстояния между двумя указанными точками и определял курс. Известно 2-е координаты GPS одной точки (LAT1,LON1) и 2-е координаты GPS другой точки (LAT2,LON2). Например - (LAT1=51.0366, LON1=31.5474) и (LAT2=50.2673, LON2=30.3109), первая задача ввести их с помощью например 4-ох кнопок. Потом нажатием кнопки на экран выводилось бы значения distance и course вот и все - казалось бы ничего сложного но пробовал по разному - не получается.....! Уже согласен и на использование внешней памяти и изменить например ввод данных, но... Может кто подскажет свой вариант решения буду очень признателен.
-Имеем следующее:
процессор Atmega8, Atmega16,Atmega128 не важно, экран от NOKIA6610, 4 кнопки управления. (GPS в приборе не участвует, данные вводятся уже как бы известные).
Подскажите как решить проблему.
Все нужные файлы прилагаю...
Разница между файлом distance between GPS coordinates1 и enter_data-coordinates в том, что в первой программе ничего не нужно вводить из-за наличия строки процедуры
Call Get_distance_course(51.0366 , 31.5474 , 50.2673 , 30.3109), а нужно как раз вводить координаты GPS из вне... В Баскоме не силен поэтому прошу помощи.
""""""""""""""""""""""""""""""""""Помогите пожалуйста"""""""""""""""""""""""""""""""""""
- Вложения
-
- distance between GPS.rar
- (223.14 КБ) 201 скачивание
Re: BASCOM AVR в вопросах и ответах
А есть функция, чтоб число переворачивала ? ну например из 0110_0000, делала 0000_0110
сейчас так делаю, но чую что-то должно быть готовое
сейчас так делаю, но чую что-то должно быть готовое
Код: Выделить всё
For X = 0 To 7
X2 = 7 - X
Temp.x = T1.x2
Next X чего-то я не понял, ну во второй-то программе(кторая enter), все же циферки нормально вводятся, чем она не нравится ?tanx писал(а):Разница между файлом distance between GPS coordinates1 и enter_data-coordinates в том, что в первой программе ничего не нужно вводить из-за наличия строки процедуры ..... а нужно как раз вводить координаты GPS из вне...
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Ну это не переворот. Тут , первое, что в голову пришло- "ROTATE var , LEFT/RIGHT[ , shifts]" 4 раза
По кругу двигает.
По кругу двигает.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
_Vasilij_ писал(а):
чего-то я не понял, ну во второй-то программе(кторая enter), все же циферки нормально вводятся, чем она не нравится ?
Так дело как раз и в этом, что нужно ввести с помощью кнопок любых 2 точек координат GPS
и после нажатия скажем средней кнопки (как в примере ПРОТЕУС)- должно выводиться результат,
а в итоге получается и курс и дистанция =0. Можно судить, что расчет не происходит.
По логике получается, что не происходит ввод координат, или не правильно определены функции,процедуры, типы данных, или до расчета просто не доходит дело......*?
чего-то я не понял, ну во второй-то программе(кторая enter), все же циферки нормально вводятся, чем она не нравится ?
Так дело как раз и в этом, что нужно ввести с помощью кнопок любых 2 точек координат GPS
и после нажатия скажем средней кнопки (как в примере ПРОТЕУС)- должно выводиться результат,
а в итоге получается и курс и дистанция =0. Можно судить, что расчет не происходит.
По логике получается, что не происходит ввод координат, или не правильно определены функции,процедуры, типы данных, или до расчета просто не доходит дело......*?
Re: BASCOM AVR в вопросах и ответах
tanx, я сам не очень еще в баскоме, но в глаза бросается, то что вводимые параметры lad и lod объявлены как локальные, мне кажется они не вернутся в программу....во-вторых при процедуре ввода они являются string-ами, а при подсчете они же объявлены уже как дабл и соответственно в функцию подсчета отправляются нули...
отсюда нужно всетаки вытащить в программу то, что навводили...потом преобразовать строку в число, и только после этого вызывать подсчет...навскидку фигня в пару строк, но я не сталкивался
pps попробуй убрать слово local от общих lad и lod , а вот по поводу перевода string в double даже не подскажу, мож оператор какой есть...извини сам тестить не буду, уж очень экран в протеусе поганенький - ничо не вижу.
отсюда нужно всетаки вытащить в программу то, что навводили...потом преобразовать строку в число, и только после этого вызывать подсчет...навскидку фигня в пару строк, но я не сталкивался
pps попробуй убрать слово local от общих lad и lod , а вот по поводу перевода string в double даже не подскажу, мож оператор какой есть...извини сам тестить не буду, уж очень экран в протеусе поганенький - ничо не вижу.
Re: BASCOM AVR в вопросах и ответах
Я хочу извинится, за свою навязчивость.... Помогите пожалуйста с примером, есть три семисегментных индкатора с общим анодом, с этого сайта хотел взять пример для изучения, но там индикаторы с общим катодом http://edm2007.narod.ru/startavr6.html.......
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Здравствуйте.
А Вы прочитайте все статьи из цикла, начиная с самой первой. Именно в ней я писал про типы индикаторов. А потом просто измените коды цифр, и всех делов. Совсем не сложно, просто разобраться нужно...
P.S. Для создания кодов цифр можете воспользоваться удобной программой LED Code Editor. Интерфейс интуитивно понятен, а суть работы можно увидеть в справке.
А Вы прочитайте все статьи из цикла, начиная с самой первой. Именно в ней я писал про типы индикаторов. А потом просто измените коды цифр, и всех делов. Совсем не сложно, просто разобраться нужно...

P.S. Для создания кодов цифр можете воспользоваться удобной программой LED Code Editor. Интерфейс интуитивно понятен, а суть работы можно увидеть в справке.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Здравствуйте.
А Вы прочитайте все статьи из цикла, начиная с самой первой. Именно в ней я писал про типы индикаторов. А потом просто измените коды цифр, и всех делов. Совсем не сложно, просто разобраться нужно...
P.S. Для создания кодов цифр можете воспользоваться удобной программой LED Code Editor. Интерфейс интуитивно понятен, а суть работы можно увидеть в справке.
Сделал все как вы сказали, но на индикаторе выводит восьмерки, что не так я сделал, я использовал программу led code editor
$regfile = "m8def.dat"
$crystal = 8000000
'*****************************************[Определение переменных и констант]************************************
Dim Count As Byte ' переменная для индикации
Dim Number(3) As Byte ' значения трех разрядов
'***********************************************[Инициализация портов]*******************************************
Config Portc.1 = Output ' светодиод
Config Portd = Output ' порт сегментов индикатора
Config Portb.3 = Output ' первый разряд индикатора
Config Portb.4 = Output ' второй разряд индикатора
Config Portb.5 = Output ' третий разряд индикатора
'*********************************************[Инициализация прерываний]*****************************************
Config Timer0 = Timer , Prescale = 64 ' конфигурируем таймер индикации (~500 Гц)
On Ovf0 Refresh ' метка на прерывание индикации
'********************************************[Присвоение уникальных имен]****************************************
Led Alias Portc.1 ' присваиваем имя светодиоду
Dig1 Alias Portb.3 : Dig2 Alias Portb.4 : Dig3 Alias Portb.5 ' и разрядам индикатора
'*********************************************[Начало основной программы]****************************************
Enable Interrupts ' разрешаем все прерывания
Enable Ovf0 ' и для индикации в частности
'----------
Number(1) = 4 ' выведем на индикатор 456
Number(2) = 5
Number(3) = 6
'----------
Do ' крутимся здесь, ожидая прерывание
Toggle Led ' мигаем светодиодом
Wait 1
Loop
'***********************************[Процедуры обработки подпрограмм и прерываний]*******************************
Refresh: ' прерывание таймера Т0 (индикация)
Reset Dig1 : Reset Dig2 : Reset Dig3 ' гасим индикатор
Incr Count : If Count > 3 Then Count = 1 ' выбираем разряд для загрузки
Portd = Lookup(number(count) , Digits) ' закидываем в порт код цифры
Select Case Count ' и включаем соответствующий разряд индикатора
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
End Select
Return ' выход из обработчика прерывания
Digits: ' цифры
Data &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001 ' 0 1 2 3 4
Data &B01001001 , &B00000101 , &B00011111 , &B00000001 , &B00001001 ' 5 6 7 8 9
Re: BASCOM AVR в вопросах и ответах
Парни подскажите как 128мегу в POWERDOWN загнать, bascom 2 0 7 6 , там новая команда появилась
CONFIG POWERMODE=....
ЧЕ ТОЛЬКО НЕ ПРОБОВАЛ-жрет окаянная 5мА и меньше не как...
CONFIG POWERMODE=....
ЧЕ ТОЛЬКО НЕ ПРОБОВАЛ-жрет окаянная 5мА и меньше не как...
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Читайте даташит. Посто в POWERDOWN мало. Про 128 не скажу, но как правило в повердаун много что ещё работает. К примеру "собака", супервизор( в котором опорка много жрёт), если АЦП включён, оять же опорка, порты остались включёнными, компаратор(по умолчанию включён), режим тактирования, опять же - схемное решение (может не контроллер жрёт) ну и т.д.
Вообщем- даташит Вам в помощь!
И тем не менее я мегу48 усыплял, что мог добиться - это 5uA против 0,4uA заявленных.
Вообщем- даташит Вам в помощь!
И тем не менее я мегу48 усыплял, что мог добиться - это 5uA против 0,4uA заявленных.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
cattus писал(а):Сделал все как вы сказали, но на индикаторе выводит восьмерки
Вероятно не всё, общий анод управляется 0.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
cattus, Вы транзисторы какие поставили? amv2000 верно сказал, для управления p-n-p транзисторов (именно их используют для ОА) нужно подавать 0. А значит гаситься индикаторы будут:
А зажигаться:
У меня тинька 2313 в Powerdown меньше 1uA и потребляет. Естественно компаратор и прочее отключено. Что интересно, команда Powerdown судя по регистрам в отладчике, угнала МК в режим IDLE. Как результат - повышенное потребление. А вот Power Powerdown перевела МК в нужный режим.
Код: Выделить всё
Set Dig1 : Set Dig2 : Set Dig3 ' гасим индикатор
А зажигаться:
Код: Выделить всё
Select Case Count ' и включаем соответствующий разряд индикатора
Case 1 : Reset Dig1
Case 2 : Reset Dig2
Case 3 : Reset Dig3
End Select
kip96 писал(а):И тем не менее я мегу48 усыплял, что мог добиться - это 5uA против 0,4uA заявленных.
У меня тинька 2313 в Powerdown меньше 1uA и потребляет. Естественно компаратор и прочее отключено. Что интересно, команда Powerdown судя по регистрам в отладчике, угнала МК в режим IDLE. Как результат - повышенное потребление. А вот Power Powerdown перевела МК в нужный режим.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
Транзисторы кт3107, поставил
$regfile = "m8def.dat"
$crystal = 8000000
'*****************************************[Определение переменных и констант]************************************
Dim Count As Byte ' переменная для индикации
Dim Number(3) As Byte ' значения трех разрядов
'***********************************************[Инициализация портов]*******************************************
Config Portc.1 = Output ' светодиод
Config Portd = Output ' порт сегментов индикатора
Config Portb.3 = Output ' первый разряд индикатора
Config Portb.4 = Output ' второй разряд индикатора
Config Portb.5 = Output ' третий разряд индикатора
'*********************************************[Инициализация прерываний]*****************************************
Config Timer0 = Timer , Prescale = 64 ' конфигурируем таймер индикации (~500 Гц)
On Ovf0 Refresh ' метка на прерывание индикации
'********************************************[Присвоение уникальных имен]****************************************
Led Alias Portc.1 ' присваиваем имя светодиоду
Dig1 Alias Portb.3 : Dig2 Alias Portb.4 : Dig3 Alias Portb.5 ' и разрядам индикатора
'*********************************************[Начало основной программы]****************************************
Enable Interrupts ' разрешаем все прерывания
Enable Ovf0 ' и для индикации в частности
'----------
Number(1) = 4 ' выведем на индикатор 456
Number(2) = 5
Number(3) = 6
'----------
Do ' крутимся здесь, ожидая прерывание
Toggle Led ' мигаем светодиодом
Wait 1
Loop
'***********************************[Процедуры обработки подпрограмм и прерываний]*******************************
Refresh: ' прерывание таймера Т0 (индикация)
Set Dig1 : Set Dig2 : Set Dig3 ' гасим индикатор
Incr Count : If Count > 3 Then Count = 1 ' выбираем разряд для загрузки
Portd = Lookup(number(count) , Digits) ' закидываем в порт код цифры
Select Case Count ' и включаем соответствующий разряд индикатора
Case 1 : Reset Dig1
Case 2 : Reset Dig2
Case 3 : Reset Dig3
End Select
Return ' выход из обработчика прерывания
Digits: ' цифры
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 ' 0 1 2 3 4
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 ' 5 6 7 8 9
Спасибо всем помогли ваши советы, принцип работы с индикатором разобрал, извиняюсь за то что подредактировал сообщение....
$regfile = "m8def.dat"
$crystal = 8000000
'*****************************************[Определение переменных и констант]************************************
Dim Count As Byte ' переменная для индикации
Dim Number(3) As Byte ' значения трех разрядов
'***********************************************[Инициализация портов]*******************************************
Config Portc.1 = Output ' светодиод
Config Portd = Output ' порт сегментов индикатора
Config Portb.3 = Output ' первый разряд индикатора
Config Portb.4 = Output ' второй разряд индикатора
Config Portb.5 = Output ' третий разряд индикатора
'*********************************************[Инициализация прерываний]*****************************************
Config Timer0 = Timer , Prescale = 64 ' конфигурируем таймер индикации (~500 Гц)
On Ovf0 Refresh ' метка на прерывание индикации
'********************************************[Присвоение уникальных имен]****************************************
Led Alias Portc.1 ' присваиваем имя светодиоду
Dig1 Alias Portb.3 : Dig2 Alias Portb.4 : Dig3 Alias Portb.5 ' и разрядам индикатора
'*********************************************[Начало основной программы]****************************************
Enable Interrupts ' разрешаем все прерывания
Enable Ovf0 ' и для индикации в частности
'----------
Number(1) = 4 ' выведем на индикатор 456
Number(2) = 5
Number(3) = 6
'----------
Do ' крутимся здесь, ожидая прерывание
Toggle Led ' мигаем светодиодом
Wait 1
Loop
'***********************************[Процедуры обработки подпрограмм и прерываний]*******************************
Refresh: ' прерывание таймера Т0 (индикация)
Set Dig1 : Set Dig2 : Set Dig3 ' гасим индикатор
Incr Count : If Count > 3 Then Count = 1 ' выбираем разряд для загрузки
Portd = Lookup(number(count) , Digits) ' закидываем в порт код цифры
Select Case Count ' и включаем соответствующий разряд индикатора
Case 1 : Reset Dig1
Case 2 : Reset Dig2
Case 3 : Reset Dig3
End Select
Return ' выход из обработчика прерывания
Digits: ' цифры
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 ' 0 1 2 3 4
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 ' 5 6 7 8 9
Спасибо всем помогли ваши советы, принцип работы с индикатором разобрал, извиняюсь за то что подредактировал сообщение....
Последний раз редактировалось cattus Пн мар 25, 2013 16:37:48, всего редактировалось 2 раза.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ну вот и действуем соответственно. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
ХатёнаГГ
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Пт фев 27, 2009 01:07:41
- Откуда: Иваново - город невест
Re: BASCOM AVR в вопросах и ответах
Привет котам!
Такая проблема: МК - тини13. Пишу прогу, что б попробовать управление моторредуктором. Объявляю переменные R и Rd, как Word. В них будет храниться результат считывания АЦП.
При компиляции выдаёт еррор 22 на строках 6,7, т.е. где объявляются R и Rd. Программа небольшая, почему же баском ругается, что нет памяти SRAM и как это исправить?
Config Portb.1 = Output
Config Portb.0 = Output
Up Alias Portb.0
Down Alias Portb.1
Dim R As Word
Dim Rd As Word
Up = 0
Down = 0
R = 0
Rd = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП
Do
Start Adc 'запускаем аналого-цифровое преобразование
R = Getadc(2)
Rd = Getadc(3)
Stop Adc
If R > Rd Then
Up = 1
Down = 0
End If
If R < Rd Then
Up = 0
Down = 1
If Rd < 204 Then
Up = 0
Down = 0
End If
Else
Up = 0
Down = 0
End If
Loop
End
Такая проблема: МК - тини13. Пишу прогу, что б попробовать управление моторредуктором. Объявляю переменные R и Rd, как Word. В них будет храниться результат считывания АЦП.
При компиляции выдаёт еррор 22 на строках 6,7, т.е. где объявляются R и Rd. Программа небольшая, почему же баском ругается, что нет памяти SRAM и как это исправить?
Спойлер
$regfile = "attiny13.dat"Config Portb.1 = Output
Config Portb.0 = Output
Up Alias Portb.0
Down Alias Portb.1
Dim R As Word
Dim Rd As Word
Up = 0
Down = 0
R = 0
Rd = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП
Do
Start Adc 'запускаем аналого-цифровое преобразование
R = Getadc(2)
Rd = Getadc(3)
Stop Adc
If R > Rd Then
Up = 1
Down = 0
End If
If R < Rd Then
Up = 0
Down = 1
If Rd < 204 Then
Up = 0
Down = 0
End If
Else
Up = 0
Down = 0
End If
Loop
End
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Привет.
Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = тут Ваша частота работы МК
$hwstack = 32
$swstack = 8
$framesize = 16
.....................................
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
ХатёнаГГ
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Пт фев 27, 2009 01:07:41
- Откуда: Иваново - город невест
Re: BASCOM AVR в вопросах и ответах
Спасибомяууу))
Всё закомпилилось)
А что не хватало? Что эти команды делают?
А что не хватало? Что эти команды делают?
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
ХатёнаГГ писал(а):Что эти команды делают?
Если интересно то здесь обсуждалась эта проблема http://bascomavr.3bb.ru/viewtopic.php?id=494
здесь http://avrproject.ru/forum/9-122-1
или на официальном http://www.mcselec.com/index.php?option ... &Itemid=57