Jump to content

bardak

Members
  • Content Count

    15
  • Joined

  • Last visited

Community Reputation

0 Обычный

About bardak

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    Не связан с электроникой
  1. Необходима помощь. Не могу разобраться как правильно читать значение RSSI LQI в реальном времени. Сам передатчик работает исправно как на прием так и на передачу. Стоимость работы 250 р.
  2. Нужна помощь, как правильно загнать зверя в режим SLEEP, так как на текущий момент потребление порядка 0.5мА! Необходимо разъяснить, что я делаю не правильно. Бюджет 500 р.
  3. Разобрался, оказывается мешал компаратор. Выключил и все норм!
  4. Появился вопрос, с входа GP0 не могу считать значение бита, отлаживаю в протеусе. Текст программы прикладываю, в даташите никаких ограничений на этот вывод не видел. #include "htc.h" #include "xc.h" #include "def.h" #define _XTAL_FREQ 4000000 //Частота внутреннего генератора #define KEY_S1 GP0 #define KEY_S2 GP1 #define KEY_S3 GP3 #define LED GP2 #define TX GP5 #pragma config FOSC = INTRCIO #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = ON #pragma config CPD = OFF #pragma config BOREN = OFF //////////Прототипы функций//////// void came(unsigned int); void enter_sleep(void); void wake_up(void); void main() { /////////////////////////////////////// //####Настроим направление выводов.#### /////////////////////////////////////// TRISIO=0x01;GP0 - настроен на вход, остальные выводы выход (кроме GP3) while(1) { if(KEY_S1==1) { int counter=0; while(KEY_S1==1) { __delay_us(50); counter++; if(counter==2) {LED=1;__delay_ms(500);LED=0;} if(counter==1000) { } } } } }
  5. Товарищи, вроде разобрался! Всем спасибо за не о ценимую помощь. Будут вопросы, спрошу)))
  6. А чего определятся пишешь, программу, рождаются вопросы, все очень просто, с битами я разобрался быстро, потом мне стало важно устройство держать в SLEEP режиме, так как при нажатии на кнопку должно отрабатывать и засыпать! Буду признателен если Вы мне поможете, если у меня дальше будут рождаться вопросы, а не указывать на очевидные моменты.
  7. Огромное спасибо, а вот обработчик я не знаю какой здесь должен быть. Попробую разобраться, если не смогу - попрошу Вас помочь. Спасибо еще раз.
  8. В процедуре enter_sleep(), ошибочно при копировании вставился NOP
  9. перед вводом в сон, обязательным требованием есть соответствие уровней порта и защелки , те необходимо прочитать порт GPIE=1; GPIF=0; GPIO=0; GPIO=GPIO; SLEEP(); NOP(); Я приведу код программы. #include <htc.h> #include <xc.h> #define _XTAL_FREQ 4000000 //Частота внутреннего генератора #define KEY_S1 GP5 #define KEY_S2 GP4 #define KEY_S3 GP2 #define LED GP1 #define TX GP0 unsigned long sleep_count=0; #pragma config FOSC = INTRCIO #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = ON #pragma config CPD = OFF #pragma config BOREN = OFF //////////Прототипы функций//////// void enter_sleep(void); void wake_up(void); void enter_sleep(void) { IOC5=1;//разрешение прерывания по изменению уровня сигнала на GP5 GPIE=1; GPIF=0; GPIO=0; GPIO=GPIO; NOP(); SLEEP(); } void wake_up(void) { GIE = 0; // бит глобального разрешения прерываний GPIF=0; GPIE=0; TRISIO=0x3C; IOC5=0; } void main() { /////////////////////////////////////// //####Настроим направление выводов.#### /////////////////////////////////////// TRISIO=0x3C; // ############################################# /////////Настройка регистров прерываний///////// // ############################################# //INTE = 1; // бит разрешения внешнего прерывания INT GIE = 1; // бит глобального разрешения прерываний GPIE=1;//бит разрешения прерывания по изменению уровня сигнала на GPIO // ############################################# LED=0; while(1) { if(KEY_S1==1) { int counter=0; while(KEY_S1==1) { __delay_us(500); counter++; if(counter==2){LED=1;__delay_ms(500);LED=0;} if(counter==3000) { //Для длительного нажатия } } } if(sleep_count==15000) { sleep_count=0; LED=1; __delay_ms(1500); LED=0; enter_sleep(); NOP(); wake_up(); } sleep_count++; __delay_us(10); } }
  10. Исправил на IOC5=1; добавил GPIE=1;, но картина не изменилась.
  11. буду рад, если кто подскажет, как правильно вывести мк из состояния sleep при помощи прерывания по изменению уровня сигнала на GP5. В сон ввожу так IOCB5=1;//разрешение прерывания по изменениб уровня сигнала на GP5 GPIF=0; GIE=0; SLEEP(); NOP(); А как правильно вывести, в великому сожаление не получается!
  12. Если честно на этот счет не задумался. А как правильер должно быть?! Просто на готовой плате там именно подтяжка к минусу, я решил заменить стоковую микруху на этот мк! дабы он по питанию подошел! Спасибо - разобрался!
  13. Читаю документацию на мк и из нее не получается "уловить" как настроить вывод GP на вход и считывать биты. Прикладываю, схему из Протеуса, то что я хочу видеть! Буду признателен в информации!
  14. Сколько не пытался сделать данную задержку на таймера так ничего не вышло! Что я делаю не так! подскажите?
  15. Я Вас понял, да, извиняюсь, сейчас все выложу. #include "stm32f0xx_tim.h" #include "stm32f0xx_rcc.h" #include "stm32f0xx_gpio.h" GPIO_InitTypeDef gpioc; TIM_TimeBaseInitTypeDef tim3; void GPIOC_init(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE); gpioc.GPIO_Mode=GPIO_Mode_OUT; gpioc.GPIO_OType=GPIO_OType_PP; gpioc.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; gpioc.GPIO_PuPd=GPIO_PuPd_NOPULL; gpioc.GPIO_Speed=GPIO_Speed_Level_1; GPIO_Init(GPIOC,&gpioc); } void TIM3_init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM3->CR1|=(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1); tim3.TIM_Prescaler=79+1; tim3.TIM_Period=65534+1; TIM_TimeBaseStructInit(&tim3); TIM_TimeBaseInit(TIM3,&tim3); TIM_Cmd(TIM3,ENABLE); TIM3->CR1|=(1<<0); } int main(void) { GPIOC_init(); TIM3_init(); while(1) { if(TIM3->CNT==10){GPIO_SetBits(GPIOC,GPIO_Pin_8);} if(TIM3->CNT==20){GPIO_ResetBits(GPIOC,GPIO_Pin_8);} } } Среда разработки Keil u5. Плата STM32F0DISCOVERY внешнего кварца на STM32F051R8T6 нет, используется внутренний HSI
×
×
  • Create New...