Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Silabs C8051F120
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Страницы: 1, 2, 3, 4, 5
alexunder
Цитата(Radik2 @ May 7 2015, 18:37) *
Сейчас знакомлюсь с примерами для C8051F120 в комплекте с Silicon Labs IDE. В Keil выводит следующие ошибки в примере с UART:

У меня все три проекта (F12x_UART0(1)_Interrupt.c, F12x_UARTs_STDIO_Polled_2UARTs.c) собираются успешно. Версия компилятора Си 9.02, версия IDE uVision 4.0.
В последнем случае (F12x_UARTs_STDIO_Polled_2UARTs.c) есть только предупреждение, что функция _getkey () не используется и соотв. сегмент кода будет проигнорирован. У Вас же ошибки от линковщика, указывающие, например, на повторное определение структур (№104). Рекомендую разобраться с uVision, компилятором и сборщиком хотя бы поверхностно. Ну и хелпом надо пользоваться прежде чем на форум лезть (без обид), хелп у Кейла толковый, по Вашим ошибкам все расписано:
Нажмите для просмотра прикрепленного файла

Мне почему-то кажется, что Вы несколько одинаковых файлов в проект включили, потому L51 ругается на повторный дефинишн.



Цитата(Radik2 @ May 7 2015, 15:17) *
Меня, как любителя, пока не радует ценовая политика на МК.

Согласен, лучше собрать самому. Я с F321 так и поступил, потом правда на работу купили оригинальный кит. Теперь у меня две борды (так и лежат без дела).

Цитата(Radik2 @ May 7 2015, 15:17) *
Не дают покоя STM8S от 17р и STM32F0 от 40р. Последние по ресурсам рядышком с, например, 8051F380, а в чем-то и опережают.

Да, кортексы, конечно, отбирают рынок у восьмибитников, у с8051 silabs'ов так точно заберут часть клиентов. Не зря же Cortex-M0/M0+ позиционируется как "32битник по цене 8битника" самим разработчиком. С ценниками на 51-е МК от Silabs ситуация вряд-ли изменится по крайней мере на старые серии, как заметил маэстро Harbinger.
Все-таки работаете со 120-м? Harbinger вроде как рекомендовал более старшие серии посмотреть (к его мнению стоит прислушаться).

----------------
Вдогонку. Я сейчас сам подыскиваю демоборду под Cortex-M0(+) смотрю на Gecko от Silabs, так там маленькие платки за 28 евро (копейки, по нашим меркам) включая некоторые и для M3! Цены смотрю на mouser.com - мне оттуда легче заказывать.
Radik2
Цитата(alexunder @ May 8 2015, 01:18) *
У меня все три проекта (F12x_UART0(1)_Interrupt.c, F12x_UARTs_STDIO_Polled_2UARTs.c) собираются успешно. Версия компилятора Си 9.02, версия IDE uVision 4.0.
В последнем случае (F12x_UARTs_STDIO_Polled_2UARTs.c) есть только предупреждение, что функция _getkey () не используется и соотв. сегмент кода будет проигнорирован. У Вас же ошибки от линковщика, указывающие, например, на повторное определение структур (№104). Рекомендую разобраться с uVision, компилятором и сборщиком хотя бы поверхностно. Ну и хелпом надо пользоваться прежде чем на форум лезть (без обид), хелп у Кейла толковый, по Вашим ошибкам все расписано:

Честно скажу, потратил 2-3 часа времени на разбор проблемы. Но, видимо, мой уровень знаний пока еще очень низкий.
Что интересно, в Silicon Labs IDE ошибки были другие и меньше. Точнее, были Warnings, а не Errors. Вот и думаю, что проблема в настройке сред программирования.
Версия компилятора Си 9.53, версия IDE uVision 5.11.
Я не разобрался: эти три файла являются частями одного проекта или их можно использовать по отдельности.

Цитата(alexunder @ May 8 2015, 01:18) *
Все-таки работаете со 120-м? Harbinger вроде как рекомендовал более старшие серии посмотреть (к его мнению стоит прислушаться).

Да, это у меня первый МК из 8051. Жалко выбрасывать )
В пути плата под Ф320 и Ф340. Есть МК Ф320 и Ф350.
Я собирался использовать Ф120 для тренировок. Harbinger так и не объяснил почему 120-й не рекомендуется для старта новичку. Если дело только в энергопотреблении ...
alexunder
Цитата(Radik2 @ May 8 2015, 07:33) *
Я не разобрался: эти три файла являются частями одного проекта или их можно использовать по отдельности.

в заголовке каждого из трех файлов:
Код
// Program Description:
//
// This program demonstrates how to configure the C8051F120 to write to and read
// from the UART interface. The program reads a word using the UART0 interrupts
// and outputs that word to the screen, with all characters in uppercase

This program demonstrates! Ну и вообще, в каждом файле видно, что есть main(), все остальные функции и структуры объявлены в нем же - значит он является законченной программой, а не частью какого-то проекта. Тогда бы и в заголовке было написано что-то вроде this module или this unit...

Цитата(Radik2 @ May 8 2015, 07:33) *
Да, это у меня первый МК из 8051. Жалко выбрасывать )
В пути плата под Ф320 и Ф340. Есть МК Ф320 и Ф350.

не надо выбрасывать, надо изучать.

Цитата(Radik2 @ May 8 2015, 07:33) *
Я собирался использовать Ф120 для тренировок. Harbinger так и не объяснил почему 120-й не рекомендуется для старта новичку. Если дело только в энергопотреблении ...

Возможно, в его посте речь шла о массовом применении и потому закладываться под F1** он не советовал. Для учебных целей самое то.
Radik2
Цитата(alexunder @ May 8 2015, 01:18) *
Вдогонку. Я сейчас сам подыскиваю демоборду под Cortex-M0(+) смотрю на Gecko от Silabs, так там маленькие платки за 28 евро (копейки, по нашим меркам) включая некоторые и для M3! Цены смотрю на mouser.com - мне оттуда легче заказывать.

Возможно повторюсь: а почему Gecko от Silabs, не STM32, или LPC17xx, или LM3S от TI?
alexunder
Цитата(Radik2 @ May 8 2015, 08:31) *
Возможно повторюсь: а почему Gecko от Silabs, не STM32, или LPC17xx, или LM3S от TI?

Я сам не могу определиться: Silabs, ST, NXP и пр. NXP по моим меркам приличная конторая, ST очень популярны. Вообще, только M0(+) контроллеров очень много с примерно одинаковыми свойствами, порой сложно выбрать который из них лучше, тут уже вопрос религии sm.gif. Кому-то нравится NXP, кто-то признается в высоких чувствах французско-итальянской конторе (ST). У ST соответсвующее семейство M0(+) неплохо представлено, есть даже мк с USB, чего не наблюдаю в аналогичных кортексах у Silabs в линейке Gecko (см. сравнительную таблицу всех геков). Недорогие платы есть для всех упомянутых выше производителей. Я был приятно удивлен дешевизной модулей (28 евро на маузере) от Silabs, причем, ценник один, что для Zero Gecko (M0+), что для Wonder Gecko (M4)
Radik2
Цитата(alexunder @ May 8 2015, 12:17) *

Вообщем, не работает "F12x_UART1_Interrupt.c": компилирую, прошиваю, а на посылки через гипертерминал не отвечает.

При отладке в Keil висит в этом куске кода:

Код

while (1)
   {  // If the complete word has been entered via the hyperterminal followed
      // by carriage return

         if((TX_Ready == 1) && (UART_Buffer_Size != 0) && (Byte == 13))
      {
         TX_Ready = 0;                 // Set the flag to zero

         TI1 = 1;                      // Set transmit flag to 1
      }
   }


Цитата(alexunder @ May 8 2015, 12:17) *
Я сам не могу определиться: Silabs, ST, NXP и пр. NXP по моим меркам приличная конторая, ST очень популярны.

Общался с одним человеком : занимаются производством оборудования для коммерческого учета. Вот что он мне написал:
До этого всё было сделано на силабсе... Но 8 разрядов, долгая прошивка, мало памяти, мало периферии для нынешнего времени. Один авр еще остался, но я уже подготовил ему замену на LPC1114 - тянет на Си по прерываниям, то, тини 2313 еле тянул на посчитанных и тщательно выверенных ассемблерных командах.

Брали арм, сначала схватили арм7, но тут вышел кортекс-м3 и быстро перешли на него (а для мелочей на кортекс -М0) на старом арме успели разработать только одно устройство. Кортекс тоже по фирмам не сразу. Начал разбираться с тексасом (они тогда купили стелларис) оказался с глюками. Стм не решились, т.к. люди писали, что слишком те быстро выпускают множество моделей - тоже побоялись сырости. Остановились на nxp, т.к. периферия у них была отработана на предыдущем ядре (и надежд больше и нам легче, т.к. до этого как раз их арм освоили). Был только один глюк в часах реального времени, но мы используем отдельное устройство. Сейчас может быть он и устранен. Дешевость М3 нам была важна, т.к. приборы не должны быть сильно дорогими, а мощность М3 с запасом достаточна.
alexunder
Код
while (1)
   {  // If the complete word has been entered via the hyperterminal followed
      // by carriage return

         if((TX_Ready == 1) && (UART_Buffer_Size != 0) && (Byte == 13))
      {
         TX_Ready = 0;                 // Set the flag to zero

         TI1 = 1;                      // Set transmit flag to 1
      }
   }

висит бесконечный while, т.к. не выполнено одно или все условия. Скорее всего, нет приема вообще (буфер пуст, т.е. UART_Buffer_Size == 0) или последний байт посылки не равен 13 (Byte != 13) - это проверка на наличие символа новой строки (когда в гипертерминале воодите строку, заканчиваете ее нажатием Enter). С физическим уровнем (настройки baudrate, system clock, преобразование уровней в стандарт RS232, настройки порта на ПК) все в порядке?

Цитата(Radik2 @ May 8 2015, 09:42) *
Общался с одним человеком

Из этого текста я заключил, вкратце, что была система на силабсе, потом решили накрутить на нее что-то еще, но не хватало скорости и периферийных возможностей, перешли на 32битные МК. Все логично. Возможно, они работали с 16- или 32-битной математикой, которая на ARM зачастую быстрее чем на 8051. Мне кортекс как раз для обработки 32-битных данных нужен, для задач опроса сенсоров (удаленных) использую 51. Опять слово "задача" мелькает wink.gif
Если Вы вновь за советом, то изучайте уж MCS-51, коли обзавелись "железом". Вспомнилось, как на 3-м курсе препод по квантовой механике говорил нам "миллионы людей сдают квантовую механику и не умирают" и еще "после изучения курса квантовой механики и статистической физики, можете смело браться за любую другую науку". Вот и я, с Вашего позволения: после 51 любой МК освоите в два счета.
Про выбор конторы мнение Вашего знакомого отчасти совпадает с моим. На этом форуме часто упоминается "сырость" чипов от ST, аппаратные баги компенсируются компилятором и т.п. С другой стороны, они очень популярны, есть хорошая поддержка, опять же, много толковых плат.

Цитата(Radik2 @ May 8 2015, 09:42) *

Какой литературой по MSC-51 Вы пользуетесь? Я изучал МК вот по этой книге:
"Однокристальные микро ЭВМ", Боборыкин А. В. и др., 1994 г.
Если интересно, вот скан в DJVU, в уфинской городской библиотеке книга эта точно есть (если с экрана читать не любите).
Там есть глава по 8051, разжевано все до последнего MOVa, речь о "голом" 8051 конечно же, без всяких crossbar как у silabs. В примере по UART там, кстати, ошибка есть, но это даже хорошо, помню, намучался с ним тогда (был голый проц 80C31 у меня, никаких JTAG sm.gif).
Radik2
Цитата(alexunder @ May 8 2015, 14:26) *
висит бесконечный while, т.к. не выполнено одно или все условия. Скорее всего, нет приема вообще (буфер пуст, т.е. UART_Buffer_Size == 0) или последний байт посылки не равен 13 (Byte != 13) - это проверка на наличие символа новой строки (когда в гипертерминале воодите строку, заканчиваете ее нажатием Enter). С физическим уровнем (настройки baudrate, system clock, преобразование уровней в стандарт RS232, настройки порта на ПК) все в порядке?

Преобразователь USB-UART pl2303hx. Выводы Rx-Tx соединял между собой - в терминале получаю повтор отправленного символа, т.е., вроде как работает. МК питается от 3,3В: преобразователь pl2303hx, как я понял, работает с уровнями 3,3В и 2,5В. Надеюсь, я не сжег порты МК. Перенастроить UART1 на другие порты нельзя: привязка жесткая.
Порты настроил как указано в Сишном файле: скорость 115200, 8-N-1.

Цитата(alexunder @ May 8 2015, 14:26) *
Какой литературой по MSC-51 Вы пользуетесь?

Есть скан книги
"Микроконтроллеры смешанного сигнала C8051Fxxx ..." автор Гладштейн М.А.
"x51-совместимые микроконтроллеры фирмы Cygnal" Николайчук О. И.

В бумажном виде есть "Микроконтроллеры фирмы Philips семейства х51" А.В. Фрунзе.

Буду изучать 51-е, но если будут сложности и в ближайшие пол года не сдвинусь с места, то придется вернуться к АВРкам. Возможно, я пытаюсь прыгнуть выше головы.
alexunder
Цитата(Radik2 @ May 8 2015, 13:02) *
Преобразователь USB-UART pl2303hx. Выводы Rx-Tx соединял между собой - в терминале получаю повтор отправленного символа, т.е., вроде как работает. МК питается от 3,3В: преобразователь pl2303hx, как я понял, работает с уровнями 3,3В и 2,5В. Надеюсь, я не сжег порты МК. Перенастроить UART1 на другие порты нельзя: привязка жесткая.
Порты настроил как указано в Сишном файле: скорость 115200, 8-N-1.

Лучше начать экспериментировать с 9600кбит/с, меньше вероятность ошибок.
Соединение с usb-uart правильно выполнено (rx с tx не перепутаны)? Часто бывает что со стороны преобразователя уровня (не ваш случай, но может с pl2303 ситуация такая же) вывод Rx (Tx) означатет прием (передачу) данных по отношению к преобразователю. Т.е. для правильной работы требовалось Tx МК соединять с Rx преобразователя и Rx МК с Tx преобразователя соответственно. По-моему так было с классической max232.
Иначе попробуйте другой порт под индексом 0, если есть возможность перенаправить сигнал.


Цитата(Radik2 @ May 8 2015, 13:02) *
Буду изучать 51-е, но если будут сложности и в ближайшие пол года не сдвинусь с места, то придется вернуться к АВРкам. Возможно, я пытаюсь прыгнуть выше головы.

Не нужно прыгать выше головы! sm.gif Изучите регистрый и команды 51 на базе оригинального камня хоть по книжке. А потом снова книжку по силабс откройте, может будет легче. Силабсычи слишком наворочены, один кроссбар чего стоит. До встречи с silabs'ами я был уверен что сложнее Cypress FX2 не бывает 51-х МК sm.gif.
Про AVR ничего не могу сказать, никогда с ними не работал. Мне кажется они одинаково сложны в освоении как и MCS-51. К продукции Atmel у меня предвзятое отношение, стараюсь ее избегать (это всего лишь мое мнение).
Radik2
Цитата(alexunder @ May 8 2015, 17:45) *
Лучше начать экспериментировать с 9600кбит/с, меньше вероятность ошибок.
Соединение с usb-uart правильно выполнено (rx с tx не перепутаны)? Часто бывает что со стороны преобразователя уровня (не ваш случай, но может с pl2303 ситуация такая же) вывод Rx (Tx) означатет прием (передачу) данных по отношению к преобразователю. Т.е. для правильной работы требовалось Tx МК соединять с Rx преобразователя и Rx МК с Tx преобразователя соответственно. По-моему так было с классической max232.
Иначе попробуйте другой порт под индексом 0, если есть возможность перенаправить сигнал.

Пробовал менять местами сигналы Rx Tx. Не помогло. Изменил скорость на 9600 в строке
#define BAUDRATE 9600 // Baud rate of UART in bps

и в настройках порта и в терминале ... ничего


-----------------------
Заработало!
Нужно разобраться в схемотехнике отладочной платы: перекинул общий провод от преобразователя ЮСБ-УАРТ с минусового контакта колодки для подключения питания на контакт GND колодки на которую выведены выводы МК. Мистика какая-то: они соединены вместе.

Цитата(alexunder @ May 8 2015, 17:45) *
Не нужно прыгать выше головы! sm.gif Изучите регистрый и команды 51 на базе оригинального камня хоть по книжке. А потом снова книжку по силабс откройте, может будет легче. Силабсычи слишком наворочены, один кроссбар чего стоит. До встречи с silabs'ами я был уверен что сложнее Cypress FX2 не бывает 51-х МК sm.gif.
Про AVR ничего не могу сказать, никогда с ними не работал. Мне кажется они одинаково сложны в освоении как и MCS-51. К продукции Atmel у меня предвзятое отношение, стараюсь ее избегать (это всего лишь мое мнение).

Т.е., изучаем ассемблер для х51, архитектуру х51, потом периферию 8051 Силабсов?
alexunder
Цитата(Radik2 @ May 8 2015, 16:07) *
Заработало!

Отлично!

Цитата(Radik2 @ May 8 2015, 16:07) *
Нужно разобраться в схемотехнике отладочной платы: перекинул общий провод от преобразователя ЮСБ-УАРТ с минусового контакта колодки для подключения питания на контакт GND колодки на которую выведены выводы МК. Мистика какая-то: они соединены вместе.

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

Цитата(Radik2 @ May 8 2015, 16:07) *
Т.е., изучаем ассемблер для х51, архитектуру х51, потом периферию 8051 Силабсов?

как Вам угодно. Я прошел этот путь и мне он казался логичным. Там изучать-то немного... Но я начал изучение когда силабсов (cygnal) еще в помине не было, у меня было много 80с31 от ККМ, которые я тогда ремонтировал. Иногда еще 51 от атмела проскакивали, но в целом они были копиями оригинальных 80х51 или 80х52, никаких улучшайзеров не было...
Radik2
Цитата(alexunder @ May 8 2015, 19:32) *
минусовой контакт? хм, там не должно быть никаких отрицательных потенциалов, коли настоящего RS232 у Вас нет. Впрочем, я никогда не работал с таким преобразователем...

Возможно, китайские перемычки низкого качества. Потому-что, от точки подключения к общему проводу на плате, здесь ничего не должно зависеть.
Harbinger
Цитата(alexunder @ May 8 2015, 17:32) *
Но я начал изучение когда силабсов (cygnal) еще в помине не было, у меня было много 80с31 от ККМ, которые я тогда ремонтировал. Иногда еще 51 от атмела проскакивали, но в целом они были копиями оригинальных 80х51 или 80х52, никаких улучшайзеров не было...

Я начинал как раз с атмеловских 51, у них вроде у первых FLASH-память программ появилась (C51, C2051, S8252...) После известной истории пришлось переехать на NXP (серия LPC900, довольно интересная, но на данный момент по сути загнулась), силабсы стали следующим этапом. Пожалуй, решающую роль сыграла гуманизация ценовой политики кремниевых лаборантов. sm.gif
alexunder
Цитата(Harbinger @ May 9 2015, 12:52) *
Я начинал как раз с атмеловских 51, у них вроде у первых FLASH-память программ появилась (C51, C2051, S8252...)

Вам виднее, но, по-моему да, они были первые с пятивольтовой Flash. В кассах основной проц был 51 без ППЗУ, а к 2002-му году стали появляться блоки фискальной памяти (напрочь залитые компаундом) именно с такими МК (AT89) в качестве шифраторов данных. А C2051, S4051 у меня до сих пор лежат, надо бы приспособить куда-нибудь.

Цитата(Harbinger @ May 9 2015, 12:52) *
После известной истории пришлось переехать на NXP

А что за история такая?
Radik2
Цитата(alexunder @ May 9 2015, 17:59) *
А что за история такая?

Видимо, имели ввиду проблемный период с поставками и повышением цен на МК АВР.
Harbinger
Он самый. AVR как-то прошли стороной, но там со всей продукцией Atmel была проблема, в т.ч. и с AT89. Некоторые изделия сняли с производства, некоторые перевели на MSP430.
Сейчас у атмела есть LP-серия, сопоставимая по производительности с силабсом, но поезд ушёл, не вижу смысла возвращаться. Еще пришлось иметь дело с продукцией Megawin, конкретно вот с этим чипом. Тоже плохого сказать не могу, кроме разве что энергопотребления (около 1 мА/МГц).
Radik2
Цитата(Harbinger @ May 10 2015, 21:21) *
Он самый. AVR как-то прошли стороной, но там со всей продукцией Atmel была проблема, в т.ч. и с AT89. Некоторые изделия сняли с производства, некоторые перевели на MSP430.
Сейчас у атмела есть LP-серия, сопоставимая по производительности с силабсом, но поезд ушёл, не вижу смысла возвращаться. Еще пришлось иметь дело с продукцией Megawin, конкретно вот с этим чипом. Тоже плохого сказать не могу, кроме разве что энергопотребления (около 1 мА/МГц).

А сейчас, если не секрет, какие чипы применяете?
Harbinger
Да всё те же C8051, а для более "жирных" задач - STM32. От MSP430 пришлось отказаться ввиду относительной дороговизны.
В некоторой оснастке трудятся STM8, но их, кроме меня, на предприятии никто не знает. sm.gif Ещё есть на будущее варианты с Nuvoton (в частности, M051) и серией LPC800 от NXP - последние заменяют LPC900 почти что pin-to-pin, при этом ядро Cortex-M0, имеются вшитые в ROM библиотеки для работы с периферией, и стоят меньше доллара...
(Типа пожелание силабсу). Прикрутили бы к EFM32ZG(TG, HG) прецизионный RC-генератор от C8051F55x. Было бы хорошо весьма! sm.gif
Radik2
Цитата(Harbinger @ May 17 2015, 17:33) *
Да всё те же C8051, а для более "жирных" задач - STM32. От MSP430 пришлось отказаться ввиду относительной дороговизны.
В некоторой оснастке трудятся STM8, но их, кроме меня, на предприятии никто не знает. sm.gif Ещё есть на будущее варианты с Nuvoton (в частности, M051) и серией LPC800 от NXP - последние заменяют LPC900 почти что pin-to-pin, при этом ядро Cortex-M0, имеются вшитые в ROM библиотеки для работы с периферией, и стоят меньше доллара...
(Типа пожелание силабсу). Прикрутили бы к EFM32ZG(TG, HG) прецизионный RC-генератор от C8051F55x. Было бы хорошо весьма! sm.gif

Т.е., Вы не стали ставить везде STM32: F0хх для несложных задач, F1xx для задач посложнее и F4xx для серьезных задач.

Не подскажете, где можно приобрести "простому смертному" LPC800 по доллару за штуку.
Harbinger
Цитата(Radik2 @ May 17 2015, 16:57) *
Т.е., Вы не стали ставить везде STM32: F0хх для несложных задач, F1xx для задач посложнее и F4xx для серьезных задач.

В ходу F1 и F3, по совокупности требований.
Цитата(Radik2 @ May 17 2015, 16:57) *
Не подскажете, где можно приобрести "простому смертному" LPC800 по доллару за штуку.
По доллару - штук 500 сразу, что для простого смертного многовато, а для "артели" средней руки - месячная потребность. Тут можно сразу сказать, что STM32F030 будут дешевле - если, например, не нужно 3 UART в корпусе TSSOP-16. sm.gif Впрочем, это уже оффтоп пошёл.
Radik2
Сейчас изучаю примеры из папки Examples для C8051F120. Есть пример для компаратора. Но в этом примере происходит проверка флагов состояния.
Я же планировал вывести сигнал с выхода компаратора на ножку МК. В документации на C8051F120 указано, что можно это сделать. Но, то ли я чего-то пропустил, то ли в документации что-то не так, точнее в переводе даташита. Вообщем не получаю на выводе Р0.0 низкий уровень сигнала (выход открытый сток) при различных комбинациях на входе компаратора 0.
В документации на C8051F320 было указано что-то о необходимости настройки вывода Р0.0 (на который подключается выход компаратоа) таким образом, чтобы матрица его игнорировала: что то с регистром SKIP...
Если мало информации, могу выложить код, скриншоты с настройками.
Подскажите, пожалуйста, как настроить МК, чтобы вывести сигнал с компаратора "наружу".
редактор
Цитата
Вообщем не получаю на выводе Р0.0 низкий уровень сигнала (выход открытый сток)

Если снаружи притяжки в + нет то ничего не увидите. Либо резистор снаружи, либо притянуть внутри.
Radik2
Цитата(редактор @ May 20 2015, 13:12) *
Если снаружи притяжки в + нет то ничего не увидите. Либо резистор снаружи, либо притянуть внутри.


Там есть внутренняя подтяжка к плюсу питания: на выходе 3,3В. На выход подключил светодиод. Анод светодиода через резистор подключен к плюсу питания.
alexunder
Цитата(Radik2 @ May 20 2015, 06:30) *
в переводе даташита

Мой совет - читайте оригинал на английском. Если проблемы с языком, выписывайте новые слова в тетрадочку, а напротив пишите перевод на русский (для перевода можно исп. он-лайн Lingvo), так лучше запоминается.

Цитата(Radik2 @ May 20 2015, 06:30) *
В документации на C8051F320 было указано что-то о необходимости настройки вывода Р0.0 (на который подключается выход компаратоа) таким образом, чтобы матрица его игнорировала: что то с регистром SKIP...

Crossbar декодер должен быть настроен правильно. Есть супер-удобное средство для настройки кросс-бара в пару кликов в родной студии от Силабс. Для Вашего МК это 8-bit Microcontroller Studio, конфигуратор можно скачать и отдельным компонентом. Там выберите настройки компараторов, портов и crossbar decoder и в результате получите значения, которые нужно записать в соотв. регистры при конфигурировании кроссбара, воткнете эти строчки в свой код.

Если к выводу с открытым стоком подключен СД, то надо убедиться, что вывод потянет втекающий ток через СД (зависит от Вашего СД и токоограничительного резистора), смотрите токовые свойства портов в datasheet.
Radik2
Цитата(alexunder @ May 20 2015, 15:30) *
Crossbar декодер должен быть настроен правильно. Есть супер-удобное средство для настройки кросс-бара в пару кликов в родной студии от Силабс. Для Вашего МК это 8-bit Microcontroller Studio, конфигуратор можно скачать и отдельным компонентом. Там выберите настройки компараторов, портов и crossbar decoder и в результате получите значения, которые нужно записать в соотв. регистры при конфигурировании кроссбара, воткнете эти строчки в свой код.

Если к выводу с открытым стоком подключен СД, то надо убедиться, что вывод потянет втекающий ток через СД (зависит от Вашего СД и токоограничительного резистора), смотрите токовые свойства портов в datasheet.


я использовал для настройки кроссбара ПО Configuration Wizard 2. Для понимания происходящего сравнивал результаты с даташитом.

Цитата(alexunder @ May 20 2015, 15:30) *
Если к выводу с открытым стоком подключен СД, то надо убедиться, что вывод потянет втекающий ток через СД (зависит от Вашего СД и токоограничительного резистора), смотрите токовые свойства портов в datasheet.


Ток нагрузки в районе 1 миллиампера. Проверю еще раз. Попробую мультиметром измерить, без подключения светодиода.
Я думаю, что дело не в нагрузке на выходе.
Проверю с компаратором 1. Главное, чтобы МК был исправен.
alexunder
Цитата(Radik2 @ May 20 2015, 12:45) *
я использовал для настройки кроссбара ПО Configuration Wizard 2. Для понимания происходящего сравнивал результаты с даташитом.

тогда надо убедиться что сам компаратор настроен правильно (порог срабатывания, знак).
Radik2
Цитата(alexunder @ May 21 2015, 12:06) *
тогда надо убедиться что сам компаратор настроен правильно (порог срабатывания, знак).


Вот скриншоты настроек

alexunder
Цитата(Radik2 @ May 21 2015, 16:35) *
Вот скриншоты настроек

Лучше выставить один тип гистерезиса.
Давайте файл кода сюда, посмотрим.
Radik2
Цитата(alexunder @ May 22 2015, 09:03) *
Лучше выставить один тип гистерезиса.
Давайте файл кода сюда, посмотрим.

Посмотрите, пожалуйста.
alexunder
Цитата(Radik2 @ May 22 2015, 16:50) *
Посмотрите, пожалуйста.

Это все? А где же main() и обработчик прерывания от компаратора?
Radik2
Цитата(alexunder @ May 23 2015, 02:51) *
Это все? А где же main() и обработчик прерывания от компаратора?

Сейчас речь идет не о программной обработке прерываний компаратора, а о применении встроенного в МК компаратора как отдельного узла/устройства.
Начинаю с самых простых вещей в изучении данной линейки МК.
Вот что написано в переводе даташита на C8051F120:

"При помощи регистров управления матрицей на выводы портов могут быть выведены сигналы от встроенных таймеров/счетчиков, от последовательных интерфейсов, аппаратные прерывания, входной сигнал запуска АЦП, выходы компараторов и другие цифровые сигналы. Это позволяет пользователю выбрать точную комбинацию связей между портами ввода/вывода общего назначения и цифровыми ресурсами, необходимую для каждого конкретного приложения."

То же самое в оригинальном даташите:
"The on-chip counter/timers, serial buses, HW interrupts, ADC Start of Conversion inputs, comparator outputs, and other digital signals in the controller can be configured to appear on the Port I/O pins specified in the Crossbar Control registers. This allows the user to select the exact mix of general purpose Port I/O and digital resources needed for the particular application."

Для работы компаратора даже тактирования не нужно.

Вот еще перевод из даташита:
"Входы каждого компаратора доступны как отдельные внешние выводы. Выходы компараторов можно соединить с внешними выводами с помощью матрицы. Выход каждого компаратора, соединенный с выводом корпуса, может быть настроен как выход с открытым стоком или как цифровой двухтактный выход."
alexunder
Цитата(Radik2 @ May 25 2015, 04:22) *
Сейчас речь идет не о программной обработке прерываний компаратора, а о применении встроенного в МК компаратора как отдельного узла/устройства.
Начинаю с самых простых вещей в изучении данной линейки МК.

Зачем тогда включать прерывание от компаратора (видно из Вашей картинки), если нет обработчика прерывания?
В таком случае по срабатыванию прерывания от компаратора будет переход в точку, где ожидается обработчик (точные адреса в ДЩ), и исполнение продолжится с этого места. У вас там не пойми что будет исполняться.

Цитата(Radik2 @ May 25 2015, 04:22) *
Для работы компаратора даже тактирования не нужно.

это что-то новенькое. Сконфигурировать компаратор, кроссбар и пр, а потом отключить Fclk? Для чего?

Цитата(Radik2 @ May 25 2015, 04:22) *
Вот что написано в переводе даташита на C8051F120:

Это все ясно, но к проблеме отношения не имеет никакого. В вашем коде нет main(), а значит, инициализация компаратора и прерываний из Comp.c не вызываются. Поэтому ничего и не работает.
Radik2
Цитата(alexunder @ May 25 2015, 16:15) *
Это все ясно, но к проблеме отношения не имеет никакого. В вашем коде нет main(), а значит, инициализация компаратора и прерываний из Comp.c не вызываются. Поэтому ничего и не работает.


А каким образом все настроить, чтобы вывести сигнал с выхода компаратора на вывод МК без участия ядра МК?
Добавить main и в ней прописать инициализацию?
alexunder
Цитата(Radik2 @ May 25 2015, 13:32) *
А каким образом все настроить, чтобы вывести сигнал с выхода компаратора на вывод МК без участия ядра МК?
Добавить main и в ней прописать инициализацию?

да как у Вас (только прерывание не надо ставить), только сделать функцию main(), можно в отдельном файле.
Посмотрите файл "F12x_UART0_Interrupt.c" в предыдущем проекте по UART, чтобы понять как пишутся программы на Си.
Вот на базе этого файла я сделал главный (прицеплен), добавьте его в проект с comp.c
Radik2
Цитата(alexunder @ May 25 2015, 17:13) *
да как у Вас (только прерывание не надо ставить), только сделать функцию main(), можно в отдельном файле.
Посмотрите файл "F12x_UART0_Interrupt.c" в предыдущем проекте по UART, чтобы понять как пишутся программы на Си.
Вот на базе этого файла я сделал главный (прицеплен), добавьте его в проект с comp.c

Спасибо. Пока что результат тот же: на выводе Р0.0 3,3В, не происходит изменения выходного сигнала с "1" на "0". Прогнал код в отладчике. Дошел до while (1). Как я понял, судя по значению бита CP0EN, компаратор не активировался.
"Компаратор 0 включается установкой в 1 бита CP0EN и отключается сбросом в 0 этого бита."

"Если компаратор отключен, то на его выходе (если он соединен с портом ввода/ вывода через матрицу) по умолчанию устанавливается напряжение низкого уровня, запрещается вызов прерываний от этого компаратора, а его ток потребления становится менее 0,1мкА."
Если компаратор отключен, тогда почему на выходе Р0.0 3,3В. Возможно, что выход компаратора не соединен через матрицу с выводом МК. Я в ступоре.
alexunder
Цитата(Radik2 @ May 27 2015, 04:36) *
Спасибо. Пока что результат тот же: на выводе Р0.0 3,3В, не происходит изменения выходного сигнала с "1" на "0". Прогнал код в отладчике. Дошел до while (1). Как я понял, судя по значению бита CP0EN, компаратор не активировался.

Да, в CP0EN вообще ничего не записывается в Вашем коде, т.е. компаратор не активирован. Добавьте соотв. строчку в Comparator_Init(). Странно что конфигуратор от Silabs это сам не вставляет, а может так задумано?

P.S. Пардон, бит CP0EN выставляется в Comparator_Init(), все нормально, но после строчки
Код
CPT0CN    &= ~0x30;

снова обнуляется. В чем замысел этого? Может предполагается, что разработчик включит компаратор позже в программе. В общем, после Comparator_Init() компаратор выключен.
Radik2
Цитата(alexunder @ May 27 2015, 12:09) *
P.S. Пардон, бит CP0EN выставляется в Comparator_Init(), все нормально.

Я уже не знаю в какую сторону "копать". Проблема в Keil или в МК.
alexunder
Сейчас разберемся.
Прогнал в Keil, формально все работает, в смысле, регистры инициализируются как положено sm.gif
Аппартно не могу проверить, у меня нет F120, есть F320, там вроде похоже.
Закомментируйте вызов Interrupts_Init() если еще не сделали, чтоб с прерываниями не возиться.
Radik2
Цитата(alexunder @ May 27 2015, 12:31) *
Сейчас разберемся.
Прогнал в Keil, формально все работает, в смысле, регистры инициализируются как положено sm.gif
Аппартно не могу проверить, у меня нет F120, есть F320, там вроде похоже.
Закомментируйте вызов Interrupts_Init() если еще не сделали, чтоб с прерываниями не возиться.

Хорошо. Вечером проверю дома в железе.
Interrupts_Init() закомментировал сразу.
Radik2
Цитата(alexunder @ May 27 2015, 12:31) *
Сейчас разберемся.
Прогнал в Keil, формально все работает, в смысле, регистры инициализируются как положено sm.gif
Аппартно не могу проверить, у меня нет F120, есть F320, там вроде похоже.
Закомментируйте вызов Interrupts_Init() если еще не сделали, чтоб с прерываниями не возиться.


Все также: компаратор не активируется ((
alexunder
Цитата(Radik2 @ May 27 2015, 09:57) *
Хорошо. Вечером проверю дома в железе.
Interrupts_Init() закомментировал сразу.

На своем "железе" с F320 проверил работоспособность компаратора. По регистрам там все аналогично F120 за исключением мультиплексирования по входам компаратора. Убедился что выход компаратора на пин порта срабатывает. Затем попробовал с прерыванием - тоже работает.
Нажмите для просмотра прикрепленного файла

помигал светодиодом из прерывания
Код
// обработчик прерывания от Comp #0
void Comp0_Interrupt (void) interrupt 12
{
    if (CPT0CN & 0x20)
    {
        // rising-edge
        CPT0CN &= ~0x20; // сбрасываем CP0RIF
        P0 = 1; // вкл СД
    };
    if (CPT0CN & 0x10)
    {
        // falling-edge
        CPT0CN &= ~0x10; // сбрасываем CP0FIF
        P0 = 0; // выкл СД
    }
}
Radik2
Цитата(alexunder @ May 27 2015, 21:09) *
На своем "железе" с F320 проверил работоспособность компаратора. По регистрам там все аналогично F120 за исключением мультиплексирования по входам компаратора. Убедился что выход компаратора на пин порта срабатывает. Затем попробовал с прерыванием - тоже работает.
}[/code]


А на вкладке компаратора что выводит?

alexunder
Цитата(Radik2 @ May 27 2015, 18:48) *
А на вкладке компаратора что выводит?

Странно, что у Вас после присвоения
Код
CPT0CN = 0x85;

регистр в нуле, если верить кейлу. У меня такого не наблюдается. Может какие-то проблемы с отладчиком? Файл заголовка вида c8051fxxx_defs.h точно от Вашего МК?
Radik2
Цитата(alexunder @ May 28 2015, 00:56) *
Странно, что у Вас после присвоения
Код
CPT0CN = 0x85;

регистр в нуле, если верить кейлу. У меня такого не наблюдается. Может какие-то проблемы с отладчиком? Файл заголовка вида c8051fxxx_defs.h точно от Вашего МК?


Да, от моего МК. Если в коде указываю C8051F120_defs.h, то Keil выдавал ошибку. С C8051F120.h все компилируется нормально, без ошибок и warning.
Может снести Keil и заново установить. Возможно, что где-то настройки некорректные. Но в этом я не силен.
Что странно, при пошаговой отладке светодиод "Run/Stop" в программаторе горит не зеленым цветом, другим: вроде красным.
alexunder
Цитата(Radik2 @ May 28 2015, 04:33) *
Да, от моего МК. Если в коде указываю C8051F120_defs.h, то Keil выдавал ошибку. С C8051F120.h все компилируется нормально, без ошибок и warning.

я спросил, т.к. думал может у Вас по случайности от другого МК файл стоит...

Цитата(Radik2 @ May 28 2015, 04:33) *
Может снести Keil и заново установить. Возможно, что где-то настройки некорректные. Но в этом я не силен.

Ну зачем сносить кейл, если все работало с программой по тестированию UART? Там, если не ошибаюсь заинклюден c8051f120.h, т.е. файл заголовков, который есть где-то у Кейла в подддиректориях.
C8051F120_defs.h откуда-то у меня появился, они должны быть одинаковыми, там же просто объявления регистров и RAM. В конце концов, раз программа с UART бегала, то проблема не в этом.

Цитата(Radik2 @ May 28 2015, 04:33) *
Что странно, при пошаговой отладке светодиод "Run/Stop" в программаторе горит не зеленым цветом, другим: вроде красным.

по-моему так и должно быть в пошаговом режиме, если это оригинальный силабовский (или копия).

У меня старая версия Keil посему таких продвинутых окон типа детальный просмотр установок компараторов (как Вы привели) нет, в обычном watch'е регистр CPT0CN обновляется.
Может проблемы с самим отладочиком? Бывают глюки и у силабса, тут где-то была тема. Если запустить в эмуляторе программу, как себя ведет? В Keil можете выбрать в чем делать Debug: на таргете или в эмуляторе 51.
Radik2
Цитата(alexunder @ May 28 2015, 12:18) *
Ну зачем сносить кейл, если все работало с программой по тестированию UART? Там, если не ошибаюсь заинклюден c8051f120.h, т.е. файл заголовков, который есть где-то у Кейла в подддиректориях.


Этот файл был в папке с примерами для этого МК. С UART все было в порядке. Т.е. в железе работало. В отладчике не помню, вроде не проверял.

Цитата(alexunder @ May 28 2015, 12:18) *
C8051F120_defs.h откуда-то у меня появился, они должны быть одинаковыми, там же просто объявления регистров и RAM. В конце концов, раз программа с UART бегала, то проблема не в этом.


C8051F120_defs.h вроде для SiliconLabs IDE.

Цитата(alexunder @ May 28 2015, 12:18) *
по-моему так и должно быть в пошаговом режиме, если это оригинальный силабовский (или копия).


У меня китайская копия с 8051F320 внутри.
Что интересно. При работе с SiliconLabs IDE в программатор заливается одна прошивка. При работе с Keil - другая.

Тупик ...
alexunder
Цитата(Radik2 @ May 28 2015, 09:44) *
Этот файл был в папке с примерами для этого МК. С UART все было в порядке. Т.е. в железе работало. В отладчике не помню, вроде не проверял.

прогоните просто в симуляторе 51, если при этом регистр себя нормально ведет (выведите его в отдельное окно Watch: меню View->Watch windows->Watch), то с программой все нормально и она должна работать в МК. Если без отладчика на МК не наблюдается адекватной работы, то тогда уж можно грешить на компаратор, хотя я сильно сомневаюсь что он каза болду.
Нажмите для просмотра прикрепленного файла
Radik2
Цитата(alexunder @ May 28 2015, 12:50) *
прогоните просто в симуляторе 51, если при этом регистр себя нормально ведет (выведите его в отдельное окно Watch: меню View->Watch windows->Watch), то с программой все нормально и она должна работать в МК. Если без отладчика на МК не наблюдается адекватной работы, то тогда уж можно грешить на компаратор, хотя я сильно сомневаюсь что он каза болду.

Хорошо. Вечером попробую. Спасибо за помощь!
alexunder
Вот еще копия экрана после инициализации известного регистра:
Нажмите для просмотра прикрепленного файла

все как положено.
Radik2
Цитата(alexunder @ May 28 2015, 13:02) *
Вот еще копия экрана после инициализации известного регистра:

все как положено.


У Вас uVision 4. И "проглатывает" файлы для SiliconLabs IDE. У меня uVision 5 выдает кучу ошибок с этими include.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.