Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of digipot by
Diff: digipot.cpp
- Revision:
- 0:57bdd27601ad
- Child:
- 1:0b0025664bb7
diff -r 000000000000 -r 57bdd27601ad digipot.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/digipot.cpp Fri Apr 03 20:04:16 2015 +0000
@@ -0,0 +1,71 @@
+//Digipot code with 2nd CAN Transceiver for testing
+
+#include "mbed.h"
+
+static int id = 0x04; //Module CAN ID, to be assigned by keypad team.
+static double input_amp = 3.3; //input analog signal is 3.3V
+
+static double R1 = 10; //Opamp resistor between output and inverting-input
+static double R2 = 5.6; //Opamp resistor between inverting-input and ground
+static double gain = 1 + R2/R1; //Non-inverting opamp gain
+
+//Debugging Variables
+DigitalOut led1(LED1); //debugging LED1
+Ticker ticker; //triggers debugging send
+char counter = 0; //Output amplitude
+CAN can2(p30, p29); //2nd debugging send transceiver
+
+//Values to be used in final implementation
+DigitalOut led2(LED2); //debugging LED2
+DigitalOut CS(p8); // inverted chip select
+SPI spi(p5, p6, p7); // mosi, miso, sclk
+CAN can1(p9, p10); //reading transceiver
+
+
+void digipot (int OutputAmp)
+{
+ CS=0; // Deselects the digipot
+ // Setup the spi for 8 bit data, high steady state clock,
+ // second edge capture, with a 1MHz clock rate
+ spi.format(8,3);
+ spi.frequency(1000000);
+
+ uint8_t wiper = uint8_t(OutputAmp*(255/(input_amp * gain))); //Generates appropriate Wiper position
+
+ spi.write(0x11); // Write data command, potentiometer zero
+ spi.write(wiper); // Writes wiper value
+
+ CS=1; // Selects the digipot, and executes command
+}
+
+void send() //For debugging
+{
+ if(can2.write(CANMessage(id, &counter, 1))) {
+ counter++;
+ if(counter ==6)
+ {
+ counter = 0; //reset counter
+ }
+ }
+ led1 = !led1;
+}
+
+int main()
+{
+ ticker.attach(&send,10); //Debugging: Changes output amplitude every 10 seconds
+
+ int OutputAmp = 0; //Default output amplitude value
+ digipot(OutputAmp);
+
+ CANMessage msg;
+
+ while(1)
+ {
+ if(can1.read(msg) && msg.id == id)
+ {
+ OutputAmp = msg.data[0]; //Input is an int 0,1,2,3,4,5
+ digipot(OutputAmp); //set digipot value
+ led2 = !led2;
+ }
+ }
+}
\ No newline at end of file
