supercelt

Members
  • Публикации

    133
  • Зарегистрирован

  • Посещение

Репутация

-2 Плохой

О supercelt

Информация

  • Пол
    Мужчина
  • Город
    Санкт-Петербург

Электроника

  • Стаж в электронике
    10-20 лет
  • Сфера радиоэлектроники
    морские информационные системы
  1. Всем привет подскажите пожалуйста. Есть модуль А6. У него есть пин RST. В даташите написано, что для сброса надо применять низкий уровень, но при этом ток через все это дело пойдёт до 70ма и у модема возникнут трудности с поиском сети. Там же сказано, что рекомендовано использовать nMOSFET. Так вот я правильно понял, что надо просто тянуть эту ногу к земле через мосфет н типа, никаких там обвесов не надо? Есть схемка как правильно притянуть ногу к земле через мосфет? И как правильно подобрать транзистор? Питание модуля 5в , управление 3,3в
  2. подобрать кримпер

    пины брал в чип и дипе. Видел кримпер с маркировкой AWG 28-10. Так вот не понятно подходит он или нет. Губки то у него маленькие есть, но пины че-то уж слишком мелкие. А через упаковку не пропробовать)). И кстати AWG это параметр провода, а не пина
  3. Здравствуйте!. Помогите пожалуйста подобрать кримпер. Где только не был, продавцы разводят руками, говорят, что контакты слишком маленькие. Но как-то их же обжимают. Вот фотка, всё поймёте. Какие параметры у этих кримперов и какой нужен что бы обжать это маленькое чудо? https://lib.chipdip.ru/118/DOC001118780.pdf
  4. Привет! У меня есть станция lukey 852D+ компрессорная. Проблема состоит в том, что если я ставлю скорость фена на минимум, поток всё равно сильный. с 4 см сдувает смд, усаженные в пасту. Причём крутилка скорости работает. Если увеличить, то там вообще ещё сильнее будет дуть. Вопрос. Если заменить переменный резистор, регулировки потока на больший номинал, уменьшится ли скорость?
  5. Привет всем! Вот когда телефон звонит, в тел. сети в это время напряжение примерно 60 - 80 В переменного напряжения. Какая сила тока при этом я не знаю. Ищу схему, которая может делать из постоянных 12В вот эти самые переменные 60-80 (аналог как в телефонной сети при звонке)
  6. Привет. Вопрос такой.., общий. Дан блок приёмной контрольный заря во ip gprs. Симка одна. Так вот вопрос. Можно ли назвать данный канал связи дуплексным?
  7. Приём строки по USART [STM32] Keil5

    В продолжении вопроса. Выделить из кавычек это я поторопился. Надо сначала ещё кучу всего сделать. Там условия такие, что строка может придти когда угодно, какая угодно. Я не знаю ее размер. Таким образом я решил что по мере поступления символов, а прерывании по usart1 я буду просто набивать буфер. А потом, когда он набьётся - разбирать строку. И вот проблема. Раз я не знаю размер строки, то когда она полностью придёт неизвестно. Проверять по символу \r\n не вариант, так как эти символы приходят вначале сообщения и в середине. Короче я думал думал и вот что придумал. Алгоритм такой: После того, как сработало первое прерывание по приёму usart1, я запускаю таймер. Настраиваю его на прерывание по переполнению. Далее приходит второй символ, таймер сбрасываю, он не успевает переполнится. И так далее. И вот пришёл последний символ. прерывание сработало последний раз и сбросило таймер. Он продолжает тикать. А раз символов то больше нет, он благополучно вваливается в прерывание по переполнению. В обработчике вектора вырубаю таймер и выставляю флаг что я принял всё-таки строку. Алгоритм простой, но как всегда всё работает почему-то не так как надо. Если из кода, который ниже убрать включение прерывание на таймер, то работает, но таймер соответственно не останавливается. А если включить прерывание, что так и должно быть - ничего не работает. Похоже даже на зависание. И самое интересное. Что бы я не делал, в режиме отладки, на кусок кода обработчика прерывания таймера нельзя поставить точку останова. Везде можно а именно на этот кусок нельзя. #include "gsm.h" #include "lcd.h" /////////////////////////////////////////////Buffer сделать c префиксом сетап. Может набить туда ещё команд? сделать вывод со 2 юсарта на комп, дублиовать экран на комп char Buffer_CSCA[] = "AT+CSCA?\r\n"; char Buffer_Setup[] = "ATE0\r\n";//ATV0, ATE0, ATS4=000 char Buffer_Receive[100]; uint8_t flag_receive, buf, flag_setup, i, f, ex; uint16_t co; unsigned short buff[100]; void TIM12_IRQHandler(void){ if(TIM12->SR & TIM_SR_UIF){ TIM12->SR &= ~TIM_SR_UIF; } flag_receive = 1; TIM12->CNT = 0; TIM12->CR1 &= ~TIM_CR1_CEN; } void DMA1_Channel4_IRQHandler(void){ //Прерывание DMA if(DMA1->ISR & DMA_ISR_TCIF4){ //Если прерывание вызвано завершением передачи... DMA1->IFCR = DMA_IFCR_CTCIF4; //Сброс флага завершения передачи DMA1_Channel4->CCR &= ~DMA_CCR4_EN; //Вырубаем DMA } } void USART1_IRQHandler(void){ //Прерывание USART1 if(USART1->SR & USART_SR_RXNE){ //Если прерывание вызвано по приёму USART1 USART1->SR &= ~USART_SR_RXNE; //Сбрасываем флаг приёма USART1 buff[i] = TIM12->CNT; Buffer_Receive[i++] = USART1->DR; LCD_Send_Data(USART1->DR); if(!f){ TIM12->CR1 |= TIM_CR1_CEN; f = 1; } else { TIM12->CNT = 0; } } } void GSM_INI(void){ RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //USART1 clock RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; //PortA & Alt clock GPIOA->CRH &= ~GPIO_CRH_CNF9_0; GPIOA->CRH |= GPIO_CRH_CNF9_1; //Alternate function output Push-pull GPIOA->CRH |= GPIO_CRH_MODE9_1; //Speed 2 MHz /*RCC->APB1ENR |= RCC_APB1ENR_USART2EN; //Test usart2 GPIOA->CRL &= ~GPIO_CRL_CNF2_0; //Test usart2 GPIOA->CRL |= GPIO_CRL_CNF2_1; //Test usart2 GPIOA->CRL |= GPIO_CRL_MODE2_1; //Test usart2*/ //==USART1======================================================================================= USART1->BRR = 0x9C4; //9600 бод скорость обмена USART1->CR1 |= USART_CR1_RXNEIE; //Разрешаем локальные прерывания по приёму USART USART1->CR1 |= USART_CR1_RE | USART_CR1_TE; //Включаем передатчик и приёмник USART1->CR1 |= USART_CR1_UE; //Включаем USART NVIC_EnableIRQ(USART1_IRQn); //Разрешаем глобальные прерывания для USART1 //============================================================================================== //==USART2=[TEST]=============================================================================== /*USART2->BRR = 0x9C4; USART2->CR1 |= USART_CR1_TE; USART2->CR1 |= USART_CR1_UE;*/ //============================================================================================== //==DMA========================================================================================= RCC->AHBENR |= RCC_AHBENR_DMA1EN; DMA1_Channel4->CPAR = (uint32_t)&(USART1->DR); //С какой периферией работаем DMA1_Channel4->CMAR = (uint32_t)Buffer_Setup; //Указатель на нулевой элемент буфера откуда отправляем данные DMA1_Channel4->CCR |= DMA_CCR4_DIR | DMA_CCR4_MINC; //Читаем ИЗ памяти в периферию | при считывании увеличиваем на 1 адрес буфера Buffer, что бы при следующем считывани перейти на след ячейку памяти. DMA1_Channel4->CCR &= ~DMA_CCR4_PINC; //Увеличение на 1 адрема периферии выкл. Если вкл, то счётчик увеличится при след. чтении и тогда работа будет уже не с юсарт а с другой периферией DMA1_Channel4->CCR |= DMA_CCR4_TCIE; DMA1_Channel4->CNDTR = sizeof(Buffer_Setup); //Размер буфера данных DMA1_Channel4->CCR &= ~(DMA_CCR4_MSIZE | DMA_CCR4_PSIZE | DMA_CCR4_CIRC); //Память - 8 бит | Периферия - 8 бит | Не циклическая передача. DMA1_Channel4->CCR |= DMA_CCR4_PL_0; //Приоритет - средний (Medium) USART1->CR3 |= USART_CR3_DMAT; // Разрешаем USART использовать DMA NVIC_EnableIRQ(DMA1_Channel4_IRQn); //Разрешаем глобально прерывания по DMA1 канал 4 DMA1_Channel4->CCR |= DMA_IT_TC; //Разрешаем локальнве прерывания по завершению передачи DMA1 канал 4 DMA1_Channel4->CCR |= DMA_CCR4_EN; //Включаем DMA что бы передать настройки модулю GSM командой из Buffer //============================================================================================== //==TIMER12=for=receive bytes from USART======================================================== RCC->APB1ENR |= RCC_APB1ENR_TIM12EN; TIM12->CR1 |= TIM_CR1_ARPE; TIM12->ARR = 0xFFFF; TIM12->PSC = 0xEF; TIM12->CNT = 0; NVIC_EnableIRQ(TIM12_IRQn); TIM12->DIER |= TIM_DIER_UIE; TIM12->EGR = TIM_EGR_UG; //******Вызываем Update Event что бы таймер не уходил в прерывание сразу после старта __NOP(); // __NOP(); // TIM12->SR &= ~(TIM_SR_UIF); //**************************** //TIM16->CR1 |= TIM_CR1_CEN; //============================================================================================== // //В инициализации сделать поочерёдную отправку команд настроек и получение ответов с выводом сообщений на экран. Т.е. Постали - получили -вывели. След ком. послали получили вывели. //поменять 16 таймер на другой, не совмещенный по векторам ни с каким другим } void GSM_COMM_SEND_SMS_SERVICE(){ DMA1_Channel4->CMAR = (uint32_t)Buffer_CSCA; DMA1_Channel4->CNDTR = sizeof(Buffer_CSCA); DMA1_Channel4->CCR |= DMA_CCR4_EN; } void GSM_COMM_GET_SMS_SERVICE(){ buf = USART1->DR; LCD_Send_Data(buf); //while(!(USART2->SR & USART_SR_TC)); //Ждем пока бит TC в регистре SR станет 1 //USART2->DR = buf; } //---------------------------------------------------------------
  8. Приём строки по USART [STM32] Keil5

    Привет!. Помогите пожалуйста. Для вас это наверное расплюнуть, а у меня непонятки. Пишу код в Keil под stm32. Есть модуль, от которого по usart приходит строка вот такого вида: r\n\ +CMGR: "993848",145 r\n\ r\n\ OK Цель: выделить всё что между кавычек. Я так поразмыслил это можно делать 2 способами. Первый: Это кусок кода в файле mod.c где и крутится всё что касается модуля. char buffer[]; uint8_t i; void USART1_IRQHandler(void){ //Прерывание USART1 if(USART1->SR & USART_SR_RXNE){ //Если прерывание вызвано по приёму USART1 USART1->SR &= ~USART_SR_RXNE; //Сбрасываем флаг приёма USART1 flag_receive = 1; } } void Get(){ buffer[i++] = USART1->DR; } Здесь стандартно по прерыванию приёма я сбрасываю флаг, устанавливаю флаг, что я готов записать принятый байт и быстро ухожу. В самом прерывании я не стал записывать в переменную содержание регистра DR ибо сами знаете делать что-то в прерывании не комильфо. значит флаг flag_receive установился и далее в цикле while файла main.c: if(flag_receive){ Get(); flag_receive = 0; } Далее вызываем Get и всё складируется в buffer. Далее с помощью регулярки выдернуть всё что между кавычек. Вариант 2 char buffer; char str[]; void Get(){ uint8_t f; buffer = USART1->DR; if(f){ str[i++] = buffer; } if(buffer == """){ if(f){ f = 0; } else { f = 1; } } } То есть вытягиваем нужную строку непосредственно в процессе приёма байтов посимвольно. В коде могут быть ошибки, так как хотел показать идею. А теперь главные вопросы Если сначала набивать массив строкой, а потом разбирать регуляркой, как написать эту самую регулярку, что бы между кавычек вытащить? И второй вопрос, что будет работать быстрее и эффективнее 1 или 2 вариант?
  9. Какой микрофон выбрать?

    Вот я и планирую звук вставлять в видос. А не выводить его через звуковуху. Многие советуют брать usb и не париться. Ибо, такой микрофон, хороший, можно взять за 12 тонн. А если брать аналог, то он будет чуть дешевле, ну скажем тонн 10 и к нему пульт по такой же цене. получается в 2 раза
  10. Какой микрофон выбрать?

    Так что бы вы выбрали исходя из условий использования?)
  11. Какой микрофон выбрать?

    да вы просто скажите где звук лучше и всё)))
  12. Сразу скажу, сильно не пинайте, я в вопросах аудио не бум бум. Я знаю одно. Мне нужен конденсаторный микрофон. Скажем так.... для некоего аналога блога. Чего я хочу? Что бы звук был чистый, вот как радио слушаешь и там люди в студии сидят и базарят. У них такой чистый звук, голос даже приятно меняется... как-то так. Я поискал инфу, вот для таких целей нужен как раз конденсаторный микрофон. Я по отзывам смотрю в сторону "аудиотехники". Только есть одно но. Собираюсь подключать к ПК. Так вот впорос. Взять USB конденсаторный микрофон и не мучаться? или взять XLR + некое устройство для подключения к звуковой карте?. Вопрос в том, где звук будет качественнее. Либо на usb либо на xlr.
  13. ШИМ На таймере 17

    Проблематик решён. Не правильно настроен выход. Надо было не как выход, а как альтернативный выход. + Установка бита MOE в регистре BDTR
  14. ШИМ На таймере 17

    Приветствую! Не получается настроить ШИМ. Контроллер STM32f100ret6b. У меня к ноге PA7 подключён светодиод. Я хотел на него вывести шим. По даташиту на эту ногу можно повесить 17таймер, с ремапом. В отладчике посмотрел таймер тикает. А вот на ноге ничего. Порт настроен правильно. проверял. на 50 мгц. Если 1 на него кинуть принудительно то диод горит. Настройки порта не привожу, там всё норм. Альтернативка тоже там включается. МК тикает 24 мгц RCC->APB2ENR |= RCC_APB2ENR_TIM17EN; //Taktirovanie taimera 17 AFIO->MAPR2 |= AFIO_MAPR2_TIM17_REMAP; //Remap taimera 17 na port PA7 TIM17->PSC = 0; //Prescaler TIM17->CR1 |= TIM_CR1_ARPE; //ARR register is buffered TIM17->ARR = 1000; TIM17->CCMR1 |= TIM_CCMR1_OC1PE; TIM17->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; TIM17->CCR1 = 500; TIM17->CCER |= TIM_CCER_CC1E | TIM_CCER_CC1P; TIM17->DIER |= TIM_DIER_UIE; TIM17->CR1 |= TIM_CR1_CEN;
  15. Добрый вечер. Подскажите такую вещь. Я делаю макетку с stm32f107vct6. Дошло до составления схемы в части usb разъёма. В даташите описано, что этот МК поддерживает FS OTG и хост. Программная часть будет потом, мне бы сейчас разобраться как подпаивать гнездо к МК. Посмотрел схему discovery, прикрепил изображение. Там где схема попроще, я так понял, что этот разъём просто для питания всей платы + stlink. А вот вторая схема - fs_otg. В примерах люди делают виртуальный com порт и подсоединяются по схеме, то что попроще. Шить я буду по SWD, для этого usb мне не нужен. Так как у этого МК один usb я хочу использовать его для: подключения к пк - вирткальный com порт. И для втыкания флешки. Вот скажите, я так понял, что флешку поймёт схема, та что по сложнее. Если я сделаю схему для otg (для флешки), могу ли я подрубаться к пк по этому же разъёму? Ещё вопрос, на схеме otg на отдельной микрухе сделана подтяжка VBUS. И подсоединяется она на PC0. Для чего это нужно и вообще почему выбран PCO. Посмотрел библиотеку от ST для USB FS, там этот пин вообще не фигурирует и ничего не делает, хотя в примерах он проскакивает в составе этой библиотеки. Но основной вопрос - схема соединения МК и usb разъёма. Вот завис я на этом(