BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
как в bascom переключать скажем время срабатывания реле с помощью одной кнпоки
тоесть
если нажата кнопка 1 то идем в подпрограмму такую то (goto)
в этой программе начинаем считать до 10 секунд и если повторно не нажата кнопка то включаем реле
если в течение скажем 5 сек эта же кнопка нажата еще раз то прибавляем еще 10 сек
иначе ??
end
как все это реализовать? в баскоме не работал года 4 - подзабыл уже...
мне нужно одной кнопкой определять время включения порта, нажал раз - порт сработает через 5 сек, нажал 2 раза в течение определенного времени, порт сработает через 10 сек.
спасибо большое
тоесть
если нажата кнопка 1 то идем в подпрограмму такую то (goto)
в этой программе начинаем считать до 10 секунд и если повторно не нажата кнопка то включаем реле
если в течение скажем 5 сек эта же кнопка нажата еще раз то прибавляем еще 10 сек
иначе ??
end
как все это реализовать? в баскоме не работал года 4 - подзабыл уже...
мне нужно одной кнопкой определять время включения порта, нажал раз - порт сработает через 5 сек, нажал 2 раза в течение определенного времени, порт сработает через 10 сек.
спасибо большое
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Кто сталкивался с Atmega128 и Bascom?
Есть подводные камни с портами или чем нибудь таким, чего не смогу использовать?
К примеру отлутил плату, а оказалось Miso и Mosi на RX и TX надо.
P:S: Вот вам лакомый мануальчик на русском языке -
Есть подводные камни с портами или чем нибудь таким, чего не смогу использовать?
К примеру отлутил плату, а оказалось Miso и Mosi на RX и TX надо.
P:S: Вот вам лакомый мануальчик на русском языке -
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
ev3658 писал(а):К примеру отлутил плату, а оказалось Miso и Mosi на RX и TX надо.
Здравствуйте.
Так а при чем тут Bascom? Даташиты штука полезная:
А то что Вы посадили программатор на выводы аппаратного SPI, Bascom точно не виноват. Это иначе называется.
- Вложения
-
- Atmega128_SPI.png
- (46.68 КБ) 2588 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Да вдруг какие порты не может сам компилятор использовать, а мне нужны все. А то опять плату сделаю и рыдать буду. Вот кстати, сочувствуйте мне все и разом


Теперь всё переделывать, разбирать


Теперь всё переделывать, разбирать
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да, печаль-беда... Насколько я помню, проблем с портами не было, все было доступно. Впрочем, в любой момент можно на Си переписать. Или на АСМе. У их точно проблем с портами нет. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Адвансед, вариантов решения этой задачи довольно много. Я не буду говорить о тупом пожирании тактов в циклах проверки "нажали - не нажали", Вы этот код сами написали, осталось его с русского на bascom'овский перевести. Если же писать так, чтобы данная штука работала не мешая никому, то я бы сделал простейший автомат состояний на таймере. Настроили таймер на отсчет 1 секунды, пока остановили. В обработчике нажатия кнопки проверяем, если таймер не запущен, запускаем его. Если же он уже молотит, то прибавляем к счетчику нужное количество секунд. Ну а в обработчике уменьшаем этот счетчик. Понятное дело, если досчитали до конца, выставляем соответствующий флаг. А по нему уже делаем что угодно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Moto_v3x
- Потрогал лапой паяльник
- Сообщения: 307
- Зарегистрирован: Ср мар 31, 2010 11:45:58
- Откуда: Славянск
Re: BASCOM AVR в вопросах и ответах
ev3658 Тогда запишите один раз загрузчик и через UART заливайте потом прошивку, у Баскома вроде свой есть.
А по поводу портов в версии 1.9 вроде были косяки с PORTG когда пробовал подключать дисплей на KS0108 по такой схеме
http://img.radiokot.ru/files/21011/im2n38j0k.jpg
но в версии 2 стало работать корректно.
А по поводу портов в версии 1.9 вроде были косяки с PORTG когда пробовал подключать дисплей на KS0108 по такой схеме
http://img.radiokot.ru/files/21011/im2n38j0k.jpg
но в версии 2 стало работать корректно.
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Ну Коты, совсем Wискаря зажрались!
Первый подводный камень, это "совместимость с Atmega103" - отключать его нафиг надо, а то порты не будут многие работать!!!! ВО!!! Прикрепляю картинку!

Загрузчик нее... так отлично шьётся, чем UsbAsp с баском отлично дружит. У меня к сожалению ST7920.
Первый подводный камень, это "совместимость с 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 в вопросах и ответах
У меня пару месяцев назад была проблема с м128. Сделал плату а оно не шьется. А оказалась проблема описана выше.
Записал баскомовский загрузчик и проблем как не бывало. Потом на все свои подели поставил загрузчик аналогично. И как следствие - забыл о головной боли с битами конфигурации.
Записал баскомовский загрузчик и проблем как не бывало. Потом на все свои подели поставил загрузчик аналогично. И как следствие - забыл о головной боли с битами конфигурации.
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
парни помогите, следующая беда. Делаю задание для курсового проекта. Там устройство измеряет две частоты и в зависмости от их сочетания выдает соответсвующие сигналы.
Частоту меряю внешними прерываниями и с помощбю таймеров.
Но вот одна частота меряется (которая по тамер1) и отображается как нужно, а вот вторая (которую меряет по таймер0) корректно не отображается, я так понимаю что таймер очень часто переполняется. В баском новичек, вот код, может можно что-то подкорретировать, чтобы корректно отображалось. Часта измеряется в пределах 0-300гц. Спасибо заранее!
Частоту меряю внешними прерываниями и с помощбю таймеров.
Но вот одна частота меряется (которая по тамер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 в вопросах и ответах
Здравствуйте.
Вы сейчас считаете время между импульсами, но можно ведь сделать иначе - считать количество импульсов за промежуток времени. Если настроить таймер на отсчет одной секунды, можно в обработчике этого таймера забирать результаты счетчиков (которые увеличиваются в соответствующих обработчиках INT0 и INT1). То бишь обнулили счетчики запустили таймер и завертелась карусель. Секунда прошла, заглянули в обработчик таймера, забрали насчитанное за секунду (готовое, заметьте, в Герцах) обнулили счетчики и таймер снова отсчитывает секунду... И это без всяких переполнений таймеров, захватов счетных регистров и прочего.
Вы сейчас считаете время между импульсами, но можно ведь сделать иначе - считать количество импульсов за промежуток времени. Если настроить таймер на отсчет одной секунды, можно в обработчике этого таймера забирать результаты счетчиков (которые увеличиваются в соответствующих обработчиках INT0 и INT1). То бишь обнулили счетчики запустили таймер и завертелась карусель. Секунда прошла, заглянули в обработчик таймера, забрали насчитанное за секунду (готовое, заметьте, в Герцах) обнулили счетчики и таймер снова отсчитывает секунду... И это без всяких переполнений таймеров, захватов счетных регистров и прочего.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Спаисбо, попробую
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
А вот ещё подводный камень с Atmega128!!!!
Чтоб использовать АЦП и вообще использовать на вход порт F, нужно в фьюзах отключать Jtag!!!! Во
Чтоб использовать АЦП и вообще использовать на вход порт F, нужно в фьюзах отключать Jtag!!!! Во
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ребята, все что вы на данный момент называете подводными камнями, является лишь незнанием. Самое интересное, что абсолютно все это есть в одном документе - даташите. При включенном JTAG автоматом подключаются подтягивающие резисторы на соответствующих линиях, да и пины PF4, PF5, PF6 и PF7 занимаются для других целей. Разумеется, все это будет мешать обычной работе с портом. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
dimon-ru-80
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Ср ноя 19, 2014 17:13:21
- Откуда: Украина, Никополь
Re: BASCOM AVR в вопросах и ответах
Уважаемые коты помогите кодом организовать регулировку яркости в часах . Контроллер 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 таймерами?
Хочется по переполнению TIMER0 выполнять динамическую индикацию, а по совпадению того же таймера гасить порт, не могу осилить код
$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 в вопросах и ответах
Здравствуйте. Я все равно научу вас любить даташиты !!! И если вы думаете, что я устану на них ссылаться, то вы глубоко заблуждаетесь !!!
Смотрим таблицу векторов прерываний для ATMEGA8:

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

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