Difference between revisions of "Example io demo"

From wiki.emacinc.com
Jump to: navigation, search
(Usage Example. Ring Demo)
m (Approved for Final Draft status.)
Line 1: Line 1:
{{todo|Review(01.03.14-16:47->JG+)|Jgreene|project=oe 4,oe 5,jg,md,Review}}
+
{{todo|FinalDraft (01.03.14-16:47->JG+);(01.03.14-17:35->MD+)|Jgreene|project=oe 4,oe 5,jg,md,FinalDraft,ky}}
 
This is a guide to the <code>io demo</code> C example project included in the EMAC OE SDK.
 
This is a guide to the <code>io demo</code> C example project included in the EMAC OE SDK.
  
Line 23: Line 23:
 
* A compatible EMAC SoM for that carrier board ([http://www.emacinc.com/products/system_on_module/SoM-9260M SOM-9260M], [http://www.emacinc.com/products/system_on_module/som-9G20m SOM-9G20M] and [http://www.emacinc.com/products/system_on_module/som-9x25 SOM-9X25] are all compatible and available from EMAC).<br />
 
* A compatible EMAC SoM for that carrier board ([http://www.emacinc.com/products/system_on_module/SoM-9260M SOM-9260M], [http://www.emacinc.com/products/system_on_module/som-9G20m SOM-9G20M] and [http://www.emacinc.com/products/system_on_module/som-9x25 SOM-9X25] are all compatible and available from EMAC).<br />
 
* A multimeter or oscilloscope. See [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Input_to_Output_Demo Usage Example. Input to Output Demo] and  [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Count_Demo Usage Example. Count Demo] for details.<br />
 
* A multimeter or oscilloscope. See [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Input_to_Output_Demo Usage Example. Input to Output Demo] and  [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Count_Demo Usage Example. Count Demo] for details.<br />
* A ribbon cable just long enough to reach from GPIO Port B to GPIO Port C. See [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Input_to_Output_Demo Usage Example. Input to Output Demo] for details.<br />
+
* A ribbon cable long enough to reach from GPIO Port B to GPIO Port C. See [http://wikidev.emacinc.com/wiki/Example_io_demo#Usage_Example._Input_to_Output_Demo Usage Example. Input to Output Demo] for details.<br />
  
 
====Know Your Carrier Board====
 
====Know Your Carrier Board====
Line 30: Line 30:
 
<br clear=all>
 
<br clear=all>
  
This is a detail of the '''HDR1 PLD & BUFFERED GPIO''' header. Pin 49 is hot. The bottom pins: 2,4,6...46,48,50; are all ground. Port A is pins 1,3,5,7,9,11,13,15. Port B is pins 17,19,21,23,25,27,29,31. Port C is pins 33,35,37,39,41,43,45,47.  
+
This is a detail of the '''HDR1 PLD & BUFFERED GPIO''' header. Pin 49 is Vcc. The bottom pins: 2, 4, 6...46, 48, 50; are all ground. Port A is pins 1, 3, 5, 7, 9, 11, 13, 15. Port B is pins 17, 19, 21, 23, 25, 27, 29, 31. Port C is pins 33, 35, 37, 39, 41, 43, 45, 47.  
  
 
[[File:gpio_header_detail.png]]
 
[[File:gpio_header_detail.png]]
Line 57: Line 57:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Now we can press '''a''', '''c''', '''i''' or '''r''' to run a demo; or '''x''' to exit.
+
Now, press '''a''', '''c''', '''i''' or '''r''' to run a demo; otherwise, press '''x''' to exit.
  
 
===Usage Example. A/D Demo===
 
===Usage Example. A/D Demo===
  
From the demo menu press '''-a'''.
+
From the demo menu press '''a'''.
  
 
<syntaxhighlight lang="text">
 
<syntaxhighlight lang="text">
Line 80: Line 80:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
What you see there is low-level ambient signals (radio waves? astral perturbations?) being picked up by the analog-in pins 11,12,13,14. Press '''a''' a few times and watch the values change.  
+
The output shows the stray charge on the inputs being read by the analog-to-digital converter on pins 11, 12, 13, 14. Press '''a''' a few times to watch the values change.  
  
 
This is the HDR8 ANALOG IO header.
 
This is the HDR8 ANALOG IO header.
Line 88: Line 88:
 
Let's do a couple of experiments on our analog in pins.  
 
Let's do a couple of experiments on our analog in pins.  
  
Connect pin 20 to pin 11 (with, say, a double mini-grabber wire thingy). Hit '''a'''. Note that our first value is higher than the others. It should read '''3FF'''. That means that our first analog-in pin has 2.5V on it.
+
Connect pin 20 to pin 11 and hit '''a'''. Note that the first value is higher than the others. It should read approximately '''3FF'''. This means that the first analog-in pin has 2.5V on it.
  
Connect pin 1 to pin 11. Hit '''a'''. Note that our first value is lower than the others. It's the vicinity of 0. That means that our first analog-in pin is getting grounded.
+
Connect pin 1 to pin 11. Hit '''a'''. Note that the first value is lower than the others. It's the vicinity of 0. That means that the first analog-in pin is pulled down to ground.
  
 
===Usage Example. Count Demo===
 
===Usage Example. Count Demo===
Line 97: Line 97:
  
 
The system counts from 0 to 255 in binary. It takes about 15 seconds to complete.<br />
 
The system counts from 0 to 255 in binary. It takes about 15 seconds to complete.<br />
The steps of this process are reflected in the GPIO PortC header pins (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above). As each bit in our 8bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).
+
The steps of this process are reflected in the GPIO PortC header pins (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above). As each bit in our 8-bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).
  
More visibly, the counting process is also reflected in the strip of 8 LEDs on the board LD1-LD8. (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above). A lit LED indicates a 1 in our 8 bit register and an unlit LED indicates a 0. When the counting process is finished all 8 LEDs are lit (255).
+
More visibly, the counting process is also reflected in the strip of 8 LEDs on the board LD1-LD8. (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above). A lit LED indicates a 1 in our 8-bit register and an unlit LED indicates a 0. When the counting process is finished, all 8 LEDs are lit (255).
  
 
===Usage Example. Input to Output Demo===
 
===Usage Example. Input to Output Demo===
  
In this usage example the carrier board talks to itself. We send an 8bit data stream directly from Port B to Port C via a short piece of ribbon cable. See [[http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board]], above, for details.
+
In this usage example the carrier board talks to itself. We send an 8-bit data stream directly from Port B to Port C via a short piece of ribbon cable. See [[http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board]], above, for details.
  
This is the suave ribbon cable that we made for our input-to-output demo. Note that we connect PortC:pin0 to PortB:pin0; PortC:pin1 to PortB:pin1; etc.<br />
+
This is the ribbon cable for the input-to-output demo. Note that we connect PortC:pin0 to PortB:pin0; PortC:pin1 to PortB:pin1; etc.<br />
 
[[File:iodemo_homemaderibboncable.jpg|500px|border|]]
 
[[File:iodemo_homemaderibboncable.jpg|500px|border|]]
  
Here's our cable plugged into the GPIO header. You see that PortC:pin0 outputs to PortB:pin0; PortC:pin1 outputs to PortB:pin1; etc.
+
Here's the cable plugged into the GPIO header. You see that PortC:pin0 outputs to PortB:pin0; PortC:pin1 outputs to PortB:pin1; etc.
 
[[File:iodemo_homemaderibboncable_closeup.jpg|500px|border|]]
 
[[File:iodemo_homemaderibboncable_closeup.jpg|500px|border|]]
  
Our data stream for each pin is 1,0,1,0,1,0... That is to say: all pins are set to 1, then they are all set to 0, then to 1 again, etc. We observe our data stream in the strip of 8 LEDs on the carrier board. They blink in unison.
+
The data stream for each pin is 1, 0, 1, 0, 1, 0... That is to say: all pins are set to 1, then they are all set to 0, then to 1 again, etc. We observe our data stream in the strip of 8 LEDs on the carrier board. They blink in unison.
  
'''Note''' The blinking may get a little out of synch after a few seconds. This is normal.
+
'''Note''' The blinking may get a little out of sync after a few seconds. This is normal.
  
 
===Usage Example. Ring Demo===
 
===Usage Example. Ring Demo===
Line 119: Line 119:
 
From the demo menu press r.
 
From the demo menu press r.
  
The system sets a bit on Port C to 1, then sets it to 0, then sets the bit after that to 1, then sets that pin to 0, and so on; sequentially. It makes a nice light-show effect on the LED strip (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above).
+
The system sets a bit on Port C to 1, then sets it to 0, then sets the bit after that to 1, then sets that pin to 0, and so on, sequentially. This shows a ring counter on the LED strip (see [http://wikidev.emacinc.com/wiki/Example_io_demo#Know_Your_Carrier_Board Know Your Carrier Board], above).
  
The steps of this process are reflected in the GPIO PortC header pins. As each bit in our 8bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).
+
The steps of this process are reflected in the GPIO PortC header pins. As each bit in the 8-bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).

Revision as of 18:36, 3 January 2014

TODO: {{#todo:FinalDraft (01.03.14-16:47->JG+);(01.03.14-17:35->MD+)|Jgreene|oe 4,oe 5,jg,md,FinalDraft,ky}}

This is a guide to the io demo C example project included in the EMAC OE SDK.

The io_demo project provides four examples of SOM-150ES carrier board IO:

  • An analog-to-digital converter demo.
  • A counter demo.
  • An input-to-output demo.
  • A ring demo.

The io_demo project builds one executable: io_demo.

Opening, Building and Uploading the Project Files

stub

Usage and Behaviour

Hardware Requirements

To use the io demo program you will need the following hardware.

Know Your Carrier Board

SOM-150ES carrier board with GPIO, LEDs and analog IO indicated.


This is a detail of the HDR1 PLD & BUFFERED GPIO header. Pin 49 is Vcc. The bottom pins: 2, 4, 6...46, 48, 50; are all ground. Port A is pins 1, 3, 5, 7, 9, 11, 13, 15. Port B is pins 17, 19, 21, 23, 25, 27, 29, 31. Port C is pins 33, 35, 37, 39, 41, 43, 45, 47.

Gpio header detail.png

Usage for io_demo

Run io demo from the console. It takes no parameters.

 ./io_demo

This brings up a menu of demos.

****************************
     Demo Menu              
                            
A/D Demo             - a    
Count Demo           - c    
Input to Output Demo - i    
Ring Demo            - r    
                            
Exit                 - x    
                            
Enter Selection:

Now, press a, c, i or r to run a demo; otherwise, press x to exit.

Usage Example. A/D Demo

From the demo menu press a.

****************************
     Demo Menu              
                            
A/D Demo             - a    
Count Demo           - c    
Input to Output Demo - i    
Ring Demo            - r    
                            
Exit                 - x    
                            
Enter Selection: a

A/D Demo
[0]=126 [1]=11B [2]=12C [3]=12B

The output shows the stray charge on the inputs being read by the analog-to-digital converter on pins 11, 12, 13, 14. Press a a few times to watch the values change.

This is the HDR8 ANALOG IO header.

Analog io header detail.jpg

Let's do a couple of experiments on our analog in pins.

Connect pin 20 to pin 11 and hit a. Note that the first value is higher than the others. It should read approximately 3FF. This means that the first analog-in pin has 2.5V on it.

Connect pin 1 to pin 11. Hit a. Note that the first value is lower than the others. It's the vicinity of 0. That means that the first analog-in pin is pulled down to ground.

Usage Example. Count Demo

From the demo menu press c.

The system counts from 0 to 255 in binary. It takes about 15 seconds to complete.
The steps of this process are reflected in the GPIO PortC header pins (see Know Your Carrier Board, above). As each bit in our 8-bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).

More visibly, the counting process is also reflected in the strip of 8 LEDs on the board LD1-LD8. (see Know Your Carrier Board, above). A lit LED indicates a 1 in our 8-bit register and an unlit LED indicates a 0. When the counting process is finished, all 8 LEDs are lit (255).

Usage Example. Input to Output Demo

In this usage example the carrier board talks to itself. We send an 8-bit data stream directly from Port B to Port C via a short piece of ribbon cable. See [Know Your Carrier Board], above, for details.

This is the ribbon cable for the input-to-output demo. Note that we connect PortC:pin0 to PortB:pin0; PortC:pin1 to PortB:pin1; etc.
Iodemo homemaderibboncable.jpg

Here's the cable plugged into the GPIO header. You see that PortC:pin0 outputs to PortB:pin0; PortC:pin1 outputs to PortB:pin1; etc. Iodemo homemaderibboncable closeup.jpg

The data stream for each pin is 1, 0, 1, 0, 1, 0... That is to say: all pins are set to 1, then they are all set to 0, then to 1 again, etc. We observe our data stream in the strip of 8 LEDs on the carrier board. They blink in unison.

Note The blinking may get a little out of sync after a few seconds. This is normal.

Usage Example. Ring Demo

From the demo menu press r.

The system sets a bit on Port C to 1, then sets it to 0, then sets the bit after that to 1, then sets that pin to 0, and so on, sequentially. This shows a ring counter on the LED strip (see Know Your Carrier Board, above).

The steps of this process are reflected in the GPIO PortC header pins. As each bit in the 8-bit register is set to 1, the corresponding pin in the PortC header momentarily registers 5 volts (easily detected with a multimeter or oscilloscope).