Перейти к содержанию

    

Приветсвую форумчане!

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

Заранее благодарю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для точности хода используйте внешний кварцевый резонатор, если использовать прерывания то большую часть времени процессор будет в простое. Часы тикают по прерыванию от таймера, данные передаются и принимаются по прерыванию от аппаратного UARTa.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря не очень понял, как при этом не будут сбиваться секунды. Ведь пока мы работаем с UART, мы не можем обрабатывать сигналы от таймера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Честно говоря не очень понял, как при этом не будут сбиваться секунды.

При работе с UART по прерываниям: при вхождении в процедуру обработки прерывания от UART прерывания от таймера будут задержаны до выхода из процедуры прерывания UART. Хороший тон программирования - процедуры обработки прерывания делать по возможности более короткими насколько это возможно. Например, забрал с регистра данных UART пришедший байт, взвел флаг (который анализируется в main loop) и вышел из прерывания. Таким образом, изменение счетчика секунд (коли прерывание от таймера совпало во времени с работой процедуры прерывания от UART) будет задержано на очень небольшое время (вероятно, на единицы микросекунд).

Для Вашей задачи микросекунды - это много?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спс за ответ. :a14: Попробую по прерываниям. В проекте требуется точнойсть до милисекунд, а обмен данными по UART большой. Просто, думал что может как-то без прерывааний обойтись :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спс за ответ. :a14: Попробую по прерываниям. В проекте требуется точнойсть до милисекунд, а обмен данными по UART большой. Просто, думал что может как-то без прерывааний обойтись :rolleyes:

Выберите режим таймера с автоматической перезагрузкой. В этом случае, даже если вы не сразу обработаете текущее прерывание таймера следующее наступит все равно через выбранный интервал, а не смещенное по времени на период обработки прерывания. Главное, чтобы к наступлению следующего прерывания текущее было уже обработано, иначе потеряете тик. Для этого выставляете разумное время между перезагрузками таймера, т.е. максимально допустимое. И, второе, все обработки прерываний, как писал Палыч, делаете максимально короткими. Про длинный UART не понял. Вы же не собираетесь в нем сидеть пока не примете всю посылку? Нужно только обрабатывать в прерывании побайтно. А уже по завершении приема всей посылки в какой-то буфер там же в прерывании выставить флаг окончания приема. А обработку этого флага и, соостветственно, принятой посылки вести в основном цикле программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Выберите режим таймера с автоматической перезагрузкой. В этом случае, даже если вы не сразу обработаете текущее прерывание таймера следующее наступит все равно через выбранный интервал, а не смещенное по времени на период обработки прерывания.

Немного поправлю...

Таймер, конечно же, нужно настраивать на работу с автоматической перезагрузкой. В этом случае требования на прерывание (флаги прерывания) будет выставлятся таймером через один и тот же интервал времени (с учетом погрешности частоты задающего генератора). Однако, запуск процедуры обработки прерывания от таймера может быть несколько задержан относительно времени выставления требования прерывания (флага прерывания) от таймера. Эта задержка запуска возникнет, если в момент выставления требования прерывания в МК запрещены прерывания, например, если в данный момент работает процедура обработки прерывания от UART (все прерывания в МК51 запрещаются при входе в процедуру обработки прерывания до выхода их процедуры). Поэтому, изменение значений переменных времени (часы, секунды, миллисекунды) будет несколько cдвинуто во времени относительно тика таймера (максимально - на время работы процедуры обработки прерывания от UART). Если этот сдвиг - критичен, то процедуру обработки прерывания от UART необходимо максимально "укоротить"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если известна периодичность сообщений по UART, можно подобрать периодичность прерываний от времязадающего таймера на пару порядков выше... в каждом прерывании от таймера проверять флаг от UART - не пришло ли сообщение...

от прерываний UART отказаться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

Прошу прощения, что вклинился в ваш топик.

Много лет осваиваю 8-ми битные МК AVR от Atmel. Случайно наткнулся на МК С8051 от Silabs, которые имеют частоту до 100МГц. Например C8051F120. Цены не кусаются. Терпимо.

У меня такой вопрос. Насколько будет оправдана перебежка в сторону МК С8051 от Silabs? Вроде как, "хоронить" это ядро не собираются: на рынке не один десяток лет.

Cortex от STM показались мне тяжелыми в освоении, как для "старого" новичка, вечного ученика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
...которые имеют частоту до 100МГц. Например C8051F120...

Их преимущество - частота, еще периферия несколько улучшена. Также есть возможность динамического изменения внутренней тактовой частоты, это для снижения электропотребления.

Когда-то сделал много проектов на этих МК, остался доволен. В частности, был конвертор Ethernet-ИКМ30, это для телефонии, там нужна была скорость, какую меги тогда еще не обеспечивали. Да, еще софт для Silabs нормальный…

И еще эксперимент был, разогнал тактовую частоту до 140МГц и МК работал...

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Serhiy_UA

Вы можете советовать С8051F для начинающих? Вы писали код на ассемблере или Си?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вы можете советовать С8051F для начинающих? Вы писали код на ассемблере или Си?
Советую и для начинающих тоже. Всегда надо с чего-то начинать... Но Вы, похоже, в МК не новичек :)

В чем преимущество:

Доступно много качественной информации по МК от Silabs, и без errata. На русском языке тоже много. А примеров просто море...

Программатор можно сделать самому или купить.

Среда программирования - это uVision 3 и выше, что от Keil (для нас бесплатно). Можно писать на С или asm, или в обоих сразу. Опять же примеров этому много. Я чаще писал на С, но для критических мест делал вставки на asm. Там у 51-архитектуры есть полезные команды косвенных переходов ( JMP @A+DPTR), а также банки РОН, что ускоряет обработку прерываний. Так вот, работать с ними лучше через asm.

Есть и недостатки, свойственные 51-архитектуре, но в целом это хороший 8-разрядный микроконтроллер, особенно по энергопотреблению. Также широкий выбор корпусов, от обыкновенных до мини 4*4мм с выводами вниз.

Дерзайте...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Советую и для начинающих тоже. Всегда надо с чего-то начинать...

Среда программирования - это uVision 3 и выше, что от Keil (для нас бесплатно).

Собственно, компилятор/ассемблер/линкер от Keil для контроллеров Silabs вообще бесплатные, по-честному и без ограничений. Для получения лицензии понадобится только регистрация. А вот отладка - только в Silabs IDE, или же как обычно... ;)

 

Доступно много качественной информации по МК от Silabs, и без errata.

errata всё же встречается, и местами есть ляпы в документации. Но тут всё можно весьма оперативно выяснить на форуме, отвечают сами разработчики чипов.

Касательно старых серий - C8051F0xx/1xx/2xx... без крайней надобности я бы не стал их применять. Относительно высокое энергопотребление и ценники нерадостные. Серии поновее - 7xx...9xx, 38x куда интереснее.

 

Также широкий выбор корпусов, от обыкновенных до мини 4*4мм с выводами вниз.

Есть и меньше. QFN/DFN 3*3 мм и даже 2*2 мм (QFN-10).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Касательно старых серий - C8051F0xx/1xx/2xx... без крайней надобности я бы не стал их применять.

 

А я как раз на аукционе Ebay выиграл C8051F120 за $1,8. В Silabs IDE в списке поддерживаемых МК его не оказалось.

post-26030-1423919264_thumb.jpg

 

Серии поновее - 7xx...9xx, 38x куда интереснее.

Среди новых серий я альтернативу C8051F120 не нашел: такой же корпус 100 выводов, частота 100 МГц и т.д.

 

Доступно много качественной информации по МК от Silabs, и без errata. На русском языке тоже много. А примеров просто море...

Видимо я плохо искал: не увидел такого объема ресурсов как для МК AVR от Atmel.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У F120 цены сейчас где-то такие. Грубо говоря, $15 за штуку при тысячных тиражах.

Т.е. неконкурентоспособные. Да, в отличие от того же атмела, они будут выпускаться "до последнего клиента" - цена только будет негуманная с тенденцией к росту со временем.

Но им есть масса альтернатив, очень существенно дешевле, даже у тех же Silabs, но на ядре Cortex-M3 (SIM3xx), или Cortex-M0 (приобретённые силабсом Gecko от Energymicro, вкупе с самой конторой). А вот 25...50-мегагерцовые C8051 вполне могут AVR заменить, с изрядным запасом по всем параметрам.

C8051F85x, похоже, что сделаны для того, чтобы вынести мелкие AVR и им подобные с рынка - хотя там такой цели не ставилось. :)

Касательно ресурсов, у силабса их в разы меньше, чем у атмела, но вполне достаточно, если мало-мальски знаешь английский. :) Вот только Simplicity Studio, которая там выпрыгивает наверх в "Software downloads", ставить не советую. Оно там вроде много всего в одном, но в реале вещь страшно тормозная и многоглючная. Может, для EFM32 там всё и нормально, но для C8051 явно недопилили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация