Страница 1 из 1
Мастеркит BM9010 и AVRProg
Добавлено: Ср авг 19, 2009 20:38:15
lampert
Здравствуйте.
Приобрел себе данный программатор, все установил, переназначил его на порт COM2. Все определяется нормально. AVRProg запускается без ошибок (ОС - Windows XP. МК - ATmega32).
Но прошивать/читать контроллер не получается. Выскакивает сообщение что-то вроде "cannot enter programming mode".
При заходе в настройки Advanced AVRProg именно при ATmega32 - получается аналогичное сообщение. Иногда процесс чтения вроде начинается, но в первые секунды все повисает. Если выбрать AT89, например, такого сообщения не появляется при заходе в Advanced, и даже что-то считывается с меги32 для данного выбора.
Попытался использовать ChipBlasterAVR, произвел настройки в нем контроллера, порта - но он выдал похожую ошибку.
В чем может быть проблема?
Re: Мастеркит BM9010 и AVRProg
Добавлено: Ср авг 19, 2009 20:52:55
Synergetik
lampert писал(а):Здравствуйте.
Приобрел себе данный программатор, все установил, переназначил его на порт COM2. Все определяется нормально. AVRProg запускается без ошибок (ОС - Windows XP. МК - ATmega32).
Но прошивать/читать контроллер не получается. Выскакивает сообщение что-то вроде "cannot enter programming mode".
Обычно такая ошибка вылетает, если программируемый МК не подключён - отсутствует контакт, нет питание МК (кстати, оно обязательно - насколько я понял, питание от программатора на схему не идёт, только масса), отсутствует кварцевый резонатор. У меня также помогало (на самодельном AVR910 от Prottoss'а) переключение в режим пониженной частоты, хотя на Мастер Китском (хотя в остальном схема та же) такой перемычки явно нет.
Добавлено: Ср авг 19, 2009 21:21:23
Pooher
Проверьте верность подключения контроллера к программатору.
Программировать лучше с помощью AVROSPII.
Добавлено: Вс авг 23, 2009 12:54:28
lampert
Спасибо, разобрался.
Проблема была в неправильном отсчете выводов.
Я считал как
2 4 6 8 10
1 3 5 7 9
| Провод |
А правильно
1 3 5 7 9
2 4 6 8 10
| Провод |
Добавлено: Вс авг 23, 2009 13:03:17
lampert
Теперь возникла другая проблема.
Написал программку простую на ассемблере (просто определил все выходы входы, задал начальной состояние и зациклил на пустой цикл), прошил, но на выходе PB0 у меня есть напряжение.
Т.е. если подключить к нему и к земле диод, то он будет гореть. Хотя не должен, потому что я задал выходу нулевое состояние. На остальные PB1, PB2 и др. такого нет.
Не могу понять в чем проблема.
Привожу текст программки:
Код: Выделить всё
.device atmega32
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m32def.inc"
.list
.def temp =r16
rjmp Init
Init:
; Делаю все ноги МК выходами
ldi temp,0b11111111
out DDRB,temp
ldi temp,0b11111111
out DDRD,temp
ldi temp,0b11111111
out DDRA,temp
ldi temp,0b11111111
out DDRC,temp
; Приписываю выходам нулевое состояние
ldi temp,0b00000000
out PortB,temp
ldi temp,0b00000000
out PortD,temp
ldi temp,0b00000000
out PortA,temp
ldi temp,0b00000000
out PortC,temp
rjmp Start
Start:
rjmp Start
Что здесь не так?
Добавлено: Пн авг 24, 2009 19:58:53
lampert
Неужели никто не знает?
Добавлено: Пн авг 24, 2009 20:43:49
kupriyanov
Самый верный способ проверить код в Atmel AVR Studio.
Если там все порты становятся в нужные значения, то тогда это проблема не в коде.
Добавлено: Пн авг 24, 2009 20:46:17
GP1
при такой конфигурации, выводы переводятся в Z-состояние, при этом на выводе будет присутствовать примерно половина питания процессора.
При замыкании на землю (ну или подключении светодиода) будет протекать ток ограниченный (мах) 10 мА, не помню где читал, связано это с тем что буферные каскады собраны по схеме ограничителя тока.
зы если вы только начинаете писать на АСМе, что само по себе уже заслуживает уважения, старайтесь приучить себя писать "культурно", об этом много написано.
и на будущее - оператор OUT не меняет значение регистра-источника, следовательно в вашем примере достаточно один раз присвоить значение регистру temp. сбрасывать регистр в 0 лучше операторм CLR, а устанавливать в 1 оператором SER, и код короче и выполняется за 1 такт.
Добавлено: Пн авг 24, 2009 20:56:24
GP1
kupriyanov писал(а):Самый верный способ проверить код в Atmel AVR Studio.
для простого примера да, но AVRStudio не гарантирует 100% работоспособности кода в железе, проверено не раз, в нем тоже глюков хватает.
Добавлено: Пн авг 24, 2009 22:15:42
lampert
kupriyanov писал(а):Самый верный способ проверить код в Atmel AVR Studio.
Если там все порты становятся в нужные значения, то тогда это проблема не в коде.
Проверял, работает как задумывалось.
Добавлено: Пн авг 24, 2009 22:16:35
lampert
GP1 писал(а):при такой конфигурации, выводы переводятся в Z-состояние, при этом на выводе будет присутствовать примерно половина питания процессора.
При замыкании на землю (ну или подключении светодиода) будет протекать ток ограниченный (мах) 10 мА, не помню где читал, связано это с тем что буферные каскады собраны по схеме ограничителя тока.
зы если вы только начинаете писать на АСМе, что само по себе уже заслуживает уважения, старайтесь приучить себя писать "культурно", об этом много написано.
и на будущее - оператор OUT не меняет значение регистра-источника, следовательно в вашем примере достаточно один раз присвоить значение регистру temp. сбрасывать регистр в 0 лучше операторм CLR, а устанавливать в 1 оператором SER, и код короче и выполняется за 1 такт.
Спасибо, учту. А как же тогда присвоить нулевое состояние?
Добавлено: Пн авг 24, 2009 23:29:35
Pooher
DDRx-1
PORTx-0
Добавлено: Пн авг 24, 2009 23:30:55
Pooher
старайтесь приучить себя писать "культурно"
Кто бы видел мои первые "программы"

Добавлено: Пн авг 24, 2009 23:30:59
Yellow Tiger
GP1 писал(а):при такой конфигурации, выводы переводятся в Z-состояние, ...
В Z-состоянии выводы могут быть только, если они сконфигурированы, как входы и в них не включен пуллап, то есть, если в DDR'ах - нули, и в PORT'ах - тоже нули. Здесь же выводы всех портов - обычные выходы.
lampert: А на PB0 - хорошо бы осциллом посмотреть.

Добавлено: Пн авг 24, 2009 23:47:33
Pooher
А не проверить ли монтаж?
Добавлено: Вт авг 25, 2009 01:14:58
Yellow Tiger
В смысле коротыша на PB0? Так ведь тогда мега32 грелась бы страшно - там же выход с нулём. Хотя, проверка никогда не помешает.

Добавлено: Вт авг 25, 2009 09:02:25
GP1
Yellow Tiger писал(а):GP1 писал(а):при такой конфигурации, выводы переводятся в Z-состояние, ...
В Z-состоянии выводы могут быть только, если они сконфигурированы, как входы и в них не включен пуллап, то есть, если в DDR'ах - нули, и в PORT'ах - тоже нули. Здесь же выводы всех портов - обычные выходы.
lampert: А на PB0 - хорошо бы осциллом посмотреть.

Прошу прощения. Действительно мой глюк, DDRы то =1, сорри.
но для входов все вышесказанное мной справедливо.
Добавлено: Вт авг 25, 2009 18:05:07
Yellow Tiger
GP1 писал(а):...но для входов все вышесказанное мной справедливо.
Да, конечно(!) - если почему-то не включены пуллапы, то входы действительно будут в Z-состоянии, вот только напряжение на них не будет равно половине питающего - вместо этого, на входах будет невообразимая чехарда, так как весьма высокое входное сопротивление не демпфирует даже слабые наводки (
а их обычно много вокруг). Собственно, именно по этой причине и не рекомендуется оставлять "
висеть в воздухе" выводы, сконфигурированные, как входы; рекомендуется притягивать их к земле или питанию внешними или внутренними пуллапами.
Добавлено: Вт авг 25, 2009 18:08:59
GP1
Yellow Tiger
ну не придирайтесь к словам, я же написал - примерно

Добавлено: Вт авг 25, 2009 18:24:45
Yellow Tiger
GP1 писал(а):...ну не придирайтесь к словам, ...
Ни в одном глазу! Просто я уверен, что начинающие поймут это утверждение неверно и будут думать, что там есть какое-либо
определенное напряжение. Лучше уж пусть сразу поймут, что в таких условиях там можно будет найти всё, что угодно, любую чехарду, только не какое-то предсказуемое, постоянное напряжение.