Вт фев 12, 2019 06:38:33
ну так этот аспект к округлению имеет опосредствованное отношение, это скорее проблема форматирования вывода... лично я решал в одном из своих проектов эту проблему так: для положительных температур ниже 100 градусов выводил с десятыми без округления, для температур от 100 и выше - без десятых (считая, что при таких температурах десятые доли уже не особо что-либо решают... например, в бане). аналогично для отрицательных температур... т.е. пока место под десятые есть за счет старших разрядов - десятые выводил, а иначе ими жертвовал в пользу старших разрядов и знака.AndTer писал(а):Ну как же, например просто нет места на индикаторе для 4 цифр + знак + символ температуры. Не делать же бегущей строкой)
Потому и не всегда.
Чт апр 04, 2019 13:30:07
// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
int a;
//Interrupt function will be automatically executed on Interrupt
void interrupt()
{
if(INTCON.RBIF == 1) //Makes sure that it is PORTB On-Change Interrupt
{
INTCON.RBIE = 0; //Disable On-Change Interrupt
if(PORTB.F4 == 1) //If ECHO is HIGH
T1CON.F0 = 1; //Start Timer
if(PORTB.F4 == 0) //If ECHO is LOW
{
T1CON.F0 = 0; //Stop Timer
a = (TMR1L | (TMR1H<<8))/58.82; //Calculate Distance
}
}
INTCON.RBIF = 0; //Clear PORTB On-Change Interrupt flag
INTCON.RBIE = 1; //Enable PORTB On-Change Interrupt
}
void main()
{
char txt[7];
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
TRISB = 0b00010000;
INTCON.GIE = 1; //Global Interrupt Enable
INTCON.RBIF = 0; //Clear PORTB On-Change Interrupt Flag
INTCON.RBIE = 1; //Enable PORTB On-Change Interrupt
Lcd_Out(1,1,"Developed By");
Lcd_Out(2,1,"electroSome");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
T1CON = 0x10; //Initializing Timer Module
while(1)
{
TMR1H = 0; //Setting Initial Value of Timer
TMR1L = 0; //Setting Initial Value of Timer
a = 0;
PORTB.F0 = 1; //TRIGGER HIGH
Delay_us(10); //10uS Delay
PORTB.F0 = 0; //TRIGGER LOW
Delay_ms(100); //Waiting for ECHO
a = a + 1; //Error Correction Constant
if(a>2 && a<400) //Check whether the result is valid or not
{
IntToStr(a,txt);
Ltrim(txt);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Distance = ");
Lcd_Out(1,12,txt);
Lcd_Out(1,15,"cm");
}
else
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Out of Range");
}
Delay_ms(400);
}
}
Пт апр 05, 2019 13:18:08
Вс апр 07, 2019 19:23:55
Сб апр 20, 2019 23:30:51
STMicroelectronics ST-LINK GDB server. Version 5.1.0
Copyright (c) 2018, STMicroelectronics. All rights reserved.
Starting server with the following options:
Persistent Mode : Disabled
LogFile Name : C:\Users\Vovan\Atollic\TrueSTUDIO\STM32_workspace_9.3\prt1\Debug\st-link_gdbserver_log.txt
Logging Level : 31
Listen Port Number : 61234
Status Refresh Delay : 15s
Verbose Mode : Enabled
SWD Debug : Enabled
Hardware watchpoint supported by the target
SWD frequency = 4000 kHz
ST-LINK Firmware version : V2J31S0
Device ID: 0x440
PC: 0x8000ab0
ST-LINK device status: HALT_MODE
ST-LINK detects target voltage = 2.92 V
ST-LINK device status: HALT_MODE
ST-LINK device initialization OK
Waiting for debugger connection...
Waiting for connection on port 61234...
Accepted connection on port 61234...
Debugger connected
Enter STM32_AppReset() function
NVIC_DFSR_REG = 0x00000009
XPSR = 0xC1000000
------ Switching to STM32CubeProgrammer -----
----------
STM32CubeProgrammer v1.3.0
----------
Log output file: C:\Users\Vovan\AppData\Local\Temp\STM32CubeProgrammer_a04208.log
Error: No debug probe detected.
Encountered Error when opening C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe
------ Switching context -----
Hardware watchpoint supported by the target
SWD frequency = 4000 kHz
ST-LINK Firmware version : V2J31S0
Device ID: 0x440
PC: 0x8000ab0
ST-LINK detects target voltage = 2.91 V
ST-LINK device status: HALT_MODE
ST-LINK device initialization OK
Error in STM32CubeProgrammer
ST-LINK device status: RUN_MODE
Wait after kill 1000 msec
Debugger connection lost.
Shutting down...
Вс апр 21, 2019 09:34:37
Вс апр 21, 2019 12:56:43
Вс апр 21, 2019 14:48:36
Пн апр 22, 2019 13:07:59
Пт апр 26, 2019 04:31:44
Пт апр 26, 2019 07:58:15
Пт апр 26, 2019 18:40:18
Сб апр 27, 2019 07:56:27
Сб апр 27, 2019 08:52:58
Сб апр 27, 2019 08:57:10
Вс апр 28, 2019 08:53:42
Ср май 08, 2019 16:01:13
Ср май 08, 2019 17:39:29
Сб май 11, 2019 07:24:14
Сделал в программе установку пороговых значений через запись в EEPROM при прошивке МК.
Ячейка с адресом 0x00 - нижний порог (по умолчанию 91 или 0x5B в hex-формате), адрес 0x01 - верхний порог (по умолчанию 97 или 0x61 в hex-формате).
В архиве файлы EEPROM (два варианта - bin и eep). Вы можете открыть их перед прошивкой в программе-прошивалке, отредактировать и залить в EEPROM микроконтроллера.