From f445009375a5ef4eb9d244406dd1b94a89edb42c Mon Sep 17 00:00:00 2001 From: Bernardo Carvalho Date: Wed, 15 Jan 2020 15:52:30 +0000 Subject: [PATCH] Added TDA8444 DAC channels --- .../ISTTOKrpiApp/Db/ISTTOKpcf8591.db | 8 + .../ISTTOKrpiApp/Db/ISTTOKtda8444.db | 84 ++++++++ epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile | 1 + .../iocBoot/iocISTTOKrpi/iocISTTOKrpi.req | 1 + .../ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt | 180 +++++++++--------- .../iocISTTOKrpi/save/iocISTTOKrpi.sav | 11 +- .../ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd | 1 + epics/iocs/ISTTOKrpi/protocols/pcf8591.proto | 12 +- epics/iocs/ISTTOKrpi/protocols/tda8444.proto | 42 ++++ 9 files changed, 246 insertions(+), 94 deletions(-) create mode 100644 epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db create mode 100644 epics/iocs/ISTTOKrpi/protocols/tda8444.proto diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db index 388339f..21e2800 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db @@ -78,3 +78,11 @@ record( ai, "$(P)$(R)TMPump2-Current" ) { field(LSV, "MINOR") # # field(LLSV,"MAJOR") } +record( longout, "$(P)$(R)PCF8591:72:DAC") { + field(DTYP, "stream") + field(OUT, "@pcf8591.proto wDac(72) I2C") + field(DRVH, "255" ) + field(DRVL, "0" ) + field(VAL, 128) + field(PINI,"YES") +} diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db new file mode 100644 index 0000000..1977cf6 --- /dev/null +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db @@ -0,0 +1,84 @@ +####################################################### +# ### ### # +# ### EPICS Database for ### # +# ### I2C PCF8591 board ### # +# ### ### # +# ### author: B. Carvalho IPFN ### # +# ### ### # +# ### Ref 2.0; 2019-10-14 ### # +# ### ### # +# ### macros: ID I2C address of ADC ### # +# ### Description: ### # +# ### This DB file is using ### # +# ### stream(asynI2C) to write ### # +# ### an TDA8444 DAC chip ### # +####################################################### + +##################################################### +# Read/Write tda8444 register @ address 0x20=d32 ## # +##################################################### +record( longout, "$(P)$(R)TDA8444:32:DAC_CH0") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac0(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH1") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac1(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH2") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac2(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH3") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac3(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH4") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac4(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH5") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac5(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +record( longout, "$(P)$(R)TDA8444:32:DAC_CH6") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac6(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 32) + field(PINI,"YES") +} +#record( longout, "$(P)$(R) TDA8444:32:DAC_CH7") { +record( longout, "$(P)$(R)Shot-TorPSCurrent") { + field(DTYP, "stream") + field(OUT, "@tda8444.proto wDac7(32) I2C") + field(DRVH, "63" ) + field(DRVL, "0" ) + field(VAL, 1) + field(PINI,"YES") +} diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile index fb99422..a72cea7 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile @@ -9,6 +9,7 @@ DB += ISTTOKmachineControl.db DB += ISTTOKpcf8574.db DB += ISTTOKpcf8591.db DB += ISTTOKpfeiffer.db +DB += ISTTOKtda8444.db DB += sendmail.db # If .db template is not named *.template add diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req index 53cdc49..d9fc7bd 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req @@ -1,4 +1,5 @@ ISTTOK:central:PULSE-NUMBER.VAL +ISTTOK:central:LogMessage.VAL ISTTOK:central:LASTOPSTATE.VAL ISTTOK:central:OPREQ diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt index c98408f..e68893a 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt @@ -1,50 +1,4 @@ -ISTTOK:central:PCF8574:56:REGISTER:READ -ISTTOK:central:PCF8574:57:REGISTER:READ -ISTTOK:central:PCF8574:60:REGISTER:READ -ISTTOK:central:PCF8574:61:REGISTER:READ -ISTTOK:central:LASTOPSTATE -ISTTOK:SR_rebootStatus -ISTTOK:SR_status -ISTTOK:SR_0_Status -ISTTOK:SR_1_Status -ISTTOK:SR_2_Status -ISTTOK:SR_3_Status -ISTTOK:SR_4_Status -ISTTOK:SR_5_Status -ISTTOK:SR_6_Status -ISTTOK:SR_7_Status -ISTTOK:central:OPSTATE -ISTTOK:central:STARTINGSTATE -ISTTOK:central:CLEANINGSTATE -ISTTOK:central:WSHOTINGSTATE -ISTTOK:central:STOPPINGSTATE -ISTTOK:central:TMPump1-ControllerOnInv -ISTTOK:central:TMPump1-ControllerOffInv -ISTTOK:central:TMPump1-MotorOnInv -ISTTOK:central:TMPump1-MotorOffInv -ISTTOK:central:BuzzerInv -ISTTOK:central:Shot-TorPSTriggerInv -ISTTOK:central:Temperature_0 -ISTTOK:central:TMPump2-Speed -ISTTOK:central:TMPump2-Current -ISTTOK:central:PCF8591:72:ADC_CH1 -ISTTOK:central:PCF8591:72:ADC_CH2 -ISTTOK:central:P001:M -ISTTOK:central:P001:E -ISTTOK:central:P002:M -ISTTOK:central:P002:E -ISTTOK:central:P003:M -ISTTOK:central:P003:E -ISTTOK:central:P004:M -ISTTOK:central:P004:E -ISTTOK:central:TMPump1-Power -ISTTOK:central:TMPump1-Emergency -ISTTOK:central:TMPump1-Acceleration -ISTTOK:central:TMPump1-NormalOperation -ISTTOK:central:TMPump2-Emergency -ISTTOK:central:TMPump2-Acceleration -ISTTOK:central:TTSystem-tzero -ISTTOK:central:Emergency-PhysButton +ISTTOK:central:CurrentTime ISTTOK:central:OPCALCSTATE ISTTOK:central:STARTCALCSTATE ISTTOK:central:STOPPINGCALCSTATE @@ -59,9 +13,23 @@ ISTTOK:central:VVessel-Pressure ISTTOK:central:RPump1-Pressure ISTTOK:central:TMPump1-PressureAdmission ISTTOK:central:RPump2-Pressure -ISTTOK:central:PCF8574:56:REGISTER:READ:FNOUT -ISTTOK:central:PCF8574:57:REGISTER:READ:FNOUT +ISTTOK:central:TMPump2-Speed +ISTTOK:central:TMPump2-Current +ISTTOK:central:PCF8574:56:REGISTER +ISTTOK:central:PCF8574:57:REGISTER +ISTTOK:central:PCF8574:60:REGISTER +ISTTOK:central:PCF8574:61:REGISTER +ISTTOK:central:PCF8591:72:CTRLREGISTER ISTTOK:central:PULSE-NUMBER +ISTTOK:central:PCF8591:72:DAC +ISTTOK:central:TDA8444:32:DAC_CH0 +ISTTOK:central:TDA8444:32:DAC_CH1 +ISTTOK:central:TDA8444:32:DAC_CH2 +ISTTOK:central:TDA8444:32:DAC_CH3 +ISTTOK:central:TDA8444:32:DAC_CH4 +ISTTOK:central:TDA8444:32:DAC_CH5 +ISTTOK:central:TDA8444:32:DAC_CH6 +ISTTOK:central:TDA8444:32:DAC_CH7 ISTTOK:SR_0_State ISTTOK:SR_1_State ISTTOK:SR_2_State @@ -70,41 +38,35 @@ ISTTOK:SR_4_State ISTTOK:SR_5_State ISTTOK:SR_6_State ISTTOK:SR_7_State -ISTTOK:central:TraceMessage -ISTTOK:central:RS485Debug -ISTTOK:SR_recentlyStr -ISTTOK:SR_rebootStatusStr -ISTTOK:SR_rebootTime -ISTTOK:SR_statusStr -ISTTOK:SR_0_Name -ISTTOK:SR_0_StatusStr -ISTTOK:SR_0_Time -ISTTOK:SR_1_Name -ISTTOK:SR_1_StatusStr -ISTTOK:SR_1_Time -ISTTOK:SR_2_Name -ISTTOK:SR_2_StatusStr -ISTTOK:SR_2_Time -ISTTOK:SR_3_Name -ISTTOK:SR_3_StatusStr -ISTTOK:SR_3_Time -ISTTOK:SR_4_Name -ISTTOK:SR_4_StatusStr -ISTTOK:SR_4_Time -ISTTOK:SR_5_Name -ISTTOK:SR_5_StatusStr -ISTTOK:SR_5_Time -ISTTOK:SR_6_Name -ISTTOK:SR_6_StatusStr -ISTTOK:SR_6_Time -ISTTOK:SR_7_Name -ISTTOK:SR_7_StatusStr -ISTTOK:SR_7_Time -ISTTOK:central:PCF8574:56:REGISTER -ISTTOK:central:PCF8574:57:REGISTER -ISTTOK:central:PCF8574:60:REGISTER -ISTTOK:central:PCF8574:61:REGISTER -ISTTOK:central:PCF8591:72:CTRLREGISTER +ISTTOK:central:PCF8591:72:ADC_CH1 +ISTTOK:central:PCF8591:72:ADC_CH2 +ISTTOK:central:P001:M +ISTTOK:central:P001:E +ISTTOK:central:P002:M +ISTTOK:central:P002:E +ISTTOK:central:P003:M +ISTTOK:central:P003:E +ISTTOK:central:P004:M +ISTTOK:central:P004:E +ISTTOK:central:OPSTATE +ISTTOK:central:STARTINGSTATE +ISTTOK:central:CLEANINGSTATE +ISTTOK:central:WSHOTINGSTATE +ISTTOK:central:STOPPINGSTATE +ISTTOK:central:TMPump1-Power +ISTTOK:central:TMPump1-Emergency +ISTTOK:central:TMPump1-Acceleration +ISTTOK:central:TMPump1-NormalOperation +ISTTOK:central:TMPump2-Emergency +ISTTOK:central:TMPump2-Acceleration +ISTTOK:central:TTSystem-tzero +ISTTOK:central:Emergency-PhysButton +ISTTOK:central:TMPump1-ControllerOnInv +ISTTOK:central:TMPump1-ControllerOffInv +ISTTOK:central:TMPump1-MotorOnInv +ISTTOK:central:TMPump1-MotorOffInv +ISTTOK:central:BuzzerInv +ISTTOK:central:Shot-TorPSTriggerInv ISTTOK:central:OPREQ ISTTOK:central:CLEANINGMANMODE ISTTOK:central:FSTriggerStart @@ -137,4 +99,52 @@ ISTTOK:central:TMPump1-ManualValve ISTTOK:SR_heartbeat ISTTOK:SR_i_am_alive ISTTOK:SR_deadIfZero -ISTTOK:central:CurrentTime +ISTTOK:central:LASTOPSTATE +ISTTOK:SR_rebootStatus +ISTTOK:SR_status +ISTTOK:SR_0_Status +ISTTOK:SR_1_Status +ISTTOK:SR_2_Status +ISTTOK:SR_3_Status +ISTTOK:SR_4_Status +ISTTOK:SR_5_Status +ISTTOK:SR_6_Status +ISTTOK:SR_7_Status +ISTTOK:central:PCF8574:56:REGISTER:READ +ISTTOK:central:PCF8574:57:REGISTER:READ +ISTTOK:central:PCF8574:60:REGISTER:READ +ISTTOK:central:PCF8574:61:REGISTER:READ +ISTTOK:central:TraceMessage +ISTTOK:central:LogMessage +ISTTOK:central:RS485Debug +ISTTOK:central:sendmail +ISTTOK:SR_recentlyStr +ISTTOK:SR_rebootStatusStr +ISTTOK:SR_rebootTime +ISTTOK:SR_statusStr +ISTTOK:SR_0_Name +ISTTOK:SR_0_StatusStr +ISTTOK:SR_0_Time +ISTTOK:SR_1_Name +ISTTOK:SR_1_StatusStr +ISTTOK:SR_1_Time +ISTTOK:SR_2_Name +ISTTOK:SR_2_StatusStr +ISTTOK:SR_2_Time +ISTTOK:SR_3_Name +ISTTOK:SR_3_StatusStr +ISTTOK:SR_3_Time +ISTTOK:SR_4_Name +ISTTOK:SR_4_StatusStr +ISTTOK:SR_4_Time +ISTTOK:SR_5_Name +ISTTOK:SR_5_StatusStr +ISTTOK:SR_5_Time +ISTTOK:SR_6_Name +ISTTOK:SR_6_StatusStr +ISTTOK:SR_6_Time +ISTTOK:SR_7_Name +ISTTOK:SR_7_StatusStr +ISTTOK:SR_7_Time +ISTTOK:central:PCF8574:56:REGISTER:READ:FNOUT +ISTTOK:central:PCF8574:57:REGISTER:READ:FNOUT diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav index d73c945..6f23ca2 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav @@ -1,9 +1,10 @@ -# autosave R5.3 Automatically generated - DO NOT MODIFY - 191219-172657 -ISTTOK:central:PULSE-NUMBER.VAL 48291 -ISTTOK:central:LASTOPSTATE.VAL 2 +# autosave R5.3 Automatically generated - DO NOT MODIFY - 200115-154642 +ISTTOK:central:PULSE-NUMBER.VAL 48392 +ISTTOK:central:LogMessage.VAL Olá Mundo +ISTTOK:central:LASTOPSTATE.VAL 5 ISTTOK:central:OPREQ 1 -ISTTOK:central:PROCESS-MODE.VAL 1 -ISTTOK:central:CLEANINGMANMODE.VAL 1 +ISTTOK:central:PROCESS-MODE.VAL 0 +ISTTOK:central:CLEANINGMANMODE.VAL 0 ISTTOK:central:Emergency-UserButton.VAL 0 ISTTOK:central:TMPump1-ManualValve.VAL 1 ISTTOK:central:RPump1-Pressure.HIGH 0.05 diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd index 8fbc77f..bee22e9 100755 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd @@ -21,6 +21,7 @@ drvAsynI2CConfigure( "I2C", "/dev/i2c-1", 1 ) dbLoadRecords("db/ISTTOKstates.db","P=ISTTOK:,R=central:") dbLoadRecords("db/ISTTOKpcf8574.db","P=ISTTOK:,R=central:") dbLoadRecords("db/ISTTOKpcf8591.db","P=ISTTOK:,R=central:") +dbLoadRecords("db/ISTTOKtda8444.db","P=ISTTOK:,R=central:") dbLoadRecords("db/ISTTOKmachineControl.db","P=ISTTOK:,R=central:") ## Load Serial drivers diff --git a/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto b/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto index 5929717..d136f30 100644 --- a/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto +++ b/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto @@ -19,19 +19,19 @@ rReg { # Bits 7 : =0 rConvAdc0 { - out ${1} 0; + out ${1} 64; in "%02r"; } rConvAdc1 { - out ${1} 1; + out ${1} 65; in "%02r"; } rConvAdc2 { - out ${1} 2; + out ${1} 66; in "%02r"; } rConvAdc3 { - out ${1} 3; + out ${1} 67; in "%02r"; } @@ -41,4 +41,8 @@ wReg { out ${1} "%.1r"; } +wDac { + out ${1} 64 "%.1r"; +} + diff --git a/epics/iocs/ISTTOKrpi/protocols/tda8444.proto b/epics/iocs/ISTTOKrpi/protocols/tda8444.proto new file mode 100644 index 0000000..772d5dd --- /dev/null +++ b/epics/iocs/ISTTOKrpi/protocols/tda8444.proto @@ -0,0 +1,42 @@ +Terminator = ""; +LockTimeout = 500; +ReplyTimeout = 100; +ReadTimeout = 100; +WriteTimeout = 100; +MaxInput = 2; +ExtraInput = Error; +#I2C-bus format +# 0 1 0 0 A2 A1 A0 0 : I3 I2 I1 I0 SD SC SB SA : X X D5 D4 D3 D2 D1 D0 +# A2 to A0 = programmable address bits; A = Acknowledge; I3 to I0 = Instruction bits; +# SD to SA = subaddress bits; X = don’t care; D5 to D0 = data bits; + +#instruction F will cause a consecutive writing of the data bytes into the +#same DAC-latch whose subaddress was given in the instruction byte. + +#0xF0 +wDac0 { + out ${1} 240 "%.1r"; +} +wDac1 { + out ${1} 241 "%.1r"; +} +wDac2 { + out ${1} 242 "%.1r"; +} +wDac3 { + out ${1} 243 "%.1r"; +} +wDac4 { + out ${1} 244 "%.1r"; +} +wDac5 { + out ${1} 245 "%.1r"; +} +wDac6 { + out ${1} 246 "%.1r"; +} +wDac7 { + out ${1} 247 "%.1r"; +} + +