OKF писал(а):потому как корпус датчика неразборной.
кто мешает применить msp430? Цены на msp430G2 вполне гуманны http://ru.aliexpress.com/item/NEW-MSP43 ... 38134.htmlOKF писал(а):После разборки, внутри обнаружился msp430
OKF писал(а):потому как корпус датчика неразборной.
кто мешает применить msp430? Цены на msp430G2 вполне гуманны http://ru.aliexpress.com/item/NEW-MSP43 ... 38134.htmlOKF писал(а):После разборки, внутри обнаружился msp430
Вот именно что один из примеров. Микрочип уже давно включился в борьбу за низкое энергопотребление со своей XLP. И для простых применений типа подрыгать ногой или передать что-то по UART ещё не факт что MSP будет более удачным в этом смысле.OKF писал(а):Это один из примеров компактности, низкопотребляемости и уличного исполнения.
Это да. Хотя там страшного ничего и нет тот же Си тот же ИАР но одноразовость действительно оптимизма не вселяет.Alexeyslav писал(а): Применить MSP430 могут помешать обстоятельства. Не будешь же изучать совершенно новую архитектуру, ещё один язык, еще одну среду только лишь для одного проекта.
Не катается. Но проверить работоспособность могу. Нужно только дождаться -20. В Крыму.Alexeyslav писал(а):А кто-то катается на велике в -40 да хотябы даже в -20...
Хотите сказать, что в остальных местах что-то происходит? Что за компилятор, который молчит на такое:Alex2016 писал(а):// ВОТ ЗДЕСЬ НИЧЕГО НЕ ПРОИСХОДИТ.
Код: Выделить всё
unsigned char MIN_THRESHOLD_SHORT_PULSE = 889;
unsigned char MAX_THRESHOLD_SHORT_PULSE = 1333;
unsigned char MIN_THRESHOLD_LONG_PULSE =1334;
unsigned char MAX_THRESHOLD_LONG_PULSE = 2220;Что за компилятор, который молчит на такое:
unsigned char MIN_THRESHOLD_SHORT_PULSE = 889;
unsigned char MAX_THRESHOLD_SHORT_PULSE = 1333;
unsigned char MIN_THRESHOLD_LONG_PULSE =1334;
unsigned char MAX_THRESHOLD_LONG_PULSE = 2220;
Да, выполнение кода заходит в обработчик прерывания, когда нажимаешь на кнопку пульта,я тестировал в дебаге.Кроме того, Вы уверены, что процедура "EXTI_PB7" вообще вызывается?
Вот за этот совет, вялики дзякуйЕсли Timer_value меняется в прерывании, то она волатильная и скрывать этот факт от компилятора означает ставить себе грабли на будущее.
Код: Выделить всё
volatile unsigned short Timer_value |= ((TIM3_CNTRH << 8)|TIM3_CNTRL);Код: Выделить всё
Timer_value = TIM3_CNTRH << 8;
Timer_value |= TIM3_CNTRL;Вы из тех, кто считает, что warnings придумали трусы? А Pe069 и вовсе действует на Вас, как красная тряпка на быка?Alex2016 писал(а):Но IARовский компилятор не агрился на такую писанину
Это присвоение упомянуто уже трижды - один раз как "равно" и дважды, как "или равно" - а зачем побитово ИЛИть с предыдущим значением? А теперь вот еще и только с младшей его частью...?Alex2016 писал(а):Корректнее писать:Код: Выделить всё
... Timer_value |= TIM3_CNTRL;
Вы тоже не поняли моего вопроса. О том, что младший разряд, при сдвиге к старшим, заполняется нулями, даше хреновые-химеры знают, не надо никого равнять с ними - вопрос конечно же был о другом:Alexeyslav писал(а):Ну так первой строчкой мы установили старшую часть (TIM3_CNTRH сдвинутый на 8 бит) младшая при этом равна нулю. Второй строчкой OR-им младшую часть в ту же переменную, а по нулям значение очень хорошо ложится 1 в 1.
Как я уже говорил, это присвоение было упомянуто трижды и все три раза по-разному... так вот было интересно - нафига было в процитированном варианте ИЛИть-то с битами предыдущего результата?Alex2016 писал(а):
Меньшинство - это не никто. И по-мне - лучше быть с ними, чем с тем большинством, что типа тебя.HHIMERA писал(а):вообще никто не понимает
Код: Выделить всё
#define F_APB1 20000000UL
void delay_ms(uint16_t delay)
{
TIM14->PSC = F_APB1 / 1000 + 1; //устанавливаем предделитель
TIM14->ARR = delay; //устанавливаем значение переполнения таймера, а значит и значение при котором генерируется Событие обновления
TIM14->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR
TIM14->CR1 |= (TIM_CR1_CEN | TIM_CR1_OPM); //Запускаем таймер записью бита CEN и устанавливаем режим Одного прохода установкой бита OPM
while ((TIM14->CR1 & TIM_CR1_CEN) != 0);
}
void delay_mc(uint16_t delay)
{
TIM14->PSC = F_APB1 / 1000000 + 1; //устанавливаем предделитель
TIM14->ARR = delay; //устанавливаем значение переполнения таймера, а значит и значение при котором генерируется Событие обновления
TIM14->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR
TIM14->CR1 |= (TIM_CR1_CEN | TIM_CR1_OPM); //Запускаем таймер записью бита CEN и устанавливаем режим Одного прохода установкой бита OPM
while ((TIM14->CR1 & TIM_CR1_CEN) != 0);
}
GPIO_ResetBits(GPIOA, GPIO_Pin_14);
GPIO_SetBits(GPIOF, GPIO_Pin_0);
можно как нибудь так:service47 писал(а):Как сделать такое же...
Код: Выделить всё
void delay_1ms()
{
TIM2->SR1 &= ~TIM2_SR1_UIF;
TIM2->PSCR = 0x06; // //Предделитель на 2^6=64 16000000/64 = 250000 Hz
TIM2->ARRH = 0; ///Значение перезагрузки 250000/250 = 1000 Гц
TIM2->ARRL = 250;
TIM2->CR1 |= TIM2_CR1_CEN; // Разрешаем счет.
while((TIM2->SR1 & TIM2_SR1_UIF)==0);
}
uint16_t c = 500; //delay 500ms
while(--c)
{
delay_1ms();
}Код: Выделить всё
void Configure_PA0(void)
{
/* Set variables used */
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// Enable clock for GPIOA
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
// Enable clock for SYSCFG
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
// Set pin as input
PA_DDR_bit.DDR0 = 0; // Set PA0 as input
PA_ODR_bit.ODR0 = 0; // Latch "1" in output register
PA_CR1_bit.C10 = 1; // Input with pull-up
PA_CR2_bit.C20 = 0; // External interrupt disabled
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
// Tell system that you will use PA0 for EXTI_Line0
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4
| EXTI_Line5 | EXTI_Line6 | EXTI_Line7 | EXTI_Line8
| EXTI_Line9 | EXTI_Line10 | EXTI_Line11 | EXTI_Line12
| EXTI_Line13 | EXTI_Line14 | EXTI_Line15 | EXTI_Line16
| EXTI_Line17 | EXTI_Line18 | EXTI_Line19 | EXTI_Line20
| EXTI_Line21 | EXTI_Line22 | EXTI_Line23 | EXTI_Line25
| EXTI_Line26 | EXTI_Line27 | EXTI_Line31);/**/
// PA13 is connected to EXTI_Line0
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
// Enable interrupt
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
// Interrupt mode
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
// Triggers on rising and falling edge
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
// Add to EXTI
EXTI_Init(&EXTI_InitStructure);
// Разрешаем прерывания в периферии для выводов 0
EXTI->IMR |=(EXTI_IMR_MR0);
/*
// Configure external interrupts
CPU_CFG_GCR_bit.AL = 1; // Interrupt-only activation level (IRET causes the CPU to go back to Halt mode)
EXTI_CR1_bit.P0IS = 0x02; // EXTI0 on falling edge only
//ITC_SPR3_bit.VECT8SPR = 0x03; // EXTI0 IRQ level 3 (high priority) (EXTI0 IRQ = Vector 8)
asm("RIM"); // Enable global interrupts (enable priorities)
*/
// Add IRQ vector to NVIC
// PA0 is connected to EXTI_Line0, which has EXTI0_IRQn vector
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
// Set priority
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
// Set sub priority
//NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
// Enable interrupt
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// Add to NVIC
NVIC_Init(&NVIC_InitStructure);
NVIC_EnableIRQ(EXTI0_1_IRQn);
NVIC_SetPriority(EXTI0_1_IRQn,0);
}
GPIO_ResetBits(GPIOA, GPIO_Pin_14);
GPIO_SetBits(GPIOF, GPIO_Pin_0);Да строчку в строчку... Для TIM1 уж точно... Для других таймеров... с учётом особенностей прескалера... Таймера то похожи...service47 писал(а):Как сделать такое же от STM32, но для STM8 в IAR:
Код: Выделить всё
#include "stm8l15x_conf.h"
#include "stm8l15x_it.h"
#include "stm8l15x.h"
#include "stm8l15x_adc.h"
#include "stm8l15x_aes.h"
#include "stm8l15x_beep.h"
#include "stm8l15x_clk.h"
#include "stm8l15x_comp.h"
#include "stm8l15x_dac.h"
#include "stm8l15x_dma.h"
#include "stm8l15x_exti.h"
#include "stm8l15x_flash.h"
#include "stm8l15x_gpio.h"
#include "stm8l15x_i2c.h"
#include "stm8l15x_irtim.h"
#include "stm8l15x_itc.h"
#include "stm8l15x_iwdg.h"
#include "stm8l15x_lcd.h"
#include "stm8l15x_pwr.h"
#include "stm8l15x_rst.h"
#include "stm8l15x_rtc.h"
#include "stm8l15x_spi.h"
#include "stm8l15x_syscfg.h"
#include "stm8l15x_tim1.h"
#include "stm8l15x_tim2.h"
#include "stm8l15x_tim3.h"
#include "stm8l15x_tim4.h"
#include "stm8l15x_tim5.h"
#include "stm8l15x_usart.h"
#include "stm8l15x_wfe.h"
#include "stm8l15x_wwdg.h"