Test
Dependencies: mbed-dev-OS5_10_4
Main/Dac8532.cpp
- Committer:
- kevman
- Date:
- 2020-08-07
- Revision:
- 0:014fad4dfb9d
File content as of revision 0:014fad4dfb9d:
/* ------------------------------------------------------------------------------- Programm Name: DaMethoden.C Version: 1.0 Sprache: C Compiler: CrossStudio Ver. 2.0 Autor: PS Copyright: PS Funktion: Init und Io fuer den D/A Wandler 28.10.2012: -------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------- -------------------------------------------------------------------------------*/ #include "Headers.h" // Private Definitionen /** Max buffer length */ // Rev B und C // Private Variablen int nDCounter; unsigned char Low, High; /*------------------------------------------------------------------------------- Initialisieren der Pins fuer den DA Wandler -------------------------------------------------------------------------------*/ int InitDac(void) { int i; /* Initialisieren der Pins fuer den D/A Zugriff: Mosi = 0; // Mosi für den D/A Wandler CsDac = 1; // CS für den D/A Wandler, 0 = Cs aktiv, (low active) Sck = 0; // SCK für den D/A Wandler */ DacCs = 0; DacSck = 1; DacMosi = 0; for(i=0;i<3;i++) { DacSck = 0; DacSck = 1; // D23 bis D21 auf 0 } DacMosi = 1; // D20 auf 1, load DAC A DacSck = 0; DacSck = 1; DacMosi = 0; for(i=4;i<24;i++) { DacSck= 0; DacSck = 1; // D19 bis D0 auf 0 } Low = 0x00; High = 0x00; return(true); } /*------------------------------------------------------------------------------- Testen des D/A Wandlers -------------------------------------------------------------------------------*/ int TestDac(void) { Low++; SpiSendDa (0, 0); if(Low == 0xFF) { High++; } return(true); } /* ******************************************************************** macht das komplette Out fuer 24 Bit ***********************************************************************/ int SpiSendDa (uint8_t Channel, uint16_t Mode) { uint32_t WData0, WData1,WData2; uint16_t n; uint32_t Mask; uint32_t tmp; DacSck = 0; DacCs = 0; // 2016-06 UFa: Aenderungen aufgrund HW-Revision short_delay(1); n = 0; WData0 = 0x10; WData1 = High; WData2 = Low; Mask = 0x0800000; tmp = 0; tmp = ((WData0 << 16) | (WData1 << 8) | (WData2)); for(n=0;n<24;n++) { DaSckUp(); short_delay(1); if(tmp & Mask) DaMosiUp(); else DaMosiDown(); short_delay(1); DaSckDown(); short_delay(1); Mask >>= 1; } // 2016-06 UFa: Aenderungen aufgrund HW-Revision DacCs = 1; DacSck = 1; short_delay(1); return (0); } /*------------------------------------------------------------------------------- Berechnen der Daten an den DA Wandler. Wird erst mal für die Anschlussbox berechnet, bei der jeweils 2 Kanäle auf einen Ausgang addiert werden -------------------------------------------------------------------------------*/ void CalcDa(double SourceVal, UINT8 Chn) { // DigitalOut CsTest(PTC16); // nur wegen dekativierung durch Ethernet. Ich hoffe, das wird wieder anders unsigned int OutValue; double Counts; double SrcVal; SrcVal = SourceVal; Counts = SrcVal * 13.107; OutValue = (uint16_t)(Counts); Low = OutValue; High = (OutValue >> 8); SpiSendDa(0,1); } /*------------------------------------------------------------------------------- Senden der Daten an den DA Wandler -------------------------------------------------------------------------------*/ void SendDataDa(void) { SpiSendDa(0,3); }