Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
Несколько вопросов, не раскрытых в теме. 1. Ретрансляция только в одну сторону? 2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина? 3. На какой максимальной скорости предполагается работа? Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa. Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 12, 2012 00:05:18
Слесарь-программист
Карма: 21
Рейтинг сообщений: 88
Зарегистрирован: Вт сен 11, 2012 23:08:28 Сообщений: 341 Откуда: город Кстово Нижегородская обл.
Рейтинг сообщения:0 Медали: 2
Всем привет! решил я поразить свой мозг ассемблером, язык понял, вкурил немного всего, но в детстве DeltaC-48k TR-DOS сделали своё злое дело и теперь грызу BASCOM, от души пишу коды, даже за неделю уже придумал схему и написал простенький алгоритм запуска автомобильного генератора как мотора, но дело не в этом. Опыта хочу с АЦП и тонкости познать контроллерные, вот тут схема, от известного металлоискателя Clone PI-W, собрал, работает, всё отлично, теперь решил сам написать прошивку, вкурил принцип действия, пишу простой код, просто, чтоб он мне музыку играл:
Запускаю, а он пол секунды ноту выдаст, пол сек полчит и пищит примитивно, индикацию поставил, проверил, порты все совподают, отключил ещё то, что открывает полевой транзистор и палит 20 омный резюк. На просторах как-то видел исходники на ассемблер от Clone PI-W, теперь найти не могу, но в голове отложилось, что там использовали сторожевой таймер. Удивило меня то, что установив его так:
Но это не помогло. Потребляет он 100-170мА, может АЦП инициализировать надо или ещё какие премудрости? Стабилизатор в схеме не мощный, может до порогового значения питание падает из-за замыкания какого нибудь порта? Хелпните мне, пожалуйста.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 12, 2012 08:01:30
Открыл глаза
Зарегистрирован: Вс май 30, 2010 20:27:33 Сообщений: 63 Откуда: Санкт-Петербург
Рейтинг сообщения:0
ut1wpr писал(а):
Kill17 писал(а):
Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
Несколько вопросов, не раскрытых в теме. 1. Ретрансляция только в одну сторону? 2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина? 3. На какой максимальной скорости предполагается работа? Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa. Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
1 - пока только в одну 2 - нет, только передача даных 3 - 115200
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
По второму вопросу это не ответ. Вам надо заглянуть в ДШ на примененный контроллер. Повторяю, есть ли в нем вектор прерывания по изменению состояния пина? Ваш ответ не стыкуется с вопросом. Скорость 115200 достаточно высокая для моего способа ретрансляции. Вряд ли Бейсик годится. Лучше всего на асме реализовывать. Там всего несколько строк получается. Но только в том случае, если ответ на вопрос 2 положительный. Да, и еще момент. Устройство должно просто ретранслировать поток или производить анализ контента? В начале вашего вопроса это не было озвучено, а значение огромное. Анализ просто так не делается. За анализом всегда следует синтез. Т.е. предусматриваются какие-то действия по результатам анализа, иначе он нафиг не нужен. А это уже совсем другой огород.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
dimon-790
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Так подправь исходник , что я давал , на сколько надо . А причём тут ЕЕПРОМ ?...
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Да уж! Организация приемного буфера в EEPROM - это реально круто! Надо бы помочь вопрошавшему. Почитайте про EEPROM побольше. Будете неприятно удивлены его отличиями от ОЗУ (RAM). Особенно временнЫми параметрами.
ev3658, я что-то понять не могу, а при чем же тут АЦП? Где у Вас в коде использование АЦП? Про сторожевой таймер даже писать грустно, настолько Вы не в теме...
Просто фьюзы у меги выставите как в коде указано, и все будет работать. С завода мега 8 тактируется от 1МГц, вот и работает в 8 раз медленнее. Либо в коде частоту измените...
ut1wpr писал(а):
Особенно временнЫми параметрами.
Это да, есть такое.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 12, 2012 17:11:06
Слесарь-программист
Карма: 21
Рейтинг сообщений: 88
Зарегистрирован: Вт сен 11, 2012 23:08:28 Сообщений: 341 Откуда: город Кстово Нижегородская обл.
Рейтинг сообщения:0 Медали: 2
Вообщем не пойму как в BASCOM пользоваться сторожевым таймером в AtMega8, не послушный он, работает только строка Config Watchdog = 2048, а команды Start Watchdog и Stop Watchdog не работают. В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Его не включать и выключать нужно (это уже само по себе претит сути сторожевого пса). Его нужно периодически сбрасывать!!! Фьюз же включает принудительно, либо можно настроить в коде. Ну неужели так сложно взять и почитать про это? Хотя бы здесь http://decada.org.ru/project/lessons/bascom_avr/17/
P.S. И вообще, какое отношение сторожевой таймер имеет к Вашей "музыке"? Вы хоть ради интереса поглядите, что это за зверь-то такой, не выставляйте себя уж совсем в неприглядном свете...
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 12, 2012 17:53:01
Поставщик валерьянки для Кота
Карма: 4
Рейтинг сообщений: 26
Зарегистрирован: Ср сен 17, 2008 14:32:15 Сообщений: 2106 Откуда: Старые Васюки
Рейтинг сообщения:0
ev3658 писал(а):
В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Так и должно работать. Этот бит означает перманентное включение WDT, программно управлять им после этого не получится. Отключите его и тогда пользуйтесь командами Start и Stop.
_________________ Даже остановленные часы два раза в сутки показывают правильное время.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 12, 2012 20:49:02
Открыл глаза
Зарегистрирован: Вс май 30, 2010 20:27:33 Сообщений: 63 Откуда: Санкт-Петербург
Рейтинг сообщения:0
Так, раскрою задумку. От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).
Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.
dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
Так, раскрою задумку. От контроллера требуется только одно, принимать байты(много байт) на скорости 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 раз.
Toggle Portb.0 ' меняем состояние светодиода на противоположное
Loop ' конец цикла
То мигать светодиод не будет. Программа просто не сможет добраться до смены состояния, так как задержка (150 мс) больше чем настройка сторожевого таймера (130 мс). И МК будет постоянно сбрасываться раньше.
Но если разбить задержку на две части, и сбрасывать сторожевой таймер, то переполниться и сработать он не успеет. И все будет прекрасно работать.
Код:
$regfile = "m8def.dat" ' тип МК $crystal = 4000000 ' выбор кристала для расчета задержек
Waitms 75 ' первая часть задержки Reset Watchdog ' сброс сторожевого таймера Waitms 75 ' вторая часть задержки Reset Watchdog ' сброс сторожевого таймера
Toggle Portb.0 ' меняем состояние светодиода на противоположное
Loop
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения