Linear stabilizer voltage and current on lm358 and transictor. Digital control and indication on stm32f103rbt and tft01-22sp (ili9341). https://www.youtube.com/watch?v=DLC3KEtlr9I https://radiokot.ru/forum/viewtopic.php?f=11&t=112440
Dependencies: mbed TFT_fonts SPI_TFT_ILI9341 beep _24LCXXX
Diff: main.cpp
- Revision:
- 2:d20b1ef35d3f
- Parent:
- 1:7bc0f280c259
- Child:
- 3:791cf9a867d1
--- a/main.cpp Sat Nov 01 13:35:20 2014 +0000 +++ b/main.cpp Sat Nov 01 18:20:43 2014 +0000 @@ -25,7 +25,7 @@ //---------------------------------- SPI_TFT_ILI9341 TFT(D11, D12, D13, D8, D9, D10,"TFT"); // mosi, miso, sclk, cs, reset, dc void grid(void); -//Timer ton;// FPS +Timer fps;// FPS //Ticker valueUI; InterruptIn button(USER_BUTTON); // кнопка питания вкл\выкл //----------------------------------------------------------------------------------------------------------- Ввести в меню опцию коррекции падения напряжения на токоизмерительном шунте. @@ -46,7 +46,7 @@ void drawScreen7(void); // экран 7 void drawScreen8(void); // экран 8 void bootCold(void); // холодный старт -void map(void); // масштабирование +float map(float, float, float, float, float); // масштабирование void SetDateTime(void); // установка даты и времени int year=2014; int mon=11; @@ -120,6 +120,8 @@ int powerProtect=1; //защита от кз int pp=0; //защита от кз для прорисовки меню float brightness = 1.0f; //яркость экрана +int cc=0; // значит идет C.V +int pm=0; // для одной прорисовки сс и сv PwmOut pinbrightness(D15); // выход на ключ регулировки яркости экрана //----------------------------------------------------------------------------------------------------------- DigitalOut powerMosfet(D2); // выход управления нагрузкой @@ -180,30 +182,20 @@ TFT.background(Black); TFT.cls(); TFT.rect(0,0,319,239,0xECA7); //рамка - TFT.rect(10,62,309,76,0x9000); //аналоговая 1 - TFT.rect(10,137,309,151,0x9000); //авалоговая 2 + TFT.rect(10,62,309,76,0xECA7); //аналоговая 1 + TFT.rect(10,137,309,151,0xECA7); //авалоговая 2 //grid(); //int y = 51; //TFT.line(5,y,310,y, White); TFT.background(Black); TFT.foreground(0xECA7); // цвет слов TFT.set_font((unsigned char*) Consolas26x49); - TFT.locate(185, 13); - TFT.printf("V"); // U= + TFT.locate(193, 13); + TFT.printf("v"); // U= TFT.locate(165, 88); - TFT.printf("mA"); // I= + TFT.printf("ma"); // I= complit = 1; // прорисовали! - TFT.fillrect(230,10,304,53,Green); // c.v c.c - TFT.fillrect(230,85,304,128,Green); - TFT.background(Green); - TFT.foreground(Black); - TFT.set_font((unsigned char*) Consolas19x35); - TFT.locate(241, 14); - TFT.printf("C.V"); - TFT.locate(241, 89); - TFT.printf("C.C"); - TFT.fillrect(11,161,104,183,0x09E1); // подвал левый квадрат верхний заливка TFT.rect(10,160,105,232,0xECA7); // левый @@ -224,41 +216,64 @@ } //----------------------------------------------------------------------------- if (powerProtect==0 & pp==0) { // защита от кз - TFT.fillrect(113,161,206,194,0x6000); - TFT.background(0x6000); - TFT.foreground(Black); + TFT.fillrect(113,161,206,194,0x4208); + TFT.background(0x4208); + TFT.foreground(0xA514); TFT.set_font((unsigned char*) Lucida13x21); - TFT.locate(113, 165); + TFT.locate(113, 168); TFT.printf("Protect"); pp=1; } if (powerProtect==1 & pp==0) { - TFT.fillrect(113,161,206,194,Green); - TFT.background(Green); - TFT.foreground(Black); + TFT.fillrect(113,161,206,194,0x0180); + TFT.background(0x0180); + TFT.foreground(Green); TFT.set_font((unsigned char*) Lucida13x21); - TFT.locate(113, 165); + TFT.locate(113, 168); TFT.printf("Protect"); pp=1; } + fps.reset(); + fps.start(); + TFT.background(Black); - TFT.foreground(Green); + + if (cc==1){ //если C.C то меняем цвет значения напряжения + TFT.foreground(Red); + }else{ + TFT.foreground(Green); + } + TFT.set_font((unsigned char*) digi36x44); TFT.locate(10, 10); - TFT.printf("%05.2f", Ureal); // выводим значение с A0 (напряжение) + if(Ureal<0) Ureal=0; + if (Ureal<9.995f){ + TFT.fillrect(10,10,46,54,Black); + TFT.locate(46, 10); + TFT.printf("%4.2f", Ureal); // выводим значение с A0 (напряжение) + }else{ + TFT.locate(10, 10); + TFT.printf("%5.2f", Ureal); // выводим значение с A0 (напряжение) + } + + TFT.pixel(82, 53, Black); + TFT.pixel(117, 53, Black); + TFT.locate(10, 85); + TFT.foreground(Green); TFT.printf("%04.0f", Ireal); // выводим значение с A1 (ток) - TFT.background(0x09E1); // выводим мощность - TFT.foreground(White); + + TFT.background(0x2104); // выводим мощность + TFT.foreground(0xE71C);//текст TFT.set_font((unsigned char*) Lucida13x21); TFT.locate(11, 162); TFT.printf("%05.2f W", Ureal*Ireal/1000); - TFT.background(0x09E1); // выводим время включеной нагрузки t.read() - TFT.foreground(White); + TFT.background(0x2104); // выводим время включеной нагрузки t.read() + TFT.foreground(0xE71C);//текст TFT.set_font((unsigned char*) Lucida13x21); TFT.locate(11, 185); timeConvert(); @@ -267,24 +282,58 @@ if (powerMosfet==0 & pb==0) { // выводим OFF - TFT.background(0x09E1); - TFT.foreground(Black); - TFT.fillrect(215,161,308,231,0x09E1); + TFT.background(0x4208); + TFT.foreground(0xA514); + TFT.fillrect(215,161,308,231,0x4208); TFT.set_font((unsigned char*) Consolas26x49); TFT.locate(226, 174); TFT.printf("OFF"); pb=1; } if (powerMosfet==1 & pb==0) { // выводим ON - TFT.background(Green); - TFT.foreground(Black); - TFT.fillrect(215,161,308,231,Green); + TFT.background(0x0339); + TFT.foreground(Green); + TFT.fillrect(215,161,308,231,0x0339);//0x0339 0x0180 TFT.set_font((unsigned char*) Consolas26x49); TFT.locate(237, 174); TFT.printf("ON"); pb=1; } + + int xscale1 = map(Ureal, 0, 25, 0, 298); + if (xscale1>297) xscale1=298; + TFT.fillrect(11, 63, (xscale1+10), 75, 0x3320); //0x04C9 // аналоговая шкала Напряжение + TFT.fillrect((xscale1+12), 63, 308, 75, Black); + int xscale2 = map(Ireal, 0, 2200, 0, 298); + if (xscale2>297) xscale2=298; + TFT.fillrect(11, 138, (xscale2+10), 150, 0x9A60); //0x9A60 // аналоговая шкала Ток + TFT.fillrect((xscale2+12), 138, 308, 150, Black); + fps.stop(); + TFT.set_font((unsigned char*) Courier8x13); // FPS + TFT.locate(140,205); + printf("%0.2f", (1/fps.read())); + + if(cc==1 & pm==0){ // c.c + TFT.fillrect(240,10,304,53,Black);//c.v стереть + TFT.fillrect(240,85,304,128,0x6000);//c.c + TFT.background(0x6000); + TFT.foreground(Red); + TFT.set_font((unsigned char*) Consolas19x35); + TFT.locate(246, 89); + TFT.printf("C.C"); + pm=1; + } + if(cc==0 & pm==0){ // c.v + TFT.fillrect(240,85,304,128,Black);//c.c стереть + TFT.fillrect(240,10,304,53,0x0180);//c.v + TFT.background(0x0180); + TFT.foreground(Green); + TFT.set_font((unsigned char*) Consolas19x35); + TFT.locate(246, 14); + TFT.printf("C.V"); + pm=1; + } } @@ -764,7 +813,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" 1 \n"); // 1 + printf(" U max \n"); // 1 //------------------------------------*--------------------------- if (mline==12) { TFT.background(back5_i); @@ -845,7 +894,7 @@ } //------------------------------------------------------------------------------------------------------------ -long map(long x, long in_min, long in_max, long out_min, long out_max) // функция масштабирования +float map(float x, float in_min, float in_max, float out_min, float out_max) // функция масштабирования { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } @@ -1031,6 +1080,8 @@ } if (buttonUp==0) { // Up powerProtect=!powerProtect; + cc=!cc; // для проверки + pm=0; // С.C и C.V pp=0; wait(0.2); }