From 75fbc08be1c33bcb14c4c3f1d75b55860f32553a Mon Sep 17 00:00:00 2001 From: polymurph Date: Mon, 23 Aug 2021 09:40:57 +0200 Subject: [PATCH] added dac driver example --- Makefile | 2 + bsl/csl/PC/peripherals/i2cDummy.hpp | 5 +- drivers/MCP4725/mcp4725.hpp | 121 ++++++++++++++++++++++++++++ main.cpp | 9 +++ main.hpp | 2 + runtest | Bin 33784 -> 34112 bytes 6 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 drivers/MCP4725/mcp4725.hpp diff --git a/Makefile b/Makefile index acf4a63..85a953d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ cpp_src += $(wildcard *.cpp) cpp_src += $(wildcard ./utils/*.cpp) cpp_src += $(wildcard ./interfaces/*.cpp) +cpp_src += $(wildcard ./drivers/*.cpp) + #cpp_src += $(wildcard ./communication/i2c/*.cpp) #c_src += $(wildcard ./algorithms/*.c) diff --git a/bsl/csl/PC/peripherals/i2cDummy.hpp b/bsl/csl/PC/peripherals/i2cDummy.hpp index e74493a..b3fcd0d 100644 --- a/bsl/csl/PC/peripherals/i2cDummy.hpp +++ b/bsl/csl/PC/peripherals/i2cDummy.hpp @@ -31,7 +31,10 @@ struct I2CDummy : I2C void writeBufferImpl(const uint8_t& address, const uint8_t* buffer, uint8_t len) { - std::cout << "I2C writeBuffer" << std::endl; + std::cout << "I2C writeBuffer to address: " << +address << std::endl; + for(uint8_t i = 0; i < len; i++) { + std::cout << +buffer[i] << std::endl; + } } void readBufferImpl(const uint8_t& address, const uint8_t* buffer, uint8_t len) diff --git a/drivers/MCP4725/mcp4725.hpp b/drivers/MCP4725/mcp4725.hpp new file mode 100644 index 0000000..0808315 --- /dev/null +++ b/drivers/MCP4725/mcp4725.hpp @@ -0,0 +1,121 @@ +#ifndef _MCP4725_HPP_ +#define _MCP4725_HPP_ +#include +#include +#include +#include "../../interfaces/i2c.hpp" + +template +class MCP4725 +{ + public: + //typedef std::function i2c_write_n_t; + //typedef std::function i2c_write_n_t; + //typedef void(*i2c_write_n_t)(const uint8_t&, const uint8_t*, const uint8_t&); + + //typedef std::functioni2c_write_n_t; + // address list + enum i2c_addr + { + addr_0x60 = 0b01100000, + addr_0x61 = addr_0x60 + 1, + addr_0x62 = addr_0x60 + 2, + addr_0x63 = addr_0x60 + 3, + addr_0x64 = addr_0x60 + 4, + addr_0x65 = addr_0x60 + 5, + addr_0x66 = addr_0x60 + 6, + addr_0x67 = addr_0x60 + 7 + }; + + // power down impedance modes + enum pwrd_md + { + normal = 0x04, + ohm_1k = 0x01, + ohm_100k = 0x02, + ohm_500k = 0x03 + }; + + //using std::functional i2c_read_n_t; + //using i2c_write_n_t = std::functional; + + /** + * @brief Constructor of mcp4725 dac + * + * @param power_down_mode pwrd_md power down mode + * @param address i2c_addr i2c address of the dac + * @param i2c_write i2c_write_n_t callback for i2c writ + */ + + MCP4725(I2C& i2c) : + power_down_mode(pwrd_md::normal), + address(addr_0x60), + i2c(i2c), + dac_value(0), + eeprom_value(0) + { + uint8_t temp[3]; + this->dac_value = dac_value; + + temp[0] = cmd_write_dac | (power_down_mode << 1); + temp[1] = static_cast(dac_value >> 4); + temp[2] = static_cast(dac_value << 4); + + + i2c.writeBuffer(address, temp, 3); + } + + // ~MCP4725(); + + + + void operator=(uint16_t dac_value) + { + uint8_t temp[3]; + this->dac_value = dac_value; + + temp[0] = cmd_write_dac | (power_down_mode << 1); + temp[1] = static_cast(dac_value >> 4); + temp[2] = static_cast(dac_value << 4); + + i2c.writeBuffer(address, temp, 3); + } + + void operator==(uint16_t dac_and_eeprom_value) + { + uint8_t temp[6]; + dac_value = dac_and_eeprom_value; + eeprom_value = dac_value; + + temp[0] = cmd_write_dac_and_eeprom | (power_down_mode << 1); + temp[1] = static_cast(dac_and_eeprom_value >> 4); + temp[2] = static_cast(dac_and_eeprom_value << 4); + temp[3] = temp[0]; + temp[4] = temp[1]; + temp[5] = temp[2]; + + i2c.writeBuffer(address, temp, 6); + } + + //void set_power + + + private: + + enum commands_t + { + cmd_fast_mode = 0x00, + cmd_write_dac = 0x40, + cmd_write_dac_and_eeprom = 0x60 + }; + + I2C& i2c; + + i2c_addr address; + pwrd_md power_down_mode; + uint16_t dac_value; + uint16_t eeprom_value; + +}; + +#endif // _MCP4725_HPP_ \ No newline at end of file diff --git a/main.cpp b/main.cpp index c41ca16..2cc6c22 100644 --- a/main.cpp +++ b/main.cpp @@ -58,11 +58,20 @@ void foo() } +void dac() +{ + MCP4725 dac(dummyI2C); + dac = 10; + dac = 10; + +} + int main(int argc, char *argv[]) { std::cout << "Main Begin" << std::endl; commander.addNewCommand("dummy", "The test command for testing the test", dummy); commander.addNewCommand("foo", "The test command for foo was called", foo); + commander.addNewCommand("dac", "The test command for dac was called", dac); commander(argv[1]); std::cout << "Main End" << std::endl; return 1; diff --git a/main.hpp b/main.hpp index 54e1c5d..9c9dfe9 100644 --- a/main.hpp +++ b/main.hpp @@ -12,6 +12,8 @@ #include "./interfaces/spich.hpp" #include "./interfaces/i2c.hpp" +#include "./drivers/MCP4725/mcp4725.hpp" + #include "bsl/csl/raspberry/peripherals/pinRaspberry.hpp" #include "bsl/csl/PC/peripherals/pinPC.hpp" #include "bsl/csl/PC/peripherals/spiDummy.hpp" diff --git a/runtest b/runtest index 6c6cc52a3457f1045938f3d9d1cc3e8b03a691bc..79c104521a30b8365db26158f908ffdbc1782ee7 100755 GIT binary patch delta 8911 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 J?6Fm`{{^$-^#lL_ delta 7431 zcmaJ_3s{xanqK>dy+c5`vte@)6c7~=9JZPQqKR%yjlAMDGZ@c`Z*i-j8F%#kPow9aK{DKkv8J`oZ>jX8z}a_gn9GS>O8B zx7PoI=ijx~H?^vCt##>|9+v~J$1w3+kKy5_%)pQkISdKmBTQc=2lSCcUtFX~ei84k zorruh_{D_%+;O|PDI)Y#&wf)LE;#p+JHT&wfbAozv|Bt)#gV{{cjcRdGEHWFDyX+9 z$ZZN? z9vjiG=VlBJ7v2v%T=*c+;Tm<{;TqrUa1}mqR31ja>12OS+IQkhBZfQU5xnZy!SRmD zhOv&aCWnc!%6)qu>bj%yvz-Jk`=8>)T+Jil`@sX!9B`~MpL!B3f>xgMZY9!H;gRN} zg!2(^i-s#gxh1jy}Kvxrq7v)D=N z0BaS?D}0;e;UeDnw=rX>wAvRZ*Y&LkRk&YNKw9m`c2r?G1!Q7|_m2B~Mzqbjk?Q+( zAk76m_+Rf)($aUZOi4tCs#dDR(RRL&+n~3Rg zRGuUQn@kVG!%nnEJf%=3N=GI~yi4UgBG`T*+gofDKkw8Cn7&0+C3VB6MPOw&ya{p- z+K65C;+LcH;3NCc6S`}Dk~22rpGDjXr`Sl$8SsdWu_HsJjj<#9{V4Ex%5Vp1XbxGk z6Th@gAPW~LJ&nSB@Q7YiuMq?iEYOEioFm@Z?V*d?LW^3w_=u}0$WC&VS)`I_*&zr2 zkC?Ps>qnzB-;20W&r@Ao_6ks_(mDs_eZ-q8lzFSEhO5Nsjv68jmx4ldCxG9%l`H-$PXm$f=7U&aMv&y&Hfz}Q=Tm*2ES zO}j@iUG^l>V9`r4{F1Id8a$NqA-lE1+Om5N1*VbN$LM#OG@tn|N$OsqeR?7VwB2{9zG93L|LuUw|otmX>yTRX0P41mTMy@

>`ec`&{zAm@TeICev zILI#hQt9_9`Sok_o7V2v=Q?jnOHIie0)u}g16NcCCFQdB0EJRNE^Lo@k2P_7x2H5m z6Mv&ypYUBxV)<=5x21_6?>0xv{2T9+K2NjV<{Q(yb@-`K*DE|BYdzE*L0j;FfCe^u z|I)~Bre_y?1FdYw8Y=TX8a{sT%bLgwvg7&D>@fafcAb;H1M$tlVlL~t2lCt>blnSF46Fi9tI_pYcq_jTTmk&* zM_oSzOlZ*c#W)&Uf$M=^02#XCBrpkh30MGZ1eOA|E4sc3*dKTZ_y(}vk2%?C2>u8- z>?d7M0j>uQ1rG7*`WE1HU=wg9Fc=>*9|1FfCxIh@H-Phj!>;Q3TfmFJ4}rlb;y1tz zz!snf7-?bb3NQy4d`;KKS)7a|LRbVM1GpAA4Y&)q40swCi~VmU9vJf&5&`xHZU&YB z_W~CK8Cq&RFdn!E*cW&nI270loDPgZr8WTj11|zgoDl9o$nC&b3J$|m;7lCaSAiRG z+}8sGvEzGyLxAUjuK@jn89M+>0iGj0;za%oJum~<3Y-g!f&CU513fgxC)yQYe_-a{ zblq73p#;KWpbNMj7}lcedx8Cdmw<zM(zQ(K0IdF|s55tN7Vk%kK@aS>A)VR*HKezFx~~?cI}l^<*qA4h~hgK9j(w z;Ab)-_67Ri4d6Zd#%l9x`LMo;+J;&_2XM5OzX7n-@vVT7b^LJOMCYx)qO0N3mc-Kb zBx(>k49Ta^4Q(Xp*V#lClqADxdZ$j;@#WmEpCJ7y9s29#HvFgJbokSsIYtaexu4%t zeqjTOX~Oyh}+x6qf*T5Z?kwIep<&zLkz$aY4v>u{X%!TECT6y~li{ZABf7>t4vJldidOje}X0C#`gUGa z|FuisLBF}4b}6+PViioYF=N|0=eN%kiUVKGulKVCCcz+!M)my82GKO*AP#NdO9mur z`3-!)K$~SPn8~n%xC`PEC?TGP`2HonVW7?20@1?%JTT4@iMzpim0yHD2V%}ueh=a} zh#6P8EfuV#H7U zBE%esGo?5V;ubIeoC*MOlb1HZvKHc2FP{u?7sQiZQI^vX&wKd>uq_a;!!0k-5`$AS z>MFmSXLFW<9f$jJ6^iWN30+{c9Bq7A`*xJVWe@D8!miCmn%(TU;dDJ49hWmv4<|T7m zNm}eIe1<168{1Q=+!bu%FP2z~K87((z9Ui6_!oqD&MH2?vm6^q-BtW0HQP(dK8l|z zvCbZb4x?!My8YJcKNa6IUGn14KrF_ELiRZ+k{>96y`=aNDjo4wf^HS@e6SXgfMyk* zH`J!2DbEAo!^vXQS!JQim}X<1QW2)@*LTW3KvmXQTOZslq86$RRHL&p@Q)lg{-oAn z)Cpy~TI~XTBhyo>_@7lS3fKei$;jnssW4+0iibYH#M-jwK%&`wkHY>aSZE=vK3%ye zSk4Deu{u{PuL_m(drEs#@xHb1g6}n|@zyTV@Ofpw3_Q(VrS{v{&5eqmqj+PlzL$LT zKQvAY6k`;6* zQu?D~C2h2Kcg26B)-zRkIrtjHoTIe9o3)&@Gd3vgCKYps^7SbGjw(rs;+qveTJ_Uf z#iw+Xxo!42D0#eWnss)O(k83JFjRT%0-wyH+4gCYz#Srg?E)9`l(1?flp?kEJ&R++)?5=uIy*4mMKvDY49}Phw4Hx4(@ejKf)(| z7>b4v{0S}0G?UMGrgy>%U?@VY>Ib9EKPOANVx0bA(jq|}H{&uHuJ{wGdPawJ!UPm? zq^goC1srX2Bnq11hTJZ%w7qSO@GP8y< zvuZMnaySl!T;4T9vTL|&X;R;ow<|tfZN9qESTXn{Y8&%>NHW@rHff_FWq(Ez;?}70 z7-jn!Jk3|A;u_7S@mn*ku@?N-mWqAUr`SP!%}i@{4`|8vkk7@jTJgRG+R10kw3_zQ zZ~Fyhb5tE9ReKhU&7qim712Z0Y7%%_U8MWRXE*t~cg(Hx