Nucleo F042K6 PWM, LCD and DS1820 not working correctly. PWM conflicts with DS1820 timings.

Dependencies:   mbed TextLCD DS1820

Committer:
Highlag
Date:
Mon Dec 09 22:07:15 2019 +0000
Revision:
7:a08b726d5566
Test on Nucleo F042K6 DS1820, PWM and LCD; Not working. PWM conflicts with DS1820;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Highlag 7:a08b726d5566 1 #include "mbed.h"
Highlag 7:a08b726d5566 2 #include "TextLCD.h"
Highlag 7:a08b726d5566 3 #include "DS1820.h"
Highlag 7:a08b726d5566 4
Highlag 7:a08b726d5566 5
Highlag 7:a08b726d5566 6
Highlag 7:a08b726d5566 7 DigitalOut myled(LED1); // Uporabimo led na vezju (D13)
Highlag 7:a08b726d5566 8 DigitalOut rw(A6);
Highlag 7:a08b726d5566 9 DS1820 ds1820(PB_4); // Pin kamor je priključen DS1820
Highlag 7:a08b726d5566 10 DigitalOut my_pwm(D9); // IO used by pwm_io function
Highlag 7:a08b726d5566 11 TextLCD lcd(A7, A5, A4, A3, A2, A1, TextLCD::LCD20x4); // rs, e, d4-d7 TextLCD::LCD20x4
Highlag 7:a08b726d5566 12
Highlag 7:a08b726d5566 13 Timeout timer;
Highlag 7:a08b726d5566 14
Highlag 7:a08b726d5566 15
Highlag 7:a08b726d5566 16
Highlag 7:a08b726d5566 17 int on_delay = 0;
Highlag 7:a08b726d5566 18 int off_delay = 0;
Highlag 7:a08b726d5566 19
Highlag 7:a08b726d5566 20 void toggleOff(void); //??
Highlag 7:a08b726d5566 21
Highlag 7:a08b726d5566 22 void toggleOn(void) { // Funkcija
Highlag 7:a08b726d5566 23 my_pwm = 1;
Highlag 7:a08b726d5566 24 timer.attach_us(toggleOff, on_delay);
Highlag 7:a08b726d5566 25 }
Highlag 7:a08b726d5566 26
Highlag 7:a08b726d5566 27 void toggleOff(void) {
Highlag 7:a08b726d5566 28 my_pwm = 0;
Highlag 7:a08b726d5566 29 timer.attach_us(toggleOn, off_delay);
Highlag 7:a08b726d5566 30 }
Highlag 7:a08b726d5566 31
Highlag 7:a08b726d5566 32 // p_us = signal period in micro_seconds
Highlag 7:a08b726d5566 33 // dc = signal duty-cycle (0.0 to 1.0)
Highlag 7:a08b726d5566 34 void pwm_io(int p_us, float dc) {
Highlag 7:a08b726d5566 35 timer.detach();
Highlag 7:a08b726d5566 36 if ((p_us == 0) || (dc == 0)) {
Highlag 7:a08b726d5566 37 my_pwm = 0;
Highlag 7:a08b726d5566 38 return;
Highlag 7:a08b726d5566 39 }
Highlag 7:a08b726d5566 40 if (dc >= 1) {
Highlag 7:a08b726d5566 41 my_pwm = 1;
Highlag 7:a08b726d5566 42 return;
Highlag 7:a08b726d5566 43 }
Highlag 7:a08b726d5566 44 on_delay = (int)(p_us * dc);
Highlag 7:a08b726d5566 45 off_delay = p_us - on_delay;
Highlag 7:a08b726d5566 46 toggleOn();
Highlag 7:a08b726d5566 47 }
Highlag 7:a08b726d5566 48
Highlag 7:a08b726d5566 49 int main()
Highlag 7:a08b726d5566 50 {
Highlag 7:a08b726d5566 51
Highlag 7:a08b726d5566 52 // double moc;
Highlag 7:a08b726d5566 53 int i;
Highlag 7:a08b726d5566 54 rw = 0;
Highlag 7:a08b726d5566 55 // moc = 25;
Highlag 7:a08b726d5566 56 int PWM_F=100; //delay v us 20us=50KHz 1000=1000Hz, če je manj ne dela več LCD
Highlag 7:a08b726d5566 57 float PWM_duty=0.25;
Highlag 7:a08b726d5566 58
Highlag 7:a08b726d5566 59 while (true) {
Highlag 7:a08b726d5566 60 for (i=0; i<11; i=i+1) {
Highlag 7:a08b726d5566 61 if (i==10){ i=0;}
Highlag 7:a08b726d5566 62
Highlag 7:a08b726d5566 63 ds1820.begin(); // Inicializacia DS senzorja če ni specifičen senzor
Highlag 7:a08b726d5566 64 ds1820.startConversion();
Highlag 7:a08b726d5566 65 lcd.locate(0,0); // Lokacija: 1 vrstica 1 znak na LCD-ju
Highlag 7:a08b726d5566 66 lcd.printf("Stevilka: %i", i); // števec
Highlag 7:a08b726d5566 67 lcd.locate(0,1); // Lokacija: 2 vrstica 1 znak na LCD-ju
Highlag 7:a08b726d5566 68 // lcd.printf("Moc sevanja: %.2fW", moc); // Na LCD-ju prikaže vrednost moči
Highlag 7:a08b726d5566 69 lcd.printf("PWMF=%i",PWM_F); // Na LCD-ju izpiše vrednost spremenljivke PWM_F
Highlag 7:a08b726d5566 70 lcd.locate(0,2);
Highlag 7:a08b726d5566 71 lcd.printf("PWMDuty=%1.2f",PWM_duty); // Na LCD-ju izpiše vrednost spremenljivke PWM_duty 3.1
Highlag 7:a08b726d5566 72 lcd.locate(0,3);
Highlag 7:a08b726d5566 73 lcd.printf("Temp: %3.1foC\r\n", ds1820.read()); // Izpiše temp
Highlag 7:a08b726d5566 74
Highlag 7:a08b726d5566 75
Highlag 7:a08b726d5566 76 PWM_duty=ds1820.read()/100;
Highlag 7:a08b726d5566 77 pwm_io(PWM_F, PWM_duty); // 20ms - 25%
Highlag 7:a08b726d5566 78 myled = !myled;
Highlag 7:a08b726d5566 79 /*
Highlag 7:a08b726d5566 80 myled = 1; // LED is ON
Highlag 7:a08b726d5566 81 wait(0.1); // 100 ms
Highlag 7:a08b726d5566 82 myled = 0; // LED is OFF
Highlag 7:a08b726d5566 83 wait(0.1); // 100ms
Highlag 7:a08b726d5566 84 */
Highlag 7:a08b726d5566 85 }
Highlag 7:a08b726d5566 86 // wait(0.1); // Počakaj 1s
Highlag 7:a08b726d5566 87 // lcd.cls(); // Zbriše ekran
Highlag 7:a08b726d5566 88 // pwm_io(PWM_F, PWM_duty); // 20ms - 25%
Highlag 7:a08b726d5566 89 }
Highlag 7:a08b726d5566 90 }