Nucleo F042K6 PWM, LCD and DS1820 not working correctly. PWM conflicts with DS1820 timings.
Dependencies: mbed TextLCD DS1820
pwm.cpp@7:a08b726d5566, 2019-12-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |