Бесплатный логический анализатор

астер
Вт 11 апреля 2017 г. 22:10
привет!

Попытка открыть для себя Maple Mini для другого проекта, который я подумал, чтобы перенести этот старый проект AVR в STM32:
Не за исключением того, что слишком много, я написал это, когда начал с MCU, это всего лишь чтение петли порта 328, а затем хороший интерфейс обработки

https: // www.хакерс.IO/Vincenzo-G/DIY- ... Zer-F61EE5

Итак, возвращаясь к STM32, как я мог сбросить таймер, используемый micros ()?

Это код для Maple Mini: #define samples 200 #define boardLed 33 uint8_t initial, state, old_state; uint8_t pinChanged[samples]; uint32_t timer[samples]; uint16_t event = 0; void setup() { Serial.begin(115200); pinMode (boardLed, OUTPUT); digitalWrite(boardLed, LOW); for (byte pin = 28; pin <= 31; pin++) { pinMode(pin, INPUT_PULLUP); } startLA(); } void startLA() { delay(1000); //reset_timer1(); //reset the timer? how? event = 0; digitalWrite(boardLed, HIGH); initial = GPIOB->regs->IDR >> 12; state = initial; } void loop() { old_state = state; state = GPIOB->regs->IDR >> 12; if (old_state != state) { timer[event] = micros(); pinChanged[event] = state ^ old_state; event++; if (event == samples) { sendData(); while (Serial.read() != 'G') ; //wait for the "go" startLA(); } } } void sendData() { digitalWrite(boardLed, LOW); //initial data Serial.println("S"); Serial.print(initial); Serial.print(":"); Serial.println(samples); //data for (int i = 0; i < samples; i++) { Serial.print(pinChanged[i]); Serial.print(":"); Serial.println(timer[i]); } }

Mrburnette
Вт 11 апреля 2017 г. 11:02
Я бы посоветовал вам ознакомиться с аппаратным обеспечением таймера...
http: // docs.Leaflabs.com/static.Leaflab ... ИМЕРС.HTML

Удачи,

Луча

астер
Вт 11 апреля 2017 г., 11:41
Отличный простой перепрошат () должен работать
Все библиотеки из команды Maple уже включены или я должен включить его?

AG123
Ср 12 апреля 2017 г. 2:03
казалось, что таймер () и Hardwaretimer ()
http: // docs.Leaflabs.com/static.Leaflab ... Дваретимер
являются частью основной библиотеки Libmaple, это, вероятно, означает, что нет необходимости включать дополнительную библиотеку

Казалось бы, может помочь прерывание, пример на странице Leaflabs's Hardwaretimer () фактически показывает пример прерывания

Но я думаю, что вы можете даже сделать прерывания напрямую
http: // docs.Leaflabs.com/static.Leaflab ... Рупты.HTML
http: // docs.Leaflabs.com/static.Leaflab ... Винтеррота

Особенно, если вы отбираете выборки по источнику часов, ATCTINGENTRUTP () имеет приятные триггеры Params, E.глин. Чтобы вызвать восходящее преимущество, падение или переходы

С STM32F1, казалось бы, он может даже контролировать скорость SPI (я.эн. MHZ), может быть интересно проверить это

Ddrown
Ср 12 апреля 2017 г. 20:36
AG123 написал:С STM32F1, казалось бы, он может даже контролировать скорость SPI (я.эн. MHZ), может быть интересно проверить это

астер
Сб 15 апреля 2017 г. 16:50
AG123 написал:казалось, что таймер () и Hardwaretimer ()
http: // docs.Leaflabs.com/static.Leaflab ... Дваретимер
являются частью основной библиотеки Libmaple, это, вероятно, означает, что нет необходимости включать дополнительную библиотеку

Казалось бы, может помочь прерывание, пример на странице Leaflabs's Hardwaretimer () фактически показывает пример прерывания

Но я думаю, что вы можете даже сделать прерывания напрямую
http: // docs.Leaflabs.com/static.Leaflab ... Рупты.HTML
http: // docs.Leaflabs.com/static.Leaflab ... Винтеррота

Особенно, если вы отбираете выборки по источнику часов, ATCTINGENTRUTP () имеет приятные триггеры Params, E.глин. Чтобы вызвать восходящее преимущество, падение или переходы

С STM32F1, казалось бы, он может даже контролировать скорость SPI (я.эн. MHZ), может быть интересно проверить это

Стивестронг
SAT 15 апреля 2017 г. 16:53
Пожалуйста, используйте pxy (e.глин. PA4) нотация для булавок вместо необработанных чисел.

AG123
Солнце 16 апреля 2017 г., 17:56
Астер написал: да, используя прерывание, было бы лучше, но для полуколности я бы предпочел прочитать порт

Я попробовал это, но это не сработало, ни одна идея?
HardwareTimer timer(0); void setup() { Serial1.begin(115200); pinMode(32, INPUT_PULLUP); } void loop() { Serial1.println(millis()); if (digitalRead(32)) { Serial1.print("A"); timer.refresh(); } }

астер
Солнце 16 апреля 2017 г., 19:56
Я должен был сказать раньше, что у меня не было проблем с сериалом, но с таймером таймер.обновить (); Из документации на кленах должна сбросить счетчик и переполнять, но по какой -то причине она не работает

AG123
Солнце 16 апреля 2017 г. 9:00 вечера
@стер
В то время как аппаратный таймер также довольно новый для меня
http: // docs.Leaflabs.com/static.Leaflab ... Дваретимер
Если вы посмотрите на пример для аппаратного таймера
Пример «светодиода мигания», существуют различные операторы, настраивающие таймер в setup ()
затем в настройке timer.attachCompare1Interrupt(handler_led);

девчонка
Вт 18 апреля 2017 г. 2:15
Привет,
Этот логический анализатор работает сейчас.

астер
Вт 18 апреля 2017 г. 11:16
Дев написал:Привет,
Этот логический анализатор работает сейчас.

девчонка
SAT 22 апреля 2017 г. 14:21
Звучит великолепно.
Кстати, вы используете протокол отсюда или другой?
Дайте мне знать, если я могу быть полезным.

астер
SAT 29 апреля 2017 г. 11:55 утра
annnnnd, наконец, он завершен, и он работает хорошо!! : D

https: // www.хакерс.IO/Vincenzo-G/DIY- ... Zer-F61EE5
https: // github.com/aster94/логика-анализатор

Я очень удивлен, что STM32 способен заметить только микросекунду между двумя импульсами
Если кто -то с настоящим логическим анализатором или осциллографом хотел бы проверить, как работает этот код, я буду очень рад узнать результаты!

Чтобы сбросить системный таймер, мне пришлось мало раскопать в основных файлах, это результат моих исследований:
void reset_timer() { systick_uptime_millis = -1; //millis counter SYSTICK_BASE->CNT = 0; //micros counter }

Пито
Сб 29 апреля 2017 12:25
Винченцо, хороший проект!
Некоторые идеи:
1. Вы можете использовать реестр DWT (32 -битный счетчик), который увеличивает 13.88NS Период на Maple Mini - это может быть ваше решение тогда.
Он работает на F407, но также реализован на F103, Double Check. Обновление: он тоже работает на Maple Mini.. Вот код:
http: // www.STM32duino.com/viewtopic.PHP ... 234#P26692
Таким образом, вместо чтения micros () вы читаете часы CPU с помощью Cpugetticks () в 13.Резолюция 88NS.
2. Вы не должны сбросить таймер (вы не можете с DWT Reg), таймер [0] несет начальную точку (временная метка нулевой точки), другая продолжительность [1] = таймер [1] - таймер [0], продолжительность [2] = время [2] - время [1] и т. д.
3. Вы можете подождать «событие триггера», когда входной сигнал соответствует вашему trigger_mask, затем начните с выборки, например, например, void startLA() { //delay(1000); event = 0; digitalWrite(boardLed, HIGH); // Armed, waiting on trigger reset_timer(); while( (initial = GPIOB->regs->IDR >> 12) != TRIGGER_MASK ) {}; // here we wait till the input signal matches the TRIGGER_MASK state = initial; }

AG123
Сб 29 апреля 2017 г. 15:53
Таким образом, он достиг 1 MSPS, попробует 1 день
Цикл, кажется, выглядит «обманчиво» простым, нет прерываний? : D
У меня странное чувство, что эта петля вполне может делать миллионы петли за секунду
эн.глин. Без изменений, без изменений, без изменений, без изменений, ... ОК 1 изменение, без изменений, без изменений ... :ржу не могу:

Я также пытаюсь выяснить, как получать данные на моем ящике Linux в > 115200, я думаю, что эти ttyacm* должны иметь возможность делать MBIT за секунду или даже MBYTE за секунду, тогда он может исследовать «в реальном времени», представьте, что можно позволить DMA делать все это зондирование и Затем DMA, что через USB к хозяину, процессор 72 МГц буквально «ничего не делай», возможно, он может сыграть в mp3, в то время как контроллер DMA занят, делая все это Laing :ржу не могу:

Хм, мне интересно, что произойдет, если это будет запущено на F407 @168 МГц с этим ускорителем искусства, будьте осторожны, пито подтолкнет его на 240 МГц + ускоритель искусства (0 состояний ожидания), возможно, он достигнет > 100 МСП? :ржу не могу:

Пито
Сб 29 апреля 2017 г., 17:43
Обновлена ​​моя ссылка выше - измерение "наносекунд" на Maple Mini тоже работает. 1 usec is 1041.660 nanosecs long 1 usec is 1041.660 nanosecs long 1 usec is 1041.660 nanosecs long

AG123
SAT 29 апреля 2017 г. 18:23
Мне интересно, что произойдет, если мы (когда -нибудь) прочитаем стиль SPI Train Train, E.глин. Настройка как раб SPI, подайте часы в SCK, и мы «лениво» просто прочитали вход на MOSI (E.глин. read_byte = spi.Передача (0x00); ), затем 1 мс становится 10-30 МСП? :ржу не могу:

Ddrown
Сб 29 апреля 2017 г., 19:15
Я разместил здесь код устройства поддона https: // github.com/ddrown/stm32-sump

Он основан на STMCUBEMX и использует DMA и таймер для образца GPIO.

астер
Солнце 30 апреля 2017 г. 9:13 вечера
Пито написал:Винченцо, хороший проект!
Некоторые идеи:
1. Вы можете использовать реестр DWT (32 -битный счетчик), который увеличивает 13.88NS Период на Maple Mini - это может быть ваше решение тогда.
Он работает на F407, но также реализован на F103, Double Check. Обновление: он тоже работает на Maple Mini.. Вот код:
http: // www.STM32duino.com/viewtopic.PHP ... 234#P26692
Таким образом, вместо чтения micros () вы читаете часы CPU с помощью Cpugetticks () в 13.Резолюция 88NS.
2. Вы не должны сбросить таймер (вы не можете с DWT Reg), таймер [0] несет начальную точку (временная метка нулевой точки), другая продолжительность [1] = таймер [1] - таймер [0], продолжительность [2] = время [2] - время [1] и т. д.
3. Вы можете подождать «событие триггера», когда входной сигнал соответствует вашему trigger_mask, затем начните с выборки, например, например, void startLA() { //delay(1000); event = 0; digitalWrite(boardLed, HIGH); // Armed, waiting on trigger reset_timer(); while( (initial = GPIOB->regs->IDR >> 12) != TRIGGER_MASK ) {}; // here we wait till the input signal matches the TRIGGER_MASK state = initial; }

девчонка
Сб, 6 мая 2017 г. 14:29
Спасибо, что поделились такой хорошей работой.
Я скачал код, но я не вижу .exe -файл там. Я не уверен, как использовать его без .Exe. Пожалуйста, направляйте меня.

астер
Солнце 07 мая 2017 г., 19:05
Дев написал:Спасибо, что поделились такой хорошей работой.
Я скачал код, но я не вижу .exe -файл там. Я не уверен, как использовать его без .Exe. Пожалуйста, направляйте меня.

MyWeb
Ср 31 октября 2018 г. 10:41
[Ddrown - Сб 29 апреля 2017 г., 19:15] - Я разместил здесь код устройства поддона https: // github.com/ddrown/stm32-sump

Он основан на STMCUBEMX и использует DMA и таймер для образца GPIO.
Привет,

Мне нравится реализация, но сталкивается с проблемами - данные/каналы не показаны в OLS -0.9.7.2.
Ошибка также создана в GIT: https: // github.com/ddrown/stm32-sump/uppess/2

Я также попробовал Sigrok Pulseview - я вижу данные, но:
  • Время неверно
  • Данные частично показаны
У меня есть «исправленные» время со следующим изменением кода: static void setupDelay(uint32_t divider) { if(divider >= 11 && divider < 65536) { divider = (int) 260 * divider / 361;

Adapter Retro Game Controller STM32

WWVB Timecode от синей таблетки

[Решено] VCO