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

Палыч

Свой
  • Постов

    2 495
  • Зарегистрирован

  • Победитель дней

    2

Весь контент Палыч


  1. Как вариант: Используете для чтения Р1.х "fast interface", но забыли установить "High speed GPIO is enabled on ports 0 and 1" в System Controls and Status register
  2. Попробуйте нарисовать схему подключения гарнитуры, которая получится при вытягивании из гнезда штекера, если штекер вытянули на величину ширины одного кольца штекера: - общий гарнитуры будет болтаться в воздухе (сюда подключены одним контактом микрофон, левый и правый наушники гарнитуры); - микрофон гарнитуры вторым контактом подключен к общему гнезда; - правый наушник вторым контактом подключен к микрофонному входу гнезда; - левый наушник вторым входом подключен к выходу усилителя правого канала. При высоком уровне сигнала на последнем - через микрофон течет незапланированный ток. ...И уровень сигнала на микрофонном входе может оказаться слишком большим. Как-то так...
  3. В "старой" распайке была большая вероятность "спалить" постоянно подключенный микрофон гарнитуры при вытаскивании штекера из гнезда.
  4. Подсказать - невозможно! Дело в том, что в стандарте на разъем TRRS определены его форма и размеры, но не назначение контактов. Существуют и рекомендации по назначению контактов: самое распространенное в настоящее время - то, что Вы привели. Однако, оно стало "стандартным" всего лишь несколько лет назад и не все производители этого "стандарта" придерживаются. До недавнего времени"стандартным" считалось подключение в котором контакт микрофона и общий поменяны местами...
  5. 1. При занесении значения в двуxбайтный регистр сначала заносят значение в регистр xxxH, затем в регистр xxxL. Никак не наоборот! 2. Комментарий и значение двух старших битов регистра UCSR1C не соответствует документации на МК.
  6. Так это - старый JTAG, схема которого давно гуляет по интернету. Его можно и самому сделать. Но, к сожалению, этот JTAG не поддерживает AVRStudia версией выше чем 4.19. Ну, и соответственно, МК, разработанные позже - тоже не поддерживаются...
  7. Как я понял из Вашей программы: выводы энкодера соединены с выводами PD1 и PD2 микроконтроллера. Изменение сигнала на PD2 (он же INT0) приводит к прерыванию, а вот в прерывании проверяется почему-то состояние сигнала на PD0:
  8. Под термином "мастер" понимается МК, SPI которого работает в "master mode". Поэтому утверждение как говорит один мой коллега: "Всего лишь Ваша неправильная точка зрения". :rolleyes:
  9. Если обмен между МК также примитивен, как и в примере ТС, то соглашусь: можно применить и повтор.
  10. Ключевое слово в Вашем утверждении - "если". Если подчиненное устройство успело положить правильный ответ до того, как мастер начал процесс обмена, то - да, мастер получит его. Но, если не успел, то и не получит. Я и говорю: мастер должен предусмотреть достаточную задержку между своей посылкой и приемом ответа для того, чтобы подчиненное устройство гарантированно успело положить ответную информацию. В AVR активный сигнал на входе SS (на ноге SS, настроенной как ввод) разрешает работу сдвигового регистра SPI. И не важно в каком режиме работает SPI - master или slave. Для мастера низкий (активный) сигнал на входе SS фактически означает готовность подчиненного устройства. Этот сигнал теоретически можно было бы использовать при обмене между двумя МК, если бы в AVR была бы некая аппаратная реализация готовности подчиненного устройства, поскольку мастеру необходимо дождаться неких действий подчиненного устройства при передаче ответа. Наличие сигнала готовности подчиненного упростило бы ПО мастера. Поскольку готовность подчиненного устройства аппаратно не поддерживается в AVR, то мастер либо должен сделать необходимой длины паузу при приёме ответа, либо (что я считаю нерациональным) получить информацию о готовности подчиненного другим путем.
  11. Так сигнал обозначен в документации от производителя МК: сигнал о готовности ведомого устройства заводится на SPI, работающего в режиме master, на ту из ног, которая обозначается SS. Подчиненное устройство может правильно принять команду, а вот мастер нужный ответ на команду может не получить никогда...
  12. Нужно дать понять мастеру, что подчиненное устройство произвело операции необходимые для обмена, а до той поры приостановить обмен. Поскольку инициатором обмена по SPI всегда выступает мастер, то задействовать SS нужно именно мастера. В этом случае сигнал на SS мастера формирует, естественно, подчиненное устройство.
  13. IMHO, ждать помощи от SS в данном случае нецелесообразно. Его использование, конечно же, упростит ПО на мaster'е, но формирование этого сигнала на подчиненном устройстве программным способом - неосуществимо, аппаратным способом - слишком громозко...
  14. Начну со второго вопроса: да, теоретически будет работать. Теперь об организации ПО мастера и подчиненного устройства. Подозреваю, что с мастером Вам не все понятно, раз возникли вопросы с режимом slave. Например, в Вашем примере: 1) устройство-мастер передаёт по SPI первый байт (байт команды) 2) подчиненное устройство приняв по SPI байт через некоторое время запустит программу обработки прерывания от SPI; 3) программа обработки прерывания считает принятый байт с регистра, определит его значение и положит на регистр байт ответа; на всё это (шаг 2-3) потребуется время - Вы должны определит максимальное время на ответ подчиненного устройства, при этом учесть время работы других более приоритетных процедур обработки прерывания. 4) устройство-мастер выждав после передачи время, необходимое для гарантированной реакции подчиненного устройства на первый байт, производит считывание байта ответа.
  15. А, они - что? Соединяются? Тогда зачем Atmel предлагает это?
  16. Транслятор ругается на анонимный union. Давно не использую МК51, поэтому не могу подсказать: как выйти из такого положения? Возможно (но не факт ! ), следует взять одну из последних версий Keil...
  17. При симуляции внешней памяти Keil "зашел" немного дальше, чем это, возможно, было нужно Поскольку при командах типа MOVX А,@R0 выводы P2 (старший байт адреса памяти) находятся в Hi-Z, то чтение осуществяется из участка внешней памяти с диапазоном адресов от 0xFF00 по 0xFFFF.
  18. 1. Menu -> View -> Memory windows -> Memory X 2. В окне Memory задать начальный адрес отображения содержимого. Например, для внешней памяти отображение с нулевого адреса: x:0 x - внешняя память d - внутренняя RAM с - память программ 3. В контекстном меню (правая кнопка мыши на окне) выбрать тип представления содержимого памяти 4. Двойной клик на содержимом окна Memory - редактирование
  19. Обратите внимание на значение регистра AUXR после сброса МК. В программе нужно поправить: AUXR = 0x10; // XDATA = 1792
  20. В Keil константы препроцессора можно определить в опциях проекта, группы файлов или отдельного файла.
  21. Menu -> Edit -> Configuration -> Text Completion -> Show Code Completion List for Поставить галку в "Enter/Tab as full-up character". Нажать "Ок".
  22. Так, возмите и сравните две платы! Скорее всего невнимательность при монтаже. Например, конденсаторы при кварце не того номинала...
×
×
  • Создать...