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

Обсуждаем контроллеры компании Atmel.
yarik.ks
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Сб дек 11, 2010 12:37:39

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

Сообщение yarik.ks »

Да, все получилось, барсик один, но для пиков и авров различий много
Реклама
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
Несколько вопросов, не раскрытых в теме.
1. Ретрансляция только в одну сторону?
2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина?
3. На какой максимальной скорости предполагается работа?
Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa.
Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
С уважением,
Виктор.
Реклама
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

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

Сообщение ev3658 »

Всем привет! решил я поразить свой мозг ассемблером, язык понял, вкурил немного всего, но в детстве DeltaC-48k TR-DOS сделали своё злое дело и теперь грызу BASCOM, от души пишу коды, даже за неделю уже придумал схему и написал простенький алгоритм запуска автомобильного генератора как мотора, но дело не в этом.
Опыта хочу с АЦП и тонкости познать контроллерные, вот тут схема, от известного металлоискателя Clone PI-W, собрал, работает, всё отлично, теперь решил сам написать прошивку, вкурил принцип действия, пишу простой код, просто, чтоб он мне музыку играл:

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

$regfile = "m8def.dat"
$crystal = 8000000

Config Portb = Output
Config Portc = Output
Config Portd = Output

Config Portc.1 = Input
Config Portc.0 = Input                                      
Portd.0 = 0
Portd.1 = 0
Portc.4 = 0
Portc.5 = 0
Portd.2 = 1

Speaker Alias Pinb.2

Do

'Celine Dion : : My Heart Will Go On
Sound Speaker , 587 , 1135                                  'D2(1/2)
Sound Speaker , 659 , 1011                                  'E2(1/2)
Portd.2 = 0
Sound Speaker , 880 , 388                                   'A3(1/4)
Sound Speaker , 880 , 758                                   'A2(1/2)
Sound Speaker , 392 , 850                                   'G2(1/4)
Sound Speaker , 185 , 901                                   'Fis2(1/8)
Sound Speaker , 659 , 1011                                  'E2(1/2)
Sound Speaker , 370 , 901                                   'Fis2(1/4)
Sound Speaker , 392 , 850                                   'G2(1/4)
Sound Speaker , 740 , 901                                   'Fis2(1/2)
Sound Speaker , 330 , 1011                                  'E2(1/4)
Sound Speaker , 294 , 1135                                  'D2(1/4)
Sound Speaker , 277 , 1203                                  'Cis2(1/4)
Sound Speaker , 587 , 1135                                  'D2(1/2)
Sound Speaker , 277 , 1203                                  'Cis2(1/4)
Sound Speaker , 3952 , 337                                  'H3(1/1)
Sound Speaker , 3440 , 388                                  'A3(1/1)
Sound Speaker , 1175 , 1135                                 'D2(1/1)
Sound Speaker , 659 , 1011                                  'E2(1/2)
Sound Speaker , 880 , 388                                   'A3(1/4)
Sound Speaker , 880 , 758                                   'A2(1/2)
Sound Speaker , 392 , 850                                   'G2(1/4)
Sound Speaker , 185 , 901                                   'Fis2(1/8)
Sound Speaker , 659 , 1011                                  'E2(1/2)
Sound Speaker , 370 , 901                                   'Fis2(1/4)
Sound Speaker , 392 , 850                                   'G2(1/4)
Sound Speaker , 740 , 901                                   'Fis2(1/2)
Sound Speaker , 330 , 1011                                  'E2(1/4)
Sound Speaker , 294 , 1135                                  'D2(1/4)
Sound Speaker , 277 , 1203                                  'Cis2(1/4)
Sound Speaker , 587 , 1135                                  'D2(1/2)
Sound Speaker , 277 , 1203                                  'Cis2(1/4)
Sound Speaker , 277 , 1203                                  'Cis2(1/4)
Sound Speaker , 587 , 1135                                  'D2(1/2)
Sound Speaker , 330 , 1011                                  'E2(1/4)
Sound Speaker , 740 , 901                                   'Fis2(1/2)
Sound Speaker , 659 , 1011                                  'E2(1/2)
Sound Speaker , 1175 , 1135                                 'D2(1/1)
Wait 2


Loop
Запускаю, а он пол секунды ноту выдаст, пол сек полчит и пищит примитивно, индикацию поставил, проверил, порты все совподают, отключил ещё то, что открывает полевой транзистор и палит 20 омный резюк. На просторах как-то видел исходники на ассемблер от Clone PI-W, теперь найти не могу, но в голове отложилось, что там использовали сторожевой таймер.
Удивило меня то, что установив его так:

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

$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
он стал пищать гораздо тормознее и почти 2 мелодии проигрывает. Подсказали мне стартовать, останавливать его так:

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

$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
...
...
...
Sound Speaker , 659 , 1011                                  'E2(1/2)
Portd.2 = 0
Stop Watchdog
...
...
...
Но это не помогло. Потребляет он 100-170мА, может АЦП инициализировать надо или ещё какие премудрости? Стабилизатор в схеме не мощный, может до порогового значения питание падает из-за замыкания какого нибудь порта? Хелпните мне, :shock: пожалуйста.
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

ut1wpr писал(а):
Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
Несколько вопросов, не раскрытых в теме.
1. Ретрансляция только в одну сторону?
2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина?
3. На какой максимальной скорости предполагается работа?
Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa.
Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.

1 - пока только в одну
2 - нет, только передача даных
3 - 115200
Реклама
Эиком - электронные компоненты и радиодетали
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Kill17 писал(а):2 - нет, только передача даных
По второму вопросу это не ответ. Вам надо заглянуть в ДШ на примененный контроллер.
Повторяю, есть ли в нем вектор прерывания по изменению состояния пина? Ваш ответ не стыкуется с вопросом.
Скорость 115200 достаточно высокая для моего способа ретрансляции. Вряд ли Бейсик годится. Лучше всего на асме реализовывать. Там всего несколько строк получается.
Но только в том случае, если ответ на вопрос 2 положительный.
Да, и еще момент.
Устройство должно просто ретранслировать поток или производить анализ контента?
В начале вашего вопроса это не было озвучено, а значение огромное. Анализ просто так не делается. За анализом всегда следует синтез. Т.е. предусматриваются какие-то действия по результатам анализа, иначе он нафиг не нужен. :) А это уже совсем другой огород.
С уважением,
Виктор.
Реклама
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

Kill17 писал(а):Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Так подправь исходник , что я давал , на сколько надо . А причём тут ЕЕПРОМ ?...
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Реклама
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

dimon-790 писал(а):А причём тут ЕЕПРОМ ?...
Да уж! Организация приемного буфера в EEPROM - это реально круто!
Надо бы помочь вопрошавшему. Почитайте про EEPROM побольше. Будете неприятно удивлены его отличиями от ОЗУ (RAM). Особенно временнЫми параметрами.
:)
С уважением,
Виктор.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

ev3658, я что-то понять не могу, а при чем же тут АЦП? Где у Вас в коде использование АЦП? Про сторожевой таймер даже писать грустно, настолько Вы не в теме...

Просто фьюзы у меги выставите как в коде указано, и все будет работать. С завода мега 8 тактируется от 1МГц, вот и работает в 8 раз медленнее. Либо в коде частоту измените...
ut1wpr писал(а):Особенно временнЫми параметрами. :)
Это да, есть такое. :))
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

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

Сообщение ev3658 »

Вообщем не пойму как в BASCOM пользоваться сторожевым таймером в AtMega8, не послушный он, работает только строка Config Watchdog = 2048, а команды Start Watchdog и Stop Watchdog не работают. В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Его не включать и выключать нужно (это уже само по себе претит сути сторожевого пса). Его нужно периодически сбрасывать!!! Фьюз же включает принудительно, либо можно настроить в коде. Ну неужели так сложно взять и почитать про это? Хотя бы здесь http://decada.org.ru/project/lessons/bascom_avr/17/

P.S. И вообще, какое отношение сторожевой таймер имеет к Вашей "музыке"? Вы хоть ради интереса поглядите, что это за зверь-то такой, не выставляйте себя уж совсем в неприглядном свете...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

ev3658 писал(а):В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Так и должно работать. Этот бит означает перманентное включение WDT, программно управлять им после этого не получится. Отключите его и тогда пользуйтесь командами Start и Stop.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

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

Сообщение ev3658 »

reset сторожевого таймера не работает тоже ( Так и придётся отключать. Спасибо!
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

Так, раскрою задумку.
От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).

Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.

dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Kill17 писал(а):Так, раскрою задумку.
От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).

Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.

dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
Не надо было людям голову морочить. Объяснять задачу надо сразу, а не порциями.
Разность скоростей вам не напоминает задачу о бассейне с двумя трубами? Думаю, больше вам ничего не надо говорить. Вы ведь молчите опять о задаче. Неужели вы не понимаете, что определение "много байт" никакого отношения к постановке задачи не имеет. Любую задачу надо оценивать в каких-то единицах измерений.
Ответьте сами себе на главный вопрос - как долго будет длится поток этих "много байт"? И учтите, что на 12 входных байт в самом лучшем случае у вас будет всего один выходной.
Посмотрите в сторону размера памяти вашего МК. Допустим в нем 1024 байта (для озвученного МК это фантастика, но для примера...). Вам придется в перерывах между передачами одиночных байтов где-то накапливать еще 11 принятых. Ваш буфер переполнится за 1024:11=93 переданных байта. Бодовая скорость 9600 означает время одного бода 104 мксек, или передача одного 8-бит символа 104х10=1040 мксек. 93 переданных байта будут переданы за 96700 мксек. Иными словами, при 12-кратной разности входной и выходной скорости ваш 1 кбайт буфер переполнится за 96.72 мсек. Дальше крах - данные падают на пол. И вы не в состоянии ничего поделать.
Вы школу заканчивали? Здесь нет математики. Здесь арифметика и элементарный расчет.
Решение может быть только одно - управление входящим потоком. Такое слово хэндшейк (handshake) знаете? Если нет, почитайте литературу о способах управления потоком.
А уж если управление невозможно, откажитесть от задачи, которая не имеет решения.
Последний раз редактировалось ut1wpr Чт сен 13, 2012 05:06:26, всего редактировалось 1 раз.
С уважением,
Виктор.
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

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

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

Сообщение edm2007 »

ev3658 писал(а):reset сторожевого таймера не работает тоже
Да как не работает-то? Например, если написать подобный код:

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

$regfile = "m8def.dat"                                      ' тип МК
$crystal = 4000000                                          ' выбор кристала для расчета задержек

Config Portb.0 = Output                                     ' светодиод

Config Watchdog = 128                                       ' сторожевой таймер настроен на 130 мс
Start Watchdog                                              ' запуск сторожевого таймера

Do                                                          ' основной цикл мигания светодиодом

Waitms 150                                                  ' задержка частоты мигания

Toggle Portb.0                                              ' меняем состояние светодиода на противоположное

Loop                                                        ' конец цикла
То мигать светодиод не будет. Программа просто не сможет добраться до смены состояния, так как задержка (150 мс) больше чем настройка сторожевого таймера (130 мс). И МК будет постоянно сбрасываться раньше.

Но если разбить задержку на две части, и сбрасывать сторожевой таймер, то переполниться и сработать он не успеет. И все будет прекрасно работать.

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

$regfile = "m8def.dat"                                      ' тип МК
$crystal = 4000000                                          ' выбор кристала для расчета задержек

Config Portb.0 = Output                                     ' светодиод

Config Watchdog = 128                                       ' сторожевой таймер настроен на 130 мс
Start Watchdog                                              ' запуск сторожевого таймера

Do                                                          ' основной цикл мигания светодиодом

Waitms 75                                                   ' первая часть задержки
Reset Watchdog                                              ' сброс сторожевого таймера
Waitms 75                                                   ' вторая часть задержки
Reset Watchdog                                              ' сброс сторожевого таймера

Toggle Portb.0                                              ' меняем состояние светодиода на противоположное

Loop                            
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

Хвостатые подскажите кто в курсе , корректно-ли в данном случае используется оператор "case" ?

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

Dim Digit As Byte 
Dim Key As Byte 
Select Case Key                                             '
Case 1 : Digit = 7
Gosub Nabor
Case 2 : Digit = 8
Gosub Nabor
Case 3 : Digit = 9
Gosub Nabor
Case 4 : Gosub Menu                                       
Case 5 : Digit = 4
Gosub Nabor
Case 6 : Digit = 5
Gosub Nabor
Case 7 : Digit = 6
Gosub Nabor
Case 8 : Gosub Str_up
Case 9 : Digit = 1
Gosub Nabor
Case 10 : Digit = 2
Gosub Nabor
Case 11 : Digit = 3
Gosub Nabor
End Select
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

dimon-790 писал(а):Хвостатые подскажите кто в курсе , корректно-ли в данном случае используется оператор "case" ?
Вроде да, почему нет?
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

Да просто ни где такого изврата я не встречал , потому и усомнился в правильности своего кода . Но вот уже пол дня, гоняю железяку вроде работает...
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Я регулярно такие конструкции использую :)
Case else тоже полезная вещь.
Даже остановленные часы два раза в сутки показывают правильное время.
Ответить

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