Народный осциллограф "Мурзик" на базе STM32F303VCT6 - проект
Имеется STM32F407VGT6 и ILI 9341 (с тачем и без),на них реально собрать ваш осциллограф?
- Реклама
Мурзик нельзя. Но с такой связкой плюс пару AD9280 будет истинно народный осциллограф)
Два канала по 32 msps. А может и до 2х50 разгонится.
Но тема про stm32f3 с встроенным АЦП.
Два канала по 32 msps. А может и до 2х50 разгонится.
Но тема про stm32f3 с встроенным АЦП.
Добрый день ребята. Тут нашел у вас схему Мурзик 2 с 8bit дисплеем, я правильно понимаю прошивку под него не делали? А то тут принесли 3 дисплея от самсунга G5230, думал собрать по этой схеме.
Не все прочитали . https://radiokot.ru/forum/viewtopic.php ... 9#p3038939 и т.д..
Так же у меня на диске все есть.
Так же у меня на диске все есть.
IVL ex UA6PJ
- Реклама
- Сообщения: 11
- Зарегистрирован: Пт сен 03, 2010 09:17:27
[uquote="Tvics",url="/forum/viewtopic.php?p=3431023#p3431023"]Добрый день ребята. Тут нашел у вас схему Мурзик 2 с 8bit дисплеем, я правильно понимаю прошивку под него не делали? А то тут принесли 3 дисплея от самсунга G5230, думал собрать по этой схеме.[/uquote]
Присоединюсь к просьбе! Имеется 3 шт. вот таких дисплеев

Я уже подключал его к макетке с F103 прошитой под DSO138, он рабочий. Но к сожалению не имеет выведенного на шлейф, конфигурационного контакта, для переключения в SPI режим. Может работать только в 8-ми и 16-ти битном параллельном режиме. Очень прошу автора прошивок скомпилировать прошивку с 8-ми битным подключением дисплея. Ну и куда какой пин подключить. Я конечно не программист, но думаю это не так трудно. А как это повлияет на разводку мне не важно.
Присоединюсь к просьбе! Имеется 3 шт. вот таких дисплеев
Я уже подключал его к макетке с F103 прошитой под DSO138, он рабочий. Но к сожалению не имеет выведенного на шлейф, конфигурационного контакта, для переключения в SPI режим. Может работать только в 8-ми и 16-ти битном параллельном режиме. Очень прошу автора прошивок скомпилировать прошивку с 8-ми битным подключением дисплея. Ну и куда какой пин подключить. Я конечно не программист, но думаю это не так трудно. А как это повлияет на разводку мне не важно.
- Вложения
-
- fly_ds123_20160823_122914-320x240.jpg
- (12.75 КБ) 4312 скачиваний
Я не мог не заметить, как вы заметили, что я вас заметил..
В схеме на F303 под параллельный экран не хватает ног контроллера.
IVL ex UA6PJ
Добрый день. Просто наткнулся на схему от 366566432 схема_м2.pdf и подумал что это мурзик2 : https://radiokot.ru/forum/viewtopic.php ... &start=640 .
- Сообщения: 36
- Зарегистрирован: Пн июн 03, 2013 18:16:27
Самый интересный проект из данной ветки для меня. Это проект на STM32F303 в корпусе LQFP32 шаг 0,8 мм.На али и ебэй их нет. Вопрос их сняли с производства? Есть варианты купить данные микросхемы?
А в интернете поискать не пробовали ?
IVL ex UA6PJ
[uquote="pavel1979",url="/forum/viewtopic.php?p=3429015#p3429015"]Спасибо! буду заказывать стм32ф3[/uquote]
опрокинули в чип и дип-когда заказывал было написано положить в корзину,положил,начал оплачивать-под заказ,заказал-написали-в течении 7-14 дней,сегодня написали нет в наличии и предлагают сделать новый заказ...
вышлите пожалуйста мне этот стм32ф303,я не знаю как и где заказывать,на али не хочу-пишут много брака...
извините за отклонение от темы=оффтоп...
опрокинули в чип и дип-когда заказывал было написано положить в корзину,положил,начал оплачивать-под заказ,заказал-написали-в течении 7-14 дней,сегодня написали нет в наличии и предлагают сделать новый заказ...
вышлите пожалуйста мне этот стм32ф303,я не знаю как и где заказывать,на али не хочу-пишут много брака...
извините за отклонение от темы=оффтоп...
- Сообщения: 36
- Зарегистрирован: Пн июн 03, 2013 18:16:27
На сайте Fusion выложена схема и прошивка осциллографа на STM32F303, схема отличается от схем в подписи у 240265.Возник вопрос по схеме с сайта Fusion. Куда идет KEY1 с контроллера? С какой ноги контроллера выходит KEY8? Еще вопрос какой вариант лучше собрать?( с сайта автора или из подписи 240265)
Поправил схему. KEY8 клавиши нет. Есть KEY0-KEY7.
KEY0 на плюс для включения. Остальные на минус
KEY0 на плюс для включения. Остальные на минус
KEY1 аж 2 штуки 
bumbec В обоих схемах присутствуют преобразователи, а "Они либо дорогие либо шумные " как Вы выражались.
bumbec В обоих схемах присутствуют преобразователи, а "Они либо дорогие либо шумные " как Вы выражались.
IVL ex UA6PJ
- Сообщения: 36
- Зарегистрирован: Пн июн 03, 2013 18:16:27
Так какой вариант лучше? У меня преобразователя не будет))
положу здесь, может кто чего-нибудь для себя в этом насмотрит.
собственно опрос кнопок. попробовал малым кол-вом проверок и проч. телодвижений - если никакая кнопка не нажата, чтоб побыстрее вернуться в основной цикл. антидребезг - на апп-ном таймере, опросом бита его регистра.
вроде никакой скобки не потерял. И да, для случая если кнопки на одном порту.
пользуясь случаем
Огромное спасибо товарищу Fusion
за его наработки и милость к начинающим осцило-ваятелям.
#define KeySHIFT GPIO_Pin_3
#define Key4 GPIO_Pin_4
#define Key5 GPIO_Pin_5
#define Key6 GPIO_Pin_6
#define Key7 GPIO_Pin_7
#define Key8 GPIO_Pin_8
#define Key9 GPIO_Pin_9
//...
GPIO_InitStructure.GPIO_Pin = KeySHIFT|Key4|Key5|Key6|Key7|Key8|Key9 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//...
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit(&base_timer);
base_timer.TIM_Prescaler = 49152-1; // значения почти "с потолка"
base_timer.TIM_Period = 512-1; // вам сюда свои ставить (зависит от тактирования АРВ1)
TIM_TimeBaseInit(TIM3, &base_timer);
TIM3->EGR |= TIM_EGR_UG;
//...
// в майне:
//...
if (!(TIM3->CR1&TIM_CR1_CEN)) { // keyantibag если еще тикает - опрос кнопок перепрыгиваем
// start scan key
uint8_t tmp1 = (((GPIOB->IDR)<<6)>>10); // кнопка KeySHIFT сюда не поподает, у нее своя песня
if((tmp1 != 0xFF)|(KHCount != 0)){ // nokey если не нажата и счетчик на 0 - обработку перепрыгиваем
if((KHCount != 0) & ((tmp1 == 0xFF) | (tmp1 != (KeyStatus |0x80)))) { // если кнопку отпустили
KHCount = 0; // в 0 счетчик для определения что кнопка удерживается
KeyStatus=0xFF;
}
else { // иначе - нажата - принимаем и запускаем счетчики
// TIM3->ARR = 512-1;
// TIM3->EGR |= TIM_EGR_UG;
TIM3->CR1 |= TIM_CR1_CEN|TIM_CR1_OPM; // стартуем таймер в однопроходном режиме
KeyStatus = tmp1;
if (KeyStatus != 0xFF) { // если что-то нажато (не все биты 1)
KHCount++; // увеличиваем счетчик
if(KHCount == 8 ) { // 8 чтений подряд - будем считать что удерживают
KeyStatus &= 0x7F; // 0 старшего разряда - признак "удержания"
--KHCount;
}
}
}
// end scan key
// теперь обработка
switch(KeyStatus) {
// тройка примеров обработки
case 0xDF: // Up 1101 1111
if (Mode ==0) { // mode в 0
if (!(GPIOB->IDR & KeySHIFT)) { // если с KeySHIFT - поднимать линию
if (Hline2<255) {
Hline2++;} // побитно
}
}
else { // mode не 0
// код
}
break;
case 0x5F: // Up та же кнопка, но удержавается 0101 1111
if (Mode ==0) { // mode в 0
if (!(GPIOB->IDR & KeySHIFT)) { // если KeySHIFT нажата
if (Hline2<255-50) {
Hline2=Hline2+10;} // будем поднимать линию с шагом 10 бит
}
}
break;
case 0x7B: // < кнопка удерживается 0111 1011
if (Freez ==1) { // freez в 1
if (Mode ==0) { // mode в 0
if (PointSync>128) {PointSync=PointSync-128;} // смещаю "курсор" с шагом 128 бит
// обновление основного экрана
// обновление вспомогательного (с курсором)
}
else { // freez в 1, mode не 0
// код
}
}
break;
} // end switch
} // nokey
} // keyantibag TIM3
// далее основной цикл
//...
собственно опрос кнопок. попробовал малым кол-вом проверок и проч. телодвижений - если никакая кнопка не нажата, чтоб побыстрее вернуться в основной цикл. антидребезг - на апп-ном таймере, опросом бита его регистра.
вроде никакой скобки не потерял. И да, для случая если кнопки на одном порту.
пользуясь случаем
Огромное спасибо товарищу Fusion
за его наработки и милость к начинающим осцило-ваятелям.
Спойлер
// в инитах:#define KeySHIFT GPIO_Pin_3
#define Key4 GPIO_Pin_4
#define Key5 GPIO_Pin_5
#define Key6 GPIO_Pin_6
#define Key7 GPIO_Pin_7
#define Key8 GPIO_Pin_8
#define Key9 GPIO_Pin_9
//...
GPIO_InitStructure.GPIO_Pin = KeySHIFT|Key4|Key5|Key6|Key7|Key8|Key9 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//...
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit(&base_timer);
base_timer.TIM_Prescaler = 49152-1; // значения почти "с потолка"
base_timer.TIM_Period = 512-1; // вам сюда свои ставить (зависит от тактирования АРВ1)
TIM_TimeBaseInit(TIM3, &base_timer);
TIM3->EGR |= TIM_EGR_UG;
//...
// в майне:
//...
if (!(TIM3->CR1&TIM_CR1_CEN)) { // keyantibag если еще тикает - опрос кнопок перепрыгиваем
// start scan key
uint8_t tmp1 = (((GPIOB->IDR)<<6)>>10); // кнопка KeySHIFT сюда не поподает, у нее своя песня
if((tmp1 != 0xFF)|(KHCount != 0)){ // nokey если не нажата и счетчик на 0 - обработку перепрыгиваем
if((KHCount != 0) & ((tmp1 == 0xFF) | (tmp1 != (KeyStatus |0x80)))) { // если кнопку отпустили
KHCount = 0; // в 0 счетчик для определения что кнопка удерживается
KeyStatus=0xFF;
}
else { // иначе - нажата - принимаем и запускаем счетчики
// TIM3->ARR = 512-1;
// TIM3->EGR |= TIM_EGR_UG;
TIM3->CR1 |= TIM_CR1_CEN|TIM_CR1_OPM; // стартуем таймер в однопроходном режиме
KeyStatus = tmp1;
if (KeyStatus != 0xFF) { // если что-то нажато (не все биты 1)
KHCount++; // увеличиваем счетчик
if(KHCount == 8 ) { // 8 чтений подряд - будем считать что удерживают
KeyStatus &= 0x7F; // 0 старшего разряда - признак "удержания"
--KHCount;
}
}
}
// end scan key
// теперь обработка
switch(KeyStatus) {
// тройка примеров обработки
case 0xDF: // Up 1101 1111
if (Mode ==0) { // mode в 0
if (!(GPIOB->IDR & KeySHIFT)) { // если с KeySHIFT - поднимать линию
if (Hline2<255) {
Hline2++;} // побитно
}
}
else { // mode не 0
// код
}
break;
case 0x5F: // Up та же кнопка, но удержавается 0101 1111
if (Mode ==0) { // mode в 0
if (!(GPIOB->IDR & KeySHIFT)) { // если KeySHIFT нажата
if (Hline2<255-50) {
Hline2=Hline2+10;} // будем поднимать линию с шагом 10 бит
}
}
break;
case 0x7B: // < кнопка удерживается 0111 1011
if (Freez ==1) { // freez в 1
if (Mode ==0) { // mode в 0
if (PointSync>128) {PointSync=PointSync-128;} // смещаю "курсор" с шагом 128 бит
// обновление основного экрана
// обновление вспомогательного (с курсором)
}
else { // freez в 1, mode не 0
// код
}
}
break;
} // end switch
} // nokey
} // keyantibag TIM3
// далее основной цикл
//...
Присоединяюсь к благодарности Fusion, а заодно попрошу его скомпилировать или подсказать пины для реализации проекта Вольтметр 0-40V на МК типа STM32F303CBT6
Вот тут прошивка:
http://cvs.ru/aiq/oled128x32/oled128x32.html
И распиновка для К6. Для CBT6 номера ног поменять по названию портов.
Не проверял. Не на чем.
http://cvs.ru/aiq/oled128x32/oled128x32.html
И распиновка для К6. Для CBT6 номера ног поменять по названию портов.
Не проверял. Не на чем.
покаюсь
пару постов назад выкладывал опрос кнопок, если кто его брал "как есть" исправьте мой косяк
:
в комплексных проверках замените побитовые операции (|, &) на логические (||, &&), напр. должно быть:
if((tmp1 != 0xFF)||(KHCount != 0))
в бинарнике - опрос кнопок (если никакая не нажималась) не более 11-и инструкций (30 байт) - и мы снова в основном цикле.
пару постов назад выкладывал опрос кнопок, если кто его брал "как есть" исправьте мой косяк
в комплексных проверках замените побитовые операции (|, &) на логические (||, &&), напр. должно быть:
if((tmp1 != 0xFF)||(KHCount != 0))
в бинарнике - опрос кнопок (если никакая не нажималась) не более 11-и инструкций (30 байт) - и мы снова в основном цикле.
Кнопки обычно вешаю на прерывания.
В основном цикле только проверить кейстатус на ноль.
От дребезга KeyAntiBug вычитается в прерывании таймера
Код: Выделить всё
void EXTI9_5_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line9) != RESET){ // PA9 KeyUp
if (!KeyAntiBug) {
if (!(GPIOA->IDR & KeyUp)) {
KeyStatus=1;
}
}
KeyAntiBug=KeyAntiBug_Time;
}
EXTI_ClearITPendingBit(EXTI_Line9);
}
От дребезга KeyAntiBug вычитается в прерывании таймера


