<< Chapter < Page Chapter >> Page >

Finally, in a portion of the main section of our code, we need to call these established functions in order to update pins and respond to button presses.

Main

//Function: main //Polls buttons for input and calls respective functionsint main(void){ int ret[13]; iolib_init(); //initialize i/o library//intialize the pins to output and input ret[0]= iolib_setdir(PORT, PIN0, DIR_OUT); ret[1]= iolib_setdir(PORT, PIN1, DIR_OUT); ret[2]= iolib_setdir(PORT, PIN2, DIR_OUT); ret[3]= iolib_setdir(PORT, PIN3, DIR_OUT); ret[4]= iolib_setdir(PORT, PIN4, DIR_OUT); ret[5]= iolib_setdir(PORT, PIN5, DIR_OUT); ret[6]= iolib_setdir(PORT, PIN6, DIR_OUT); ret[7]= iolib_setdir(PORT, PIN7, DIR_OUT); ret[8]= iolib_setdir(PORT2,PIN8, DIR_IN); ret[9]= iolib_setdir(PORT2,PIN9, DIR_IN); ret[10]= iolib_setdir(PORT2, PIN10, DIR_IN); ret[11]= iolib_setdir(PORT2, PIN11, DIR_IN); ret[12]= iolib_setdir(PORT2, PIN12, DIR_IN); int function = 3;int frequency = 500; while (1){ //poll for user input from buttons//check each pin for update if(check_low(PIN8)){printf("PIN8 pressed"); if (function == 0){else if (function == 4){ playSong1();} else if (function == 5){playSong2(); }} else if (check_low(PIN9)){ //increase frequency by 100 Hzprintf("PIN9 pressed"); frequency += 100;if (frequency and gt; 20000){ frequency = 20000;} }iolib_free(); return (0);}

R/2r ladder

Our implementation of the R/2R ladder consists of resistors of 110Ω and 220Ω, cascaded together to form eight different rungs, each fed by an output bit from the BeagleBone Black, as shown by the diagram.

Ladder Design

In this configuration, the output voltage, Vout, can be calculated by the following formula:Vout = Vref * (A/2^8) where Vref is the 3.3V positive voltage of the BeagleBone Black and A is the binary value currently outputted by the ai's (0 ≤ A ≤ 255). This is because the lower significant bits are scaled-down by the 110Ω resistors between them and Vout; each rung between a bit and the output voltage scale the bit by a factor of 1/2 before it reaches the output. With this system, we can use change the values of the 8 bits to output any one of 256 different voltages, scaled by 3.3V.

One thing we considered when building the R/2R ladder is the tolerance of the resistors used in the last few rungs. Since the value of the most significant bit is hundreds of times more significant than the value of the least significant bit, we took extra precautions to select and use only the resistors with very tight tolerances for the last few rungs, especially the last rung. If we had not done so and the values of the last two resistors were off by a significant percentage, then our output signal would be considerably distorted along the amplitude axis; the highest possible output value might actually be higher or lower than expected and vice versa for the lowest possible output value. However, during our tests of the system, the oscilloscope showed no significant distortion of the output voltages, and our final output signal played as expected.

Rc low pass filter

When we implemented the RC low-pass filter, we chose the values of the resistor and capacitor to obtain a cutoff frequency (at which the gain is 0.707) of approximately 20,000 Hz. We decided to use a capacitor of 550nF and a resistor of 16Ω, as shown below. LPF Design

The magnitude of the transfer function given by this system is: equation

Given this transfer function, we can calculate the cutoff frequency to be 18,086 Hz. We could not find resistors and capacitors to have a cutoff frequency of exactly 20,000 Hz, but for audible sounds, we decided that 18,000 Hz will be enough to serve our purpose.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, R/2r implementation of a d/a converter. OpenStax CNX. Dec 17, 2014 Download for free at http://legacy.cnx.org/content/col11732/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'R/2r implementation of a d/a converter' conversation and receive update notifications?

Ask