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

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

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

Сообщение edm2007 »

KOTик писал(а):1/4 000 000 = 0,000 000 25
разве нет?


Да. Только результат в микросекундах. Оно же равно 0,00025 миллисекунд.

KOTик писал(а):16-битный таймер переполнится через 65535, а у вас 65536 - почему так?


Потому что речь идет именно о переполнении. То бишь о моменте, когда счетный регистр перевалится через максимальное значение. А это 65536 такт.

KOTик писал(а):и тут тоже, 0,00000025* 64 = 0,000016мс.


Про это уже сказал. 0,000016 мкс = 0,016 мс.

KOTик писал(а):Следовательно, 1000мс / 0,000016мс = 62 млн. 500 тысяч!


Нет конечно, это же очевидная ересь. Впрочем, как и это:

KOTик писал(а):за 1 секунду: 1000*0,0068сек. = 6,8 тиков.


Ну ясно же, что это не так. Тут даже знаний не надо, достаточно воображения. МК делает 4 миллиона тактов в секунду, а тут 6 тактов за секунду !!! Касаемо Вашего примера, то при частоте 9,6 МГц период равен 1 / 9 600 000 = 0.00010416666 мс. Переполнение 8-ми битного таймера произойдет через 0.00010416666 * 256 = 0.02666666666 мс. С прескаллером 256 таймер переполнится через 0.02666666666 * 256 = 6.82666666667 мс. И дело даже не в этом. У Вас в обработчике таймера стоит задержка на 10 мс. Так зачем Вы пытаетесь что-то посчитать? У Вас же весь расчет летит к чертям из-за этой задержки. Запомните раз и навсегда: никогда не используйте задержки в обработчиках прерывания. В приличном обществе таким руку не подают. :wink:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Немного времени появилось... Вот код о вышесказанном. В нем нет ничего лишнего. Просто молотит таймер а обработчик считает переполнения. Как насчитает секунду - светодиод меняет свое состояние на противоположное.

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

'----------
$regfile = "attiny13.dat"                                   ' тип МК
$crystal = 9600000                                          ' тактовая частота
$hwstack = 32                                               ' настройка стека
$swstack = 8
$framesize = 16

'== НАСТРОЙКА ПОРТОВ  =======

Config Portb.0 = Output                                  ' пин порта светодиода
Led1 Alias Portb.0                                          ' присваиваем имя

Dim Count As Byte                                           ' счетчик переполнений таймера

Config Timer0 = Timer , Prescale = 256            ' конфигурация таймера (переполнение каждые ~6,83 мс)
On Timer0 Pulse
Enable Interrupts                                           ' разрешаем прерывания
Enable Timer0

'======== ПРОГРАММА ==========

Do

// Пустой основной цикл

Loop

'----------

Pulse:                                                      ' прерывание переполнения таймера

Incr Count                                                  ' увеличиваем счетчик переполнений

If Count > 147 Then                                    ' если отсчитали примерно секунду (6,83 мс * 147 = 1004 мс)
Count = 0                                                   ' обнуляем счетчик
Toggle Led1                                                 ' и меняем состояние светодиода на противоположное
End If

Return

'----------
End                                               'end program
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

edm2007 писал(а):Ну ясно же, что это не так. Тут даже знаний не надо, достаточно воображения. МК делает 4 миллиона тактов в секунду, а тут 6 тактов за секунду !!! Касаемо Вашего примера, то при частоте 9,6 МГц период равен 1 / 9 600 000 = 0.00010416666 мс. Переполнение 8-ми битного таймера произойдет через 0.00010416666 * 256 = 0.02666666666 мс. С прескаллером 256 таймер переполнится через 0.02666666666 * 256 = 6.82666666667 мс. И дело даже не в этом. У Вас в обработчике таймера стоит задержка на 10 мс. Так зачем Вы пытаетесь что-то посчитать? У Вас же весь расчет летит к чертям из-за этой задержки. Запомните раз и навсегда: никогда не используйте задержки в обработчиках прерывания. В приличном обществе таким руку не подают. :wink:


Аааа.. получается та величина была в микросекундах :)))
Понятно. Для себя вывел эту формулу:
Переполнение таймера = предделитель / частота камня * размер счетного регистра = получаем микросекунды * 1000 = получаем миллисекунды

Вот, я тут по упражнялся

Int RC 9.6 MHz
    1/9600000*256*1000 = 0,026мс (Count = 1 сек. = 1000 / 0,026 = 38461)
    8/9600000*256*1000 = 0,213мс (Count = 4694)
    64/9600000*256*1000 = 1,706мс (Count = 586)
    256/9600000*256*1000 = 6,826мс (Count = 147)
    1024/9600000*256*1000 = 27,306мс (Count = 37)

Int RC 4.8 MHz
    1/4800000*256*1000 = 0,053мс (Count = 18868)
    8/4800000*256*1000 = 0,426мс (Count = 2347)
    64/4800000*256*1000 = 3,413мс (Count = 293)
    256/4800000*256*1000 = 13,653мс (Count = 73)
    1024/4800000*256*1000 = 54,613мс (Count = 18)

В скобках указал значение Count для мерцания светодиода с частотой 1 раз в секунду.

Учитель, не хочу Вас озадачивать, но всё ли верно посчитал? :)
Т.е. не нужно все расчеты проверять, главное - верно ли вывел формулу для расчёта?
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

я считаю так-время=1 сук,предделитель=1024,кварц=9600000,таймер 8-ми битный,значит коэф переполнений=
1*9600000/(1024*256)=36(,62)
для 0,1 сек=
0,1*9600000/(1024*256)=3(,66)
в теме "таймер на баском авр" я писал подробности
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

pavel1979 писал(а):в теме "таймер на баском авр" я писал подробности

Поиск по сайту не дал результатов :(
Можно ссылку? :)
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

KOTик писал(а):
pavel1979 писал(а):в теме "таймер на баском авр" я писал подробности

Поиск по сайту не дал результатов :(
Можно ссылку? :)

http://radiokot.ru/forum/viewtopic.php?f=57&t=95249&hilit=%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80

Таймер на ATMega8 в Bascom-AVR
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

Уважаемые коты

Понадобилось мне сделать контроллер световых эффектов. Вернее разработать на замену различного китайского одноразового барахла. Поискал в интернете и решил сам разработать и написать прошивку. Выбрал Tiny13 как самый дешевый из того что есть в наших магазинах. (Мне нужно довольно много контроллеров - работаю в Горсвете и мы обеспечиваем иллюминацию городских елок) BASCOM выбрал потому что легко освоить (потратил всего день) все сделал и даже работает. Можете подсказать что можно оптимизировать в программе? Хотел бы добавить еще эффектов но память МК уже задействована на 97%. Программа прямая как рельса - единственное что задержку оформил подпрограммой
Спойлер

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

   $regfile = "attiny13.dat"
   Config Portb = Output
   Dim Povtor As Byte
   Do
   For Povtor = 1 To 8
      Portb = 1                                             'Бегущий огонь'
         Gosub Zadergka
      Portb = 2
         Gosub Zadergka
      Portb = 4
         Gosub Zadergka
      Portb = 8
         Gosub Zadergka
      Portb = 16
         Gosub Zadergka
      Portb = 0
         Gosub Zadergka
   Next Povtor
  For Povtor = 1 To 8
      Portb = 16                                            'Реверс бегущего огня'
         Gosub Zadergka
      Portb = 8
         Gosub Zadergka
      Portb = 4
         Gosub Zadergka
      Portb = 2
         Gosub Zadergka
      Portb = 1
         Gosub Zadergka
      Portb = 0
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 31                                            'Бегущяя точка'
         Gosub Zadergka
      Portb = 30
         Gosub Zadergka
      Portb = 29
         Gosub Zadergka
      Portb = 27
         Gosub Zadergka
      Portb = 23
         Gosub Zadergka
      Portb = 15
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 31                                            'Реверс бегущей точки'
         Gosub Zadergka
      Portb = 15
         Gosub Zadergka
      Portb = 23
         Gosub Zadergka
      Portb = 27
         Gosub Zadergka
      Portb = 29
         Gosub Zadergka
      Portb = 30
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Накапливающееся вкобчение'
         Gosub Zadergka
      Portb = 1
         Gosub Zadergka
      Portb = 3
         Gosub Zadergka
      Portb = 7
         Gosub Zadergka
      Portb = 15
         Gosub Zadergka
      Portb = 31
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Реверс накапливающегося включения'
         Gosub Zadergka
      Portb = 16
         Gosub Zadergka
      Portb = 24
         Gosub Zadergka
      Portb = 28
         Gosub Zadergka
      Portb = 30
         Gosub Zadergka
      Portb = 31
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             '2-3-2'
         Gosub Zadergka
      Portb = 10
         Gosub Zadergka
      Portb = 21
         Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Гусеница'
         Gosub Zadergka
      Portb = 1
         Gosub Zadergka
      Portb = 3
         Gosub Zadergka
      Portb = 7
         Gosub Zadergka
      Portb = 6
         Gosub Zadergka
      Portb = 14
          Gosub Zadergka
      Portb = 12
          Gosub Zadergka
      Portb = 28
          Gosub Zadergka
      Portb = 24
          Gosub Zadergka
      Portb = 16
          Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Реверс гусеницы'
         Gosub Zadergka
      Portb = 16
         Gosub Zadergka
      Portb = 24
         Gosub Zadergka
      Portb = 28
         Gosub Zadergka
      Portb = 12
         Gosub Zadergka
      Portb = 14
          Gosub Zadergka
      Portb = 6
          Gosub Zadergka
      Portb = 7
          Gosub Zadergka
      Portb = 3
          Gosub Zadergka
      Portb = 1
          Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'двойной огонь к центру'
         Gosub Zadergka
      Portb = 17
         Gosub Zadergka
      Portb = 10
         Gosub Zadergka
      Portb = 4
         Gosub Zadergka
      Portb = 10
         Gosub Zadergka
      Portb = 17
          Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Накапливающееся включение 2'
         Gosub Zadergka
      Portb = 4
         Gosub Zadergka
      Portb = 14
         Gosub Zadergka
      Portb = 31
         Gosub Zadergka
      Portb = 14
         Gosub Zadergka
      Portb = 4
          Gosub Zadergka
   Next Povtor
   For Povtor = 1 To 8
      Portb = 0                                             'Стробоскоп'
         Gosub Zadergka
      Portb = 31
         Gosub Zadergka
   Next Povtor
   Zadergka:
   Waitms 50
   Return

   Loop

   End                                                      'end program
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Если оформить эффекты в табличном формате, тем более, что задержка везде одинаковая, то эффектов влезть должно очень много.
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

эффекты в табличном формате


В смысле массив задать или с помощью DATA а потом READ?
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Bear2011 писал(а):В смысле ... с помощью DATA а потом READ?

Да, наверное, на басике так делается. Создайте цикл бесконечный и читайте подряд данные и выводите их в порт с задержкой.

У Вас, скорей получится просто линейный вывод данных, а вот табличный формат предполагает несколько другой порядок данных, например:
1. кол-во повторов эффекта.
2. данные...
....
3. Признак конца эффекта, например $FF.
и т.д.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да, все верно. Первое, что в голову пришло, прикрепил во вложении. На данный момент прошивка с авторскими эффектами занимает 41%. Из них 33% сам автомат, и лишь 8% все эффекты. Так что можно добавить еще раз в 8 больше эффектов. Ну и код оптимизировать можно, разумеется. Этот стоит расценивать как набросок, от которого можно оттолкнуться. :) В эффектах введен флаг окончания всех эффектов - 255 (обязательное дело), и флаг окончания эффекта - 128 (так как количество элементов в каждом эффекте различное). Такие значение позволились по причине урезанного порта МК.
Вложения
led_automat.rar
(6.88 КБ) 190 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

Спасибо за пояснения :beer:
Я же говорю что на изучение BASCOM потратил всего день. Чем собственно и хорош этот "язык домохозяек" что сел и сразу можешь написать что-то работающее :) Не спорю что на нюансы потом уйдет время

Кстати MAVr 34 уже проверил мою программу в железе и она работает :beer: Это я решил что до НГ паяльник больше в руки не возьму
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

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

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

Сообщение edm2007 »

Это какая прошивка у Вас не лезла? :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

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

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

Сообщение edm2007 »

Это в посте: Вс дек 29, 2013 13:25:26 ? Не может быть такого, в тиньку 13 оно влазит без проблем. Это у Вас на стек ругается просто, он в коде не сконфигурирован (использовались настройки среды, видимо). Сами посудите, если в тиньке 2313 заняло 45% (а у нее 2К памяти), то в тиньку 13 (у которой 1К памяти) влезть же должно. :wink:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

Это у Вас на стек ругается просто, он в коде не сконфигурирован (использовались настройки среды, видимо)

Да при выборе чипа Tiny13 и тех цифрах что стояли в параметрах чипа он у меня ругался. Уж не знаю почему но разобрался что это глюк BASCOM'a (у меня) выставил параметры стека из даташита все стало нормально
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да не глюк это баскома... Мда, судя по репликам на данной странице, все же с бейсика начинать очень опрометчивое решение. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

Уж не знаю почему но разобрался что это глюк BASCOM'a (у меня) выставил параметры стека из даташита все стало нормально

первый раз слышу подобное ... а где их выставлять?
Вложения
Безымянный.gif
(108.73 КБ) 459 скачиваний
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

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

Сообщение rus084 »

как написать подпрограмму измерения частоты ?
нужно от 25гц до 200гц .
Меня зовут Димон .
Изображение
Изображение
Ответить

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