Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Господа, помогите
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Ol_17
Может кто-то сталкивался с чем-нибудь подобным. Я ничем, кроме вмешательства
мистических сил, объяснить ситуацию не могу.
У меня в программке (для Mega48) есть подпрограмма генерации звуковых сигналов, служащих
для подтверждения включения различных режимов работы устройства. Она подает
на ножку порта импульсы частотой 1 кГц продолжительность подачи одного
сигнала 50 мсек, с паузами между ними 300 мсек. Вызов подпрограммы
осуществяется с передачей в нее переменной, определяющей сколько импульсов
нужно подать (сколько "пиков" издаст пьез).
Так вот, пока в плату вставлен разъем кабеля программирования (подключенного
к компьютеру) все работает нормально. Но стоит этот разъем вынуть,
количество "пиков" сокращается на единицу. Если в программе стоит один "пик"
его вообще не будет, если 3, будет 2 и т. д.
Ничего не понимаю. Программа или работает или не работает, разве не так? Как
может влиять кабель программирования (ножки порта, к которым подключается
программатор, в программе специально не задействованы и к ним на плате не
подключено ничего кроме разъема программирования).
Вот такая вот непонятка. Три дня бьюсь, сообразить ничего не могу.
Злой Евген
Цитата(Ol_17 @ Feb 12 2007, 14:01) *
У меня в программке (для Mega48) есть подпрограмма генерации звуковых сигналов, служащих

Приведи plz исходник подпрограммы...
Dopler
А ресет на плате подтянут (конденсатор 0.1 на землю)?
Ol_17
Цитата(Dopler @ Feb 12 2007, 14:23) *
А ресет на плате подтянут (конденсатор 0.1 на землю)?

Да подтянут, 10 кОм на + питния 0.1 мкФ на землю (я тоже в этом направлении думал, сначала емкость 0.47 стояла, заменил на 0.1 - не помогает).
Текст подпрограммы выложу завтра (на работе с собой нет). Да там все просто: используем Таймер 0, записываем в OCR0B константу, обеспечивающую появление флага совпадения через 1 мсек, в OCR0A константу, равную половине константы в OCR0B (для обеспечения скважности 0.5), запускаем таймер, инвертируем линию порта, ждем появления флага совпадения таймера по регистру OCR0A, инвертируем линию порта, жем появления флага совпадения по регистру OCR0B, очищаем флаги совпадений, обнуляем таймер, таким же образом формируем паузу 300 мсек, наращиваем переменную цикла (переменная цикла передается в подпрограмму при ее вызове), сбрасываем флаги совпадения таймера.
Разве дело в подпрограмме? Непонятно как могут сигналы на неиспользуемых ногах контроллера влиять на ход выполнения программы?
Злой Евген
Без исходного текста(причем желательно всей проги) все равно судить тяжело, но в порядке предположения - ноги, используемые для программирования также еще предназначены для внешних прерываний, надо проверить, не включены ли они? Также неполохо бы обратить внимание на режим использования таймера №2
GDI
На симуляторе было бы неплохо проверить программу.
Пьез как подключен? на прямую к порту, через транзистор, к питанию как подключен? Пьезы помехи могут на питание давать.
Ol_17
Цитата(GDI @ Feb 12 2007, 16:19) *
На симуляторе было бы неплохо проверить программу.
Пьез как подключен? на прямую к порту, через транзистор, к питанию как подключен? Пьезы помехи могут на питание давать.

Господа, спасибо всем окликнувшимся. Но по-моему мы не там ищем. Я понимаю если бы программа сбоила с подключенным кабелем, а так наоборот, нормально работает только с подключенным кабелем. Причем проблемы только с малюсеньким фрагментом программы. Вся остальная прога работает отлично хоть с разъемом, хоть без. Хотя прога достаточно сложная и критичная ко временным параметрам - чать проги занимается дешифрацией команд, приходящим по радиоканалу (при этом максимально возможное время на обработку прерывания по приходу импульса от приемника 0.088 мсек). И тут все прекрасно. Плюс есть еще очень похожая подпрограмма, формирующая звуковые сигналы "Сбой" (тоже короткие сигналы с падающей частотой). И тут все прекрасно.
Если бы на ножках программирования были разрешены внешние прерывания, вставленный разъем мог бы мешать, но уж никак не помагать. Пьез, как бы он ни был подключен, (подключен через p-n-p транзистор к ножке порта, другим концом на + питания) остается подключенным одинаковым образом и при вставленном и при вытащенном разъеме. Текст программы также не меняется от того вставлен разъем или вытащен.
Объясните за счет чего разъем программирования может в принципе помагать выполнению программы?
Я вижу только одну разницу - по питанию добавляется емкость, установленная в фильтре питания микросхемы программатора. Пробовал увеличить емкость на плате - не помагает.
GDI
Стек не переполняется? может ноги , куда программатор вставляется на вход поставлены без подтяжки.. и ловят помехи когда программатора нет... а в программаторе подтяжки есть - вот и отличие..
Screw
А другую мегу не пробовали? Может кристалл бракованный попался?
Pyku_He_oTTyda
Склоняюсь в отсуствии подтяжки к питанию. Кстати, нога на которой висит пьезик не относится к ногам программирования?
defunct
Вначале нужно выяснить нет ли самопроизвольного сброса MK.
Если обнаружится что есть, то смотрите в сторону всех возможных источников сброса.
наличие стабильных +5 на ресете, глюки BOD'а если включен, WDT если включен.

Если самопроизвольного сброса нет, тогда надо искать ошибку в программе.
Ol_17
Мужики, еще раз спасибо всем откликнувшимся. Я может и чайник, но не совсем: неиспользуемые ножки подтянуты, BOD не включен, пьез не сидит на ножке для программирования, WDT оключен, самопроизвольного сброса нет, глюков в программе вроде тоже нет.
Я лично склонялся к тому, что проблемы со сбросом (на плате все по классике 10 кОм на + питания, 0.1 мкФ на землю).
Вчера повозился еще, выяснилось, если включить питание затем пинцетом закоротить емкость, которая на ножке сброса, подержать секунд 5 и отпустить, загрузка проходит нормально и все работает четко.
Пытался подобрать резистор и емкость на ножке сброса - нифига. После этого психанул и поменял Мегу.
Все сразу заработало как надо.
Что это со старой мегой? Глюк кристалла или все же нужно как-то иначе цепь сброса строить?
GDI
Цитата
Что это со старой мегой? Глюк кристалла или все же нужно как-то иначе цепь сброса строить?

Возможно, причиной выхода из строя меги является разность потенциалов земель схемы и компа, я не знаю кокой автор применяет программатор, но у меня выход из строя буферной микросхемы НС244 в параллельном программаторе STK-200(самодельном) являлся стандартным случаем, сейчас перешел на AVR910USB от prottossa, проблем подобных не стало..
Andreas1
Цитата
Вчера повозился еще, выяснилось, если включить питание затем пинцетом закоротить емкость, которая на ножке сброса, подержать секунд 5 и отпустить, загрузка проходит нормально и все работает четко.
Пытался подобрать резистор и емкость на ножке сброса - нифига. После этого психанул и поменял Мегу.

Обязательно надо включать BOD, или использовать внешний. Я обычно ставлю 5к на + и 1000пф на землю, и покороче SR до разъема. Например без внешнего BOD at90s2313 ингода вообще не запускался.
Цитата
Возможно, причиной выхода из строя меги является разность потенциалов земель схемы и компа, я не знаю кокой автор применяет программатор, но у меня выход из строя буферной микросхемы НС244 в параллельном программаторе STK-200(самодельном) являлся стандартным случаем,

100 Ом на каждый вход/выход буфера и никаких проблем на многие годы. До этого буфера периодически летели, но процы не повреждались.
GDI
Цитата
100 Ом на каждый вход/выход буфера и никаких проблем на многие годы. До этого буфера периодически летели, но процы не повреждались.

Согласен со всем, процы тоже никогда не летели.
Злой Евген
А у меня attiny2313 так сгорела из-за отсутствия резисторов(правда тогда пара проводков отвалилось от lpt разъема при этом, в частности GND blush.gif ) Теперь я юзаю avr dragon, надо тоже резисторы поставить на всяк случай, а то он не 3 рубля стоит... wink.gif
SasaVitebsk
Согласен с Andreas1 полностью по обоим пунктам.

По второму AVREAL собрал лет 8 назад и пользуюсь активно и не было ни одного случая вылета регистра или проца. Резисторы у меня стоят во всех программаторах. На порте принтера они равны 33Ома. Я так и ставлю.
yarunt
Цитата(Ol_17 @ Feb 12 2007, 15:01) *
Может кто-то сталкивался с чем-нибудь подобным. Я ничем, кроме вмешательства
мистических сил, объяснить ситуацию не могу.
У меня в программке (для Mega48) есть подпрограмма генерации звуковых сигналов, служащих
для подтверждения включения различных режимов работы устройства. Она подает
на ножку порта импульсы частотой 1 кГц продолжительность подачи одного
сигнала 50 мсек, с паузами между ними 300 мсек. Вызов подпрограммы
осуществяется с передачей в нее переменной, определяющей сколько импульсов
нужно подать (сколько "пиков" издаст пьез).
Так вот, пока в плату вставлен разъем кабеля программирования (подключенного
к компьютеру) все работает нормально. Но стоит этот разъем вынуть,
количество "пиков" сокращается на единицу. Если в программе стоит один "пик"
его вообще не будет, если 3, будет 2 и т. д.
Ничего не понимаю. Программа или работает или не работает, разве не так? Как
может влиять кабель программирования (ножки порта, к которым подключается
программатор, в программе специально не задействованы и к ним на плате не
подключено ничего кроме разъема программирования).
Вот такая вот непонятка. Три дня бьюсь, сообразить ничего не могу.

У меня такое было с мегой8 !
Мега работала от внутреннего рц генератора и от 3 вольт,а програматор питался 5ю вольтами и действительно, через зброс питание програматора меняло его частоту.Поменял задержки и оставил так.
Ol_17
А что это за программатор AVR910USB? Где можно схему посмотреть? Поддерживается ли CVAVR?
GDI
Цитата
А что это за программатор AVR910USB? Где можно схему посмотреть? Поддерживается ли CVAVR?

http://electronix.ru/forum/index.php?showtopic=18676 CVAVR поддерживается только оч-ч-ень медленно работает из-за отсутствия блочного режима, с avrprog из AVR Studio гораздо шустрее.
На этом программаторе очень удобно сделать гальвано-развязку от целевой платы, чему способствует режим понижения SCLK SPI, что позволяет использовать не очень шустрые оптроны.
Ol_17
То GDI:
Спасибо большое.
И вообще спасибо всем откликнувшимся. Впервые на вашем форуме и был приятно удивлен доброжелательностью участников.
IgorKossak
Цитата(Ol_17 @ Feb 13 2007, 13:45) *
То GDI:
Спасибо большое.
И вообще спасибо всем откликнувшимся. Впервые на вашем форуме и был приятно удивлен доброжелательностью участников.

Знали бы Вы чего это стоило. wink.gif
Kovrov
Цитата(Ol_17 @ Feb 13 2007, 14:45) *
То GDI:
Спасибо большое.
И вообще спасибо всем откликнувшимся. Впервые на вашем форуме и был приятно удивлен доброжелательностью участников.

Такой вопрос:
DWEN - фуз зашит...?
в смысле кристалл часом не в режиме отладки?
тогда ресет выполняетя несколько поиному....
может в эту сторону рыть?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.