Forum: Mikrocontroller und Digitale Elektronik HCPL _0872 mit HCPL-7560


von Sepp (Gast)


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ß

von Sepp (Gast)


Lesenswert?

keiner eine Idee

von HCPL0872 (Gast)


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
}

von SEPP (Gast)


Lesenswert?

also muss er Konfiguriert werden.

Dachte der Funktioniert auch wie in Beispiel typ. Applikation.
Danker für die Info

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.