Страница 145 из 304

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

Добавлено: Пн сен 10, 2012 11:33:14
yarik.ks
Да, все получилось, барсик один, но для пиков и авров различий много

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

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

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

Добавлено: Ср сен 12, 2012 00:05:18
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: пожалуйста.

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

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

1 - пока только в одну
2 - нет, только передача даных
3 - 115200

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

Добавлено: Ср сен 12, 2012 09:17:20
ut1wpr
Kill17 писал(а):2 - нет, только передача даных
По второму вопросу это не ответ. Вам надо заглянуть в ДШ на примененный контроллер.
Повторяю, есть ли в нем вектор прерывания по изменению состояния пина? Ваш ответ не стыкуется с вопросом.
Скорость 115200 достаточно высокая для моего способа ретрансляции. Вряд ли Бейсик годится. Лучше всего на асме реализовывать. Там всего несколько строк получается.
Но только в том случае, если ответ на вопрос 2 положительный.
Да, и еще момент.
Устройство должно просто ретранслировать поток или производить анализ контента?
В начале вашего вопроса это не было озвучено, а значение огромное. Анализ просто так не делается. За анализом всегда следует синтез. Т.е. предусматриваются какие-то действия по результатам анализа, иначе он нафиг не нужен. :) А это уже совсем другой огород.

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

Добавлено: Ср сен 12, 2012 10:04:34
dimon-790
Kill17 писал(а):Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Так подправь исходник , что я давал , на сколько надо . А причём тут ЕЕПРОМ ?...

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

Добавлено: Ср сен 12, 2012 11:15:57
ut1wpr
dimon-790 писал(а):А причём тут ЕЕПРОМ ?...
Да уж! Организация приемного буфера в EEPROM - это реально круто!
Надо бы помочь вопрошавшему. Почитайте про EEPROM побольше. Будете неприятно удивлены его отличиями от ОЗУ (RAM). Особенно временнЫми параметрами.
:)

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

Добавлено: Ср сен 12, 2012 15:40:26
edm2007
ev3658, я что-то понять не могу, а при чем же тут АЦП? Где у Вас в коде использование АЦП? Про сторожевой таймер даже писать грустно, настолько Вы не в теме...

Просто фьюзы у меги выставите как в коде указано, и все будет работать. С завода мега 8 тактируется от 1МГц, вот и работает в 8 раз медленнее. Либо в коде частоту измените...
ut1wpr писал(а):Особенно временнЫми параметрами. :)
Это да, есть такое. :))

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

Добавлено: Ср сен 12, 2012 17:11:06
ev3658
Вообщем не пойму как в BASCOM пользоваться сторожевым таймером в AtMega8, не послушный он, работает только строка Config Watchdog = 2048, а команды Start Watchdog и Stop Watchdog не работают. В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?

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

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

P.S. И вообще, какое отношение сторожевой таймер имеет к Вашей "музыке"? Вы хоть ради интереса поглядите, что это за зверь-то такой, не выставляйте себя уж совсем в неприглядном свете...

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

Добавлено: Ср сен 12, 2012 17:53:01
Секретный кот
ev3658 писал(а):В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Так и должно работать. Этот бит означает перманентное включение WDT, программно управлять им после этого не получится. Отключите его и тогда пользуйтесь командами Start и Stop.

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

Добавлено: Ср сен 12, 2012 20:09:35
ev3658
reset сторожевого таймера не работает тоже ( Так и придётся отключать. Спасибо!

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

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

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

dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)

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

Добавлено: Ср сен 12, 2012 21:24:25
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) знаете? Если нет, почитайте литературу о способах управления потоком.
А уж если управление невозможно, откажитесть от задачи, которая не имеет решения.

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

Добавлено: Ср сен 12, 2012 21:50:14
Kill17
Жестко, но справедливо.....

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

Добавлено: Чт сен 13, 2012 16:01:10
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                            

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

Добавлено: Ср сен 19, 2012 09:16:10
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

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

Добавлено: Ср сен 19, 2012 11:04:33
Секретный кот
dimon-790 писал(а):Хвостатые подскажите кто в курсе , корректно-ли в данном случае используется оператор "case" ?
Вроде да, почему нет?

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

Добавлено: Ср сен 19, 2012 12:08:33
dimon-790
Да просто ни где такого изврата я не встречал , потому и усомнился в правильности своего кода . Но вот уже пол дня, гоняю железяку вроде работает...

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

Добавлено: Ср сен 19, 2012 16:42:19
Секретный кот
Я регулярно такие конструкции использую :)
Case else тоже полезная вещь.