Y SI / lib_PwmOutAllPin
Committer:
YSI
Date:
Fri Oct 23 08:16:58 2015 +0000
Revision:
3:1d1669e8c9b1
Parent:
1:8067d51d66bd
Child:
5:0f5ad06f23c0
up doc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YSI 3:1d1669e8c9b1 1 /** Lib PwmOutAllPin
YSI 3:1d1669e8c9b1 2 *
YSI 3:1d1669e8c9b1 3 * Copyright (c) 2014, cstyles (http://mbed.org)
YSI 3:1d1669e8c9b1 4 *
YSI 3:1d1669e8c9b1 5 * Exemple:
YSI 3:1d1669e8c9b1 6 * @code
YSI 3:1d1669e8c9b1 7 * #include "mbed.h"
YSI 3:1d1669e8c9b1 8 * #include "lib_PwmOutAllPin.h"
YSI 3:1d1669e8c9b1 9 *
YSI 3:1d1669e8c9b1 10 * PwmOutAllPin pin1(p20);
YSI 3:1d1669e8c9b1 11 * PwmOutAllPin pin2(p12);
YSI 3:1d1669e8c9b1 12 *
YSI 3:1d1669e8c9b1 13 * int main()
YSI 3:1d1669e8c9b1 14 * {
YSI 3:1d1669e8c9b1 15 * pin2.period(0.0002);
YSI 3:1d1669e8c9b1 16 * pin2 = 0.25;
YSI 3:1d1669e8c9b1 17 * pin1 = 0.5;
YSI 3:1d1669e8c9b1 18 * pin1.period_us(20);
YSI 3:1d1669e8c9b1 19 *
YSI 3:1d1669e8c9b1 20 * while(1)
YSI 3:1d1669e8c9b1 21 * {
YSI 3:1d1669e8c9b1 22 * wait(0.25);
YSI 3:1d1669e8c9b1 23 * }
YSI 3:1d1669e8c9b1 24 * }
YSI 3:1d1669e8c9b1 25 * @endcode
YSI 3:1d1669e8c9b1 26 * @file lib_PwmOutAllPin.h
YSI 3:1d1669e8c9b1 27 * @purpose library for PwmOut on all pins
YSI 3:1d1669e8c9b1 28 * @date 2015
YSI 3:1d1669e8c9b1 29 * @author Yannic Simon
YSI 3:1d1669e8c9b1 30 */
YSI 3:1d1669e8c9b1 31
YSI 0:0e01d184dbab 32 #include "lib_PwmOutAllPin.h"
YSI 0:0e01d184dbab 33
YSI 3:1d1669e8c9b1 34 /** Crée un PwmOutAllPin connecté à la pin spécifiée
YSI 0:0e01d184dbab 35 *
YSI 0:0e01d184dbab 36 * @param pin Pin à connecter
YSI 0:0e01d184dbab 37 */
YSI 0:0e01d184dbab 38 PwmOutAllPin::PwmOutAllPin(PinName pin) : PwmOutPin(pin)
YSI 0:0e01d184dbab 39 {
YSI 0:0e01d184dbab 40 Pwm_period_us = 20000;
YSI 0:0e01d184dbab 41 Pwm_Duty_Cycle = 0.0;
YSI 1:8067d51d66bd 42 TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us);
YSI 0:0e01d184dbab 43 }
YSI 0:0e01d184dbab 44
YSI 0:0e01d184dbab 45 /** Fixe le rapport cyclique au pourcentage (float) spécifié
YSI 0:0e01d184dbab 46 *
YSI 0:0e01d184dbab 47 * @param value Une valeure floating-point représentant le rapport cyclique,
YSI 0:0e01d184dbab 48 * spécifié sous la forme d'un pourcentage. La valeur doit être comprise entre
YSI 0:0e01d184dbab 49 * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%).
YSI 0:0e01d184dbab 50 * Les valeurs exterieures à cette plage sont saturées à 0.0f ou 1.0f.
YSI 0:0e01d184dbab 51 */
YSI 0:0e01d184dbab 52 void PwmOutAllPin::write(float value)
YSI 0:0e01d184dbab 53 {
YSI 1:8067d51d66bd 54 Pwm_Duty_Cycle = value;
YSI 1:8067d51d66bd 55 UsePwm();
YSI 0:0e01d184dbab 56 }
YSI 0:0e01d184dbab 57
YSI 0:0e01d184dbab 58 /** Retourne la valeur courante du rapport cyclique de la sortie, mesurée sous la forme d'un pourcentage (float)
YSI 0:0e01d184dbab 59 *
YSI 0:0e01d184dbab 60 * @returns
YSI 0:0e01d184dbab 61 * Une valeur floating-point représentant la valeur courante du rapport cyclique qui est sur la pin de sortie,
YSI 0:0e01d184dbab 62 * mesurée sous la forme d'un pourcentage. La valeur doit être comprise entre
YSI 0:0e01d184dbab 63 * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%).
YSI 0:0e01d184dbab 64 */
YSI 0:0e01d184dbab 65 float PwmOutAllPin::read(void)
YSI 0:0e01d184dbab 66 {
YSI 0:0e01d184dbab 67 return Pwm_Duty_Cycle;
YSI 0:0e01d184dbab 68 }
YSI 0:0e01d184dbab 69
YSI 0:0e01d184dbab 70 /** Fixe la période du PWM, spécifié en secondes (float), garde le même rapport cyclique.
YSI 0:0e01d184dbab 71 *
YSI 0:0e01d184dbab 72 * @note
YSI 0:0e01d184dbab 73 * La résolution est en microsecondes mais les périodes inférieure à 100µs sont imprécises.
YSI 0:0e01d184dbab 74 */
YSI 0:0e01d184dbab 75 void PwmOutAllPin::period(float seconds)
YSI 0:0e01d184dbab 76 {
YSI 1:8067d51d66bd 77 period_us(seconds*1000000);
YSI 0:0e01d184dbab 78 }
YSI 0:0e01d184dbab 79
YSI 0:0e01d184dbab 80 /** Fixe la période du PWM, spécifié en millisecondes (int), garde le même rapport cyclique.
YSI 0:0e01d184dbab 81 */
YSI 0:0e01d184dbab 82 void PwmOutAllPin::period_ms(int ms)
YSI 0:0e01d184dbab 83 {
YSI 1:8067d51d66bd 84 period_us(ms*1000);
YSI 0:0e01d184dbab 85 }
YSI 0:0e01d184dbab 86
YSI 0:0e01d184dbab 87 /** Fixe la période du PWM, spécifié en microsecondes (int), garde le même rapport cyclique.
YSI 0:0e01d184dbab 88 */
YSI 0:0e01d184dbab 89 void PwmOutAllPin::period_us(int us)
YSI 0:0e01d184dbab 90 {
YSI 1:8067d51d66bd 91 if(us != Pwm_period_us)
YSI 1:8067d51d66bd 92 {
YSI 1:8067d51d66bd 93 Pwm_period_us = us;
YSI 1:8067d51d66bd 94 UsePwm();
YSI 1:8067d51d66bd 95 TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us);
YSI 1:8067d51d66bd 96 }
YSI 0:0e01d184dbab 97 }
YSI 0:0e01d184dbab 98
YSI 0:0e01d184dbab 99 /** Fixe la largeur d'impulsion du PWM, spécifié en secondes (float), garde la même période.
YSI 0:0e01d184dbab 100 */
YSI 0:0e01d184dbab 101 void PwmOutAllPin::pulsewidth(float seconds)
YSI 0:0e01d184dbab 102 {
YSI 1:8067d51d66bd 103 pulsewidth_us(seconds*1000000);
YSI 0:0e01d184dbab 104 }
YSI 0:0e01d184dbab 105
YSI 0:0e01d184dbab 106 /** Fixe la largeur d'impulsion du PWM, spécifié en millisecondes (int), garde la même période.
YSI 0:0e01d184dbab 107 */
YSI 0:0e01d184dbab 108 void PwmOutAllPin::pulsewidth_ms(int ms)
YSI 0:0e01d184dbab 109 {
YSI 1:8067d51d66bd 110 pulsewidth_us(ms*1000);
YSI 0:0e01d184dbab 111 }
YSI 0:0e01d184dbab 112
YSI 0:0e01d184dbab 113 /** Fixe la largeur d'impulsion du PWM, spécifié en microsecondes (int), garde la même période.
YSI 0:0e01d184dbab 114 */
YSI 0:0e01d184dbab 115 void PwmOutAllPin::pulsewidth_us(int us)
YSI 0:0e01d184dbab 116 {
YSI 1:8067d51d66bd 117 Pwm_Duty_Cycle = (float)us/Pwm_period_us;
YSI 0:0e01d184dbab 118 UsePwm();
YSI 0:0e01d184dbab 119 }
YSI 0:0e01d184dbab 120
YSI 0:0e01d184dbab 121 /** raccourci pour write()
YSI 0:0e01d184dbab 122 */
YSI 0:0e01d184dbab 123 PwmOutAllPin& PwmOutAllPin::operator= (float value)
YSI 0:0e01d184dbab 124 {
YSI 0:0e01d184dbab 125 write(value);
YSI 0:0e01d184dbab 126 return *this;
YSI 0:0e01d184dbab 127 }
YSI 0:0e01d184dbab 128
YSI 0:0e01d184dbab 129 /** raccourci pour effectuer des opperations mathématique avec write()
YSI 0:0e01d184dbab 130 */
YSI 0:0e01d184dbab 131 PwmOutAllPin& PwmOutAllPin::operator= (PwmOutAllPin& rhs)
YSI 0:0e01d184dbab 132 {
YSI 0:0e01d184dbab 133 write(rhs.read());
YSI 0:0e01d184dbab 134 return *this;
YSI 0:0e01d184dbab 135 }
YSI 0:0e01d184dbab 136
YSI 0:0e01d184dbab 137 /** raccourci pour read()
YSI 0:0e01d184dbab 138 */
YSI 0:0e01d184dbab 139 PwmOutAllPin::operator float()
YSI 0:0e01d184dbab 140 {
YSI 0:0e01d184dbab 141 return read();
YSI 0:0e01d184dbab 142 }
YSI 0:0e01d184dbab 143
YSI 0:0e01d184dbab 144 void PwmOutAllPin::DigitalUp(void)
YSI 0:0e01d184dbab 145 {
YSI 0:0e01d184dbab 146 PwmOutPin = 1;
YSI 0:0e01d184dbab 147 }
YSI 0:0e01d184dbab 148
YSI 0:0e01d184dbab 149 void PwmOutAllPin::DigitalDown(void)
YSI 0:0e01d184dbab 150 {
YSI 1:8067d51d66bd 151 if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0))
YSI 1:8067d51d66bd 152 {
YSI 1:8067d51d66bd 153 PwmOutPin = 0;
YSI 1:8067d51d66bd 154 SwitchPin.attach_us(this, &PwmOutAllPin::DigitalUp, TimeDown);
YSI 1:8067d51d66bd 155 }
YSI 0:0e01d184dbab 156 }
YSI 0:0e01d184dbab 157
YSI 0:0e01d184dbab 158 void PwmOutAllPin::UsePwm(void)
YSI 0:0e01d184dbab 159 {
YSI 0:0e01d184dbab 160 if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0))
YSI 0:0e01d184dbab 161 {
YSI 1:8067d51d66bd 162 TimeDown = Pwm_period_us*(1.0-Pwm_Duty_Cycle);
YSI 0:0e01d184dbab 163 }
YSI 0:0e01d184dbab 164 else if(Pwm_Duty_Cycle >= 1.0)
YSI 0:0e01d184dbab 165 {
YSI 1:8067d51d66bd 166 SwitchPin.detach();
YSI 0:0e01d184dbab 167 Pwm_Duty_Cycle = 1.0;
YSI 0:0e01d184dbab 168 PwmOutPin = 1;
YSI 0:0e01d184dbab 169 }
YSI 0:0e01d184dbab 170 else
YSI 0:0e01d184dbab 171 {
YSI 1:8067d51d66bd 172 SwitchPin.detach();
YSI 0:0e01d184dbab 173 Pwm_Duty_Cycle = 0.0;
YSI 0:0e01d184dbab 174 PwmOutPin = 0;
YSI 0:0e01d184dbab 175 }
YSI 0:0e01d184dbab 176 }