Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ MCS51 _ Проблема с C8051F041

Автор: MPetrovich Jul 25 2016, 14:37

Всех приветствую.
Собрал проектик на Keil uVision под контроллер SiLabs C8051F041. Проект компилируется, сообщений об ошибках нет, контроллер прошивается. Пробовал и отдельно залить программу на программаторе BeeProg+ и внутрисхемно через ISP - шьётся нормально, но при включении не работает. Программа простейшая - помигать светодиодом на ножке + выход Sys_Clk на ногу для проверки работы тактового генератора.
Прошу помощи сведущих пользователей.
В прикрепленном архиве проект.  C8051F041.rar ( 48.69 килобайт ) : 79

Автор: редактор Jul 26 2016, 09:27

Варианты
1.Проверить питание и сигнал сброса (самое простое и банальное).
2.Память может мне изменять, но кажется в этих камнях WDT включен по умолчанию и именно он может не давать запустится программе (осцилограф на ноге сброса покажет периодические сигналы от МК).
3.Программа зависает на этапе инициализации внешнего источника тактирования (если используется). МК стартует на внутреннем источнике.
4.Пройтись отладчиком по программе по шагам, чтобы определить причину неработоспособности.

Автор: MPetrovich Jul 26 2016, 17:30

WDT отключен, внешний генератор не используется. Вся инициализация скопирована с примеров с сайтов Keil и SiLabs
В архиве с проектом можно посмотреть СИ-шный файл - там несколько строк всего с комментариями.
По косвенным признакам - потребление тока - можно предположить, что генератор всё же запускается. На не прошитой ток потребления меньше чем на прошитой м/сх. Кстати, сброс должен быть подтянут? Я пробовал и с подтяжкой и без - разницы нет, но интересно как правильно. По даташиту сброс осуществляется при подаче питания и вроде как можно не подтягивать ногу сброса.

Автор: alexunder Jul 26 2016, 18:22

Цитата(MPetrovich @ Jul 26 2016, 19:30) *
WDT отключен, внешний генератор не используется. Вся инициализация скопирована с примеров с сайтов Keil и SiLabs
В архиве с проектом можно посмотреть СИ-шный файл - там несколько строк всего с комментариями.
По косвенным признакам - потребление тока - можно предположить, что генератор всё же запускается. На не прошитой ток потребления меньше чем на прошитой м/сх. Кстати, сброс должен быть подтянут? Я пробовал и с подтяжкой и без - разницы нет, но интересно как правильно. По даташиту сброс осуществляется при подаче питания и вроде как можно не подтягивать ногу сброса.

Кроссбар правильно сконфигурирован?

Автор: MPetrovich Jul 26 2016, 19:49

Я же написал выше: вся процедура конфигурации позаимствована с сайтов Keil и SiLabs. Вряд ли там есть ошибки.
Не вижу трудностей посмотреть всё в СИ-шном файле из прикрепленного архива с пректом. Не нужно даже иметь ИДЕ на компе, просто открыть файл blinc.c в блокноте и всё читается. Других сорсных файлов в проекте просто нет. Хедер тоже всего один. Не сочтите за труд, господа, взгляните.

Автор: alexunder Jul 26 2016, 20:47

Цитата(MPetrovich @ Jul 26 2016, 21:49) *
взгляните.

взглянул. В коде вот такой кусок есть:

Код
//-----------------------------------------------------------------------------
// SYSCLK_CMOS_Init
//-----------------------------------------------------------------------------
// This routine initializes the system clock to the external oscillator in
// CMOS clock mode. Assumes a CMOS clock generator is connected to XTAL1.
//
void SYSCLK_CMOS_Init (void)
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = CONFIG_PAGE; // Set SFR Page
OSCXCN = 0x20; // start external oscillator in CMOS clock mode.
SFRPAGE = LEGACY_PAGE;
RSTSRC = 0x04; // enable missing clock detector
SFRPAGE = CONFIG_PAGE;
CLKSEL = 0x01; // select external oscillator as SYSCLK source
OSCICN = 0x00; // disable internal oscillator
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}


который плохо сочетается со сказанным вами ранее:
Цитата
WDT отключен, внешний генератор не используется.


Страница 166 http://electronix.ru/redirect.php?http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F04x.pdf описывает процедуру сброса при вкл питания.


Настоятельно рекомендую скачать http://electronix.ru/redirect.php?http://www.silabs.com/products/mcu/Pages/8-bit-microcontroller-software.aspx#config для удобного конфигурирования МК, это лучше чем доверять исходникам, вырванным из разных мест.
Судя по конфигуратору, кроссбар и порты настроены правильно. Но лучше если вы проверите.

Автор: Harbinger Jul 27 2016, 04:02

Попробуйте отключить WDT в startup.a51. На обнуление 4 Кбайт XRAM требуется довольно много времени.

Автор: MPetrovich Jul 27 2016, 06:48

Цитата(alexunder @ Jul 26 2016, 20:47) *
взглянул. В коде вот такой кусок есть:

Код
//-----------------------------------------------------------------------------
// SYSCLK_CMOS_Init
//-----------------------------------------------------------------------------
// This routine initializes the system clock to the external oscillator in
// CMOS clock mode. Assumes a CMOS clock generator is connected to XTAL1.
//
void SYSCLK_CMOS_Init (void)
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = CONFIG_PAGE; // Set SFR Page
OSCXCN = 0x20; // start external oscillator in CMOS clock mode.
SFRPAGE = LEGACY_PAGE;
RSTSRC = 0x04; // enable missing clock detector
SFRPAGE = CONFIG_PAGE;
CLKSEL = 0x01; // select external oscillator as SYSCLK source
OSCICN = 0x00; // disable internal oscillator
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}


который плохо сочетается со сказанным вами ранее:


Не пойму в чём несочетание? Ну описана процедура инициализации внешнего тактового генератора, но ведь эта процедура не вызывается в main(). Там вызывается SYSCLK_IntOsc_Init(); - инициализация ВНУТРЕННЕГО SYSCLK.

Цитата
Страница 166 http://electronix.ru/redirect.php?http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F04x.pdf описывает процедуру сброса при вкл питания.


Я пробовал и вариант подключения ноги MONEN к питаниюдля реализации режима Power-On Reset, и вариант внешнего ресета кнопкой с подтяжкой ноги RST к плюсу через 4,7к. Без разницы - ноль реакции.

Цитата
Настоятельно рекомендую скачать http://electronix.ru/redirect.php?http://www.silabs.com/products/mcu/Pages/8-bit-microcontroller-software.aspx#config для удобного конфигурирования МК, это лучше чем доверять исходникам, вырванным из разных мест.
Судя по конфигуратору, кроссбар и порты настроены правильно. Но лучше если вы проверите.

Уже скачал. Конфигуратор действительно удобный, но он мне не помог ничем. Код, выдаваемый им, соответствует тому, что я написал.

Цитата(Harbinger @ Jul 27 2016, 04:02) *
Попробуйте отключить WDT в startup.a51. На обнуление 4 Кбайт XRAM требуется довольно много времени.

Это необычный вариант. А куда вставить процедуру отключения в startup.a51? И потом, там ассемблер, а я им не владею sad.gif

Автор: alexunder Jul 27 2016, 07:19

Цитата(MPetrovich @ Jul 27 2016, 08:48) *
Не пойму в чём несочетание? Ну описана процедура инициализации внешнего тактового генератора, но ведь эта процедура не вызывается в main(). Там вызывается SYSCLK_IntOsc_Init(); - инициализация ВНУТРЕННЕГО SYSCLK.

В самом деле! Мда, невнимательно я глянул, каюсь.

Цитата(MPetrovich @ Jul 27 2016, 08:48) *
Это необычный вариант. А куда вставить процедуру отключения в startup.a51? И потом, там ассемблер, а я им не владею sad.gif

Нужно сделать запись в соответствующий регистр. Тут либо в датащит надо смотреть (что всегда полезно), либо тем же конфигуратором выбрать режим формирования кода в ASM, затем настроить отключение WDT и посмотреть куда что пишется, этот кусок и использовать в startup.a51.

[quote name='MPetrovich' date='Jul 27 2016, 08:48' post='1439747']
Уже скачал. Конфигуратор действительно удобный, но он мне не помог ничем. Код, выдаваемый им, соответствует тому, что я написал.
[quote]
там есть несколько утилит для работы с семейством C8051, есть также Simplicity Studio, нечто вроде студии по разработке для МК, но выглядит ужасно и работает медленно.

Автор: Harbinger Jul 27 2016, 17:01

Цитата(alexunder @ Jul 27 2016, 10:19) *
Нужно сделать запись в соответствующий регистр. Тут либо в датащит надо смотреть (что всегда полезно), либо тем же конфигуратором выбрать режим формирования кода в ASM, затем настроить отключение WDT и посмотреть куда что пишется, этот кусок и использовать в startup.a51.

Прикрепляю поправленный файл. startup.a51 из проекта исключить, start040.a51 подключить. Должно помочь. На эти грабли уже несколько раз наступал, при объёме XRAM где-то до килобайта оригинальный стартап успевает отработать до срабатывания сторожевого таймера, а выше - нет, и до main() просто дело не доходит.

Цитата(alexunder @ Jul 27 2016, 10:19) *
там есть несколько утилит для работы с семейством C8051, есть также Simplicity Studio, нечто вроде студии по разработке для МК, но выглядит ужасно и работает медленно.
(На грани оффтопа). К превеликому сожалению, Configuration wizard уже не развивается. А Simplicity Studio - ну очень уж монструозная вещь, и делали её не в Silabs, а в Energymicro для EFM32; C8051xx к ней прикрутили пожарным порядком и возможны сюрпризы, которые, впрочем, местами встречаются и в силабсовском конфигураторе. Т.е. доверяй, но по даташиту проверяй.

 start040.rar ( 1.88 килобайт ) : 36
 

Автор: MPetrovich Jul 27 2016, 19:31

Цитата(alexunder @ Jul 27 2016, 07:19) *
Нужно сделать запись в соответствующий регистр. Тут либо в датащит надо смотреть (что всегда полезно), либо тем же конфигуратором выбрать режим формирования кода в ASM, затем настроить отключение WDT и посмотреть куда что пишется, этот кусок и использовать в startup.a51.

Попробовал. Не помогло. Попробовал вообще выкинуть стартап - то же самое.
У меня ко всем форумчанам просьба: может ли кто-нибудь пересобрать проект у себя на компе и выложить сюда получившийся .hеx-файл? Может у меня с Keil-ом то-то неладно? Я попробую залить Ваш .hеx в контроллер и будет понятно в чём причина.

Автор: MPetrovich Jul 28 2016, 06:59

Цитата(Harbinger @ Jul 27 2016, 18:01) *
Прикрепляю поправленный файл. startup.a51 из проекта исключить, start040.a51 подключить. Должно помочь. На эти грабли уже несколько раз наступал, при объёме XRAM где-то до килобайта оригинальный стартап успевает отработать до срабатывания сторожевого таймера, а выше - нет, и до main() просто дело не доходит.

Попробовал прикрепить Ваш стартап. И снова ничего не изменилось. Я уже не знаю что и думать...

Автор: alexunder Jul 28 2016, 07:20

Цитата(MPetrovich @ Jul 27 2016, 21:31) *
Попробовал. Не помогло. Попробовал вообще выкинуть стартап - то же самое.
У меня ко всем форумчанам просьба: может ли кто-нибудь пересобрать проект у себя на компе и выложить сюда получившийся .hеx-файл? Может у меня с Keil-ом то-то неладно? Я попробую залить Ваш .hеx в контроллер и будет понятно в чём причина.

у меня на работе кейл без C51. Дома вечером попробую.

Автор: Obam Jul 28 2016, 07:30

TS, у вас отладчика (EC2 или EC3) нету что ли? Без него как вы хотите разработкой заниматься?
Что в регистрах контроллера?

Автор: alexunder Jul 28 2016, 21:46

Цитата(Obam @ Jul 28 2016, 09:30) *
TS, у вас отладчика (EC2 или EC3) нету что ли? Без него как вы хотите разработкой заниматься?
Что в регистрах контроллера?

Судя по всему, нет у него шнурка. Автор, если у вас нет отладчика, поищите сообщения Harbinger'а - не так давно он ссылочку давал на свой клон EC3 в этой ветке.
Скомпилированный проект прицепляю.

 C8051F041_LED.zip ( 343 байт ) : 37
 

Автор: MPetrovich Jul 30 2016, 17:52

Цитата(alexunder @ Jul 28 2016, 22:46) *
Судя по всему, нет у него шнурка. Автор, если у вас нет отладчика, поищите сообщения Harbinger'а - не так давно он ссылочку давал на свой клон EC3 в этой ветке.

Да, у меня нет шнурка. Вообще, всем вероятно покажется странным, но за те несколько лет, что я занимаюсь контроллерами, я не пользовался внутрисхемными отладчиками. Мне всегда было достаточно симуляторов в ИДЕ - если там работало, то и в железе всё, как правило, работало.
Цитата
Скомпилированный проект прицепляю.

Большое спасибо. Если он заработает, то это наконец сдвинет меня с мертвой точки.

Автор: редактор Aug 1 2016, 07:19

Цитата
всегда было достаточно симуляторов в ИДЕ - если там работало, то и в железе всё, как правило, работало.

Это если симуляция 100% достоверная. Тот же Кейл достоверно симулирует только ядро, работа перефирии для того же силабса - слабая. Даже переключение страниц SFR не работает.

Автор: Obam Aug 1 2016, 07:35

Что, неужели FD51 симулятор? Те, кому сильно за 40, помните? Во времена были - былинные

Впрочем, "…у нас свободная страна…", но неделю (ладно, 5 дней) в форуме получать ответ, на который, на месте с отладчиком, ну 2 часа - максимум (эт если в анабиозе (; )

MPetrovich, любезный, выбейте EC3 у начальства (вы своим подвигом его уже 5 раз раработали), сколько вам "потрохов" С8051 откроется, и каких, не передать (:

Автор: alexunder Aug 1 2016, 09:02

Цитата(Obam @ Aug 1 2016, 09:35) *
MPetrovich, любезный, выбейте EC3 у начальства (вы своим подвигом его уже 5 раз раработали), сколько вам "потрохов" С8051 откроется, и каких, не передать (:

тоже самое хотел сказать. Автор, без отладчика уместно было работать с оригинальным 8051, тот который в корпусе DIP40. Я припоминаю какой-то симулятор под windows, написанный аж на Delphi. C8051 - совсем другая опера. Без шнурка, конечно, можно трудиться, но зачем так геройствовать? Ведь Ваше время и нервы стоят гораздо дороже EC3.

Автор: x893 Aug 1 2016, 10:31

Можно купить Toolstick и использовать как дебаггер. Можно самому EC3 сделать (2-3 дня).
У меня где-то валялось пара EC3. Но пива выпью точно больше чем стоит Toolstick.

Автор: MPetrovich Aug 3 2016, 20:39

Спасибо всем за поддержку и понимание. Я одолел, таки, этого зверя. Причем совершенно нелогичным (по-моему) способом. Я скачал силабовскую ИДЕ и там скомпилировал проект, сконфигурировав контроллер при помощи силабовского же конфигуратора. Да, да, все заработало именно после этих действий. Потом я уже перекомпилировал более расширенный вариант с использованием ШИМ - светодиод медленно загорается и медленно тухнет - тоже заработало сходу. Я просто припух от неожиданности. За пол дня я смог сделать то, над чем корпел 2 недели (с перерывами, правда) и даже больше. Я уже занялся сборкой проекта с управлением ШИМом по UART, но начальство сказало, что пора завязывать с этой темой, проверил работоспособность, подобрал инструменты разработки - всё, отдай игрушку другим поиграть.
Ещё раз всем спасибо.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)