BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Да, все получилось, барсик один, но для пиков и авров различий много
- Реклама
Re: BASCOM AVR в вопросах и ответах
Несколько вопросов, не раскрытых в теме.Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
1. Ретрансляция только в одну сторону?
2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина?
3. На какой максимальной скорости предполагается работа?
Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa.
Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
С уважением,
Виктор.
Виктор.
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Всем привет! решил я поразить свой мозг ассемблером, язык понял, вкурил немного всего, но в детстве DeltaC-48k TR-DOS сделали своё злое дело и теперь грызу BASCOM, от души пишу коды, даже за неделю уже придумал схему и написал простенький алгоритм запуска автомобильного генератора как мотора, но дело не в этом.
Опыта хочу с АЦП и тонкости познать контроллерные, вот тут схема, от известного металлоискателя Clone PI-W, собрал, работает, всё отлично, теперь решил сам написать прошивку, вкурил принцип действия, пишу простой код, просто, чтоб он мне музыку играл:
Запускаю, а он пол секунды ноту выдаст, пол сек полчит и пищит примитивно, индикацию поставил, проверил, порты все совподают, отключил ещё то, что открывает полевой транзистор и палит 20 омный резюк. На просторах как-то видел исходники на ассемблер от Clone PI-W, теперь найти не могу, но в голове отложилось, что там использовали сторожевой таймер.
Удивило меня то, что установив его так:
он стал пищать гораздо тормознее и почти 2 мелодии проигрывает. Подсказали мне стартовать, останавливать его так:
Но это не помогло. Потребляет он 100-170мА, может АЦП инициализировать надо или ещё какие премудрости? Стабилизатор в схеме не мощный, может до порогового значения питание падает из-за замыкания какого нибудь порта? Хелпните мне,
пожалуйста.
Опыта хочу с АЦП и тонкости познать контроллерные, вот тут схема, от известного металлоискателя 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
Удивило меня то, что установив его так:
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
...
...
...
Sound Speaker , 659 , 1011 'E2(1/2)
Portd.2 = 0
Stop Watchdog
...
...
...- Kill17
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 30, 2010 20:27:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
ut1wpr писал(а):Несколько вопросов, не раскрытых в теме.Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
1. Ретрансляция только в одну сторону?
2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина?
3. На какой максимальной скорости предполагается работа?
Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa.
Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
1 - пока только в одну
2 - нет, только передача даных
3 - 115200
Re: BASCOM AVR в вопросах и ответах
По второму вопросу это не ответ. Вам надо заглянуть в ДШ на примененный контроллер.Kill17 писал(а):2 - нет, только передача даных
Повторяю, есть ли в нем вектор прерывания по изменению состояния пина? Ваш ответ не стыкуется с вопросом.
Скорость 115200 достаточно высокая для моего способа ретрансляции. Вряд ли Бейсик годится. Лучше всего на асме реализовывать. Там всего несколько строк получается.
Но только в том случае, если ответ на вопрос 2 положительный.
Да, и еще момент.
Устройство должно просто ретранслировать поток или производить анализ контента?
В начале вашего вопроса это не было озвучено, а значение огромное. Анализ просто так не делается. За анализом всегда следует синтез. Т.е. предусматриваются какие-то действия по результатам анализа, иначе он нафиг не нужен.
С уважением,
Виктор.
Виктор.
- Реклама
- dimon-790
- Мучитель микросхем
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Так подправь исходник , что я давал , на сколько надо . А причём тут ЕЕПРОМ ?...Kill17 писал(а):Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Re: BASCOM AVR в вопросах и ответах
Да уж! Организация приемного буфера в EEPROM - это реально круто!dimon-790 писал(а):А причём тут ЕЕПРОМ ?...
Надо бы помочь вопрошавшему. Почитайте про EEPROM побольше. Будете неприятно удивлены его отличиями от ОЗУ (RAM). Особенно временнЫми параметрами.
С уважением,
Виктор.
Виктор.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
ev3658, я что-то понять не могу, а при чем же тут АЦП? Где у Вас в коде использование АЦП? Про сторожевой таймер даже писать грустно, настолько Вы не в теме...
Просто фьюзы у меги выставите как в коде указано, и все будет работать. С завода мега 8 тактируется от 1МГц, вот и работает в 8 раз медленнее. Либо в коде частоту измените...

Просто фьюзы у меги выставите как в коде указано, и все будет работать. С завода мега 8 тактируется от 1МГц, вот и работает в 8 раз медленнее. Либо в коде частоту измените...
Это да, есть такое.ut1wpr писал(а):Особенно временнЫми параметрами.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Вообщем не пойму как в BASCOM пользоваться сторожевым таймером в AtMega8, не послушный он, работает только строка Config Watchdog = 2048, а команды Start Watchdog и Stop Watchdog не работают. В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Его не включать и выключать нужно (это уже само по себе претит сути сторожевого пса). Его нужно периодически сбрасывать!!! Фьюз же включает принудительно, либо можно настроить в коде. Ну неужели так сложно взять и почитать про это? Хотя бы здесь http://decada.org.ru/project/lessons/bascom_avr/17/
P.S. И вообще, какое отношение сторожевой таймер имеет к Вашей "музыке"? Вы хоть ради интереса поглядите, что это за зверь-то такой, не выставляйте себя уж совсем в неприглядном свете...
P.S. И вообще, какое отношение сторожевой таймер имеет к Вашей "музыке"? Вы хоть ради интереса поглядите, что это за зверь-то такой, не выставляйте себя уж совсем в неприглядном свете...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Так и должно работать. Этот бит означает перманентное включение WDT, программно управлять им после этого не получится. Отключите его и тогда пользуйтесь командами Start и Stop.ev3658 писал(а):В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Даже остановленные часы два раза в сутки показывают правильное время.
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
reset сторожевого таймера не работает тоже ( Так и придётся отключать. Спасибо!
- Kill17
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 30, 2010 20:27:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Так, раскрою задумку.
От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).
Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.
dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).
Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.
dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
Re: BASCOM AVR в вопросах и ответах
Не надо было людям голову морочить. Объяснять задачу надо сразу, а не порциями.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 в вопросах и ответах
Жестко, но справедливо.....
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да как не работает-то? Например, если написать подобный код:ev3658 писал(а):reset сторожевого таймера не работает тоже
Код: Выделить всё
$regfile = "m8def.dat" ' тип МК
$crystal = 4000000 ' выбор кристала для расчета задержек
Config Portb.0 = Output ' светодиод
Config Watchdog = 128 ' сторожевой таймер настроен на 130 мс
Start Watchdog ' запуск сторожевого таймера
Do ' основной цикл мигания светодиодом
Waitms 150 ' задержка частоты мигания
Toggle Portb.0 ' меняем состояние светодиода на противоположное
Loop ' конец цикла
Но если разбить задержку на две части, и сбрасывать сторожевой таймер, то переполниться и сработать он не успеет. И все будет прекрасно работать.
Код: Выделить всё
$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 в вопросах и ответах
Хвостатые подскажите кто в курсе , корректно-ли в данном случае используется оператор "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 в вопросах и ответах
Да просто ни где такого изврата я не встречал , потому и усомнился в правильности своего кода . Но вот уже пол дня, гоняю железяку вроде работает...
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Я регулярно такие конструкции использую 
Case else тоже полезная вещь.
Case else тоже полезная вещь.
Даже остановленные часы два раза в сутки показывают правильное время.


