|
Господа, помогите, Мистика |
|
|
|
Feb 12 2007, 14:01
|
Группа: Новичок
Сообщений: 8
Регистрация: 12-02-07
Пользователь №: 25 272

|
Может кто-то сталкивался с чем-нибудь подобным. Я ничем, кроме вмешательства мистических сил, объяснить ситуацию не могу. У меня в программке (для Mega48) есть подпрограмма генерации звуковых сигналов, служащих для подтверждения включения различных режимов работы устройства. Она подает на ножку порта импульсы частотой 1 кГц продолжительность подачи одного сигнала 50 мсек, с паузами между ними 300 мсек. Вызов подпрограммы осуществяется с передачей в нее переменной, определяющей сколько импульсов нужно подать (сколько "пиков" издаст пьез). Так вот, пока в плату вставлен разъем кабеля программирования (подключенного к компьютеру) все работает нормально. Но стоит этот разъем вынуть, количество "пиков" сокращается на единицу. Если в программе стоит один "пик" его вообще не будет, если 3, будет 2 и т. д. Ничего не понимаю. Программа или работает или не работает, разве не так? Как может влиять кабель программирования (ножки порта, к которым подключается программатор, в программе специально не задействованы и к ним на плате не подключено ничего кроме разъема программирования). Вот такая вот непонятка. Три дня бьюсь, сообразить ничего не могу.
|
|
|
|
|
Feb 12 2007, 14:23
|
Группа: Участник
Сообщений: 14
Регистрация: 29-07-06
Пользователь №: 19 180

|
Цитата(Ol_17 @ Feb 12 2007, 14:01)  У меня в программке (для Mega48) есть подпрограмма генерации звуковых сигналов, служащих Приведи plz исходник подпрограммы...
|
|
|
|
|
Feb 12 2007, 15:19
|
Группа: Новичок
Сообщений: 8
Регистрация: 12-02-07
Пользователь №: 25 272

|
Цитата(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 мсек, наращиваем переменную цикла (переменная цикла передается в подпрограмму при ее вызове), сбрасываем флаги совпадения таймера. Разве дело в подпрограмме? Непонятно как могут сигналы на неиспользуемых ногах контроллера влиять на ход выполнения программы?
|
|
|
|
|
Feb 12 2007, 16:09
|
Группа: Участник
Сообщений: 14
Регистрация: 29-07-06
Пользователь №: 19 180

|
Без исходного текста(причем желательно всей проги) все равно судить тяжело, но в порядке предположения - ноги, используемые для программирования также еще предназначены для внешних прерываний, надо проверить, не включены ли они? Также неполохо бы обратить внимание на режим использования таймера №2
|
|
|
|
|
Feb 12 2007, 18:59
|
Группа: Новичок
Сообщений: 8
Регистрация: 12-02-07
Пользователь №: 25 272

|
Цитата(GDI @ Feb 12 2007, 16:19)  На симуляторе было бы неплохо проверить программу. Пьез как подключен? на прямую к порту, через транзистор, к питанию как подключен? Пьезы помехи могут на питание давать. Господа, спасибо всем окликнувшимся. Но по-моему мы не там ищем. Я понимаю если бы программа сбоила с подключенным кабелем, а так наоборот, нормально работает только с подключенным кабелем. Причем проблемы только с малюсеньким фрагментом программы. Вся остальная прога работает отлично хоть с разъемом, хоть без. Хотя прога достаточно сложная и критичная ко временным параметрам - чать проги занимается дешифрацией команд, приходящим по радиоканалу (при этом максимально возможное время на обработку прерывания по приходу импульса от приемника 0.088 мсек). И тут все прекрасно. Плюс есть еще очень похожая подпрограмма, формирующая звуковые сигналы "Сбой" (тоже короткие сигналы с падающей частотой). И тут все прекрасно. Если бы на ножках программирования были разрешены внешние прерывания, вставленный разъем мог бы мешать, но уж никак не помагать. Пьез, как бы он ни был подключен, (подключен через p-n-p транзистор к ножке порта, другим концом на + питания) остается подключенным одинаковым образом и при вставленном и при вытащенном разъеме. Текст программы также не меняется от того вставлен разъем или вытащен. Объясните за счет чего разъем программирования может в принципе помагать выполнению программы? Я вижу только одну разницу - по питанию добавляется емкость, установленная в фильтре питания микросхемы программатора. Пробовал увеличить емкость на плате - не помагает.
|
|
|
|
|
Feb 13 2007, 11:06
|
Группа: Новичок
Сообщений: 8
Регистрация: 12-02-07
Пользователь №: 25 272

|
Мужики, еще раз спасибо всем откликнувшимся. Я может и чайник, но не совсем: неиспользуемые ножки подтянуты, BOD не включен, пьез не сидит на ножке для программирования, WDT оключен, самопроизвольного сброса нет, глюков в программе вроде тоже нет. Я лично склонялся к тому, что проблемы со сбросом (на плате все по классике 10 кОм на + питания, 0.1 мкФ на землю). Вчера повозился еще, выяснилось, если включить питание затем пинцетом закоротить емкость, которая на ножке сброса, подержать секунд 5 и отпустить, загрузка проходит нормально и все работает четко. Пытался подобрать резистор и емкость на ножке сброса - нифига. После этого психанул и поменял Мегу. Все сразу заработало как надо. Что это со старой мегой? Глюк кристалла или все же нужно как-то иначе цепь сброса строить?
|
|
|
|
|
Feb 13 2007, 11:26
|
Местный
  
Группа: Свой
Сообщений: 446
Регистрация: 12-03-06
Из: Москва
Пользователь №: 15 142

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