proton8489

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

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

  • Посещение

Репутация

0 Обычный

О proton8489

  • Звание
    Новенький
  • День рождения 17.04.1991

Контакты

  • ICQ
    402313977

Информация

  • Пол
    Мужчина
  • Интересы
    Радиотехника, программирование
  • Город
    Санкт-Петербург

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Цифровые устройства
  1. Внешние прерывания STM32F10xxx

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

    Ну неужели никто не знает и не подскажет? Проблема точно не аппаратная, контакт есть, а реакции на него нет.
  3. Внешние прерывания STM32F10xxx

    Господа, имею следующий код (а он имеет меня), который вообще никак не заметен микроконтроллером (stm32f103rb, stm32f103c8). Подавая сигналы "0" или "1" на входы прерывания не выполняются. Пробовал вызывать внутреннее прерывание, но попытки были бессмысленны. Что здесь не так? void NVIC_InputInit(void) { RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPCEN; // Тактирование альтернативных функций и порта PIO_INIT_PIN(GPIOC,6,Input_Floating); // PС6,7 на вход PIO_INIT_PIN(GPIOC,7,Input_Floating); PIO_INIT_PIN(GPIOC,10,Output2_Push_Pull); // PС10,11 на выход PIO_INIT_PIN(GPIOC,11,Output2_Push_Pull); AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI6_PC | AFIO_EXTICR2_EXTI7_PC; // Настройка порта и выбор пинов для прерывания EXTI->IMR |= EXTI_IMR_MR6 | EXTI_IMR_MR7; // Разрешаем генерацию прерывания в периферии EXTI->RTSR |= EXTI_RTSR_TR6 | EXTI_RTSR_TR7; // Настроим прерывание на детектирование обоих фронтов EXTI->FTSR |= EXTI_FTSR_TR6 | EXTI_FTSR_TR7; // у двух входов //EXTI->EMR |= EXTI_EMR_MR6; //Разрешение возобновления при внешних событиях // Разрешаем прерывания //uint32_t prioritygroup = NVIC_GetPriorityGrouping(); //uint32_t priority = NVIC_EncodePriority(prioritygroup, 1, 0 ); //NVIC_SetPriority(EXTI9_5_IRQn, priority); NVIC_EnableIRQ(EXTI9_5_IRQn); // Разрешаем глобальные прерывания __enable_irq(); //EXTI->SWIER |= EXTI_IMR_MR7; // Внутреннее прерывание } void EXTI9_5_IRQHandler(void) { if (EXTI->PR & (1<<6)) //проверяем прерывание от EXTI6 { EXTI->PR |= (1<<6); //EXTI->PR |= EXTI_PR_PR6; //сброс флага прерывания PIO_RESET(GPIOC,11); } // if ((EXTI->PR & EXTI_PR_PR7) == EXTI_PR_PR7) if (EXTI->PR & (1<<7)) //проверяем прерывание от EXTI6 { EXTI->PR |= (1<<7); //EXTI->PR |= EXTI_PR_PR7; //сброс флага прерывания PIO_RESET(GPIOC,10); } }
  4. Системная частота SystemCoreClock

    Хорошо, допустим. Тогда вопрос такой: я устанавливаю некую частоту МК через PLL, как мне убедиться в том, что она к примеру 72МГц, а не 24, совсем никак?
  5. Системная частота SystemCoreClock

    Возможно и никак, но согласно документации это значение обновляется с помощью функции SystemCoreClockUpdate при изменении частоты тактирования МК.
  6. Системная частота SystemCoreClock

    Дорогие гуру, прошу помощи в освоении SystemCoreClock. Как я понимаю это некая функци в STM32, которая возвращает значение установившейся частоты микроконроллера. Но при прямом использовании IAR ругается на то, что эта функция не объявлена. Конечно можно использовать SPL, но мне крайне необходима максимальная скорость и микрозадержки, поэтому хочется получать значение частоты без SPL и HAL. Спасибо за любую наводку.
  7. Усилитель Радиотехника У-101-Стерео

    Вот именно. Вчитайтесь в слова и посмотрите на блочную схему. В словах написано, что не нужно соединять корпус с общим проводом, а на картинке он соединён.
  8. Усилитель Радиотехника У-101-Стерео

    У меня У-101, а не У-7101. Нашёл на У-101 такую статью. http://35ac-018.ucoz.ru/publ/2-1-0-24 Только непонятен один момент: у автора написано: "И проверить – чтобы больше нигде не было контактов общего провода с корпусом. " Но тут же схема обновлённой разводки земель:
  9. Усилитель Радиотехника У-101-Стерео

    А какую вам техническую инфу предоставить? Схема усилителя с тремя микросхемами в блоке тембров, никаких наворотов и переделок не производилось.
  10. Усилитель Радиотехника У-101-Стерео

    Это мне расценивать как самый точный и ценный совет сайта? Я, кажется, уточнил основное проблемное место Акустическую систему проверил первым делом - подключил несколько разных, но эффект один. Источник звука и кабель в полном порядке.
  11. Усилитель Радиотехника У-101-Стерео

    Скажите, пожалуйста, где искать проблему, если при воспроизведении звука через усилитель не слышно некоторых частот (басы частично отсутствуют, голос песни словно за кадром и проч...) ? * все электролитические конденсаторы заменены на новые
  12. Распознование Команд С Ик Пульта

    Всем привет! Принимаю команды с пульта RC5 и вывожу код на индикаторы (статья находится здесь). Но я пишу на CVAVR, поэтому код немного изменён. // Декодирование сигналов протокола RC5 #include <mega8.h> #include <delay.h> // Временные пределы #define Tmin 40 // длинный промежуток #define Tmax 68 #define TminK 22 // короткий промежуток #define TmaxK 34 //------------------0-----1-----2-----3-----4 char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, //------------------5-----6-----7-----8-----9 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; volatile unsigned char segcounter = 0; volatile int display1 = 0; volatile int display2 = 0; unsigned char sct_bit = 0; // Счетчик битов RC5 unsigned char RC5_buffer [14]; // Буфер RC5 unsigned char centre = 0; // Флаг центра unsigned char not_korr = 0; // Флаг попадания в промежутки unsigned char Timer = 0; // число в счетчике таймера unsigned char command = 0; // переменная для команды // Функция очистки буфера void rc5_cl_buf(void) { unsigned char i = 0; for (i=0; i<14; i++) { RC5_buffer [i] = 0; } } // функция остановки таймера void rc5_ti_stop(void) { GICR = 0x00; TCCR0 = 0x00; TCNT0 = 0; sct_bit = 0; } // Обработчик прерывния по переполнению Т0 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { rc5_ti_stop(); //останавливаем таймер rc5_cl_buf(); //очищаем буфер GICR |= (1 << INT0); // разрешаем прерывания по входу INT0 GIFR |= (1 << INTF0); // сбрасываем флаг прерывания // (если произошло) } // Обработчик прерывния по переполнению Т1 // Динамическая индикация interrupt [TIM1_OVF] void timer1_ovf_isr(void) { PORTB = 0xFF; PORTC = (1 << segcounter); switch (segcounter) { case 0: PORTB = ~(SEGMENTE[display1]); break; case 1: PORTB = ~(SEGMENTE[display2]); break; } if ((segcounter++) > 0) segcounter = 0; } // Обработчик внешнего прерывания INT0 interrupt [EXT_INT0] void ext_int0_isr(void) { Timer = TCNT0; // запоминаем значение счетчика TCNT0 = 0; // обнуляем счетчик not_korr = 1; if(sct_bit==0) { TCCR0 |= (1 << CS02); // запускаем таймер (31.250 KHz) //записываем в эл.массива RC5_buffer [sct_bit] = !(PINC&(1 << PORTC.2)); sct_bit++; // +1 к счётчику принятых битов centre = 1; } else { // Проверка короткого промежутка if ((Timer > TminK)&&(Timer < TmaxK)) { if (centre) { centre = 0; not_korr = 0; } else { centre = 1; RC5_buffer [sct_bit] = !(PINC&(1 << PORTC.2)); sct_bit++; not_korr = 0; } } // проверка длинного промежутка if ((Timer > Tmin)&&(Timer < Tmax)) { RC5_buffer [sct_bit] = !(PINC&(1 << PORTC.2)); sct_bit++; not_korr = 0; } if (not_korr == 1) { // если не попали ни в один из промежутков то rc5_ti_stop(); // останавливаем таймер rc5_cl_buf(); // очищаем буфер } if (sct_bit == 14) { // если бит последний то rc5_ti_stop(); // останавливаем таймер // Формируем код команды command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)| (RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)| (RC5_buffer [12] << 1)|RC5_buffer [13]; // Выводим данные на дисплей display1 = command%10; // преобразование для 1 цифры command = command/10; // преобразование кода команды display2 = command%10; // преобразование для 2 цифры } GICR |= (1 << INT0); // разрешаем прерывания по входу INT0 GIFR |= (1 << INTF0); // сбрасываем флаг прерывания по входу INT0 } } void main(void) { DDRB = 0xFF; // выход PORTB = 0x00; DDRC |= (1 << PORTC.1)|(1 << PORTC.0); // выход DDRC &= ~(1 << PORTC.2); // вход ИК PORTC = 0x00; TIMSK |= (1 << TOIE0); // разрешение прерывания по таймеру0 TIMSK |= (1 << TOIE1); // разрешение прерывания по таймеру1 TCCR1B |= (1 << CS10); // без предделителя GICR |= (1 << INT0); // разрешаем прерывания по входу INT0 MCUCR |= (1 << ISC00); // прерывание по любому фронту GIFR |= (1 << INTF0); // сбрасываем флаг прерывания #asm //разрешаем прерывания sei #endasm while(1) { } }; При повторном нажатии на одну и ту же кнопку выводится разные цифры, либо высвечивается 0. Как это исправить?
  13. Простой Жучок На К155тл1

    а у меня жучок на к155тл1 не работал, а только телевизор не показывал, т.е. работал как глушитель частоты