3 * Simple test for the SPI bus on the Gertboard
6 * D/A port 0 jumpered to A/D port 0.
8 * We output a sine wave on D/A port 0 and sample A/D port 0. We then
9 * plot the input value on the terminal as a sort of vertical scrolling
12 * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
13 ***********************************************************************
14 * This file is part of wiringPi:
15 * https://projects.drogon.net/raspberry-pi/wiringpi/
17 * wiringPi is free software: you can redistribute it and/or modify
18 * it under the terms of the GNU Lesser General Public License as published by
19 * the Free Software Foundation, either version 3 of the License, or
20 * (at your option) any later version.
22 * wiringPi is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU Lesser General Public License for more details.
27 * You should have received a copy of the GNU Lesser General Public License
28 * along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
29 ***********************************************************************
33 #include <sys/ioctl.h>
37 // Gertboard D to A is an 8-bit unit.
42 #include <gertboard.h>
53 printf ("Raspberry Pi Gertboard SPI test program\n") ;
54 printf ("=======================================\n") ;
56 ioctl (fileno (stdin), TIOCGWINSZ, &w);
59 // Always initialise wiringPi. Use wiringPiSys() if you don't need
60 // (or want) to run as root
64 // Initialise the Gertboard analog hardware at pin 100
66 gertboardAnalogSetup (100) ;
68 // Generate a Sine Wave and store in our buffer
70 for (i = 0 ; i < B_SIZE ; ++i)
72 angle = ((double)i / (double)B_SIZE) * M_PI * 2.0 ;
73 buffer [i] = (int)rint ((sin (angle)) * 127.0 + 128.0) ;
76 // Loop, output the sine wave on analog out port 0, read it into A-D port 0
77 // and display it on the screen
81 for (i = 0 ; i < B_SIZE ; ++i)
83 analogWrite (100, buffer [i]) ;
85 inputValue = analogRead (100) ;
87 // We don't need to wory about the scale or sign - the analog hardware is
88 // a 10-bit value, so 0-1023. Just scale this to our terminal
90 printf ("%*s\n", (inputValue * cols) / 1023, "*") ;