44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
c_cal = t_cal / 77616.0;
int_count =0;
while(1)
{
if( sec_flag )
{
//Measurment
t_meas = 1.0 / timer_count_end;
c_meas = t_meas / 77616.0;
final = fabs( c_cal - c_meas );
//Print out
FloatToStr( final, final_text );
TFT_Rectangle( 100, 100, 200, 120 );
TFT_Write_Text( final_text, 100, 100 );
TFT_Write_Text( " Farad", 190, 100 );
//Reset flags
sec_flag = false;
int_count =0;
timer_count_end =0;
}
}
}
void display_init( void )
{
TFT_Init_ILI9341_8bit( 320, 240 );
TFT_BLED =1;
TFT_Set_Pen( CL_WHITE, 1 );
TFT_Set_Brush( 1, CL_WHITE, 0, 0, 0, 0 );
TFT_Set_Font( TFT_defaultFont, CL_BLACK, FO_HORIZONTAL );
TFT_Fill_Screen( CL_WHITE );
TFT_Set_Pen( CL_BLACK, 1 );
TFT_Line( 20, 46,
300, 46 );
TFT_Line( 20, 70, 300, 70 );
TFT_Line( 20, 220, 300, 220 );
TFT_Set_Pen( CL_WHITE, 1 );
TFT_Set_Font( &HandelGothic_BT21x22_Regular, CL_RED, FO_
HORIZONTAL );
TFT_Write_Text( "C Meter click", 105, 14 );
TFT_Set_Font( &Tahoma15x16_Bold, CL_BLUE, FO_HORIZONTAL );
TFT_Write_Text( "C Meter", 135, 50 );
TFT_Set_Font( &Verdana12x13_Regular, CL_BLACK, FO_HORIZONTAL );
TFT_Write_Text( "EasyMx PRO v7 for STM32", 19, 223 );
TFT_Set_Font( &Verdana12x13_Regular, CL_RED, FO_HORIZONTAL );
TFT_Write_Text( "www.mikroe.com", 200, 223 );
TFT_Set_Font( &Tahoma15x16_Bold, CL_BLACK, FO_HORIZONTAL );
}
void system_setup( void )
{
//GPIO
GPIO_Digital_Output( &GPIOC_BASE, _GPIO_PINMASK_2 ); //RST
GPIO_Digital_Input( &GPIOD_BASE, _GPIO_PINMASK_10 ); //INT
//RST Toggle
C_METER_RST =0;
Delay_ms(50);
C_METER_RST =1;
//UART
UART1_Init( 9600 );
UART1_Write_Text( "UART Initialized\r\n
" );
}
void setup_interrupt( void )
{
GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_HIGH); //
Enable digital output on PORTD
GPIOE_ODR = 0xAAAA;
GPIO_Digital_Input(&GPIOD_BASE, _GPIO_PINMASK_10);
RCC_APB2ENR.AFIOEN =1; // Enable clock for alternate pin functions
AFIO_EXTICR3 = 0x0300; // PD10 as External interrupt
EXTI_FTSR = 0x00000400; // Set interrupt on Rising edge
EXTI_IMR |= 0x00000400; // Set mask
NVIC_IntEnable(IVT_INT_EXTI15_10); // Enable External interrupt
EnableInterrupts(); // Enables the processor interrupt.
}
void ExtInt() iv IVT_INT_EXTI15_10 ics ICS_AUTO
{
EXTI_PR.B10 =1; // clear flag
int_count++;
}
void InitTimer2() //1 second
{
RCC_APB1ENR.TIM2EN =1;
TIM2_CR1.CEN =0;
TIM2_PSC = 1124;
TIM2_ARR = 63999;
NVIC_IntEnable(IVT_INT_TIM2);
TIM2_DIER.UIE =1;
TIM2_CR1.CEN =1;
}
void Timer2_interrupt() iv IVT_INT_TIM2
{
TIM2_SR.UIF =0;
timer_count_end = int_count;
int_count =0;
sec_flag = true;
}
Code examples that demonstrate the usage of C Meter click with MikroElektronika hardware, written for mikroC for ARM is available on Libstock
(http://libstock.mikroe.com/projects/view/1879/c-meter-click).
Resources
Page 2 of 3