Jump to content

    

msn

Свой
  • Content Count

    129
  • Joined

  • Last visited

Community Reputation

0 Обычный

About msn

  • Rank
    Частый гость

Контакты

  • Сайт
    Array

Информация

  • Город
    Array
  1. Спасибо. Перерисовал так. Полевик будет 2N7000, оптосимистор - MOC3063, симистор BT131-600. Для отладки, время задающую цепь поставил меньше чем нужно. Диод D2 для более быстрой разрядки конденсатора, но все равно при переключении нужно ждать разряда. Наверное нужно будет еще подумать как сделать это на таймера 555, но ему тоже нужно подать на TRIG импульс при включении питания.
  2. А если сделать так (номиналы от балды, для проверки):
  3. Включать вентилятор на 2-3 мин, когда выходишь из туалета. Как сделать таймер, я знаю, я не знаю как вентилятором управлять. По MOC я так ни не понял, лучше взять доп симистор, BT131 подойдет?
  4. Есть вентилятор 220V 8W, к нему уже заложена проводка, с разрывом фазы (2 провода, N и L, где L разрывается выключателем), переделать проводку под стандартный вентилятор с таймером нельзя. Хочу сделать простейшую схему задержки выключения вентилятора, т.е.: 1. включаем вентилятор выключателем 2. вентилятор работает 2-3 минуты 3. схема выключает вентилятор … 4. через какое-то время выключаем выключатель, и сразу же включаем - п1 Т.е. смысл в том, что бы включить вентилятор выключателем и не ждать 2-3 минуты. С силовыми схемами и симисторами ни когда не работал. Хотелось бы это сделать как можно проще, небольшого размера (30*30 мм), что бы уместить в корпус вентилятора. Вентилятором на 8W можно управлять одной moc30xx?
  5. stm32f746g-disco и emWin

    Нужно было SCB_DisableDCache() перед GUI_Init().
  6. stm32f746g-disco и emWin

    Начинаю разбираться с stm32f746g-disco (32F746GDISCOVERY). Для нее есть примеры в STM32CubeF7 (STM32Cube_FW_F7_V1.3.0) в частности STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Applications\STemWin\STemWin_HelloWorld. Компилирую пример в Keil uVision5 (без оптимизации) - все нормально, HelloWorld выводит. Создаю кнопку: hButton = BUTTON_Create(0, 0, 100, 50, GUI_ID_OK, WM_CF_SHOW); BUTTON_SetText(hButton, "Test"); GUI_Exec(); Все нормально: (Img) В GUIBuilder.exe делаю простейшее окно (окно + метка), вызываю функцию CreateWindow - ни чего не работает. Искаженный фон окна и искаженной текст метки. Причину найти не могу: (Img) Может кто сталкивался с таким? Если у Вас есть плата stm32f746g-disco можете в нее прошить Hex файл, может проблема с платой. Спасибо. Исходный код: Изменено только в BASIC_HelloWorld.c #include "GUI.h" #include "DIALOG.h" WM_HWIN CreateWindow(void); /********************************************************************* * * Public code * ********************************************************************** */ /********************************************************************* * * MainTask */ void MainTask(void) { static BUTTON_Handle hButton; static WM_HWIN hWin; /* // All ok hButton = BUTTON_Create(0, 0, 100, 50, GUI_ID_OK, WM_CF_SHOW); BUTTON_SetText(hButton, "Test"); */ /**/ // Don't work CreateWindow(); /**/ GUI_Exec(); while (1); } /*************************** End of file ****************************/ Добавлено только WindowDLG.c // USER START (Optionally insert additional includes) // USER END #include "DIALOG.h" /********************************************************************* * * Defines * ********************************************************************** */ #define ID_WINDOW_0 (GUI_ID_USER + 0x00) #define ID_TEXT_0 (GUI_ID_USER + 0x01) // USER START (Optionally insert additional defines) // USER END /********************************************************************* * * Static data * ********************************************************************** */ // USER START (Optionally insert additional static data) // USER END /********************************************************************* * * _aDialogCreate */ static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 272, 0, 0x0, 0 }, { TEXT_CreateIndirect, "Text", ID_TEXT_0, 100, 100, 80, 20, 0, 0x64, 0 }, // USER START (Optionally insert additional widgets) // USER END }; /********************************************************************* * * Static code * ********************************************************************** */ // USER START (Optionally insert additional static code) // USER END /********************************************************************* * * _cbDialog */ static void _cbDialog(WM_MESSAGE * pMsg) { WM_HWIN hItem; // USER START (Optionally insert additional variables) // USER END switch (pMsg->MsgId) { case WM_INIT_DIALOG: // // Initialization of 'Window' // hItem = pMsg->hWin; WINDOW_SetBkColor(hItem, 0x00FF0000); // // Initialization of 'Text' // hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0); TEXT_SetText(hItem, "Test"); TEXT_SetTextColor(hItem, 0x00FFFFFF); TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); TEXT_SetFont(hItem, GUI_FONT_13_1); // USER START (Optionally insert additional code for further widget initialization) // USER END break; // USER START (Optionally insert additional message handling) // USER END default: WM_DefaultProc(pMsg); break; } } /********************************************************************* * * Public code * ********************************************************************** */ /********************************************************************* * * CreateWindow */ WM_HWIN CreateWindow(void); WM_HWIN CreateWindow(void) { WM_HWIN hWin; hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); return hWin; } // USER START (Optionally insert additional public code) // USER END /*************************** End of file ****************************/ Файлы из: Inc, Src и MDK-ARM. Hex файл: STM32746G_DISCOVERY_Button.hex - all ok STM32746G_DISCOVERY_Window.hex - don't work
  7. Использую Z ревизию. Не отладка в железе на stm32f4discovery.
  8. Тестирую fsmc на stm32f407VG. Использую Address/Data multiplexed on databus (MUXEN = 1). Тестирую 2 режима EXTMOD = 0 и 1. Инициализация: FSMC_Bank1->BTCR[0] = //FSMC_BCR2_EXTMOD | FSMC_BCR2_WREN | FSMC_BCR2_FACCEN | FSMC_BCR2_MWID_0 | FSMC_BCR2_MTYP_1 | FSMC_BCR2_MUXEN | FSMC_BCR2_MBKEN; FSMC_Bank1->BTCR[1] = (2 << 8) | // DATAST = 2 (1 << 4) | // ADDHLD = 1 (2 << 0); // ADDSET = 2 FSMC_Bank1E->BWTR[0] = (2 << 8) | // DATAST = 2 (1 << 4) | // ADDHLD = 1 (2 << 0); // ADDSET = 2 Если EXTMOD = 0, все хорошо. Если EXTMOD = 1, FSMC не генерирует NL (NADV) и адрес (ошибка при записи и чтении), смотрю осцилом. В чем может быть проблема? Это баг stm32f407VG? Спасибо.
  9. Еще раз все перепроверил. Разбираюсь с STM32F407. Запустил его на 168 МГц (5.92 нс цикл) включены все FLASH->ACR = FLASH_ACR_DCEN | FLASH_ACR_ICEN | FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY_5WS. Выдаю на PA1 простой меандр: PM_(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN) = 1; // GPIOA clock enabled PM_(GPIOA->MODER, GPIO_MODER_MODER1_0) = 1; // PA1 - General purpose output mode GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; // PA1 - 100 MHz High speed while (1) { GPIOA->BSRR = GPIO_BSRR_BS_1; GPIOA->BSRR = GPIO_BSRR_BR_1; GPIOA->BSRR = GPIO_BSRR_BS_1; GPIOA->BSRR = GPIO_BSRR_BR_1; GPIOA->BSRR = GPIO_BSRR_BS_1; GPIOA->BSRR = GPIO_BSRR_BR_1; GPIOA->BSRR = GPIO_BSRR_BS_1; GPIOA->BSRR = GPIO_BSRR_BR_1; GPIOA->BSRR = GPIO_BSRR_BS_1; GPIOA->BSRR = GPIO_BSRR_BR_1; } Компилируется так: STR r1,[r0,#0x18] STR r2,[r0,#0x18] STR r1,[r0,#0x18] STR r2,[r0,#0x18] STR r1,[r0,#0x18] STR r2,[r0,#0x18] STR r1,[r0,#0x18] STR r2,[r0,#0x18] STR r1,[r0,#0x18] STR r2,[r0,#0x18] B |L1.6| На осциллографе вижу такой сигнал: Это означает что инструкция Branch выполняться на самом деле за 3 такта? Я отлаживаю в Keil на stm32f4discovery. На инструкции Branch счетчик циклов в Keil (States) увеличивается на +1. Дополнительно использую SysTick и DWT->CYCCNT, они так же увеличивается на +1 на инструкции Branch. Почему так? Кто-то врет, не может быть так как что бы один системный такт был то 6 ns, то 18 ns.
  10. Спасибо за помощь. Для M4 проморгал таблицу с Cycles.
  11. Разбираюсь с STM32F4xx, запустил его на 168 МГц (5.92 нс цикл) включены все КЕШи (FLASH->ACR = FLASH_ACR_DCEN | FLASH_ACR_ICEN | FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY_5WS) выдаю на PA1 простой меандр: while (1) { GPIOA->BSRR = GPIO_BSRR_BS_1; __nop(); __nop(); __nop(); __nop(); GPIOA->BSRR = GPIO_BSRR_BR_1; __nop(); __nop(); __nop(); //__nop(); } Компилируется так: STR r1,[r0,#0x18] NOP NOP NOP NOP STR r2,[r0,#0x18] NOP NOP NOP B |L1.6| Смотрю в Keil (отладка на stm32f4discovery) States, все команды выполняются за 1 такт. Смотрю осцилом, вижу, что 1 на PA1 - 30 нс (5 тактов), а 0 на PA1 - 35 нс (6 тактов), т.е. B |L1.6| выполняется вроде как за 2 такта, а Keil увеличивает States на +1. Читал http://infocenter.arm.com/help/index.jsp?t...g/BABBCJII.html (If branch taken, pipeline reloads (two cycles are added), т.е. 3 цикла) и STM PM0081 Flash memory interface (про ART - все за 1 цикл), так толком и не понятно кому верить. Где можно прочитать о времени выполнения инструкций STM32F4xx? Как можно в Keil измерить это время? Спасибо.
  12. Спасибо. Для того что бы например запускать АЦП от T1 нужно установить: ADC_CR2->EXTEN = 00b (Trigger detection disabled) ADC_CR2->EXTSEL = 0000b (Timer 1 CC1 event) Так?
  13. Спасибо за совет. Но тогда максимальная частота дискретизации 2.4 МГц. Тут не совсем ясно. У каждого АЦП есть свой аналоговый мультиплексор. Получается что на Mux1 и Mux2 заведены одни 16 каналов, а на Mux3 - 8 каналов которые есть на Mux1/2 и 8 каналов с порта PF? PF3 ADC3_IN9 PF4 ADC3_IN14 PF5 ADC3_IN15 PF6 ADC3_IN4 PF7 ADC3_IN5 PF8 ADC3_IN6 PF9 ADC3_IN7 PF10 ADC3_IN8 PC0 ADC123_IN10 PC1 ADC123_IN11 PC2 ADC123_IN12 PC3 ADC123_IN13 PA0 ADC123_IN0 PA1 ADC123_IN1 PA2 ADC123_IN2 PA3 ADC123_IN3 PA4 ADC12_IN4 PA5 ADC12_IN5 PA6 ADC12_IN6 PA7 ADC12_IN7 PB0 ADC12_IN8 PB1 ADC12_IN9 PC4 ADC12_IN14 PC5 ADC12_IN15 На F4xx вроде ни чего такого не написано. Спасибо, как делать в общем я знаю. Не понятные некоторые нюансы, о которых спрашивал выше. Примеры скачал и смотрел, не на все вопросы нашел ответы.
  14. Прошу помочь разобраться. Начинаю разбираться с STM32F407VG (до этого долго работал с Silabs 8051 и AVR). Задача следующая (8-ми канальный самописец): - есть 8 каналов, одновременно может быть включено 1 или 2 или … все 8 - необходимо считывать данные непрерывно с каждого включенного канала с частотой от 1 КГц до Max возможной (например 7.2 МГц) - данные писать в ОЗУ и по мере возможностей передавать в ПК по Ethernet Не могу понять что означает в datasheet “Additional functions”: ADC123_INn и ADC12_INn. Например PA0 ADC123_IN0 это означает что вывод PA0 можно использовать как канал 0 для АЦП1, АЦП2 и АЦП3 или только для одного из АЦП. Или если используется независимый режим то ADC123_IN0 можно использовать только для одного АЦП, а если используется мульти режим то ADC123_IN0 можно использовать для всех АЦП? В datasheet написано: However, an ADC cannot start a conversion if the complementary ADC is still sampling its input (only one ADC can sample the input signal at a given time), т.е. только УВХ одного АЦП одновременно может быть подключено к PA0? Как я понял PA0 просто конфигурируется как аналоговый вход без подтяжек, после чего его номер прописываеться в ADC_SQR. PA0 как то привязывается к определенному АЦП? Если прописать PA0 сразу в ADC1_SQR, ADC2_SQR и ADC3_SQR и запустить все 3 АЦП в независимом режиме, но что бы их моменты УВХ были разнесены по времени, так правильно? Каналы ADC12_INn не могу использоваться для АПЦ3? И еще не совсем ясно что такое external trigger? Есть биты “Configuring the trigger polarity” Trigger detection disabled - это означает что АЦП можно запустить только программно SWSTART? Detection rising / falling edges - это только для trigger запуска от EXTI или еще как-то от таймеров по обоим фронтам? Спасибо! P.S. Как-то странно STM аналоговый каналы сделала, если включаешь Ethernet или USB HS половины аналоговых каналов нет.
  15. Проблема с C8051F062

    Нашел таки проблему. На всех трех платах "нулевой" резистор между аналоговой и цифрой землями был чуть поврежден (сопротивление плавало от 0.2 до 5 Ом). И при включении аналоговой периферии получался перекос аналогового и цифрового питания, что приводило к смещение опоры. Процы живы, и после замены резисторов все заработало как нужно.