HCPL _0872 mit HCPL-7560

Gast #4135940
Lesenswert?
• ▲
▼
Hallo

wer hat Erfahrung mit dem ISO Wandler / Digital Interface IC?
Muss der HCPL0872 denn Konfiguriert werden?
Denn ich haben diesen so Beschalten wie im Datenblatt Seite 6.
möchte pot.frei eine Hochspannung messen.
Leider bekomme ich über die SPI über die Daten eine Dauer 1 so zu sagen 
egal welche Spannung anliegt.

Hoffe ich könnt mir einen Rat geben.

Danke im voraus Gruß
Gast #4137760
Lesenswert?
• ▲
▼
Sepp schrieb:
> Muss der HCPL0872 denn Konfiguriert werden?
ja

so als beispiel:
1
/** I N C L U D E S **********************************************************/
2
#include "main.h" 
3
#include "hcpl-0872.h"
4
#include "spi.h"
5

6

7
volatile signed int ad_wert1[3];
8
volatile signed int signed_ad_wert[3];
9

10

11
void HCPL_0872_Init(void)
12
{
13
        int config1, config2, config3;
14

15
     /* SPI1 befehle-konfigurieren, in Mater Mode, CLK von Master 10MHZ, SS off, SDO on,
16
        SDI NC */
17
    config1 = ENABLE_SCK_PIN &
18
              ENABLE_SDO_PIN & //ENABLE_SDO_PIN
19
              SPI_MODE16_OFF&   //SPI_MODE16_OFF
20
              SPI_SMP_OFF &     //SPI_SMP_OFF
21
              SPI_CKE_ON &      //SPI_CKE_ON
22
              SLAVE_ENABLE_OFF &
23
              CLK_POL_ACTIVE_HIGH & //CLK_POL_ACTIVE_HIGH
24
              MASTER_ENABLE_ON &
25
              SEC_PRESCAL_4_1 &
26
              PRI_PRESCAL_4_1;
27
        
28
    config2 = FRAME_ENABLE_OFF &
29
              FRAME_SYNC_OUTPUT &
30
              FRAME_POL_ACTIVE_HIGH &
31
              FRAME_SYNC_EDGE_COINCIDE &
32
              FIFO_BUFFER_ENABLE;
33
    
34
    config3 = SPI_ENABLE &
35
              SPI_IDLE_CON &
36
              SPI_RX_OVFLOW_CLR;
37

38
    OpenSPI1(config1, config2, config3);
39

40

41
    CS=1;
42
    SS_CLAT=1;
43

44

45
  HCPL_reset = 0;
46
  delay_ms(10);
47
  HCPL_reset = 1;
48
  delay_ms(10);
49
  HCPL_reset = 0;
50
  delay_ms(10);
51

52

53
}
54

55

56
void HCPL_0872_config (void)
57
{
58
 unsigned int buffer;
59

60

61
  SS_CLAT=1;
62
  delay_us(100);
63

64

65
  SS_CLAT=0;
66
  delay_us(1);             //Setup Time from Data (min 200ns)
67
  WriteSPI1(0b01011001);   //V phase, Conversion MODE1, Offset
68
  while (!SPI1STATbits.SPIRBF);
69
  buffer = SPI1BUF;
70
  SS_CLAT=1;
71

72
  HCPL_0872_read(V_phase);
73

74
  SS_CLAT=0;
75
  delay_us(1);             //Setup Time from Data (min 200ns)
76
  WriteSPI1(0b11000001);   //V phase, Set Conversion MODE4
77
  while (!SPI1STATbits.SPIRBF);
78
  buffer = SPI1BUF;
79
  SS_CLAT=1;
80

81

82
  SS_CLAT=0;
83
  delay_us(1);             //Setup Time from Data (min 200ns)
84
  WriteSPI1(0b01011000);   //U phase, Conversion MODE1, Offset
85
  while (!SPI1STATbits.SPIRBF);
86
  buffer = SPI1BUF;
87
  SS_CLAT=1;
88

89
  HCPL_0872_read(U_phase);
90

91
  SS_CLAT=0;
92
  delay_us(1);             //Setup Time from Data (min 200ns)
93
  WriteSPI1(0b11000000);   //U phase, Set Conversion MODE4
94
  while (!SPI1STATbits.SPIRBF);
95
  buffer = SPI1BUF;
96
  SS_CLAT=1;
97

98

99

100
  
101

102
//  WriteSPI1(0b01010000);   //Conversion MODE1
103
//  WriteSPI1(0b00110000);   //Conversion MODE2
104
//  WriteSPI1(0b11100000);   //Conversion MODE3
105
//  WriteSPI1(0b11000000);   //Conversion MODE4
106
//  WriteSPI1(0b10100000);   //Conversion MODE5
107

108

109
//  WriteSPI1(0b00000011);   //Pretrigger MODE0
110
//  WriteSPI1(0b01000011);   //Pretrigger MODE1
111
//  WriteSPI1(0b11000011);   //Pretrigger MODE2
112

113
}
114

115

116

117
void HCPL_0872_read (unsigned int channel)
118
{                   
119
  unsigned int i=0,j=0;
120
  signed long temp[2];
121

122
  UV_select = channel;
123
  delay_us(1);             //Setup Time from CHAN (min 20ns)
124

125
  CS=0;
126
  delay_us(1);                       //Setup Time from Data (min 200ns)
127

128
#if defined YASKAWA_TESTADAPTER_CIMR
129
  while (!SDATA_HIGH)  //wait for SDATA High 
130
  {if (i > 250) break; i++;} 
131
  SPI2BUF = 0x0000;
132

133
  while (!SPI2STATbits.SPIRBF)
134
  {if (j > 250) break; j++;}
135

136
#elif defined YASKAWA_TESTADAPTER_SGDH
137
  while (!SDATA_HIGH) {if (i > 250) break; i++;}  //wait for SDATA High 
138
  SPI2BUF = 0x0000;
139

140
  while (!SPI2STATbits.SPIRBF);
141

142
#elif defined SANYO_DENKI_TESTADAPTER
143
  while (!SDATA_HIGH); // {if (i > 250) break; i++;} 
144
  SPI2BUF = 0x0000;
145

146
  while (!SPI2STATbits.SPIRBF);
147

148
#endif
149

150

151
  if (channel==0)
152
  {
153
  ad_wert1[0] = SPI2BUF & 0x7FFF; // U Phase. Es werden nur 15Bits benotigt
154
  }
155
  else
156
  {
157
  ad_wert1[1] = SPI2BUF & 0x7FFF; // V Phase. Es werden nur 15Bits benotigt  signed_ad_wert[1] = ((ad_wert1[0] - 16384) * 11) / 10;
158
  }
159

160
  CS=1; 
161

162

163
#if defined SANYO_DENKI_TESTADAPTER
164

165
 switch(Sanyo_Denki_Version)
166
     {
167
      case 0:
168
          signed_ad_wert[0] = ((ad_wert1[0] - 16384) * 11) / 10;
169
          signed_ad_wert[1] = ((ad_wert1[1] - 16384) * 11) / 10;
170
      break;
171

172
      case 1:
173
         signed_ad_wert[0] = ((ad_wert1[0] - 16384) * 22) / 10;
174
         signed_ad_wert[1] = ((ad_wert1[1] - 16384) * 22) / 10;
175
      break;
176

177
      default:
178
      break;
179
     }
180
#else
181
  signed_ad_wert[0] = ((80000/16384) * (ad_wert1[0] - 16384));
182
  signed_ad_wert[1] = ((80000/16384) * (ad_wert1[1] - 16384));
183
#endif
184

185
  QF_INT_UNLOCK(); //Interrupt einschalten
186

187
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.