Подключение периферии по SPI

Материал из virt2real wiki
Перейти к: навигация, поиск

На примере АЦП (DAC) AD5317

Распиновка чипа AD5317

Номер пина Название Назначение
1 CLR Сброс выходов в нуль
2 LDAC Active Low Control Input
3 Vdd Питание ( от 2.5 до 5.5В)
4 VOUTA Выход A
5 VOUTB Выход B
6 VOUTC Выход C
7 VREFAB Опорное напряжение для выходов A и B
8 VREFCD Опорное напряжение для выходов C и D
9 DCEN Режим цепочки
10 PD Power down
11 VOUTD Выход D
12 GND Земля
13 DIN Serial Data Input
14 SCLK Serial Clock Input
15 SYNC Он ж SS для SPI (выбор чипа)
16 SDO Serial Data Output


Подключение к контроллеру Virt2real (Виртурилке)

1 - +5V

2 - GND

3 - +5V

4 - аналоговый выход A

5 - аналоговый выход B

6 - аналоговый выход C

7 - +5V

8 - +5V

9 - GND

10 - +5V

11 - аналоговый выход D

12 - GND

13 - к SPI0_MOSI Виртурилки (GPIO22)

14 - к SPI0_SCLK Виртурилки (GPIO24)

15 - к SPI0_SS Виртурилки (GPIO23)

16 - NC (не подключено)

Пример кода

Заставим стрелку аналогового вольтметра скакать от 0 до 5 Вольт и обратно. Пример кода для NodeJS.

  1. var buffer = new Buffer(2);
  2. var fs = require("fs");
  3.  
  4. var counter = 0;
  5. var inc = 1;
  6.  
  7. var stream = fs.createWriteStream("/dev/spidev0.1");
  8. stream.once('open', function(fd) {
  9. 	var aliveTimer = setInterval(onTimer, 10);
  10. });
  11.  
  12. function onTimer(){
  13. 	var val = makevalue(0x00, 0, 0, counter);
  14. 	counter += inc;
  15. 	if (counter >= 1023) inc = -1;
  16. 	if (counter < 1) inc = 1;
  17. 	buffer[0] = highByte(val);
  18. 	buffer[1] = lowByte(val);
  19. 	console.log(buffer);
  20. 	stream.write(buffer);
  21. }
  22.  
  23. function makevalue(address, gain, buf, val) {
  24. 	var value = 0;
  25. 	address = address & 0x3;
  26. 	value = value | (address << 14);
  27. 	gain = gain & 1;
  28. 	value = value | (gain << 13);
  29. 	buf = buf & 1;
  30. 	value = value | (buf << 12);
  31. 	val = val & 0x3FF;
  32. 	value = value | (val << 2);
  33.  
  34. 	return value;
  35. }
  36.  
  37.  
  38. function lowByte(val){
  39. 	return val & 0xFF;
  40. }
  41.  
  42. function highByte(val){
  43. 	return val >> 8;
  44. }