Jump to content

    

Master_MW

Свой
  • Content Count

    209
  • Joined

  • Last visited

Everything posted by Master_MW


  1. Доброго времени суток, чатяне. Некогда сталкивался с той же проблемой, что и автор топика, на том же микроконтроллере. Как показал опыт, - да, действительно, включать USART0 (я использовал USART0, а не USART1 в своём дипломном проекте ) можно только по завершению инициализации скорости передачи и разрешения прерываний по завершению приёма и передачи (другие параметры настройки порта по умолчанию). Код всей программы седующий: Сей код прекрасно ведет себя как в железе, так и в Proteus'е. Частота внешнего кварца - 1 МГЦ. Скорость передачи 4800 Бод. Прошу прощения, что поздно, но, возможно кому-то это поможет. Предположу, что исходный код автора статьи не работал из-за неправильно выбранного уровня оптимизации. (Я предпочитаю использовать уровень 0s). Модератор. Из сообщения удалены огромные цитаты исходного текста потому, что это является грубым нарушением п.3.4. Правил форума. Значительные по объему исходные тексты следует прикреплять к сообщению в виде файлов. С уважением, rezident RS232.rar
  2. Согласен... Хотя я, наверное, неправильно выразился, - компилятор не понимает, что такое PORTB1, например, либо имя бита, выставл. общее разрешение прерываний... Но ладно, полученной информации вполне достаточно, чтобы во всем оставшимся разобраться самому. Думаю, если у вас остались вопросы, то можно договориться , о том, что я могу выслать по электронной почте проект, - так будет проще ... Полагаю, так на свой вопрос вы ответите гораздо быстрее, если возникнет желание - пишите в личку.
  3. Сергей Борщ, Так, например, не хочет работать PORTB=_BV(PORTB1); mdmitry, Сергей Борщ, Насчёт _BV mdmitry оказался прав, хотя в книге Ю.А. Шпака указано что _BV() библиотечный макрос (Ю.А. Шпак. Программирование на языке С для AVR и PIC микроконтроллеров, стр. 165). Проблема решилась с подключением файла avr/sfr_defs.h В тамошнем примере код до функции отработки прерывания следующий: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #if defined(__AVR_AT90S2313__) # define OC1 PB3 # define OCR OCR1 # define DDROC DDRB #elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__) # define OC1 PB1 # define DDROC DDRB # define OCR OCR1 #elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || \ defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \ defined(__AVR_ATmega163__) # define OC1 PD5 # define DDROC DDRD # define OCR OCR1A #endif #if defined(COM11) # define XCOM11 COM11 #elif defined(COM1A1) # define XCOM11 COM1A1 #endif enum { UP, DOWN }; unsigned int pwm; unsigned char direction; ; К слову, вектор прерывания там тоже нерабочий , вместо INTERRUPT(SIG_OWERFLOW1) для корректной работы нужно использовать ISR(TIMER0_OVF_vect){ OCR0++; if(OCR0==255) OCR0=0;} Это простенький, реально заработавший в железе пример. Тем не менее, ситуация достаточно прояснилась , - спасибо всем за помощь. Дело в том , что раньше я писал все свои проекты управления на VHDL, а теперь необходимы некоторые вычисл. мощности, которые проще сделать на МК, нежели на ПЛИС...
  4. Доброго времени суток , коллеги. Проблема в следующем. Пересмотрев достаточное количество материалов по программированию AVR на С, я так и не нашел ответа на сл. вопрос: как прочитать/изменить отдельный бит информации регистра? Для установления одного бита в лог. 1 есть библиотечная директива _BV(и та не везде работает). А как быть с чтением отдельных бит и установкой в ноль? На ассемблере ни для AVR, ни для PIC таких проблем не возникает.
  5. ATmega16 имеет внутренний RC-генератор и, учитывая добротность RC-цепей , соответствующую стабильность.... При его использовании внешний кварц не нужен, посл. используется внутренним кварцевым генератором с внешним резонатором(имеет стабильность порядка 10^-6). Лучше всего использовать его, на сайте http://www.atmel.com есть вся необх. документация и раздел FAQ. Если необходима более точная информация о конфигурировании источника тактирования - обращайтесь в личку.
  6. Исходя из своего опыта разработки полупроводниковых устройств СВЧ , могу сказать следующее. Ставить на одной плате цифровое управление и СВЧ такого диапазона - крайне не рекомендую. Работая на 8-12 ГГц, использовал FR-4 толщиной 0,8 мм , измеренная отнсительная диэлектрическая проницаемость в этом диапазоне- 4,45. Как показал опыт, если система СВЧ не имеет полной гальванической развязки(включая раздельные земли) , то в спектре полезного сигнала присуствуют ВСЕ тактовые частоты цифровой части и их интермодуляционные компоненты... Надежнее всего Вам будет выполнить блок СВЧ на отдельной двухслойной плате с собоственным экраном с полностью земляным нижним слоем и толщиной не более0,8 мм (в этом случае свя СВЧ энергия сосредоточена под полоском и практически не излучается в свободное пространство). Для расчета полосковых линий передачи Вам может быть полезная достоточно простая программа AppCAD от Agilent Technologies.
  7. Есть некоторый опыт по постороению систем с ФАПЧ, (синтезаторы частот СВЧ), потому, думаю, что смогу вам чем-то помочь, но необходимо увидеть полную принципиальную схему. Скажу сразу- что полоса захвата в 50 Гц, величина крайне малая, на рабочей частоте в 8 ГГц, абсолютная нестабильность частоты равна 800 Гц, при относительной в 1^-7.... Таким образом, попасть в полосу захвата почти нереально, да на частотах на один порядок ниже, чем указанная выше. Думаю, имеет смысл сначала увеличить полосу удержания до 1-2 МГц.
  8. Да, конечно. Похоже, у вас скрыт ваш e-mail адрес, укажите мне его , я сразу же вышлю все, что есть в наличии.
  9. Исходя из собственного опыта могу сказать, что опыт работы на С/С++ - слабый помощник при осваивании языков параллельных процессов, таких, как VHDL, Verilog HDL. Более того меня это иногда сбивало с толку. Много интересного и полезного Вы можете найти тут: http://www.bsuir.by/vhdl/ C другой стороны, работа на языке Verilog HDL занимает меньше времени, чем на VHDL, для решения одной и той же задачи. Если заитересует - могй выслать на e-mail массу полезной литературу по этому языку ( к сожалению, только на английском)