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

Поиск сообщества

Показаны результаты для тегов 'SPI'.

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

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

Тип контента


Форумы

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

Блоги

  • Твори, выдумывай, пробуй.
  • fant's блог
  • Ток покоя
  • Где купить велпатасвир, epclusa, velpanat, velasof, софосбувир в России по лучшей цене.
  • Китайские бренды видеокамер
  • Создание Маленькой Мастерской
  • Блог администрации
  • STEN50's блог
  • Изучение, наладка, исследование
  • MiSol62's блог
  • короткие записки по ходу дела
  • Программирование AVR и PIC блог
  • Стабилизированный выпрямитель тока ТЕС 12-3-НТ
  • Блог getshket
  • ТНПА
  • welder's блог
  • blog cheloveka loshadi
  • OPeX3's блог
  • Подводная робототехника
  • Сабвуфер и акустика.
  • Радиоуправляемая машина
  • Консультация психолога сексолога онлайн, психолог онлайн
  • Nokian блог
  • Оповещения Dermabellix Scam !! Не покупайте это !!!
  • Cheerful Boss' блог
  • Cheerful Boss' блог
  • VLAD1996B's блог
  • "Коллективное увеличение продаж"
  • Dudok's блог
  • "Коллективное увеличение продаж"
  • Goluboglazyi's блог
  • Прибор определяющий электролитический конденсатор на работоспособность.
  • Mosfet@'s блог
  • mazzi's блог
  • Лучшие компьютерные игры 2017
  • Marchenkokerya's блог
  • Заметки начинаущего аудиофила
  • Почти бесполезные проги
  • Светлый блог.
  • дядюшка Филин's блог
  • Дневники нуба
  • satyrn's блог
  • Люк. В погреб.
  • Фильм Дом Солнца
  • Светодиодная лента B-LED 2835-120 W белая негерметичная
  • Само-Реплицируещиеся Производственные Системы
  • Блог от Eknous
  • РВС's блог
  • Den_R's blog
  • РВС's блог
  • Чтото крутое и про криворукость
  • ekadom's блог
  • Проектирование любых чертежей
  • Lisovic's блог
  • Блог уже не юного радиогубителя
  • денди
  • eHouse
  • zaregan's блог
  • Схемотехника УНЧ с низковольтным питанием на примере приёмников фирмы Grundig
  • То, что в руки попало.
  • Блок питания водородного генератора и все что с ним связано
  • slava_va@mail.ru's блог
  • Блог alex123al97
  • slava_va@mail.ru's блог
  • параленое соединение КРЕНок или как сделать стабилизатор напряжения 24-12в
  • Свободная генерация Андрея Мельниченко
  • реобас
  • Модернизации системы впрыска на 555
  • помощь
  • Копии схем и печатных плат устройств попавшие ко мне
  • MBM75's блог
  • Буду
  • lagutai's блог
  • Мои проекты.
  • lagutai's блог
  • Трудовик
  • vOVK@'s блог
  • токарь-радиолюбитель
  • azlk3000's блог
  • Коллизия сингулярности
  • SmallAlex's блог
  • Вопрос по Цифровому усилителю мощности звука 2x12 Вт YDA138-E
  • bebulo's блог
  • Простейший макет станка термо-вакуумной формовки
  • Блог им. pryanic
  • peratronika
  • Zer's блог
  • MEDBEDb's
  • Гнездо кукушки
  • hiMiческий блог
  • luna_kamen's блог
  • Изучаем USI на основе сверхэкономичного прототипа
  • Алекс-Юстасу
  • SUBWOOFER.RU
  • kot sansher's блог
  • Поделки стареющего пионера
  • доброжелатель2's блог
  • Grig96. Полезные заметки.
  • Attiny 0-ой и 1-ой серии (Attiny817, 1614 и прочие)
  • pavlo's блог
  • MSP430FR
  • viper2's блог
  • Моя Электро Чинильня
  • Selyk's блог
  • VoltServis.ru
  • kpush's блог
  • OM3 на новых платах.
  • конни's блог
  • Электронный экстазёр "MASHKA".
  • ptimai's блог
  • noc functionalities
  • Sun kapitane's blog
  • ODEON AV-500
  • Sun kapitane's blog
  • Логика на транзисторах,диодах, счетние тригери на транзисторах
  • AleksandrBulchuck's блог
  • Качественные окна от производителя
  • KRALEX's блог
  • Javaman's projects
  • SeVeR36's блог
  • 3232
  • Пять копеек.
  • Az@t's блог
  • Индукционный нагрев
  • Схемы разных устройств
  • Кардшаринг SAT ТВ блог
  • PENTAGRID SAYS
  • Ещо раз о "Кощее 5И"
  • Игровые автоматы на официальном сайте
  • коллекционер
  • дямон's блог
  • Ламповый усилитель и акустика для озвучки семейных мероприятий
  • дямон's блог
  • tiosmutoutrup1971
  • Светомузыкальная установка для новачков
  • Лучшие игры для ПК скачать бесплатно
  • sqait's блог
  • Блокнотик
  • Gubernator's блог
  • Записки электрика
  • Полстакана
  • Vrednyuka
  • Интегральные микросхемы
  • grigorik's блог
  • Интегральные микросхемы
  • VMWare удобство и безопастность
  • Профсоюз обычных пользователей
  • rtfcnf's блог
  • Гидроэнергетика в России: отечественные гидроэлектростанции, типы и характеристики
  • VMWare удобство и безопастность
  • Лайфхаки от Кати
  • Kinh chong anh sang xanh gia re
  • ukabumaga's блог
  • АО "Диполь Технологии"
  • artos5's блог
  • блог
  • Kraftwerk's блог
  • 1
  • Kraftwerk's блог
  • Как выбрать точечный светильник?
  • мастерская ky3ne4ik'а
  • Работа с микроконтроллером Atmega8
  • Aronsky
  • Игорь Камский
  • Диммеры
  • 5В = 1,5+3
  • vitiv' блог
  • Ремонт цифровой панели прибора тойоты марк 100. Замена транзистора 36 ( SOT- 23 )PNP
  • Все СРО России
  • 300writers
  • Металлоискатель Tracker FM-1D3
  • Былое
  • Создание монстра "Blaster 8920"
  • 2Smart Cloud Blog
  • EmmGold's блог
  • 2Smart Cloud Blog
  • ivan15961596's блог
  • Кумир у-001
  • ivan15961596's блог
  • My blog
  • Интернет радио в машину
  • SamON
  • Помогите люди добрые
  • AI
  • Помогите подключить маяк 231 стерео.
  • Гаусс-пушки
  • Название
  • 7400's блог
  • Как я собирал свой первый импульсный источник питания
  • Віталік Приходько_130349's блог
  • Lithium ECAD - российская САПР печатных плат
  • Евгений Малюта's блог
  • ПИшу свои мысли
  • werekpro
  • Venera Electronica
  • afurgon's блог
  • Выбросьте это в парашу!
  • odaplus' блог
  • Zvik's блог
  • Smart overload protection power amplifier «Zita (Z) ThermalTrak™»
  • радиоэлектоника
  • BoBka777's блог
  • МиУЗР - Модернизация и Усовершенствование Звуковой Радиотехники .
  • aleksey9900's блог
  • Лабораторная блок питания
  • Нашел статью о пайке проводов к светодиодов
  • Китайский городовой
  • Костик0's блог
  • УФ лампа для маникюра SK-818
  • 8 Contrasts Between Web Servers and Application Servers
  • Конденсатор
  • Новости, обзоры и другая полезная информация от ИМ "Радиодар"
  • Цветомузыка
  • OPeX3's блог
  • Sem2012's блог
  • это не хлам – это часть моей жизни
  • Контроллер на базе ПК (OS Win LTSC)
  • OdiS' блог
  • Хитрости строителя
  • aleksfil's блог
  • Color Preamp - предусилитель на лампах 12AU7
  • Проблема с зарядкой литиевого аккумулятора для шуруповерта 21 вольт
  • EmmGold's блог; AVR
  • Микроэлектроника
  • З
  • CH32V
  • Блог Плотникова Ильи
  • Бесплатные радиодетали с Алиэкспресс
  • Повышение качества и снижение временных затрат при испытаниях электронных компонентов с помощью отечественного испытательного оборудования
  • Источники питания MEAN WELL
  • Жизнь и рыбалка
  • yureika's блог
  • Глушитель спутникогого интернета
  • Всякая всячина
  • Для начинающих
  • Ignite your senses with the grace and allure of female escorts near Laguna Niguel
  • Fumitox's блог
  • Наш-RXT6 топ-10 на январь 2023: Лучшие сайты онлайн казино в России
  • Лицензионные казино онлайн в 2024 году на реальные деньги
  • Самоделки блог
  • Домашняя автоматика
  • Интересное и полезное
  • Ремонт Амфитон 35у-101с
  • ульян's блог
  • Свет в грузовой газели
  • Блок питания 0-12В для начинающих
  • Dimko's блог
  • Иван Самец's блог
  • SolomonVR's блог
  • gendzz's блог
  • fleh138's блог
  • Электроника forever!
  • aleksejhozhenets' блог
  • aleksejhozhenets' блог
  • diserver блог
  • aleksey290476 блог
  • ВАРГ's блог
  • Люстра Чижевского
  • wanes101's блог
  • voldemar2009's блог
  • Jana's блог
  • Jana's блог
  • Рена Искужин's блог
  • abduraxman7's блог
  • Kuzumba's блог
  • Самопальник
  • заработок через интернет на запчасти!!!
  • electric.kiev's блог
  • lolo's блог
  • leravalera's блог
  • ideomatic's блог
  • приглашаем на работу инженера-радиоэлектронщика
  • FREEMAN_77's блог
  • Блог автоэлектрика
  • Блог начинающего электронщика
  • Dersu's блог
  • Электроэнергия и её экономия!
  • Электроэнергия и её экономия!
  • Семён Ковалёв's блог
  • piligrim-666's блог
  • помогите с партотивной калонкой
  • помогите с партотивной калонкой
  • Музыка в стене.
  • m-a-r-i-k-a's блог
  • cosmos44's блог
  • oyama14's блог
  • блог Виталика!
  • ciornii's блог
  • Великий и Ужастный блог
  • Denis__Ricov's блог
  • Universal12's блог
  • Sprut's блог
  • Alexeyslav's блог
  • cosmosemo's блог
  • Заметки радиолюбителя
  • Falconist. Мемуары
  • Блог MillyVolt
  • усилитель импульсов
  • Panasonic sa-ak 18
  • Простое радиоуправление из того, что было.
  • 35house
  • Блог Радиочайника
  • Блохи iiiytnik'a
  • Хороший сервис- Бяка
  • Аудиолаборатория "Философия Звука"
  • ОколоCADовое
  • Блог KVLADS
  • Короп блог
  • Автоматизация котла Protherm MTV
  • Бложиг Касянича
  • Обо всём
  • Эксперимент
  • No electronics
  • ПРИРОДА СВЕТА и ЕГО ВОЗМОЖНОСТИ
  • Генератор на xr2206
  • HTPOWLASER
  • Когда-то были очень популярны у радиолюбителей
  • AVR - микроконтроллеры
  • Микроконтроллер
  • Самодельный автосимулятор
  • Интернет-магазин керамической плитки «Боярская Плитка»
  • Разработка электронных метрических мишеней IPSC для мягкой пневматики (страйкбол)
  • ,

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Skype


ICQ


Интересы


Город


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


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

  1. Здравствуйте поверхностный поиск в Яндексе не дал результатов решил обратится к вам суть в следующем: к мк с логикой 5в подключена карта памяти по spi с логикой 3.3в через буферный элемент здесь все в порядке поскольку сигнал от карты памяти 3.3в из за длинны шнура он теряется и становится ниже уровня лог 1 контроллера 5в вопрос как простым методом усилить его до 5 вольт чтоб он не терялся предполагаю биполярным транзистором но по какой схеме? у меня есть такой он подойдет? http://uamper.com/products/datasheet/2N2222.pdf благодарю.
  2. Здравствуйте, хочу впаять АУКС в магнитолу CD. Кассетные переделываются легко(замыкаются нужные концевики чтобы магнитофон думал что работает кассета, а на предусилитель кидаем линии aux, и специальную ножку мк подтягиваем к лог 1 или 0). А вот с мафоном CD все сложно, линии аукс включаются по цифровому протоколу, и с CD сигнал передается по SPI, что тоже вызывает сложность в переделке. Было решено обойти сам предусилитель магнитолы, а именно с помощью реле переключить линии основного усилителя на заказанный модуль USB-Bluetooth-MP3 из Китая. Также была разведена и изготовлена печатная плата с универсальными входами и выходами и реле. Управление платой осуществляю с помощью родной кнопки достать диск и при ее нажатии переключается управления родного энкодера. Оставалась сложность с регулировкой звука, решил попробовать цифровой потенциометр, и просто им подтягивать сигнал к земле(не знаю на сколько это правильно). Все алгоритмы реализовал, треки переключает, в память сохраняет. Но вот уже 2 день сижу и пытаюсь крутить цифровой потенциометр AD5263. Посмотрите пожалуйста, что я не так делаю? Питание логики у него разрешено 3V3, далее везде 5V. Подтянул res, shdn к +5V. Отправка по SPI 10bit, старших 2 адрес. Только не понятно нужно ли дергать ножку CS после каждых 10bit, или же можно отправить 4 по 10bit и потом дернуть CS чтобы данные потенциометре внеслись в регистр (стр.28)? Схема подключения: https://cloud.mail.ru/public/BQ7p/biynVUh2V Даташит AD5263: https://cloud.mail.ru/public/ihyh/sJzPohn2f Инициализировал SPI uint16_t spi_data; void Init_SPI(void){ //SPI1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); //подключение портов //GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_0);//NSS GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);//SCK GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);//MISO GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);//MOSI CLEAR_BIT(SPI1->CR1, SPI_CR1_BIDIMODE); //0: 2-line unidirectional data mode selected SET_BIT(SPI1->CR1, SPI_CR1_BIDIOE);//1: Output enabled (transmit-only mode) CLEAR_BIT(SPI1->CR1, SPI_CR1_CRCEN | SPI_CR1_CRCNEXT | SPI_CR1_CRCNEXT | SPI_CR1_CRCL);//0: CRC calculation disabled | 0: Next transmit value is from Tx buffer | 0: 8-bit CRC length CLEAR_BIT(SPI1->CR1, SPI_CR1_RXONLY);//0: Full-duplex (Transmit and receive) SET_BIT(SPI1->CR1, SPI_CR1_SSM);//1: Software slave management enabled SET_BIT(SPI1->CR1, SPI_CR1_SSI);////SS в высоком состоянии CLEAR_BIT(SPI1->CR1, SPI_CR1_LSBFIRST);//0: data is transmitted/received with the MSB first // Первым отправляется старший бит MODIFY_REG(SPI1->CR1, SPI_CR1_BR , SPI_CR1_BR_2 | SPI_CR1_BR_0);//011: fPCLK/16 SET_BIT(SPI1->CR1, SPI_CR1_MSTR);//1: Master configuration CLEAR_BIT(SPI1->CR1, SPI_CR1_CPOL);//0: CK to 0 when idle **** 1: CK to 1 when idle CLEAR_BIT(SPI1->CR1, SPI_CR1_CPHA);//0: The first clock transition is the first data capture edge ***** 1: The second clock transition is the first data capture ed SET_BIT(SPI1->CR2, SPI_CR2_TXDMAEN);//1: Tx buffer DMA enabled CLEAR_BIT(SPI1->CR2, SPI_CR2_RXDMAEN);//0: Rx buffer DMA disabled CLEAR_BIT(SPI1->CR2, SPI_CR2_SSOE);//0: SS output is disabled in master mode and the SPI interface can work in multimaster configuration CLEAR_BIT(SPI1->CR2, SPI_CR2_NSSP);//0: No NSS pulse CLEAR_BIT(SPI1->CR2, SPI_CR2_FRF);//0: SPI Motorola mode **** 1 SPI TI mode CLEAR_BIT(SPI1->CR2, SPI_CR2_ERRIE | SPI_CR2_RXNEIE | SPI_CR2_TXEIE); //0: Error interrupt is masked | 0: RXNE interrupt masked | 0: TXE interrupt masked MODIFY_REG(SPI1->CR2, SPI_CR2_DS, SPI_CR2_DS_3 | SPI_CR2_DS_0);//1001: 10-bit CLEAR_BIT(SPI1->CR2, SPI_CR2_FRXTH | SPI_CR2_LDMARX | SPI_CR2_LDMATX);//Last DMA transfer for reception/transmission SET_BIT(SPI1->CR1, SPI_CR1_SPE);//SPI enable// 1: Peripheral enabled } void start_SPI(uint8_t num){ //количество слов DMA_Cmd(DMA1_Channel3, DISABLE);//выкл для установки CNDTR DMA1_Channel3->CNDTR = num; SPI1_CS_ON(); DMA_Cmd(DMA1_Channel3, ENABLE); } void set_SPI_Tx(uint8_t adr, uint16_t Data) { SPI1_TX_buff[adr] = Data; } DMA uint16_t SPI1_TX_buff[4]; void SPI_DMA_Init(void){ //TX DMA1_Channel3->CPAR = (uint32_t)(&SPI1->DR); DMA1_Channel3->CMAR = (uint32_t)(SPI1_TX_buff); DMA1_Channel3->CNDTR = 0; CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_MEM2MEM); CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_PL); //Channel priority level 00:low MODIFY_REG(DMA1_Channel3->CCR, DMA_CCR_MSIZE, DMA_CCR_MSIZE_0);//01: 16-bits MODIFY_REG(DMA1_Channel3->CCR, DMA_CCR_PSIZE, DMA_CCR_PSIZE_0);//01: 16-bits SET_BIT(DMA1_Channel3->CCR, DMA_CCR_MINC);//1: Memory increment mode enabled CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_PINC);//0: Peripheral increment mode disabled CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_CIRC);//0: Circular mode disabled SET_BIT(DMA1_Channel3->CCR, DMA_CCR_DIR);//1: Read from memory CLEAR_BIT(DMA1_Channel3->CCR, DMA_CCR_TCIE | DMA_CCR_HTIE | DMA_CCR_TCIE);//Transfer error interrupt disable | Half transfer interrupt disable | Transfer complete interrupt disable SET_BIT(DMA1_Channel3->CCR, DMA_CCR_EN); } В таймере собираю и отправляю в потенциометр, также выключаю CS if(vol_level.send_flag_for_spi){//флаг отправки по SPI если выставлен, отправляем в потенциометр vol_level.send_flag_for_spi = OFF; set_SPI_Tx(0, vol_level.pot_1); set_SPI_Tx(1, (0x100 + vol_level.pot_2)); set_SPI_Tx(2, (0x200 + vol_level.pot_3)); set_SPI_Tx(3, (0x300 + vol_level.pot_4)); start_SPI(4); }else SPI1_CS_OFF();
  3. Я хочу построить простой шлюз с arduino+nrf24l01+enc28j60, nrf24l01 принимает сигнал и enc28j60 передает его в LAN, но проблема в том, что и nrf24l01 и enc28j60 используют протокол SPI для взаимодействия с arduino, если я хочу использовать собственный lib разработки arduino, я могу выбрать только один из nrf24l01 и enc28j60, потому что они имеют общее определение (pins_arduino.h). static const uint8_t SS = 10; static const uint8_t MOSI = 11; static const uint8_t MISO = 12; static const uint8_t SCK = 13 Итак, решение состоит в том, чтобы выбрать nrf24l01 вместо использования lib development, которая поставляется с arduino, но использовать другой IO порт, который я разработал сам, это правильно?
  4. Здравствуйте! Прошу помощи ! Столкнулся со следующей проблемой пытаюсь подключить к контроллеру по spi память FRAM FM25CL64 ,компилятор keil , пытаюсь записать одно число и его же считать, а осциллографом вижу, что считывается не то, что записывал. Пытался в разные ячейки памяти разные числа - считываются разные числа, но не те. Пишу 0x2F считывается 0x1С, пишу 0xFF считывается 0xFE, пишу 0x99 считывается 0x20 - ерунда какая то. Куски кода привел ниже: int main(void) { SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000);//1ms LEDs_ini(); Button_ini(); SPI3_FRAM_ini(); delay_ms(50); //проверим FRAM начало запись 1 байта CS_FRAM_ON();// while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x06);//Set Write Enable Latch 6 while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); delay_us(3); //на самом деле задержка выходит около 500нс CS_FRAM_ON(); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x02);// Write while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x2F);// данные while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); delay_us(3);//на самом деле задержка выходит около 500нс //проверим FRAM конец запись 1 байта //проверим FRAM начало чтение 1 байта CS_FRAM_ON();// while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x03);// Read while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// пишем 0 для считывания while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); //проверим FRAM конец чтение 1 байта //LED1_OFF; while(1) { настройки spi: SPI_Init_user3.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_Init_user3.SPI_Mode = SPI_Mode_Master; SPI_Init_user3.SPI_DataSize = SPI_DataSize_8b; SPI_Init_user3.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low SPI_Init_user3.SPI_CPHA = SPI_CPHA_2Edge; SPI_Init_user3.SPI_NSS = SPI_NSS_Soft; SPI_Init_user3.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//4 SPI_Init_user3.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init_user3.SPI_CRCPolynomial = 7; SPI_Init(SPI3, &SPI_Init_user3); контакты вроде все пересмотрел, думал провода может длинноваты, клок spi настраивал на разную частоту уменьшал до 1МГц - не влияет, пробовал делать паузу между командой WREN и командой записи 15мс, а записью и считыванием 20мс, всё то же самое не помогло.. приложил осциллограммы: Осциллограмма всех посылок WREN, WITE, READ (тактовый сигнал ch1 и miso FRAM ch2) (синий луч отношения к делу не имеет) Осциллограмма команды WREN (тактовый сигнал ch1 и miso FRAM ch2)(синий луч отношения к делу не имеет) Осциллограмма команды WITE (тактовый сигнал ch1 и miso FRAM ch2) Осциллограмма считанного значения записывал 0x2F, считал 0x1C (тактовый сигнал ch1 и mosi FRAM ch2)
  5. <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) { } }
  6. Леонид:3

    SD cards проблемы

    Здравствуйте! Имеется задача записывать данные на какую либо флешку, для дальнейшего чтения этих данных на ЭВМ. Я решил вести запись на SD карточку через SPI(SDIO нет в моём камне), использую STM32f103c8. Пишу посекторно, без файловой системы(для проверки драйвера) Однако, столкнулся с проблемами 1 - (sandisk 2 gb) на первой карточке время записи не одинаковое, от 5 до 65 миллисекунд, причем прослеживается хорошая такая периодичность, каждый 8й сектор пишется 65 миллисекунд, остальные по 5 мс. И черт бы с ним, но мне нужно писать на карту по 500 байт с частотой 100 гц. И задержка все портит. Так же спустя какое то время(секунды) непрерывной записи карточка отключается и её нужно снова инициализировать. 2 - (Kingston 8gb)на второй карте, карта так же отключается спустя некоторое время(десятки секунд) непрерывной записи, и её снова нужно инициализировать. 3 - (elite pri 4gb)на этой карте время записи само по себе большое(20 мс), и так же отключается при непрерывной записи. А так же есть карточка на 16 гб, которую не могу инициализировать. Может быть кто-нибудь подскажет куда капать. Имею предположение что кривой драйвер, но найти косяки не хватает знаний и опыта.... Прикрепляю используемый драйвер. stm32_f10x_SD_SPI.c stm32_f10x_SD_SPI.h
  7. Cujo

    Realtime SSI slave 18bit+ STM3L4

    Собственно задача соорудить SSI slave Transmit only с асинхронным обновлением в реальном времени. Контроллер сейчас STM32L433CC. Дано один вход SCLK до 2 МГц, один выход SOUT(он жеMISO). Формат посылки 18, 20,22 бит. Обновление через ~15мкс после последнего такта SCLK, либо каждые 7,5 мкс. Стандартный интерфейс для быстрых датчиков. Как делал 1: Без DMA и прерываний, по прерываниям от TIM_ETR на SCLK. Режим без NSS, с NSS по первому SCLK и сбросом. Проблема нельзя узнать, записались ли данные в SPI->DR, соответственно первые байты могли быть не обновлены, а следующие обновлялись. 2: DMA с NSS по таймеру. Проблема: DMA не обновляет SPI в реальном времени, а только после отправки прошлой посылки, а нужно обновлять каждые 7,5 мкс вне зависимости есть ли запросы. Если пробовать сбрасывать SPI и обновлять DMA, случаются смещения на 1 такт, а потому как реакция ядра на запрос ~ 150-200 нс, + обновление ~ 150-200нс. В итоге облом. Какие есть решения, может кто сталкивался?
  8. Grampus

    Передача по SPI

    Добрый день! ПОМОГИТЕ ПОЖАЛУЙСТА! в описании для одного дисплея нашел код для STM на СИ там есть строчка которая мне не понятна, точнее смысл ее понятен но нет объявления аргументов функции помогите пожалуйста. В общем ситуация такая spi_write ( DTA, 0x00 ) spi_write ( CMD, 0x01) вот эта функция DTA - выполняет установку пина в 1 , CMD - выполняет установку пина в 0 0x00 , 0x01, .........0xFF это либо данные либо команда. и все бы ничего но все это нужно передать по HAL_SPI_Transmit помогите написать эту функцию с описанием аргументов и всех действий.
  9. voltex

    Чтение с eeprom по spi

    Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256. Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил. main.c
  10. Доброго времени суток! Вкратце: нужно после того, как я записал байт данных в SPI1->DR, отменить передачу этого байта и вместо него отправить 0х00 Подробно: Смысл вот в чём: некий контроллер, с которым я пытаюсь наладить общение по SPI, запрашивает произвольный участок массива байт и считывает их сплошным потоком. Ну примерно как считывается микросхема EEPROM: задаёшь начальный адрес, а потом просто шлёшь сплошные 0xFF, а она сама инкрементирует адрес и прямо непрерывным потоком байт выдаёт содержимое памяти. Только тут в роли этой микросхемы мой stm32f030 и мне нужно следующий байт отправлять в SPI1->DR сразу после отправки предыдущего. Но когда поток заканчивается (а он каждый раз разной длины и длина эта заранее неизвестна), один байт остаётся не переданным и отправится первым при следующем запросе. А мне нужно, чтобы первым байтом всегда отправлялся 0х00 Пином (ну то есть битом) NSS управляю программно, его выставление в единичку и снова в ноль, очевидно, не помогает вообще никак. Пока решил проблему так: деинициализирую модуль SPI и выключаю его тактирование, затем включаю тактирование и снова инициализирую. Работает, скорости хватает. Но должно же быть менее костыльное решение?) Может кто сталкивался с такой проблемой? Курение даташита, reference manual и результатов поиска в гугле, не особо помогло.
  11. Тема: Реверс-инжиниринг: необходимо декодировать протокол связи контроллера пром. насоса и дисплея Общая цель: сделать управление кондиционером, вести мониторинг его работы. Время на работу: около 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. Наилучший вариант, если кто-то откликнется из Киева, чтобы можно было вместе встретиться и поработать. Но если в Киеве никого нет, то куплю недорогой логический анализатор уровней и будем общаться удаленно. Готов к любому варианту.
  12. Max Kondor

    Проблема с SPI

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

    STM32F10x SPI

    Здраствуйте, пожалуста подскажите за SPI. Как там дрыгать ногой софтварно? У меня на выходе NSS у меня 1.4 вольта когда SPI выкл а должно быть 3.3 вроди.
  14. Помогите, разобраться. Пытаюсь считать данные с модуля на 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. Может кто нибудь даст пример? Прошу сильно не пинать.
  15. Добрый день! Столкнулся с такой проблемой, пытаюсь взаимодействовать с чипом 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 вольтам. В общем, могли ли мои неразумные операции вывести его из строя??? Еще в даташите указано, что неиспользуемые каналы надо подключить либо к питанию, либо к земле. Это может влиять на то, что я сейчас получаю?
  16. Всем привет. Существуют ли готовые модули для измерения мгновенных значений тока и напряжения (ток до 100 А, напряжение до 250 вольт)? Т.е. измерять нужно с частотой 1000-5000 герц, точность 14-16 бит, связь по SPI лучше всего. Вообще нужно хотя-бы 4 канала по току и 4 по напряжению. Но лучше, чтобы можно было на одну шину ставить несколько модулей, расширяя количество каналов. Обрабатывать данные собираюсь на STM32F104 (хотя с ним никогда не работал) или Arduino Due, но это не важно. Понятно что можно взять АЦП и шунт или делитель напряжения, но хотелось бы готовый модуль и уже с оптической развязкой. Подскажите если кто сталкивался.
  17. Использую библиотеку HAL Вроде поднял SPI (как проверить не знаю) . Пытаюсь переписать существующию библиотеку для ардуино под стм но все что выдает SPI либо 0x00 либо 0xFF =( иногда пробегают цифры но это скорее случайность. Может кто объяснить в чем может быть причина? SS pin управляется железом. если есть время сегодня то - скайп Discord teamspeak Radmin - буду признателен за помощь - достаточно результата в правильном считывание регистров или ткнуть носом что идет не так. Для начала делаю без прирываний и DMA Использую мк - stm32f103c8t6 модуль : rc-522 - данные отправляю через USB в ПК KEil 5 + cubeMX последней версии. Код процедур прилагаю.
  18. Пытаюсь разобраться с ili9341 брал тут на пин LED и VCC подаю 3.3В с 2х ног ПЛИС Попытка получить ответ по команде D3h ... в ответ молчание (((( Кто работал с этим дисплеем, что делаю не так ?
  19. Пытаюсь реализовать SPI, вот только никак не могу скомпилить. ошибка странная.... Строчка кода. Синтаксис на неё не ругается... Что не так????
  20. Добрый день, столкнулся с проблемой на микроконтроллере 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.
  21. Написал слой абстракции для мастера SPI, как программного так и аппаратного. Кому не лень посмотрите что можно исправить или доработать. Единственное, что мне не нравится, что avr-gcc ругается warning'ом на неинициализированную переменную. Я-то знаю, что после 9 сдвигов в ней не останется ни одного родного бита, но как это объяснить компилятору? char SPI_send(char data){ char res,i=7; spi.zip
  22. Здравствуйте, Столкнулся с непонятной для меня проблемой запуска графического контроллера 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;} //если не получаем данный идентификатор, то нету смысла продолжать дальше } При включении дисплей загорается белым цветом и больше ничего не происходит.
  23. Здравствуйте. Хочу воспользоваться стандартным, 7-контактным SATA кабелем для питания (около 1 Ампер) и для связи (SPI, duplex) с устройством. 1) Подскажите пожалуйста, почему в документации на кабель написано, что сопротивление проводника 2 Ома ? Почему так много ? Да и формулировка странная - "Conductive ResistOR", а не "resistance". Даташит, вторая страница: http://www.molex.com...85610014_sd.pdf 2) Как бы вы скомбинировали SPI интерфейс с питанием в SATA кабеле ? Тоесть, в кабеле есть две экранированные пары и три провода отдельно. В даташите, на второй странице. Как будет правильно разделить три сигнальных провода SPI по двум экранированным парам ? А может и не надо пихать сигнальные провода именно по экранированным парам...
  24. Добрый день (утро/ночь)! Начну с того, что я полный чайник в электронике, и кроме законов Ома и кирхгофа, мало что понимаю в этой теме. Но есть у меня очень большое желание осилить хоть какой-нибудь микроконтроллер, и выбор мой пал на платку Arduino Uno, счастливым обладателем которой я сейчас являюсь Перехожу к насущной проблеме. Имеется Ардуино и EEPROM пр-ва Microchip с интерфейсом SPI, а также исходный код тьюториала работы с EEPROM, который я слегка переделал под мою конкретную микросхему (тьюториал сначала пишет в EEPROM возрастающую последовательность, а потом считывает её в основном цикле и выводит значения в последовательный порт, изначально код был для Атмеловской микросхемы, отличного от моей объёма). Назовём это устройство (MK + EEPROM) У1. По какой-то причине, читаю я совсем не то, что записал. Вопрос в том, как такую ситуацию отлаживать? Понятно, что отладка заключается в проверке соединений, вдумчивого чтения даташита и ещё более внимательного чтения исходника (который в сообществе, собравшемся вокруг проекта Ардуино принято писать аж на C++!). Но мне хотелось бы также иметь возможность мониторить шину физически. На осциллоскоп я пока не накопил, и хочу сделать простое устройство (У2) на основе того же Atmega328P, который позволил бы мониторить последовательность импульсов фиксированной длинны через аналоговый (или цифровой...) вход, и выводить её в последовательный порт в побайтовом формате (см. прикреплённую картинку). Возможно ли вообще такое устройство? Понятно, что У1 и У2 надо как-то синхронизировать, я пока оставлю этот вопрос открытым. Мой текущий вопрос связан с аналоговой электроникой. При подключении ко входу моего "щупа", на сколько я понимаю, ток текущий в (из) EEPROM (MK У1) уменьшится, а следовательно уменьшатся всякие внутренние напряжения портов В/В (входов микросхемы). EEPROM, на сколько я понимаю, может перестать адекватно реагировать на команды записи, а МК - на команды четения. Может быть нужно будет поставить какой-нибудь транзистор для сохранения величины тока? Как в теории расчитать схему сопряжения У1 и У2 так, чтобы мониторинг шины не вредил работе самой шины? На какие параметры при этом смотреть в даташитах МК и EEPROM. Только просьба не смеяться. Если мне нужно что-то почитать для ликбеза, я с удовольствием это сделаю. Но просьба быть более конкретными и писать по теме. Советы типа "иди в школу" или "учи матчасть" мне не помогут, т.к. для первого я слишком стар, а второе слишком абстрактно и непрактично.
  25. Добрый день! Стоит задача с компьютера задавать время отсчета таймера собранного на ATmega и семисегментном индикаторе в режиме онлайн. То есть организовать связь для обмена данными с микроконтроллером ATmega. Желательно используя USB дабы не искать компьютер с COM-портом. Подскажите, какой из интерфейсов выбрать исходя из стоимости компонентов и сложности самого решения?
×
×
  • Создать...