BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

Re: BASCOM AVR в вопросах и ответах

Сообщение Адвансед »

как в bascom переключать скажем время срабатывания реле с помощью одной кнпоки

тоесть

если нажата кнопка 1 то идем в подпрограмму такую то (goto)
в этой программе начинаем считать до 10 секунд и если повторно не нажата кнопка то включаем реле

если в течение скажем 5 сек эта же кнопка нажата еще раз то прибавляем еще 10 сек
иначе ??

end

как все это реализовать? в баскоме не работал года 4 - подзабыл уже...


мне нужно одной кнопкой определять время включения порта, нажал раз - порт сработает через 5 сек, нажал 2 раза в течение определенного времени, порт сработает через 10 сек.


спасибо большое
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение ev3658 »

Кто сталкивался с Atmega128 и Bascom?
Есть подводные камни с портами или чем нибудь таким, чего не смогу использовать?
К примеру отлутил плату, а оказалось Miso и Mosi на RX и TX надо.
P:S: Вот вам лакомый мануальчик на русском языке - :)))
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

ev3658 писал(а):К примеру отлутил плату, а оказалось Miso и Mosi на RX и TX надо.


Здравствуйте.

Так а при чем тут Bascom? Даташиты штука полезная:

Изображение

А то что Вы посадили программатор на выводы аппаратного SPI, Bascom точно не виноват. Это иначе называется. :wink:
Вложения
Atmega128_SPI.png
(46.68 КБ) 2588 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение ev3658 »

Да вдруг какие порты не может сам компилятор использовать, а мне нужны все. А то опять плату сделаю и рыдать буду. Вот кстати, сочувствуйте мне все и разом :cry:
Изображение
Изображение
Теперь всё переделывать, разбирать :o
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Да, печаль-беда... Насколько я помню, проблем с портами не было, все было доступно. Впрочем, в любой момент можно на Си переписать. Или на АСМе. У их точно проблем с портами нет. :))
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Адвансед, вариантов решения этой задачи довольно много. Я не буду говорить о тупом пожирании тактов в циклах проверки "нажали - не нажали", Вы этот код сами написали, осталось его с русского на bascom'овский перевести. Если же писать так, чтобы данная штука работала не мешая никому, то я бы сделал простейший автомат состояний на таймере. Настроили таймер на отсчет 1 секунды, пока остановили. В обработчике нажатия кнопки проверяем, если таймер не запущен, запускаем его. Если же он уже молотит, то прибавляем к счетчику нужное количество секунд. Ну а в обработчике уменьшаем этот счетчик. Понятное дело, если досчитали до конца, выставляем соответствующий флаг. А по нему уже делаем что угодно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Re: BASCOM AVR в вопросах и ответах

Сообщение Moto_v3x »

ev3658 Тогда запишите один раз загрузчик и через UART заливайте потом прошивку, у Баскома вроде свой есть.
А по поводу портов в версии 1.9 вроде были косяки с PORTG когда пробовал подключать дисплей на KS0108 по такой схеме
http://img.radiokot.ru/files/21011/im2n38j0k.jpg
но в версии 2 стало работать корректно.
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение ev3658 »

Ну Коты, совсем Wискаря зажрались! :)))
Первый подводный камень, это "совместимость с Atmega103" - отключать его нафиг надо, а то порты не будут многие работать!!!! ВО!!! Прикрепляю картинку!
Изображение

Moto_v3x писал(а):ev3658 Тогда запишите один раз загрузчик и через UART заливайте потом прошивку, у Баскома вроде свой есть.
А по поводу портов в версии 1.9 вроде были косяки с PORTG когда пробовал подключать дисплей на KS0108 по ...

Загрузчик нее... так отлично шьётся, чем UsbAsp с баском отлично дружит. У меня к сожалению ST7920.
Вложения
2014-12-12 01-21-46 Скриншот экрана.png
(52.5 КБ) 2429 скачиваний
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение vanyap1 »

У меня пару месяцев назад была проблема с м128. Сделал плату а оно не шьется. А оказалась проблема описана выше.
Записал баскомовский загрузчик и проблем как не бывало. Потом на все свои подели поставил загрузчик аналогично. И как следствие - забыл о головной боли с битами конфигурации.
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение Dnepr_1186 »

парни помогите, следующая беда. Делаю задание для курсового проекта. Там устройство измеряет две частоты и в зависмости от их сочетания выдает соответсвующие сигналы.
Частоту меряю внешними прерываниями и с помощбю таймеров.
Но вот одна частота меряется (которая по тамер1) и отображается как нужно, а вот вторая (которую меряет по таймер0) корректно не отображается, я так понимаю что таймер очень часто переполняется. В баском новичек, вот код, может можно что-то подкорретировать, чтобы корректно отображалось. Часта измеряется в пределах 0-300гц. Спасибо заранее!

Код: Выделить всё

Enable Timer1
Enable Timer0
Config Timer1 = Timer , Prescale = 1024
Config Timer0 = Timer , Prescale = 1024
 Enable Interrupts
 Enable Int0
 Enable Int1
 Config Pind.2 = Input
Config Int0 = Falling
Config Pind.3 = Input
Config Int1 = Falling
On Int0 Speed
On Int1 Oboroty
Dim A As Word
Dim B As Word
Dim I As Integer
Dim O As Integer
Dim Speed2 As Single
Dim Speed1 As Single
Dim Ob As Single
Dim Ob1 As Single
Dim Text As String * 14
Dim Ccc As String * 5
  Do
Speed1 = 1 / A

Speed2 = Speed1 * 468720

 I = Int(speed2)
Ob = 1 / B

Ob = Ob * 468720
If Ob < 300 Then
Ob = 0
End If
 O = Int(ob)


Upperline
Lcd "speed:" ; I ; "   "
Lowerline
Lcd "oboroty:" ; O ; "   "
Waitms 100
Loop

Speed:
 Stop Timer1
 A = Timer1
 Timer1 = 0
  Start Timer1
Return
Oboroty:
 Stop Timer0
 B = Timer0
 Timer0 = 0
 Start Timer0

Return
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Здравствуйте.

Вы сейчас считаете время между импульсами, но можно ведь сделать иначе - считать количество импульсов за промежуток времени. Если настроить таймер на отсчет одной секунды, можно в обработчике этого таймера забирать результаты счетчиков (которые увеличиваются в соответствующих обработчиках INT0 и INT1). То бишь обнулили счетчики запустили таймер и завертелась карусель. Секунда прошла, заглянули в обработчик таймера, забрали насчитанное за секунду (готовое, заметьте, в Герцах) обнулили счетчики и таймер снова отсчитывает секунду... И это без всяких переполнений таймеров, захватов счетных регистров и прочего.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение Dnepr_1186 »

Спаисбо, попробую
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение ev3658 »

А вот ещё подводный камень с Atmega128!!!!
Чтоб использовать АЦП и вообще использовать на вход порт F, нужно в фьюзах отключать Jtag!!!! Во :shock:
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Ребята, все что вы на данный момент называете подводными камнями, является лишь незнанием. Самое интересное, что абсолютно все это есть в одном документе - даташите. При включенном JTAG автоматом подключаются подтягивающие резисторы на соответствующих линиях, да и пины PF4, PF5, PF6 и PF7 занимаются для других целей. Разумеется, все это будет мешать обычной работе с портом. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
dimon-ru-80
Встал на лапы
Сообщения: 86
Зарегистрирован: Ср ноя 19, 2014 17:13:21
Откуда: Украина, Никополь

Re: BASCOM AVR в вопросах и ответах

Сообщение dimon-ru-80 »

Уважаемые коты помогите кодом организовать регулировку яркости в часах . Контроллер Atmega8 тактируется от внутреннего генератора 8 мГц.
Хочется по переполнению TIMER0 выполнять динамическую индикацию, а по совпадению того же таймера гасить порт, не могу осилить код :( . Пример на форуме видил под тиньку2313:
$regfile = "attiny2313.dat" ' тип МК
$crystal = 4000000 ' выбор кристала для расчета задержек

'***[Определение переменных и констант]***

Dim Count As Byte
Dim I(3) As Byte ' три разряда

'***[Инициализация прерываний]***

' конфигурируем таймер (ТАЙМЕР ПРИ СОВПАДЕНИИ НЕ СБРАСЫВАЕМ)
Config Timer0 = Timer , Prescale = 64 , Clear Timer = 0

On Oc0a Refresh ' обзываем прерывание индикации
On Ovf0 Res_ind ' гашение индикации

Ocr0a = 100 ' регистр совпадения

Enable Interrupts ' разрешаем все прерывания
Enable Oc0a ' и для таймера в частности
Enable Ovf0

Под атмегу не катит - компилятор матерится OCOa - assigment error. Думаю что timero в меге8 не может выполнять два прерывания? Подскажите как организовать регулировку яркости имеющимися в меге8 таймерами?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Здравствуйте. Я все равно научу вас любить даташиты !!! И если вы думаете, что я устану на них ссылаться, то вы глубоко заблуждаетесь !!! :)) Смотрим таблицу векторов прерываний для ATMEGA8:

Изображение

Видим, что у таймера 0 есть только прерывание Timer/Counter0 Overflow, то бишь по переполнению. Вообще, Т0 в этом МК самый простой, он может только считать и генерировать прерывание по переполнению. Для простой индикации он подходит, а вот для регулировки яркости - никак. Зато видим, что у 8-ми битного таймера Т2 есть прерывания и OVF (Overflow - переполнение), и COMP (Compare - сравнение). Вот он и подходит.

P.S. 16-ти битный Т1 конечно тоже подойдет, но это слишком расточительно, использовать такой шикарный таймер для такой простой задачи...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
dimon-ru-80
Встал на лапы
Сообщения: 86
Зарегистрирован: Ср ноя 19, 2014 17:13:21
Откуда: Украина, Никополь

Re: BASCOM AVR в вопросах и ответах

Сообщение dimon-ru-80 »

edm2007 писал(а):Здравствуйте. Я все равно научу вас любить даташиты !!! И если вы думаете, что я устану на них ссылаться, то вы глубоко заблуждаетесь !!! :)) Смотрим таблицу векторов прерываний для ATMEGA8:

Изображение

Видим, что у таймера 0 есть только прерывание Timer/Counter0 Overflow, то бишь по переполнению. Вообще, Т0 в этом МК самый простой, он может только считать и генерировать прерывание по переполнению. Для простой индикации он подходит, а вот для регулировки яркости - никак. Зато видим, что у 8-ми битного таймера Т2 есть прерывания и OVF (Overflow - переполнение), и COMP (Compare - сравнение). Вот он и подходит.

P.S. 16-ти битный Т1 конечно тоже подойдет, но это слишком расточительно, использовать такой шикарный таймер для такой простой задачи...

Про таймер0 я увидел в мануале, интересует правильный синтаксис:
как то так?
config Timer2 = Timer , Prescale = 64 , COMPARE A = SET , Clear Timer = 0

On Timer2 Гашу порт
On OC2A Динамическая индикация

Endtime = 100

COMPARE A = Endtime

Enable INTERRUPTS

Enable Timer2
Enable OC2A
???????
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

dimon-ru-80 писал(а):я увидел в мануале


Не совсем внимательно читаете мануалы, значит. :)

dimon-ru-80 писал(а):config Timer2 = Timer , Prescale = 64 , COMPARE A = SET , Clear Timer = 0


COMPARE A = SET вообще из другой оперы, это изменение состояния вывода OC2 при совпадении. Нам оно без надобности.

dimon-ru-80 писал(а):On Timer2 Гашу порт
On OC2A Динамическая индикация


Возьмите за правило называть прерывания правильно. Во-первых, On OVF2 (хоть Timer2 и то же самое, но правильнее так), а во-вторых On OC2 (у таймера как видно по таблице нет каналов A и B).

dimon-ru-80 писал(а):COMPARE A = Endtime


Регистр сравнения - OCR2.

dimon-ru-80 писал(а):Enable Timer2
Enable OC2A


Здесь та же история что и с метками.

Резюме:

Код: Выделить всё

Config Timer2 = Timer , Prescale = 64 , Clear Timer = 0  ' при совпадении таймер не сбрасываем

On OVF2 Refresh   ' прерывание по переполнению - индикация
On OC2 Dimmer    ' прерывание по совпадению - регулировка яркости

OCR2 = 100          ' значение яркости

Enable OVF2          ' разрешаем по переполнению
Enable OC2           ' по совпадению
Enable Interrupts   ' и глобально все прерывания
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
dimon-ru-80
Встал на лапы
Сообщения: 86
Зарегистрирован: Ср ноя 19, 2014 17:13:21
Откуда: Украина, Никополь

Re: BASCOM AVR в вопросах и ответах

Сообщение dimon-ru-80 »

edm2007 писал(а):
dimon-ru-80 писал(а):я увидел в мануале


Не совсем внимательно читаете мануалы, значит. :)

dimon-ru-80 писал(а):config Timer2 = Timer , Prescale = 64 , COMPARE A = SET , Clear Timer = 0


COMPARE A = SET вообще из другой оперы, это изменение состояния вывода OC2 при совпадении. Нам оно без надобности.

dimon-ru-80 писал(а):On Timer2 Гашу порт
On OC2A Динамическая индикация


Возьмите за правило называть прерывания правильно. Во-первых, On OVF2 (хоть Timer2 и то же самое, но правильнее так), а во-вторых On OC2 (у таймера как видно по таблице нет каналов A и B).

dimon-ru-80 писал(а):COMPARE A = Endtime


Регистр сравнения - OCR2.

dimon-ru-80 писал(а):Enable Timer2
Enable OC2A


Здесь та же история что и с метками.

Резюме:

Код: Выделить всё

Config Timer2 = Timer , Prescale = 64 , Clear Timer = 0  ' при совпадении таймер не сбрасываем

On OVF2 Refresh   ' прерывание по переполнению - индикация
On OC2 Dimmer    ' прерывание по совпадению - регулировка яркости

OCR2 = 100          ' значение яркости

Enable OVF2          ' разрешаем по переполнению
Enable OC2           ' по совпадению
Enable Interrupts   ' и глобально все прерывания


Большое спасибо за ликбез. Компилятор не ругается, приду домой с работы попробую в железе.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Пожалуйста. Только не цитируйте сообщение (тем более все) если отвечаете следом за мной. Модераторы заругают. :kill: И еще, для справки: если Вы будете делать в прерывании переполнения индикацию а в прерывании совпадения регулировку яркости, то чем меньше число в регистре сравнения - тем меньше яркость (для меня это самый логичный вариант). Если же наоборот (OVF - регулировка, OC - индикация, как Вы написали в самом начале) то зависимость будет обратная. Имейте это ввиду.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

Вернуться в «AVR»