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ß
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.