Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не стартует Mega8
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AndreyVN
Всем привет!
Народ, не могу запустить Atmega8, подскажите, pls, что я забыл?

Fusebits:Пробовал внутренний генератор 1 Мгц:
CKSEL3210=0001, SUT10=10,BODEN=1,BOOTRST=1, CKOPT=1, WDTON=1,RSTDISBL=1
Пробовал внешний кварц 4 МГц (кварц “свистит”):
CKSEL3210=1111, SUT10=00, BODEN=1,BOOTRST=1, CKOPT=1, WDTON=1,RSTDISBL=1

Настройки компилятора:
Тип программы: Application, тактовая частота, остальное, вроде ерунда.

Программа:
В симуляторе AVR Studio все работает, по адресу 0000 сидит RJMP на программу, т.е. по RESET проц. должен обработать прерывание и прыгнуть на мою программу, тогда на PORTB.1 должна появиться частота, которую я смотрю осциллографом.
Код
// Port B initialization
// Func0=Out Func1=Out Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
PORTB=0x00;
DDRB=0x03;
x=0xff;
while (1)
      {
    PORTB=x;
    x=~x;
      };
vxzxc
WDTON=1 - это значит Watch dog включен?
Если да, то не мешало бы его сбрасывать.
Tcom
И ешё некоторые восмые плохо стартуют без резистора RESET ->> V+ (10k)
at90
WDTON=1, вочьдог выключен.
WDTON=0, вочьдог включен.
starter48
Цитата(AndreyVN @ Oct 16 2006, 10:52) *
Всем привет!
Народ, не могу запустить Atmega8, подскажите, pls, что я забыл?

Покажи файл, который в мегу собственно зашиваешь программатором.
И скажи каким программатором шьёшь? Может он reset не отпускает после прошивки?
AndreyVN
Цитата
Покажи файл, который в мегу собственно зашиваешь программатором.
И скажи каким программатором шьёшь? Может он reset не отпускает после прошивки?


Шью самодельным STK-200/300 (LPT) и CodeVision AVR, после читаю, сравниваю FLASH, все нормально. В окне программатора есть кнопка RESET, смотрю на первую ногу меги (RESET), нажимаю кнопку и вижу как 'нога' падает в 0 где-то на секунду, потом возвращается в единичку. То есть ресет проходит.

PS: Пробую вставить *.rom и *.obj - чегой-то файл не вставляется. sad.gif

Цитата
И ешё некоторые восмые плохо стартуют без резистора RESET ->> V+ (10k)

Попробую!
SasaVitebsk
Попробуйте побродить по ветке для начинающих "geting started ..." Возможно найдёте что-то для себя полезное и уж точно помигаете светодиодами
starter48
Цитата(AndreyVN @ Oct 16 2006, 14:42) *
Шью самодельным STK-200/300 (LPT) и CodeVision AVR, после читаю, сравниваю FLASH, все нормально. В окне программатора есть кнопка RESET, смотрю на первую ногу меги (RESET), нажимаю кнопку и вижу как 'нога' падает в 0 где-то на секунду, потом возвращается в единичку. То есть ресет проходит.

Попробуй в своей среде разработки включить выходной формат intel-hex, после чего зашей его своим программатором, используя софт avreal: http://www.ln.com.ua/~real/avreal/
Только не забудь, что контроллер надо стирать перед прошивкой.
Вот так примерно надо запускать avreal для твоего случая:
avreal32.exe -as -p1 +mega8 -o1000 -e -v -w <файл прошивки>
Если не поможет, то давай этот hex сюда - будем разбираться.
Цитата(AndreyVN @ Oct 16 2006, 14:42) *
PS: Пробую вставить *.rom и *.obj - чегой-то файл не вставляется. sad.gif

Возможно, стоит запаковать зипом.
AndreyVN
[quote name='starter48' date='Oct 17 2006, 00:25' post='165535']
Только не забудь, что контроллер надо стирать перед прошивкой.
Вот так примерно надо запускать avreal для твоего случая:
avreal32.exe -as -p1 +mega8 -o1000 -e -v -w <файл прошивки>
Если не поможет, то давай этот hex сюда - будем разбираться.
[quote name='AndreyVN' post='165222' date='Oct 16 2006, 14:42']
PS: Пробую вставить *.rom и *.obj - чегой-то файл не вставляется. sad.gif
[/quote]

Я пробовал прошивать PonyProg, результат тот-же, а вот стирать флэшку никогда не стирал(!), возможно все дело именно в этом.
WHALE
Цитата(starter48 @ Oct 17 2006, 00:25) *
Цитата(AndreyVN @ Oct 16 2006, 14:42) *

Шью самодельным STK-200/300 (LPT) и CodeVision AVR, после читаю, сравниваю FLASH, все нормально. В окне программатора есть кнопка RESET, смотрю на первую ногу меги (RESET), нажимаю кнопку и вижу как 'нога' падает в 0 где-то на секунду, потом возвращается в единичку. То есть ресет проходит.

Попробуй в своей среде разработки включить выходной формат intel-hex, после чего зашей его своим программатором, используя софт avreal: http://www.ln.com.ua/~real/avreal/
Только не забудь, что контроллер надо стирать перед прошивкой.
Вот так примерно надо запускать avreal для твоего случая:
avreal32.exe -as -p1 +mega8 -o1000 -e -v -w <файл прошивки>
Если не поможет, то давай этот hex сюда - будем разбираться.
Цитата(AndreyVN @ Oct 16 2006, 14:42) *
PS: Пробую вставить *.rom и *.obj - чегой-то файл не вставляется. sad.gif

Возможно, стоит запаковать зипом.

Это все абсолютно лишнее,у CV нормальный встроенный программатор.А что у тебя осцилл показывает
на порте В3?Может,дефект монтажа и он банально засажен на 0 или 1?
Попробуй так:
unsigned char x;
void main(void)
{
PORTB=0x00;
DDRB=0xff;
x=0xff;
while (1)
{
PORTB=x;
x=~x;
}
}
gormih
Проблема еще бывает и аппаратной.
Питание есть?
Кварц генерит?
Первое, что ты должен был проверить.
AndreyVN
Цитата(Михаил Горюнов @ Oct 17 2006, 09:20) *
Проблема еще бывает и аппаратной.
Питание есть?
Кварц генерит?
Первое, что ты должен был проверить.


Ну зачем Вы так. sad.gif

Цитата
PORTB=0x00;
DDRB=0xff;


PortB3 висит в единичке, самое интересное, что по RESET он сваливается в 0, и снова возвращается в 1 навсегда. Пожалуй, стоит попробовать записать в порт 0, (без генерации) и посмотреть управляется он или нет.
Joy
Цитата(AndreyVN @ Oct 17 2006, 07:42) *
флэшку никогда не стирал(!), возможно все дело именно в этом.

ну по-моему это первое и обязательное что нужно сделать smile.gif иначе прога не записывается (вернее, записывается не правильно)
ps1x
Цитата(Joy @ Oct 17 2006, 14:31) *
Цитата(AndreyVN @ Oct 17 2006, 07:42) *

флэшку никогда не стирал(!), возможно все дело именно в этом.

ну по-моему это первое и обязательное что нужно сделать smile.gif иначе прога не записывается (вернее, записывается не правильно)

Да нет, записывается, причем, абсолютно правильно. Просто поверх старой программы, при этом ее затирая.
starter48
Цитата(ps1x @ Oct 17 2006, 17:53) *
Цитата(Joy @ Oct 17 2006, 14:31) *

Цитата(AndreyVN @ Oct 17 2006, 07:42) *

флэшку никогда не стирал(!), возможно все дело именно в этом.

ну по-моему это первое и обязательное что нужно сделать smile.gif иначе прога не записывается (вернее, записывается не правильно)

Да нет, записывается, причем, абсолютно правильно. Просто поверх старой программы, при этом ее затирая.

Нет, при программировании происходит изменение только 1 -> 0
Возможно у тебя программатор автоматом стирает сектора.

Цитата(AndreyVN @ Oct 17 2006, 10:42) *
Я пробовал прошивать PonyProg, результат тот-же, а вот стирать флэшку никогда не стирал(!), возможно все дело именно в этом.

Ты файл прошивки-то будешь показывать?
Чтобы не гадать, может у тебя программа какя-то кривая...
Зипом запакуй.
AndreyVN
Цитата(starter48 @ Oct 17 2006, 16:11) *
Ты файл прошивки-то будешь показывать?
Чтобы не гадать, может у тебя программа какя-то кривая...
Зипом запакуй.


Куда'ж теперь деваться smile.gif
Нажмите для просмотра прикрепленного файла
Joy
Цитата(AndreyVN @ Oct 17 2006, 16:44) *
Цитата(starter48 @ Oct 17 2006, 16:11) *

Ты файл прошивки-то будешь показывать?
Чтобы не гадать, может у тебя программа какя-то кривая...
Зипом запакуй.


Куда'ж теперь деваться smile.gif
Нажмите для просмотра прикрепленного файла

пардоньте, а где прописана точка входа в прграмму? прыжки на прерывания? инициализация стеков?
AndreyVN
Цитата(Joy @ Oct 17 2006, 17:48) *
пардоньте, а где прописана точка входа в прграмму? прыжки на прерывания? инициализация стеков?


Так это "С" делает сам. Если дизасемблировать программу (AVR Studio) видно, что по адресу 0000 сидит RJMP на программу, RJMPы на другие прерывания, перед main сидит куча присвоений в которых спрятаны организация стека и т.п. Или я не прав?
Joy
Цитата(AndreyVN @ Oct 17 2006, 17:03) *
Цитата(Joy @ Oct 17 2006, 17:48) *

пардоньте, а где прописана точка входа в прграмму? прыжки на прерывания? инициализация стеков?


Так это "С" делает сам. Если дизасемблировать программу (AVR Studio) видно, что по адресу 0000 сидит RJMP на программу, RJMPы на другие прерывания, перед main сидит куча присвоений в которых спрятаны организация стека и т.п. Или я не прав?

вот этого я не скажу, с авр-студией никогда не общался, пишу в вижуал студио и использую иаровский компилятор из командной строки. все инициализации явно прописываю ручками.
скажу только, что если до ф-ии main дело не доходит, то очень возможно проблема именно вэтих самых джампах sad.gif
starter48
Цитата(AndreyVN @ Oct 17 2006, 19:44) *
Цитата(starter48 @ Oct 17 2006, 16:11) *

Ты файл прошивки-то будешь показывать?
Чтобы не гадать, может у тебя программа какя-то кривая...
Зипом запакуй.


Куда'ж теперь деваться smile.gif
Нажмите для просмотра прикрепленного файла

Я зашил Port.hex в Mega8L-8PI и на 14 и 15 ногах (PB0,PB1) появились импульсы с частотой ~71.5кгц.
Мега сконфигурирована на работу от внутреннего осциллятора 1Мгц.
Вот мои фьюзы, на всяк случай:
BLEV = 1
BODEN = 0
SUT = 0
CKSEL = 1
BLB1 = 3
BLB0 = 3
WDTON = 1
CKOPT = 0
EESV = 0
BSIZ = 0
BRST = 1

Так что это у тебя в железе что-то не то.
Всё-таки попробуй прошить именно Port.hex и именно через avreal:
avreal32.exe -as -p1 +mega8 -o1000 -e -w -v Port.hex
но предварительно поставь фьюзы как у меня - для чистоты эксперимента.
AndreyVN
Братцы, все заработало! Спасибо всем за обсуждение.
Если коротко, то в меге сидело не то, что я зашивал, помогло EraseChip.

Summary по этому топику:

Шьем Atmega8 через CodeVisonAVR и пользуемся AVRStudio4 как дизассемблером.

1) В программаторе CodeVisonAVR установлен флажок veryfy - Не верим ему.

2) После программирования выполняем Read Flash, затем Compare Flash - выскакивает индикатор прогресса и не говорит ничего плохого - Не верим результату.

3) Выполняем Read Flash и сохраняем содержимое как *.hex затем запускаем AVRStudio, открываем сохраненный файл, дизассемблируем его и смотрим что реально попало в Atmega. (Сравнить газами первый и последний байты - недостаточно.) У меня в середине программы оказались какие-то вопросы, и вообще нечто не похожее на мою программу. Не лишне будет сравнить тактовую частоту, которыя прошита в регистре OSCCAL, и видна в AVRStudio в разделе Processor.

4) Если программа отличается от того что должно попасть в mega, следует выполнить Erase Chip и повторить прошивку Flash и Fuse bits (последнее может и не обязательно, не знаю).
AndreyVN
Цитата(starter48 @ Oct 17 2006, 20:20) *
Я зашил Port.hex в Mega8L-8PI и на 14 и 15 ногах (PB0,PB1) появились импульсы с частотой ~71.5кгц.
Мега сконфигурирована на работу от внутреннего осциллятора 1Мгц.


Нет, фьюзы в hex файле вообще не прписаны, они шьются отдельно. Похоже у тебя в меге установлены заводские фьюзы по умолчанию (1 МГц, внутренний генератор).

У меня мега засвистела на частоте кварца 4 МГц, выходную частоту порта (по осциллографу) я поделил на число команд в цикле, получилось 3,3 МГц на одну команду, наверное какие-то команды двухтактные.
starter48
Цитата(AndreyVN @ Oct 18 2006, 11:11) *
Нет, фьюзы в hex файле вообще не прписаны, они шьются отдельно.

Разве кто-то утверждал обратное? smile.gif
Цитата(AndreyVN @ Oct 18 2006, 11:11) *
Похоже у тебя в меге установлены заводские фьюзы по умолчанию (1 МГц, внутренний генератор).

Да, похоже, ты прочитал только первое предложение из того, что я написал wink.gif
Цитата(AndreyVN @ Oct 18 2006, 11:11) *
[...]
1) В программаторе CodeVisonAVR установлен флажок veryfy - Не верим ему.
2) После программирования выполняем Read Flash, затем Compare Flash - выскакивает индикатор прогресса и не говорит ничего плохого - Не верим результату.
[...]

Ужос! cranky.gif
Рекомендую ещё помучаться и разобраться более точно, ибо верификация должна нормально работать и верить ей можно. По кр. мере у меня если флеш не стирать, то верификация не проходит.
А в понипроге тоже верификация проходила?
Цитата(AndreyVN @ Oct 18 2006, 11:11) *
4) Если программа отличается от того что должно попасть в mega, следует выполнить Erase Chip и повторить прошивку Flash и Fuse bits (последнее может и не обязательно, не знаю).

Обычно erase делают перед каждой прошивкой, если, конечно, программатор сам не делает это.
А фьюзы достаточно прошить один раз.
AndreyVN
Цитата(starter48 @ Oct 18 2006, 10:35) *
Ужос! cranky.gif
Рекомендую ещё помучаться и разобраться более точно, ибо верификация должна нормально работать и верить ей можно. По кр. мере у меня если флеш не стирать, то верификация не проходит.
А в понипроге тоже верификация проходила?


Я PonyProgom всего один раз шил, уже не помню что там было. Понравился сервис CodeVision, на него и перебрался. К стати, возможно у нас разные версии, у меня CVAVR 1.24.8d Professional.

Я с этим несколько дней бился, именно считая, что раз верификация установлена - результат прошивки проверять не обязательно. В качестве дополнительной проверки пробовал Read Flash, затем Compare Flash, выскакивал прогресс бар и ничего больше не говорил. Это я воспринимал как test OK.
Erase не пользовался никогда. Зачем что-то стирать, он же проверил что реально прошилось в мегу.

А когда дизасемблировал то что прочитал из флешки - ужаснулся, вроде мой код, но с большим количеством ошибок. К стати, в СodeVision можно управлять частотой на котоой он прошивает мегу?
WHALE
не знаю,я шью программатором CV постоянно через тот-же stk-200,никогда проблем не было.Попробуй
зайди в setting->programmer,там будет чек-бокс delay multiplier,у меня стоит 1,попробуй увеличить.
Да,и в progect->configure частота чипа правильно выставлена?программатор данные оттуда берет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.