Поиск по сайту

Результаты поиска по тегам 'spi'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • AVR
    • PIC
    • STM32
    • Arduino и Raspberry Pi
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Конкурсы сайта с призами
    • Сайт Паяльник и форум
    • Курилка
    • Технический английский (English)
    • Наши проекты для Android и Web
    • FAQ (Архив)
    • Личные блоги
    • Корзина
    • Вопросы с VK
  • ATX->ЛБП Переделки
  • Юмор в youtube Киловольты юмора
  • Надежность и группы продавцов Радиолюбительская доска объявлений exDIY
  • разные темы Переделки

Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Местоположения

  • Пользователи форума

Группа


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено 34 результата

  1. Тема: Реверс-инжиниринг: необходимо декодировать протокол связи контроллера пром. насоса и дисплея Общая цель: сделать управление кондиционером, вести мониторинг его работы. Время на работу: около 12 часов (2 дня). Задание для исполнителя: 1. Выполнить обратное декодирование протокола связи контроллера промышленного кондиционера и его дисплея с сенсорными кнопками. 2. Запаять ATMega 328P или ATMega 2560. Вероятно, придется резать дорожки, допаять резисторы в разрыв. 3. Совместно с заказчиком написать короткий код ввода/вывода данных для Arduino (C++). Могут понадобиться функции передачи данных на второй контроллер ATMega 2560 по UART. 4. Совместно с заказчиком составить простое описание. 5. Работа дисплея, состояние контроллера кондиционера и мониторинг на Arduino должны быть синхронны. Программировать микроконтроллер и отправлять данные на вебсервер по Ethernet (W5500) умею. Паять умею. Работать с микроконтроллером на уровне регистров процессора не умею, потому и ставлю задание. Протокол: неизвестен Шина: неизвестна Чип дисплея: Holtek HT1621B Контроллер "пульта управления": Holtek BS84B08A-3 Фото прилагается. Вероятно, применяется шина SPI или I2C, что должно облегчить задачу. Имеется пример подобного дисплея 2009 года с выполненной работой. У предыдущего исполнителя ушло около 2 часов на разбор команд и еще столько же на написание кода, *когда поняли, как разбирать команды*. Фото с реализацией задания прилагается, но на дисплее другого типа. Метод выполненной работы в прошлый раз: 1. Для получения данных с Holtek-HT46F49E по 8-ми битной шине данных использован Arduino Pro Mini 328P. 2. Подключение: 5 дорожек перерезано и допаяно 5 резисторов по 1 кОм. Так же использовано еще 3 линии (reset и данные). 3. Для удаленного управления использована Arduino Mega 2560 + Ethernet Shield W5100. 4. Общение между 328P и 2560 идет по UART. Наилучший вариант, если кто-то откликнется из Киева, чтобы можно было вместе встретиться и поработать. Но если в Киеве никого нет, то куплю недорогой логический анализатор уровней и будем общаться удаленно. Готов к любому варианту.
  2. Проблема с SPI

    Доброго времени суток. Изучаю STM32, пользуюсь библиотекой SPL. При изучении SPI возникла проблема. Вся иницилизация проходит успешно, ну когда я пытаюсь прочитать даные с акселерометра, регистр Where_am_i, мне либо ничего не приходит, либо приходит 0xFF. Настраивал все по многим туториалам, результат один и тот же. У людей получается, а у меня нет.
  3. STM32F10x SPI

    Здраствуйте, пожалуста подскажите за SPI. Как там дрыгать ногой софтварно? У меня на выходе NSS у меня 1.4 вольта когда SPI выкл а должно быть 3.3 вроди.
  4. Чтение температуры MAX6675

    Помогите, разобраться. Пытаюсь считать данные с модуля на max6675. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" float temp; u16 MSBLSB; volatile uint32_t ticks_delay = 0; void SysTick_Handler(void) { ticks_delay++; } void delay(uint32_t milliseconds) { uint32_t start = ticks_delay; while((ticks_delay - start) < milliseconds); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); NVIC_EnableIRQ(SPI1_IRQn); SysTick_Config(SystemCoreClock/1000); while(1) { temp = (MSBLSB >> 3); temp = temp * 0.25; } } void SPI1_IRQHandler (){ if (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==SET) { GPIOA->BSRR = GPIO_BSRR_BR4; MSBLSB = SPI_I2S_ReceiveData(SPI1); delay(2000); GPIOA->BSRR = GPIO_BSRR_BS4; } } Ничего хорошего пока не получилось. Код собирал по кусочкам со всего интернета(. 1. Правильно ли я настроил SPI? 2. Как преобразовать полученные данные из регистра DR в температуру? С битовыми операциями, пока туго... 3. Может кто нибудь даст пример? Прошу сильно не пинать.
  5. Добрый день! Столкнулся с такой проблемой, пытаюсь взаимодействовать с чипом AFE4300 по SPI. В дотащите указано, что уровень сигнала 2 - 3 вольта. Подключаю к nrf51 (использует уровень 3.3 вольта), ресетю и пытаюсь прочитать дефолтное значение регистра (0x01C3), в итоге получаю 0xFFFF. Перепроверил на Arduino Mega 2560, где уровень сигнала 5 вольт (подключил напрямую без level shifter) и считал свои дефолтные значения. Попробовал также считать другие 4 регистра, все также отлично считалось. Вот теперь не пойму, в дотащите указано не верно или у меня что-то не то. Еще вопрос про согласовать уровней TXB0108. Пытался через нее прокинуть сигнал от nrf51 (3.3v) на afe4300. Питание А - 3.3в, каналы А к nrf51, питание Б 5в, каналы Б к afe4300, OE к 3.3в. Не завелось, даже анализатор говорит, что MOSI шлет 0xFF, вместо реальных данных. Земля везде общая. Правда есть оговорка, как данный уровень ко мне приехал я мог по ошибке запитать Б 3 вольтами, а А 5 вольтами. Но даташит на него говорит, что когда А > Б, это не повреждает чип, хотя А должно быть до 3.6 вольт. Еще мог OE подключить к 5 вольтам. В общем, могли ли мои неразумные операции вывести его из строя??? Еще в даташите указано, что неиспользуемые каналы надо подключить либо к питанию, либо к земле. Это может влиять на то, что я сейчас получаю?
  6. Всем привет. Существуют ли готовые модули для измерения мгновенных значений тока и напряжения (ток до 100 А, напряжение до 250 вольт)? Т.е. измерять нужно с частотой 1000-5000 герц, точность 14-16 бит, связь по SPI лучше всего. Вообще нужно хотя-бы 4 канала по току и 4 по напряжению. Но лучше, чтобы можно было на одну шину ставить несколько модулей, расширяя количество каналов. Обрабатывать данные собираюсь на STM32F104 (хотя с ним никогда не работал) или Arduino Due, но это не важно. Понятно что можно взять АЦП и шунт или делитель напряжения, но хотелось бы готовый модуль и уже с оптической развязкой. Подскажите если кто сталкивался.
  7. Здравствуйте поверхностный поиск в Яндексе не дал результатов решил обратится к вам суть в следующем: к мк с логикой 5в подключена карта памяти по spi с логикой 3.3в через буферный элемент здесь все в порядке поскольку сигнал от карты памяти 3.3в из за длинны шнура он теряется и становится ниже уровня лог 1 контроллера 5в вопрос как простым методом усилить его до 5 вольт чтоб он не терялся предполагаю биполярным транзистором но по какой схеме? у меня есть такой он подойдет? http://uamper.com/products/datasheet/2N2222.pdf благодарю.
  8. STM32F1 SPI & RC-522(RFID)

    Использую библиотеку HAL Вроде поднял SPI (как проверить не знаю) . Пытаюсь переписать существующию библиотеку для ардуино под стм но все что выдает SPI либо 0x00 либо 0xFF =( иногда пробегают цифры но это скорее случайность. Может кто объяснить в чем может быть причина? SS pin управляется железом. если есть время сегодня то - скайп Discord teamspeak Radmin - буду признателен за помощь - достаточно результата в правильном считывание регистров или ткнуть носом что идет не так. Для начала делаю без прирываний и DMA Использую мк - stm32f103c8t6 модуль : rc-522 - данные отправляю через USB в ПК KEil 5 + cubeMX последней версии. Код процедур прилагаю.
  9. Пытаюсь разобраться с ili9341 брал тут на пин LED и VCC подаю 3.3В с 2х ног ПЛИС Попытка получить ответ по команде D3h ... в ответ молчание (((( Кто работал с этим дисплеем, что делаю не так ?
  10. SPI PIC

    Пытаюсь реализовать SPI, вот только никак не могу скомпилить. ошибка странная.... Строчка кода. Синтаксис на неё не ругается... Что не так????
  11. Добрый день, столкнулся с проблемой на микроконтроллере AVR32UC3C0512, мне необходимо передать сообщение по SPI на микросхему TLE6208-6G и одновременно с этой передачей считать ответ. Разница в передаче и ответе на диаграмме: при передаче с кодом: spi_select_device(&AVR32_SPI0, &SPI_MVK_CS1); spi_write(&AVR32_SPI0, data_buff); while((AVR32_SPI0.cr & AVR32_SPI_SR_TXEMPTY_MASK) != 0) {}; spi_read(&AVR32_SPI0, &result); spi_set_chipselect_delay_bct(&AVR32_SPI0, &SPI_MVK_CS1, CONFIG_SPI_MASTER_DELAY_BCT); spi_deselect_device(&AVR32_SPI0, &SPI_MVK_CS1); код функции spi_write: spi_status_t spi_write(volatile avr32_spi_t *spi, uint16_t data) { uint32_t timeout = SPI_TIMEOUT; while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { if (!timeout--) { return SPI_ERROR_TIMEOUT; //return 0xFFFF; } } spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET; return SPI_OK; } код функции spi_read: spi_status_t spi_read(volatile avr32_spi_t *spi, uint16_t *data) {unsigned int timeout = SPI_TIMEOUT; while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { if (!timeout--) { return SPI_ERROR_TIMEOUT; //return 0xFFFF; } } *data = (spi->rdr & 0x0000FFFF) >> AVR32_SPI_RDR_RD_OFFSET; return SPI_OK; } в result 0. хотя отправляю не 0 и плата отрабатывает верно (необходимые светодиоды светятся). Посылка осуществляется в цикле. На осциллографе я вижу все эти пакеты, даже ответ, но мне нужно его прочитать, что не получается сделать. Что может быть не так? Как получить верный ответ, пробовал даже оставлять от кода только строчки отправки и сразу чтение из регистра без задержек но ничего не помогло.. Пробовал также закольцевать SPI без изменения кода программы. ответ вижу передается через UART.
  12. <p>Доброго времени суток. Недавно решил заняться изучением AVR. Начал с изучения периферии, и вот остановилься на интерфейсе SPI. Опыты, пока что провожу в Proteus, подключая к МК виртуальный SPI Debugger. Когда МК в режиме Master то все отлично, байты отправляются и принимаются как надо, но когда МК в режиме Slave (Debugger соответственно Master) то в некоторых режимах SPI, МК передает какую-то кашу. Конкретнее: я передаю в МК(ATmega328P) и хочу считать из МК любое число (пусть и там и там будет 0x66), так вот это удается сделать только в режимах 1 и 3 (то есть только когда CPHA=1), при CPHA=0, МК передает данные с опозданием на 1 бит, или вовсе неправильно, что видно на графиках( зеленый - MOSI, красный - MISO, желтый - SCK, бирюзовый - SS). Вопрос: почему так происходит? Это просто глюк Proteus над которым не стоит заморачиватся или все же моя ошибка? Вот код: #define F_CPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> #define SPI_PORTX PORTB #define SPI_DDRX DDRB #define SPI_MISO 4 #define SPI_MOSI 3 #define SPI_SCK 5 #define SPI_SS 2 void SPI_Init(void) { SPI_DDRX|=(1<<SPI_MISO); SPCR|=(1<<SPIE)|(1<<SPE)|(0<<DORD)|(0<<MSTR)|(1<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0); SPSR|=(0<<SPI2X); } ISR(SPI_STC_vect) { SPDR=0x66; } int main(void) { SPI_Init(); sei(); while (1) { } }
  13. Написал слой абстракции для мастера SPI, как программного так и аппаратного. Кому не лень посмотрите что можно исправить или доработать. Единственное, что мне не нравится, что avr-gcc ругается warning'ом на неинициализированную переменную. Я-то знаю, что после 9 сдвигов в ней не останется ни одного родного бита, но как это объяснить компилятору? char SPI_send(char data){ char res,i=7; spi.zip
  14. Здравствуйте, Столкнулся с непонятной для меня проблемой запуска графического контроллера FT800 через 1986ВЕ1Т. Вся работа производится с отладочными платами LDM-HELPER-K1986BE1QI-FULL и VM800C43A-D. Среда программирования Keil 5. Работаю руководствуясь данной статьей и демонстрационным примером для ARM. После инициализации, управляющий конnроллер должен получить от FT800 идентификатор 0x7C, который говорит о том что инициализация прошла успешно и можно работать дальше. Проблема состоит в том, что ничего подобного он не получает. Я больше склоняюсь к тому, что неправильно настроил SPI, вследствие чего 1986ВЕ1Т шлет некорректные команды. Отладочная плата с FT800 работает, проверяли подключив к плате ардуино. Схема подключения на картинке, справа графический контроллер, слева 1986ВЕ1: void SPI1_Init(void) //инициализация SPI { SSP_InitTypeDef SSP_InitStructure; PORT_InitTypeDef GPIO_user_ini; RST_CLK_PCLKcmd(PCLK_BIT(MDR_SSP1_BASE), ENABLE); RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC , ENABLE); GPIO_user_ini.PORT_Pin = PORT_Pin_5 | PORT_Pin_6 | PORT_Pin_7; GPIO_user_ini.PORT_FUNC = PORT_FUNC_ALTER; GPIO_user_ini.PORT_MODE = PORT_MODE_DIGITAL; GPIO_user_ini.PORT_SPEED = PORT_SPEED_SLOW; GPIO_user_ini.PORT_OE = PORT_OE_OUT; PORT_Init(MDR_PORTC, &GPIO_user_ini); SSP_DeInit(MDR_SSP1); SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv1); SSP_InitStructure.SSP_SCR = 0x10; SSP_InitStructure.SSP_CPSDVSR = 12; SSP_InitStructure.SSP_Mode = SSP_ModeMaster; SSP_InitStructure.SSP_WordLength = SSP_WordLength8b; SSP_InitStructure.SSP_SPH = SSP_SPH_1Edge; SSP_InitStructure.SSP_SPO = SSP_SPO_Low; SSP_InitStructure.SSP_FRF = SSP_FRF_SPI_Motorola; SSP_InitStructure.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE; SSP_Init(MDR_SSP1, &SSP_InitStructure); SSP_ITConfig(MDR_SSP1, SSP_IT_RX | SSP_IT_RT | SSP_IT_TX | SSP_IT_ROR, ENABLE); SSP_Cmd(MDR_SSP1, ENABLE); } void ft800cmdWrite(unsigned char ftCommand) //функция для отправки команды по SPI { unsigned char cZero = 0x00; CS_RESET; SSP_SendData(MDR_SSP1, ftCommand); // Отправляем команду SSP_SendData(MDR_SSP1, cZero); // Отправляем первый нулевой байт SSP_SendData(MDR_SSP1, cZero); // Отправляем второй нулевой байт //CS_SET; // тут почему то когда перевожу CS на высокий уровень, ничего не работает, и дисплей не включается } //---------------------------------------* unsigned char ft800memRead8(unsigned long ftAddress) // Здесь происходит чтение идентификатора REG ID для проверки корректного завершения этапа инициализации { unsigned char ftData8 = ZERO; // Place-holder for 8-bits being read unsigned char cTempAddr[3]; // FT800 Memory Address unsigned char cZeroFill = ZERO; // Dummy byte cTempAddr[2] = (char) (ftAddress >> 16) | MEM_READ; // Compose the command and address to send cTempAddr[1] = (char) (ftAddress >> 8); // middle byte cTempAddr[0] = (char) (ftAddress); // low byte CS_RESET; // Set chip select low for (i = 2; i >= 0; i--) { SSP_SendData(MDR_SSP1, cTempAddr[i]); // Send Memory Write plus high address byte } SSP_SendData(MDR_SSP1, cZeroFill); // Send dummy byte for (j = 0; j < sizeof(ftData8); j++) // Start with least significant byte { while (SSP_GetFlagStatus(MDR_SSP1, SSP_FLAG_BSY) == 1){} if (SSP_GetFlagStatus(MDR_SSP1, SSP_FLAG_RNE) == 1) { ftData8 = SSP_ReceiveData(MDR_SSP1); // Receive data byte } } CS_SET; // Set chip select high return ftData8; Return 8-bits } //--------------------------------------------------------- //--------------------------------------------------------- //Тут начинается основная программа. Init_PORT_INT_PD(); //Инициализация портов PD, CS, INT// SPI1_Init(); //Инициализация SPI PD_SET; // формируем delay_ms(20); // импульс PD_RESET; // длительностью delay_ms(20); // 20 мс PD_SET; // в активном режиме на линии PD всегда высокий уровень // Дисплей включается и без формирования этого импульса, главное // что бы в PD оставался высокий уровень ft800cmdWrite(FT800_ACTIVE); // тут шлем команды FT800_ACTIVE = 0х00, delay_ms(5); // FT800_CLKEXT = 0x44 ft800cmdWrite(FT800_CLKEXT); // FT800_CLK48M = 0x62 delay_ms(5); // между ними 5 мс для того чтобы FT800 ft800cmdWrite(FT800_CLK48M); // обрабатывать команды delay_ms(5); if (ft800memRead8(REG_ID) != 0x7C) // чтение идентификатора REG ID для проверки корректного завершения этапа инициализации { while(1) {LED0_ON;} //если не получаем данный идентификатор, то нету смысла продолжать дальше } При включении дисплей загорается белым цветом и больше ничего не происходит.
  15. Здравствуйте. Хочу воспользоваться стандартным, 7-контактным SATA кабелем для питания (около 1 Ампер) и для связи (SPI, duplex) с устройством. 1) Подскажите пожалуйста, почему в документации на кабель написано, что сопротивление проводника 2 Ома ? Почему так много ? Да и формулировка странная - "Conductive ResistOR", а не "resistance". Даташит, вторая страница: http://www.molex.com...85610014_sd.pdf 2) Как бы вы скомбинировали SPI интерфейс с питанием в SATA кабеле ? Тоесть, в кабеле есть две экранированные пары и три провода отдельно. В даташите, на второй странице. Как будет правильно разделить три сигнальных провода SPI по двум экранированным парам ? А может и не надо пихать сигнальные провода именно по экранированным парам...
  16. Добрый день (утро/ночь)! Начну с того, что я полный чайник в электронике, и кроме законов Ома и кирхгофа, мало что понимаю в этой теме. Но есть у меня очень большое желание осилить хоть какой-нибудь микроконтроллер, и выбор мой пал на платку Arduino Uno, счастливым обладателем которой я сейчас являюсь Перехожу к насущной проблеме. Имеется Ардуино и EEPROM пр-ва Microchip с интерфейсом SPI, а также исходный код тьюториала работы с EEPROM, который я слегка переделал под мою конкретную микросхему (тьюториал сначала пишет в EEPROM возрастающую последовательность, а потом считывает её в основном цикле и выводит значения в последовательный порт, изначально код был для Атмеловской микросхемы, отличного от моей объёма). Назовём это устройство (MK + EEPROM) У1. По какой-то причине, читаю я совсем не то, что записал. Вопрос в том, как такую ситуацию отлаживать? Понятно, что отладка заключается в проверке соединений, вдумчивого чтения даташита и ещё более внимательного чтения исходника (который в сообществе, собравшемся вокруг проекта Ардуино принято писать аж на C++!). Но мне хотелось бы также иметь возможность мониторить шину физически. На осциллоскоп я пока не накопил, и хочу сделать простое устройство (У2) на основе того же Atmega328P, который позволил бы мониторить последовательность импульсов фиксированной длинны через аналоговый (или цифровой...) вход, и выводить её в последовательный порт в побайтовом формате (см. прикреплённую картинку). Возможно ли вообще такое устройство? Понятно, что У1 и У2 надо как-то синхронизировать, я пока оставлю этот вопрос открытым. Мой текущий вопрос связан с аналоговой электроникой. При подключении ко входу моего "щупа", на сколько я понимаю, ток текущий в (из) EEPROM (MK У1) уменьшится, а следовательно уменьшатся всякие внутренние напряжения портов В/В (входов микросхемы). EEPROM, на сколько я понимаю, может перестать адекватно реагировать на команды записи, а МК - на команды четения. Может быть нужно будет поставить какой-нибудь транзистор для сохранения величины тока? Как в теории расчитать схему сопряжения У1 и У2 так, чтобы мониторинг шины не вредил работе самой шины? На какие параметры при этом смотреть в даташитах МК и EEPROM. Только просьба не смеяться. Если мне нужно что-то почитать для ликбеза, я с удовольствием это сделаю. Но просьба быть более конкретными и писать по теме. Советы типа "иди в школу" или "учи матчасть" мне не помогут, т.к. для первого я слишком стар, а второе слишком абстрактно и непрактично.
  17. Добрый день! Стоит задача с компьютера задавать время отсчета таймера собранного на ATmega и семисегментном индикаторе в режиме онлайн. То есть организовать связь для обмена данными с микроконтроллером ATmega. Желательно используя USB дабы не искать компьютер с COM-портом. Подскажите, какой из интерфейсов выбрать исходя из стоимости компонентов и сложности самого решения?
  18. Работа с модулем MCP2210 Breakout Module - который является полноценным конвертером USB в SPI прямо из коробки. Микросхема MCP2210 стоит на AliExpress около 2$ Статья на сайте
  19. Самодельный Spi

    Здравствуйте, уважаемые форумчане! Хочу реализовать свой "софтверный" SPI под Atmega8. Вообще, общая цель - общение с синтезатором LMX2306. Уже сломал голову от того,- как правильно отослать 21 битные регистры, используя 8-ми битные типы данных. Поэтому захотелось свой SPI с блекджеком, который может отправлять определенное количество бит переменной с выбором направления (MSB, LSB). Не пойму, как мне задать определенную частоту работы для "такого" SPI? Например, хардварный можно инициализировать на частотах osc/4, osc/16 ит.д. Как мне такое же сделать для софтверного SPI? Пишу в Atmel Studio 7
  20. Ili9341 Gram R/w Через Spi+Dma

    Мучаю всё сабж, уже работает копирование содержимого GRAM буфера. Но осталась трабла: после приёма данных с дисплея не могу производить запись. Обошёл эту проблему переинициализацией пина CS, нарисовал, затем пытаюсь заново прочитать - читаются только 0xFFFFы. Переход в режим записи осуществляется в методе установки колонки и строки, должно быть всё ок. Основная проблема - заставить дисплей переходить с режима чтения на режим записи. Опытным путём выяснилось, что запись становится невозможна сразу после передачи команды на чтение из памяти. Исходники тут: https://github.com/fagcinsk/stm-ILI9341-spi/tree/master/ILI9341_lib graph.c - LCD_readPixels - метод чтения пикселей с экрана; dma.c - методы для чтения из памяти.
  21. Необходимо запустить дисплей Nokia 5110 при помощи ATmega16, SPI сделал программный, пытаюсь инициализировать дисплей вроде все норм (Собирал схему в Proteus), а вывести не получается. Прошу помощи в данном вопросе, кто делал - поделитесь инфой
  22. Товарищи, прошу помощи , несколько недель мучаюсь с организацией совместной работы карты памяти ММС и микроконтроллера pic 16f877. излазил кучу форумов . Задача стоит такая надо разобраться в алгоритме работы с картой памяти (запись, чтение. и тд.), не надо подсовывать алгоритмы с разных сайтов если не знаете что там и где . С библиотекой Petit FatFs не совсем разобрался в файле diskio.c необходимо прописать низкоуровневую работу(пока туда не лез). Предлагаю вашему вниманию часть программы, программа компилируется и записывает только 512 байт (1 блок) , при записи нескольких блоков записывает пробелы . Проверял в Протеусе, схему не собирал. 1) вопрос как организовать запись нескольких блоков да и комарду CMD 23 (только для ММС) Распишите . #include <pic.h> #define _XTAL_FREQ 20e6 extern void SerString (const char *str); extern char SPI (char d); extern char Command (char befF,/*unsigned char AdrH,*/ unsigned char AdrL,char befH ); extern char bhf ; char df=0; void read (); void write ( char x) { if (Command(24, 0, 0xff)!=0) { SerString("Write Error"); } SerString ("writing mmc"); //while (SPI(0xFF)!=0) ; SPI (0xff); SPI (0xff); SPI (0xfe); for (int g =0; g< 512; g++){ SPI ('f'); } SPI (0xff); SPI (0xff); while ((SPI(0xff) | 0b00011111) == 0x05); while (SPI(0xff) != 0xff); //for (char i=0; i<100 ;i++); SerString("writi complit"); } void read (){ char i; if (Command(0x51,512,0xFF) !=0) SerString("Lese_resp_Fehler "); while(SPI(0xFF) != 0xFE); // Ожидание 0xFE – начала каждой передачи данных for(i=0; i < 512; i++) { while(!TXIF); // Проверка, пуст ли регистр TXREG TXREG =SPI(0xFF); // Передача байта данных } SPI(0xFF); // В конце два незначимых байта SPI(0xFF); } Забыл добавить с кодом программы уже экспериментировал много так что он может немножко корявый.
  23. Форумчане, прошу помощи. Задача следующая: наладить связь между контроллером и флеш картой в режиме SPI, при этом когда будет производится запись данных файловая система не является необходимостью. Контроллер Xmega64A3. Флеш карта SDHC 4GB. Для того, чтобы перевести флеш карту в режим инициализации, необходимо подать команду CMD0, приведенную в даташите на стандарт SD. Я отправляю эту команду, ловлю ответ (что характерно он таки есть) R1=0x20, т.е. Address error. И тут собственно вопрос: откуда эта ошибка возникает, может кто-нибудь сталкивался, знает как устранить. Сразу скажу, код не выложил потому, что даже не предполагаю, где может быть ошибка. Частота клока SPI 250кгц. Частота клока контроллера 14,7мгц. P.S. Прошу не сильно пинать, если тему сильно похожую создал или сообщение коряво написал-только осваиваю для себя форумы.
  24. Как рассчитать успеет ли микроконтроллер одновременно работать с I2С, SPI, и при этом управлять несколькими сервоприводами и бесколлекторным двигателем?
  25. Stm32 Spi

    Работаю без SPL и на данный момент с ней работать не хочу (тут, что было бы лучше писать не надо - все бессмысленно). Собрался подключить по SPI другое устройство (ENC28J60), но тут возникла незадача: SPI Работать отказывается. Во время отладки посмотрел состояние регистра SPI1_CR1, и, как оказалось, бит SPE не выставлен, как, впрочем и MSTR. Вот что выдает GDB по этому поводу (SPI1_CR1): x/2tb 0x40013000 0x40013000: 00000010 00000001 младший и старший байты регистра. Код инициализации следующий: void SetSPI (void) { // разрешаем тактирование порта A RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // настраиваем пины 4, 5, 6, 7 как выходы альтернативной функции GPIOA->MODER &= ~(GPIO_MODER_MODER4 | GPIO_MODER_MODER5 | GPIO_MODER_MODER6 | GPIO_MODER_MODER7); GPIOA->MODER |= GPIO_MODER_MODER4_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; // настройка скорости работы GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_1 | GPIO_OSPEEDER_OSPEEDR5_1 | GPIO_OSPEEDER_OSPEEDR6_1 | GPIO_OSPEEDER_OSPEEDR7_1; // настройка альтернативных функций // сначала сбрасываем, затем устанавливаем другие значения // AF0 - для всех регистров gpio - SPI1 GPIOA->AFR[0] = 0; // разрешаем тактирование SPI RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // включаем модуль SPI1. // максимальная скорость передачи - 24МБод // делаем ведущим // полярность - отрицательная. SPI1->CR1 = SPI_CR1_CPOL | SPI_CR1_MSTR | SPI_CR1_SSI; // размер отправляемых и принимаемых данных по SPI равен 8 бит SPI1->CR2 = SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2; // далее включаем SPI SPI1->CR1 |= SPI_CR1_SPE; } Вообще та ли последовательность инициализации, или что-то надо менять. Может где ошибка закралась?