LibDriver AD9833
Loading...
Searching...
No Matches
driver_ad9833_output_test.c
Go to the documentation of this file.
1
36
38#include <math.h>
39#include <stdlib.h>
40
41static ad9833_handle_t gs_handle;
42
52uint8_t ad9833_output_test(ad9833_number_t number, uint32_t ms)
53{
54 uint8_t res;
55 uint32_t reg32;
56 uint16_t reg16;
57 double hz;
58 double rad;
59 ad9833_info_t info;
60
61 /* link function */
68
69 /* get chip information */
70 res = ad9833_info(&info);
71 if (res != 0)
72 {
73 ad9833_interface_debug_print("ad9833: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print chip information */
80 ad9833_interface_debug_print("ad9833: chip is %s.\n", info.chip_name);
81 ad9833_interface_debug_print("ad9833: manufacturer is %s.\n", info.manufacturer_name);
82 ad9833_interface_debug_print("ad9833: interface is %s.\n", info.interface);
83 ad9833_interface_debug_print("ad9833: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 ad9833_interface_debug_print("ad9833: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 ad9833_interface_debug_print("ad9833: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 ad9833_interface_debug_print("ad9833: max current is %0.2fmA.\n", info.max_current_ma);
87 ad9833_interface_debug_print("ad9833: max temperature is %0.1fC.\n", info.temperature_max);
88 ad9833_interface_debug_print("ad9833: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* ad9833 init */
92 res = ad9833_init(&gs_handle);
93 if (res != 0)
94 {
95 ad9833_interface_debug_print("ad9833: init failed.\n");
96
97 return 1;
98 }
99
100 /* start output test */
101 ad9833_interface_debug_print("ad9833: start output test.\n");
102
103 /* disable dac power down */
105 if (res != 0)
106 {
107 ad9833_interface_debug_print("ad9833: set dac power down failed.\n");
108 (void)ad9833_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* enable internal clock */
115 if (res != 0)
116 {
117 ad9833_interface_debug_print("ad9833: set internal clock disable failed.\n");
118 (void)ad9833_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* output */
124 ad9833_interface_debug_print("ad9833: use frequency register %d.\n", number == AD9833_NUMBER_0 ? 0 : 1);
125
126 /* number */
127 res = ad9833_set_used_frequency_register(&gs_handle, number);
128 if (res != 0)
129 {
130 ad9833_interface_debug_print("ad9833: set used frequency register failed.\n");
131 (void)ad9833_deinit(&gs_handle);
132
133 return 1;
134 }
135
136 /* output */
137 ad9833_interface_debug_print("ad9833: use phase register %d.\n", number == AD9833_NUMBER_0 ? 0 : 1);
138
139 /* number */
140 res = ad9833_set_used_phase_register(&gs_handle, number);
141 if (res != 0)
142 {
143 ad9833_interface_debug_print("ad9833: set used phase register failed.\n");
144 (void)ad9833_deinit(&gs_handle);
145
146 return 1;
147 }
148
149 /* convert to register */
150 res = ad9833_frequency_convert_to_register(&gs_handle, 1000, &reg32);
151 if (res != 0)
152 {
153 ad9833_interface_debug_print("ad9833: frequency convert to register failed.\n");
154 (void)ad9833_deinit(&gs_handle);
155
156 return 1;
157 }
158
159 /* output */
160 ad9833_interface_debug_print("ad9833: set frequency 1000Hz.\n");
161
162 /* set frequency */
163 res = ad9833_set_frequency(&gs_handle, number, reg32);
164 if (res != 0)
165 {
166 ad9833_interface_debug_print("ad9833: set frequency failed.\n");
167 (void)ad9833_deinit(&gs_handle);
168
169 return 1;
170 }
171
172 /* convert to register */
173 res = ad9833_phase_convert_to_register(&gs_handle, 0.0, &reg16);
174 if (res != 0)
175 {
176 ad9833_interface_debug_print("ad9833: phase convert to register failed.\n");
177 (void)ad9833_deinit(&gs_handle);
178
179 return 1;
180 }
181
182 /* set phase */
183 res = ad9833_set_phase(&gs_handle, number, reg16);
184 if (res != 0)
185 {
186 ad9833_interface_debug_print("ad9833: set phase failed.\n");
187 (void)ad9833_deinit(&gs_handle);
188
189 return 1;
190 }
191
192 /* output */
193 ad9833_interface_debug_print("ad9833: set phase 0.\n");
194
195 /* output sin */
197 if (res != 0)
198 {
199 ad9833_interface_debug_print("ad9833: set output mode failed.\n");
200 (void)ad9833_deinit(&gs_handle);
201
202 return 1;
203 }
204
205 /* output */
206 ad9833_interface_debug_print("ad9833: output sin.\n");
207
208 /* delay */
210
211 /* output triangle */
213 if (res != 0)
214 {
215 ad9833_interface_debug_print("ad9833: set output mode failed.\n");
216 (void)ad9833_deinit(&gs_handle);
217
218 return 1;
219 }
220
221 /* output */
222 ad9833_interface_debug_print("ad9833: output triangle.\n");
223
224 /* delay */
226
227 /* output dac half data */
229 if (res != 0)
230 {
231 ad9833_interface_debug_print("ad9833: set output mode failed.\n");
232 (void)ad9833_deinit(&gs_handle);
233
234 return 1;
235 }
236
237 /* output */
238 ad9833_interface_debug_print("ad9833: output dac half data.\n");
239
240 /* delay */
242
243 /* output dac half data */
245 if (res != 0)
246 {
247 ad9833_interface_debug_print("ad9833: set output mode failed.\n");
248 (void)ad9833_deinit(&gs_handle);
249
250 return 1;
251 }
252
253 /* output */
254 ad9833_interface_debug_print("ad9833: output dac data.\n");
255
256 /* delay */
258
259 /* output sin */
261 if (res != 0)
262 {
263 ad9833_interface_debug_print("ad9833: set output mode failed.\n");
264 (void)ad9833_deinit(&gs_handle);
265
266 return 1;
267 }
268
269 /* convert to register */
270 res = ad9833_frequency_convert_to_register(&gs_handle, 10000, &reg32);
271 if (res != 0)
272 {
273 ad9833_interface_debug_print("ad9833: frequency convert to register failed.\n");
274 (void)ad9833_deinit(&gs_handle);
275
276 return 1;
277 }
278
279 /* output */
280 ad9833_interface_debug_print("ad9833: set frequency 10KHz.\n");
281
282 /* set frequency */
283 res = ad9833_set_frequency(&gs_handle, number, reg32);
284 if (res != 0)
285 {
286 ad9833_interface_debug_print("ad9833: set frequency failed.\n");
287 (void)ad9833_deinit(&gs_handle);
288
289 return 1;
290 }
291
292 /* delay */
294
295 /* convert to register */
296 res = ad9833_frequency_convert_to_register(&gs_handle, 50000, &reg32);
297 if (res != 0)
298 {
299 ad9833_interface_debug_print("ad9833: frequency convert to register failed.\n");
300 (void)ad9833_deinit(&gs_handle);
301
302 return 1;
303 }
304
305 /* output */
306 ad9833_interface_debug_print("ad9833: set frequency 50KHz.\n");
307
308 /* set frequency */
309 res = ad9833_set_frequency(&gs_handle, number, reg32);
310 if (res != 0)
311 {
312 ad9833_interface_debug_print("ad9833: set frequency failed.\n");
313 (void)ad9833_deinit(&gs_handle);
314
315 return 1;
316 }
317
318 /* delay */
320
321 /* convert to register */
322 res = ad9833_phase_convert_to_register(&gs_handle, 3.14159265357 / 2.0, &reg16);
323 if (res != 0)
324 {
325 ad9833_interface_debug_print("ad9833: phase convert to register failed.\n");
326 (void)ad9833_deinit(&gs_handle);
327
328 return 1;
329 }
330
331 /* convert to data */
332 res = ad9833_phase_convert_to_data(&gs_handle, reg16, &rad);
333 if (res != 0)
334 {
335 ad9833_interface_debug_print("ad9833: phase convert to data failed.\n");
336 (void)ad9833_deinit(&gs_handle);
337
338 return 1;
339 }
340
341 /* output */
342 ad9833_interface_debug_print("ad9833: set phase %0.1fpi.\n", rad / 3.14159265357);
343
344 /* set phase */
345 res = ad9833_set_phase(&gs_handle, number, reg16);
346 if (res != 0)
347 {
348 ad9833_interface_debug_print("ad9833: set phase failed.\n");
349 (void)ad9833_deinit(&gs_handle);
350
351 return 1;
352 }
353
354 /* delay */
356
357 /* convert to register */
358 res = ad9833_frequency_convert_to_register(&gs_handle, 2000, &reg32);
359 if (res != 0)
360 {
361 ad9833_interface_debug_print("ad9833: frequency convert to register failed.\n");
362 (void)ad9833_deinit(&gs_handle);
363
364 return 1;
365 }
366
367 /* convert to data */
368 res = ad9833_frequency_convert_to_data(&gs_handle, reg32, &hz);
369 if (res != 0)
370 {
371 ad9833_interface_debug_print("ad9833: frequency convert to data failed.\n");
372 (void)ad9833_deinit(&gs_handle);
373
374 return 1;
375 }
376
377 /* output */
378 ad9833_interface_debug_print("ad9833: set frequency %0.0fHz.\n", hz);
379
380 /* set frequency msb */
381 res = ad9833_set_frequency_msb(&gs_handle, number, (reg32 >> 14) & 0x3FFF);
382 if (res != 0)
383 {
384 ad9833_interface_debug_print("ad9833: set frequency msb failed.\n");
385 (void)ad9833_deinit(&gs_handle);
386
387 return 1;
388 }
389
390 /* set frequency lsb */
391 res = ad9833_set_frequency_lsb(&gs_handle, number, (reg32 >> 0) & 0x3FFF);
392 if (res != 0)
393 {
394 ad9833_interface_debug_print("ad9833: set frequency lsb failed.\n");
395 (void)ad9833_deinit(&gs_handle);
396
397 return 1;
398 }
399
400 /* delay */
402
403 /* reset */
404 res = ad9833_reset(&gs_handle);
405 if (res != 0)
406 {
407 ad9833_interface_debug_print("ad9833: reset failed.\n");
408 (void)ad9833_deinit(&gs_handle);
409
410 return 1;
411 }
412
413 /* finish output test */
414 ad9833_interface_debug_print("ad9833: finish output test.\n");
415 (void)ad9833_deinit(&gs_handle);
416
417 return 0;
418}
driver ad9833 output test header file
uint8_t ad9833_set_internal_clock_disable(ad9833_handle_t *handle, ad9833_bool_t enable)
enable or disable internal clock disable
uint8_t ad9833_set_frequency_lsb(ad9833_handle_t *handle, ad9833_number_t number, uint16_t freq)
set the frequency lsb
uint8_t ad9833_frequency_convert_to_register(ad9833_handle_t *handle, double hz, uint32_t *reg)
convert the frequency to the register raw data
ad9833_number_t
ad9833 number enumeration definition
uint8_t ad9833_set_frequency_msb(ad9833_handle_t *handle, ad9833_number_t number, uint16_t freq)
set the frequency msb
uint8_t ad9833_set_dac_power_down(ad9833_handle_t *handle, ad9833_bool_t enable)
enable or disable dac power down
struct ad9833_handle_s ad9833_handle_t
ad9833 handle structure definition
uint8_t ad9833_set_used_frequency_register(ad9833_handle_t *handle, ad9833_number_t number)
set the used frequency register
uint8_t ad9833_phase_convert_to_register(ad9833_handle_t *handle, double rad, uint16_t *reg)
convert the phase to the register raw data
struct ad9833_info_s ad9833_info_t
ad9833 information structure definition
uint8_t ad9833_phase_convert_to_data(ad9833_handle_t *handle, uint16_t reg, double *rad)
convert the register raw data to phase
uint8_t ad9833_set_output_mode(ad9833_handle_t *handle, ad9833_output_mode_t mode)
set output mode
uint8_t ad9833_init(ad9833_handle_t *handle)
initialize the chip
uint8_t ad9833_set_frequency(ad9833_handle_t *handle, ad9833_number_t number, uint32_t freq)
set the frequency
uint8_t ad9833_reset(ad9833_handle_t *handle)
reset the chip
uint8_t ad9833_deinit(ad9833_handle_t *handle)
close the chip
uint8_t ad9833_set_used_phase_register(ad9833_handle_t *handle, ad9833_number_t number)
set the used phase register
uint8_t ad9833_set_phase(ad9833_handle_t *handle, ad9833_number_t number, uint16_t phase)
set the phase
uint8_t ad9833_info(ad9833_info_t *info)
get chip's information
uint8_t ad9833_frequency_convert_to_data(ad9833_handle_t *handle, uint32_t reg, double *hz)
convert the register raw data to frequency
@ AD9833_BOOL_FALSE
@ AD9833_NUMBER_0
@ AD9833_OUTPUT_MODE_SIN
@ AD9833_OUTPUT_MODE_DAC_HALF
@ AD9833_OUTPUT_MODE_TRI
@ AD9833_OUTPUT_MODE_DAC
void ad9833_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ad9833_interface_spi_write_cmd(uint8_t *buf, uint16_t len)
interface spi bus write command
uint8_t ad9833_interface_spi_init(void)
interface spi bus init
uint8_t ad9833_interface_spi_deinit(void)
interface spi bus deinit
void ad9833_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ad9833_output_test(ad9833_number_t number, uint32_t ms)
output test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]