Jump to content
postrel

Мониторить Последовательный Порт (Spi) Без Осциллоскопа

Recommended Posts

Добрый день (утро/ночь)!

Начну с того, что я полный чайник в электронике, и кроме законов Ома и кирхгофа, мало что понимаю в этой теме.

Но есть у меня очень большое желание осилить хоть какой-нибудь микроконтроллер, и выбор мой пал на платку Arduino Uno, счастливым обладателем которой я сейчас являюсь :)

Перехожу к насущной проблеме.

Имеется Ардуино и EEPROM пр-ва Microchip с интерфейсом SPI, а также исходный код тьюториала работы с EEPROM, который я слегка переделал под мою конкретную микросхему (тьюториал сначала пишет в EEPROM возрастающую последовательность, а потом считывает её в основном цикле и выводит значения в последовательный порт, изначально код был для Атмеловской микросхемы, отличного от моей объёма). Назовём это устройство (MK + EEPROM) У1.

По какой-то причине, читаю я совсем не то, что записал.

Вопрос в том, как такую ситуацию отлаживать? Понятно, что отладка заключается в проверке соединений, вдумчивого чтения даташита и ещё более внимательного чтения исходника (который в сообществе, собравшемся вокруг проекта Ардуино принято писать аж на C++!).

Но мне хотелось бы также иметь возможность мониторить шину физически.

На осциллоскоп я пока не накопил, и хочу сделать простое устройство (У2) на основе того же Atmega328P, который позволил бы мониторить последовательность импульсов фиксированной длинны через аналоговый (или цифровой...) вход, и выводить её в последовательный порт в побайтовом формате (см. прикреплённую картинку).

Возможно ли вообще такое устройство?

Понятно, что У1 и У2 надо как-то синхронизировать, я пока оставлю этот вопрос открытым.

Мой текущий вопрос связан с аналоговой электроникой.

При подключении ко входу моего "щупа", на сколько я понимаю, ток текущий в (из) EEPROM (MK У1) уменьшится, а следовательно уменьшатся всякие внутренние напряжения портов В/В (входов микросхемы). EEPROM, на сколько я понимаю, может перестать адекватно реагировать на команды записи, а МК - на команды четения.

Может быть нужно будет поставить какой-нибудь транзистор для сохранения величины тока?

Как в теории расчитать схему сопряжения У1 и У2 так, чтобы мониторинг шины не вредил работе самой шины? На какие параметры при этом смотреть в даташитах МК и EEPROM.

Только просьба не смеяться. Если мне нужно что-то почитать для ликбеза, я с удовольствием это сделаю. Но просьба быть более конкретными и писать по теме. Советы типа "иди в школу" или "учи матчасть" мне не помогут, т.к. для первого я слишком стар, а второе слишком абстрактно и непрактично.

post-201958-0-92798700-1466430624_thumb.jpg

Share this post


Link to post
Share on other sites

В вашем случае я бы приобрел готовый анализатор. Есть не дорогие


На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

mail_robot, для задачи ТС-а, достаточно и не дорогого анализатора, что я ссылку давал и к нему софт с saleae.com

который умеет и захват делать и картинки рисовать как на осциллографе ;)


На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

Вофка, ты вообще видел что по твоей ссылке открывается то?

Edited by mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites

Материалы вебинара: «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)»

Вы можете посмотреть видеозапись вебинара «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)», ознакомиться с ответами на вопросы и презентацией, в которой вы найдете много полезных ссылок, в том числе подробнее раскрывающих ответы на вопросы.

Подробнее

mail_robot, не только видел, но и скачал программу для работы с анализатором. Вот скриншот фрагмента экрана: программа на фоне странички сайта:

post-69138-0-46302100-1466504029_thumb.jpg


На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Хм... его достаточно визуально идентифицировать?
    • Пробовал Тюменский виноград. На экспорт конечно не хватит, но для удовлетворения личных потребностей вполне может хватить. И опять же даже в виноградных странах год-на-год не приходится, этак же и с уральским, и с тюменским виноградом, год - через два/три. Ныне лето было чуть лучше чем по за то, товарного винограда наросло вдвое больше, вызрело аж 4-грозди. Всего с ведра три ,... ведро в чистом соке.... С уважением, Сергей
    • Если не на работу.то для коллекционеров пригодится!
    • @AS7ti6K На фото не вижу проблем переделать сигнальную цепь и добавить фильтры по питанию. А клей или термоклей? Термоклей феном погрел и всё легко вынимается в таких случаях. Вот две минимальные переделки, которые, возможно, помогут: Самое главное, это поставить электролит на 1000мкФ параллельно 595 и в разрыв всунуть дроссель. Второе, при наличии свободного провода, завести GND напрямую с ардуины. (не обязательно с самой платы, главное - как можно ближе к плате)   Уж дроссель можно найти ВЕЗДЕ, любой пойдёт, но желательно с индуктивностью побольше:
    • Пробой мне в полевик, если в Тюмени достаточно винограда для производства вина
    • И самое дорогое может оказаться самым дешёвым в реализации. С уважением, Сергей Одного "магнита сбоку" мало, 3 как минимум, чтобы был полноценный круг магнитного поля. С одним магнитом значительно вырастают трудозатраты по позиционированию магнита относительно линейки герконов. Гораздо проще правильно закрепить 3-и магнита в поплавке,  и пусть он ворочается как хочет, чем "центровать" поплавок по штанге датчика  (чтоб один  магнит всегда был направлен  одним местом к линейке с герконами) по всей длине измеряемого диапазона. С герконовыми поплавковыми уровнемерами - уже не первый год замужем. Испробованы все возможные варианты. Типа, свою  собаку уже съели. В своём колодце поставил бы бесконтактный уровнемер (ультразвуковой). Пусть чуть подороже, но мороки никакой. С уважением, Сергей  
    • а он (снаббер) уже и есть параллельно стоку-истоку по переменному току через конденсатор выпрямителя.

  • Nema 17 с мотор-редуктором 3:1

  • Similar Content

    • By Леонид:3
      Здравствуйте!
      Имеется задача записывать данные на какую либо флешку, для дальнейшего чтения этих данных на ЭВМ. Я решил вести запись на 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
    • By ChaNger16ua
      Здравствуйте, недавно начал заниматься stm32, до этого занимался только Arduino/AVR. Купил себе плату с чипом STM32F103C8T6, и программатор ST-Link v2.
      Сразу же начал искать себе подходящую IDE, остановил свой выбор на CoIDE. И когда начал, проблем с загрузкой, и компиляцией программы не было, управлял всем через регистры, и радостно мигал светодиодом, но когда решил проверить как работает отладка, столкнулся с проблемой. При запуске отладки проект компилировался и загружался, но сама отладка выдавала ошибку: Cannot execute this command without a live selected thread. Перерыл весь интернет, ничего не помогло. 
      Взял уже пример с миганием светодиода из библиотеки GPIO, поменял название функции на int main, поставил return, и дописал строку которая включает SWD. Вот сам код:
      #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" int main(void) { int i; /* Initialize Leds mounted on STM32 board */ GPIO_InitTypeDef GPIO_InitStructure; /* Initialize LED which connected to PC6,9, Enable the Clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure the GPIO_LED pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); while (1) { /* Toggle LEDs which connected to PC6*/ GPIOC->ODR ^= GPIO_Pin_13; /* delay */ for(i=0;i<0x100000;i++); } return 0; } Запускаю, и ничего та же ошибка.
      После решил сам все не делать, а создать проект в STM32CubeMX. Делал по многим примерам(код кидать не буду он стандартный). Правильно настраивал порты, в пинах sys выставил значение Serial Debug, выставил тактирование. Кидаю проект, все правильно выставляю(папки Drivers, Src, Inc), потом в конфигурации во вкладке компилятор, выставляю переменные. Компилирую, выдает такую строку:
      Program Size: text data bss dec hex filename 0 0 0 0 0 NewMain.elf тоесть программы по сути нет, это в настройках линкера во вкладке options стоит галочка на: Use memory layout from memory window.
      Окей знаю что линкер просто не подключает нужные библиотеки и файлы, поэтому программа ничего не весит.
      Снимаю галочку, ставлю Scatter file, который сделала STM32CubeMX, запускаю.
      Дальше выдает ошибку, но не компиляции, вылазит окно Problem Occurred, нажимаю details, там такое:
      An internal error occurred during: "Building". String index out of range: -1 И все, компиляция прервана. НО если очистить проект, и потом сбилдить(либо ребилд), то работает, но заветный светодиод не моргает.
      Дальше касательно отладки, в нее не могу зайти, потому что при отладке проект компилируется, но я его не могу скомпилировать, могу перебилдить, и поэтому отладка тупо не включается, но есть я очищу проект, то отладка просто не работает.
       
      P.S перемычки на плате менял, как угодно, и с одной прошивкой и другой, не работает. Пытался освоить uVision, не пошло, куча проблем с ней, хотя уже и по гайдам делал(по нескольким), и сам все пытался. Но в итоге как не работало, так и не работает.
      Поэтому прошу помощи.
    • By Grampus
      Добрый день!
      ПОМОГИТЕ ПОЖАЛУЙСТА!
      в описании для одного дисплея нашел код для STM на СИ
      там есть строчка которая мне не понятна, точнее смысл ее понятен но нет объявления аргументов функции
      помогите пожалуйста. В общем ситуация такая 
       
      spi_write ( DTA, 0x00 )                                     spi_write ( CMD, 0x01) 
      вот эта функция
      DTA - выполняет установку пина в 1 ,    CMD -  выполняет установку пина в 0 
      0x00 , 0x01, .........0xFF     это либо данные либо команда. 
       и все бы ничего но все это нужно передать по HAL_SPI_Transmit 
      помогите написать эту функцию с описанием аргументов и всех действий.
    • By voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c
    • By Cujo
      Собственно задача соорудить 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нс. В итоге облом.

      Какие есть решения, может кто сталкивался?
       

×
×
  • Create New...