<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Engineersphere.com &#187; Jeff</title>
	<atom:link href="http://engineersphere.com/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://engineersphere.com</link>
	<description></description>
	<lastBuildDate>Thu, 19 Apr 2012 17:52:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>UMTS Reference Architecture</title>
		<link>http://engineersphere.com/wireless-communication-systems/umts-reference-architecture.html</link>
		<comments>http://engineersphere.com/wireless-communication-systems/umts-reference-architecture.html#comments</comments>
		<pubDate>Sat, 16 Apr 2011 04:48:58 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Wireless Communication Systems]]></category>
		<category><![CDATA[core network]]></category>
		<category><![CDATA[network architecture]]></category>
		<category><![CDATA[radio access networks]]></category>
		<category><![CDATA[UMTS]]></category>
		<category><![CDATA[umts reference architecture]]></category>
		<category><![CDATA[user equipment]]></category>
		<category><![CDATA[UTRAN]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=3089</guid>
		<description><![CDATA[TweetTweetContinuing on with wireless communications related subjects.  The architecture of a UMTS systems is the first thing to begin understanding if you want to undertake an education such as this.  It consists of three distinct components: The User Equipment (UE) The UMTS Terrestrial Radio Access Network (UTRAN) The Core Network (CN) As with any wireless [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/wireless-communication-systems/umts-reference-architecture.html&via=EngineerSphere&text=UMTS Reference Architecture&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/wireless-communication-systems/umts-reference-architecture.html&via=EngineerSphere&text=UMTS Reference Architecture&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>Continuing on with wireless communications related subjects.  The architecture of a UMTS systems is the first thing to begin understanding if you want to undertake an education such as this.  It consists of three distinct components:</p>
<ol>
<li><strong>The User Equipment (UE)</strong></li>
<li><strong>The UMTS Terrestrial Radio Access Network (UTRAN)</strong></li>
<li><strong>The Core Network (CN)</strong></li>
</ol>
<p>As with any wireless network out there, the main purpose is the provide access to services (data, voice, etc.)  The services network is divided into <strong>Public Switched Telephone Network (PSTN)</strong> that provides voice and special telephone related services (look it up on wiki), and the internet, which provides a wide range of packet data services such as email or access to the world wide web.  These things are probably all sounding very familiar to you, and they should, because they are critical in maintaining today&#8217;s society, and almost everyone living in the modern world uses at least one of these services sometimes in their daily lives.</p>
<p>The UMTS mobile, also known as the User Equipment (UE), interfaces with the UTRAN via the UMTS physical layer radio interface.  In addition to radio access, the UE provides the subscriber with access to services and profile information.  For example, the cell phone you carry in your pocket is the UE (user equipment) that interfaces with the cell phone towers that companies like Verizon, AT&amp;T, and Sprint provide for you.</p>
<p>In UMTS, there are two Core Network (CN) configurations, the Circuit Switched CN (CS-CN) and Packet Switched CN (PS-CN).  The CS-CN is based on the GSM Public Land Mobile Network (PLMN) and provides functions such as connectivity to the PSTN, circuit telephony services such as voice, and supplementary services such as call forwarding, call waiting, etc.  The PS-CN is based on the GSM General Packet Radio System (GPRS) PLMN, which provides access to the Internet and other packet data services.</p>
<p>Both core networks connect to the UMTS Terrestrial Radio Access Network.  The UTRAN has two options for its air interface operations.  One option is Time Division Duplex (TDD), which makes use of a single 5 MHz carrier for communication between the UE and the UTRAN.  The other option is the Frequency Division Duplex (FDD), which provides full duplex operation using 5 MHz of spectrum in each direction to and from the UTRAN.  The following articles in the <a title="Wireless Communcation Systems" href="http://engineersphere.com/category/wireless-communication-systems">wireless communication systems</a> section  focus on the operations and design aspects of the UTRAN in FDD mode.</p>
<p>How do all of these components fit together?  Check out the image below.<br />
	<script type="text/javascript"><!--
google_ad_client = "ca-pub-8110948504507473";
/* 468x15_esphere_txtonlyblk */
google_ad_slot = "5984987288";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><a href="http://engineersphere.com/wp-content/uploads/2011/04/umts-reference-architecture.png"><img class="alignnone size-full wp-image-3090" title="umts-reference-architecture" src="http://engineersphere.com/wp-content/uploads/2011/04/umts-reference-architecture.png" alt="umts-reference-architecture" width="500" height="500" /></a><br />
	<script type="text/javascript"><!--
google_ad_client = "ca-pub-8110948504507473";
/* 468x15_esphere_txtonlyblk */
google_ad_slot = "5984987288";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>UTRAN Components</h3>
<p>The UTRAN consists of one or more <strong>Radio Network Subsystems (RNS)</strong>.  An RNS consists of one <strong>Radio Network Controller (RNC)</strong> and several Nodes.  The radio network controller and the nodes are two essential components of UTRAN.  Apart from these two component types, UTRAN requires Operation Maintenance Centers (OMC) to perform Operation Administration and Maintenance (OA&amp;M) functionality on the nodes and RNCs.  Yes, I know the acronyms are getting a little out of hand, but it is essential to learn them if you want to speak the language!  Engineers only speak to each other with acronyms and it is very very annoying indeed.</p>
<ul>
<li><strong>Radio Network Controller</strong>: The Radio Network Controller is the master of UTRAN.  It handles all aspects of radio resource management within the radio network subsystem.  The UMTS chose to use it instead of the base station controller in order to stress the independence of UTRAN from the Core Networks (CN).  It interfaces with the core network components such as the <strong>Mobile Switching Center (MSC)</strong> and <strong>Service GPRS Support Node (SGSN)</strong> to route signaling and traffic from the User Equipment (UE).  The RNC also interfaces with other RNC&#8217;s within UTRAN to provide it with wide mobility (very important!)</li>
</ul>
<ul>
<li><strong>Nodes</strong>: Within this network, a node is the radio transmission and reception unit within UTRAN (remember above, I explained that the UE is your cell phone you carry in your pocket).  It handles radio transmission and reception for multiple cells within a coverage area.  So if you think about the amount of area that a certain cell tower (cell) can transmit its signal with the proper quality of service (QoS), you can get a mental grasp on multiple cells being in one coverage area, say if the towers are close together.  The node implements CDMA-Specific functionality such as <a title="encoding techniques" href="http://engineersphere.com/signal-processing/digital-coding-techniques.html">encoding</a>, interleaving, spreading, scrambling &amp; modulation.  The nodes are also what used to be known as the <strong>Base Transceiver Subsystems (BTS)</strong> in second generation systems.</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/wireless-communication-systems/umts-reference-architecture.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital Coding Techniques</title>
		<link>http://engineersphere.com/signal-processing/digital-coding-techniques.html</link>
		<comments>http://engineersphere.com/signal-processing/digital-coding-techniques.html#comments</comments>
		<pubDate>Thu, 07 Apr 2011 04:30:20 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Signal Processing]]></category>
		<category><![CDATA[Wireless Communication Systems]]></category>
		<category><![CDATA[Bit Error Rate]]></category>
		<category><![CDATA[block interleaving]]></category>
		<category><![CDATA[convolutional encoding]]></category>
		<category><![CDATA[digital coding techniques]]></category>
		<category><![CDATA[turbo encoding]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=3015</guid>
		<description><![CDATA[TweetTweetHey!  This article has a simple purpose, to teach you basic functionality and terminology related to modern UMTS-CDMA digital coding techniques.  One swift read of this information-packed kick in the face will leave you trembling at the knees with curiosity for more.  Well, maybe not.  But the first step in the UMTS-CDMA system applies error [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/signal-processing/digital-coding-techniques.html&via=EngineerSphere&text=Digital Coding Techniques&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/signal-processing/digital-coding-techniques.html&via=EngineerSphere&text=Digital Coding Techniques&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p><strong></strong>Hey!  This article has a simple purpose, to teach you basic functionality and terminology related to modern UMTS-CDMA digital coding techniques.  One swift read of this information-packed kick in the face will leave you trembling at the knees with curiosity for more.  Well, maybe not.  But the first step in the UMTS-CDMA system applies error correction techniques so that any errors at the receiver can be corrected.  Various techniques can be employed to prevent errors at the transmitter.  You have probably studied one or more of these in your days if your an electrical or computer engineering student, professor, or professional.  One of these techniques is the use of <strong>Forward Error Codes</strong>, which are applied to the data before it is transmitted via the physical layer.</p>
<p>It is known that wireless is an inherently error-prone medium in which to operate our delicate signals.  Therefore, many error correction techniques are employed.  In the UMTS-CDMA systems, due to the large bandwidth available, a variety of coding techniques are employed.  The following three error correcting methods come to mind:</p>
<h3>Convolutional Encoding</h3>
<p>Convolutional encoding provides the ability to correct errors at the receiver.  So, the errors are removed from the signal by the receiver via <strong>convolutional encoding</strong>.  As a result, lower transmission power is required, which can result in more errors.  Some amount of errors can be tolerated since they can be recovered through convolutional encoding.  The convolutional encoder encodes input data bits int output symbols.  The data bits are entered into the first register at each clock cycle and the data bit in the last register is dumped out.  Data bits are tapped at various positions and XORed to provide encoded bits.  It is typically used for voice and low data rate applications.  Here are the main points to keep in mind:</p>
<ul>
<li>Provides the ability to detect and correct errors at the receiver.</li>
<li>10^(-3)  BER, typically used for voice and low data rates.</li>
<li>Uses history of bits to recover from errors.</li>
</ul>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-8110948504507473";
/* 468x15_esphere_txtonlyblk */
google_ad_slot = "5984987288";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<h3>Turbo Encoding</h3>
<p>Turbo codes are a new class of error correction codes used in digital comm systems.  Turbo codes have been shown to perform better for high-rate data services (which is what we crave for) with stringent error rate requirements on the order of 10-6 <strong>Bit Error Rate (BER)</strong>.  The turbo encoder consists of two constituent convolutional encoders.  Both constituent encoders use and code the same data.  The first one is fed data in the same order as the input data.  The second encoder uses a permuted form of the input data and the permuting is accomplished by the use of an <strong>interleaver</strong>, which will be discussed in detail in the following post(s).  Again, main points:</p>
<ul>
<li>10^(-6)  BER, suitable for high data rates.</li>
<li>Uses convolutional encoders in parallel to increase reliability.</li>
<li>Increased delays but better error correction capabilities.</li>
</ul>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-8110948504507473";
/* 468x15_esphere_txtonlyblk */
google_ad_slot = "5984987288";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<h3>Block Interleaving</h3>
<p>Block interleaving protects data against fading and prevents bursty errors (so imagine a sudden burst in the amplitude of a received signal, think that might saturate you and ruin your signal? You bet.)  This is accomplished by providing time diversity, where the bits are separated in time before transmission over the air.  This is typically used with FEC codes, since FEC codes are not well suited to handle these bursty errors.</p>
<ul>
<li>Method to shuffle bits to prevent errors during deep fade.</li>
<li>Provides time diversity.</li>
</ul>
<p>All of these techniques will be described in detail, separately, in the following three articles.</p>
<p>Jeff</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/signal-processing/digital-coding-techniques.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3G Wireless Technologies</title>
		<link>http://engineersphere.com/signal-processing/3g-wireless-technologies.html</link>
		<comments>http://engineersphere.com/signal-processing/3g-wireless-technologies.html#comments</comments>
		<pubDate>Wed, 06 Apr 2011 02:29:41 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Signal Processing]]></category>
		<category><![CDATA[Wireless Communication Systems]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[3G Wireless Technologies]]></category>
		<category><![CDATA[4G]]></category>
		<category><![CDATA[CDMA2000]]></category>
		<category><![CDATA[EDGE]]></category>
		<category><![CDATA[EV-DO]]></category>
		<category><![CDATA[GPRS]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[IS-136]]></category>
		<category><![CDATA[IS-95]]></category>
		<category><![CDATA[ITU]]></category>
		<category><![CDATA[UMTS]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=3004</guid>
		<description><![CDATA[TweetTweetThere are several different types of 3G wireless technologies that are defined and planned to be up and working today.  There are also several that are on their way.  These are successors of course, to the previous 2G technologies that dominated the airwaves. CDMA2000 CDMA2000 is the successor to IS-95 systems.  CDMA2000 provides a definition [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/signal-processing/3g-wireless-technologies.html&via=EngineerSphere&text=3G Wireless Technologies&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/signal-processing/3g-wireless-technologies.html&via=EngineerSphere&text=3G Wireless Technologies&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>There are several different types of<strong> 3G wireless technologies</strong> that are defined and planned to be up and working today.  There are also several that are on their way.  These are successors of course, to the previous 2G technologies that dominated the airwaves.</p>
<h3>CDMA2000</h3>
<p><strong>CDMA2000 </strong>is the successor to <strong>IS-95</strong> systems.  CDMA2000 provides a definition for two different options for <a href="http://engineersphere.com/category/wireless-communication-systems">3G technologies</a>.  IT Differs in the amount of the frequency spectrum that is used.  The <strong>Spreading Rate</strong> (SR1) operates in the 1.25 MHz band and is known as a 1x system.  Another proposal exists also which is referred to as 1xEV-DO.  The 1xEV-DO (1x Evolution for Data Optimized) solution is a data-only solution that enables a bandwidth of 2Mbps without any mechanism for voice.  This is the type of data rate that we are all familiar with, the 3G 2Mbps speed of data connection.</p>
<h3>The Universal Mobile Telecommunications System (UMTS)</h3>
<p>The Universal Mobile Telecommunications System (<a href="http://en.wikipedia.org/wiki/UMTS">UMTS</a>) is a successor to GSM/GPRS systems.  There are also two options for the UMTS networks.  The Frequency Division Duplex (FDD) option uses spectrum bands which are paired together.  For example, two different 5 MHz bands are used for uplink and downlink.  The Time Division Duplex (TDD) option uses an unpaired band.  In other words, the same 5 MHz band is shared between uplink and downlink for TDD.</p>
<h3>Universal Wireless Consortium for IS-136 systems</h3>
<p>The UWC-136 (Universal Wireless Consortium for IS-136 systems) was originally considered to be the evolution for IS-136 systems.  However, the IS-136 system operators eventually decided to follow the path of CDMA2000 or UMTS.</p>
<h3>Why did we need 3G Technology?</h3>
<p>Back in the late 1990&#8242;s, when most of the readers out there were still playing in the sandbox, the International Telecommunication Union (ITU) set the requirements for the next generation of wireless networks (that is why they are called Third Generation (3G)).  One of the many many requirements is to reach peak data rates of at least 2 Mbps.  This is more relvant to the Downlink since the majority of traffic comes from the server to the client in the<a href="http://google.com"> Internet World</a>.</p>
<p>To meet this new high speed requirement, the 2nd generation wireless networks came up with several different evolutions before eventually being replaced.  The <a href="http://en.wikipedia.org/wiki/GSM">GSM </a>evolution includes <a href="http://en.wikipedia.org/wiki/GPRS">GPRS</a> and <a href="http://en.wikipedia.org/wiki/EDGE">EDGE</a>, which provide packet data services and represent intermediate solutions until a UMTS Release 99 System is deployed.  The 1xEV-DO is one possible evolution path from 1xRTT, and HSDPA is a Release 5 feature of UMTS.</p>
<h3>So how did UMTS Evolve?</h3>
<p>UMTS is the network of choice these days.  Yes, UMTS is 3G&#8230;If you haven&#8217;t caught that yet.  For those nerds out there that are curious, the evolution of UMTS has progressed over the years in the following fashion:</p>
<p><strong>UMTS Release 99</strong></p>
<ul>
<li>2 Mbps theoretical peak packet data rates</li>
<li>384 kbps (practical)</li>
</ul>
<p><strong>UMTS Release 5</strong></p>
<ul>
<li>HSDPA (14 Mbps downlink theoretical)</li>
<li>IMS (IP Multimedia Subsystem for multimedia)</li>
<li>UP UTRAN (for scalability and lower cost)</li>
</ul>
<p><strong>UMTS Release 6</strong></p>
<ul>
<li>HSUPA (up to 5.76 Mbps uplink)</li>
<li>MBMS (Multimedia Broadcast Multicast Service)</li>
</ul>
<p><strong>UMTS Release 7</strong></p>
<ul>
<li>Multiple Input Multiple Output (MIMO) Antenna Systems</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/signal-processing/3g-wireless-technologies.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Evolution of Wireless Technologies</title>
		<link>http://engineersphere.com/wireless-communication-systems/the-evolution-of-wireless-technologies.html</link>
		<comments>http://engineersphere.com/wireless-communication-systems/the-evolution-of-wireless-technologies.html#comments</comments>
		<pubDate>Wed, 30 Mar 2011 04:28:19 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Wireless Communication Systems]]></category>
		<category><![CDATA[the evolution of wireless technologies]]></category>
		<category><![CDATA[wireless technologies]]></category>
		<category><![CDATA[wireless technologies evolution]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=2882</guid>
		<description><![CDATA[TweetTweetCellular systems have come a long way since their introduction in the 1980s.  The evolution progressed from First Generation (1G) systems to Second Generation (2G) systems.  Now, Third Generation (3G) systems are being deployed. 1G systems introduced the cellular concept, in which multiple antenna sites are used to serve an area.  The coverage of a [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/wireless-communication-systems/the-evolution-of-wireless-technologies.html&via=EngineerSphere&text=The Evolution of Wireless Technologies&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/wireless-communication-systems/the-evolution-of-wireless-technologies.html&via=EngineerSphere&text=The Evolution of Wireless Technologies&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>Cellular systems have come a long way since their introduction in the 1980s.  The evolution progressed from <strong>First Generation (1G) systems</strong> to <strong>Second Generation (2G) systems</strong>.  Now, <strong>Third Generation (3G) systems</strong> are being deployed.</p>
<p>1G systems introduced the cellular concept, in which multiple antenna sites are used to serve an area.  The coverage of a single antenna site is called a cell.  A cell can serve a certain number of users, and higher-system capacity can be achieved by creating more cells with smaller coverage areas.  One distinguishing factor of 1G systems is that they make use of analog radio transmissions, so user information, such as voice, is never digitized.  As such, they are best suited for voice communications, since data communications can be cumbersome.</p>
<p>The migration of 1G analog technologies toward 2G technologies began in the late 1980s and early 1990s.  The primary motivation was increased system capacity.  This was achieved by using more efficient digital radio techniques that enabled the transmission of digitized compressed speech signals.  These digital radio techniques also supported data services with data rates as high as 14,400 bits per second (14.4 kbps) in some systems.  2G data communication is typically done using circuit-switched techniques, which are not very efficient for sending packet data such as that sent on the Internet.  This inefficiency makes the use of wireless data more expensive f or the end user.</p>
<p>The next step in the evolution is from 2G to 3G, which started in the year 2000.  The new key feature of 3G systems is the support of high-speed data services with data rates as high as 2 million bits per second (2 Mbps).  Data can be transferred using packet-switching techniques rather than the circuit-switching approach.  Therefore, it is more efficient and less expensive.  This opens up the possibility of cost-effective Internet access, access to corporate intranets, and a host of multimedia services.</p>
<p>If you want to read more about the evolution of wireless networks and <a href="http://engineersphere.com/category/wireless-communication-systems">WCDMA</a> radio networks in general, please stay tuned for the next several editions where I will go into details.</p>
<p><strong>Upcoming including but not limited to:</strong></p>
<ul>
<li>Physical layer functions</li>
<li>W-CDMA Channels</li>
<li>Basic call setups</li>
<li>Data session setups</li>
<li>Service reconfigurations</li>
<li>UTRAN mobility management</li>
<li>Inter-system procedures</li>
<li>RF design &amp; analysis of UMTS radio networks</li>
<li>The evolution of UMTS</li>
<li>Architectures</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/wireless-communication-systems/the-evolution-of-wireless-technologies.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prefer Android?  Make your iPhone more like it.</title>
		<link>http://engineersphere.com/introduction/prefer-android-make-your-iphone-more-like-it.html</link>
		<comments>http://engineersphere.com/introduction/prefer-android-make-your-iphone-more-like-it.html#comments</comments>
		<pubDate>Tue, 08 Mar 2011 16:46:05 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Android, iOS, RIM]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Professional Product Reviews]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android phone hack]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone hack]]></category>
		<category><![CDATA[jailbreak iphone]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=2169</guid>
		<description><![CDATA[TweetTweetIf you prefer using the features of an Android operating system but are stuck with an iPhone or any other iOS for that matter then you are not completely out of luck.  There are several things you can do to make the features on your iPhone work like Android features.  Here are some tips and [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/introduction/prefer-android-make-your-iphone-more-like-it.html&via=EngineerSphere&text=Prefer Android?  Make your iPhone more like it.&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/introduction/prefer-android-make-your-iphone-more-like-it.html&via=EngineerSphere&text=Prefer Android?  Make your iPhone more like it.&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>If you prefer using the features of an Android operating system but are stuck with an iPhone or any other iOS for that matter then you are not completely out of luck.  There are several things you can do to make the features on your iPhone work like Android features.  Here are some tips and tricks found on lifehacker that we will pass on and share.</p>
<h3>Locking up your iPhone screen widgets</h3>
<p>customizing your iPhone home screen is actually much simpler than it would appear.  Follow the directions in <a href="http://lifehacker.com/#!5763876">this article</a> in order to customize your iPhone lockscreen features.  There you will find a nice set of instructions for setting up a custom lockscreen that is simple, sleek, and provides you with time and date and other simple things that you need when looking at your phone at a quick glance.</p>
<h3>Unobtrusive Notifications</h3>
<p>iOS seriously fails at handling notifications. No  matter what kind of notification you get,  iOS gives you the same annoying blue dialogue box that interrupts  whatever you&#8217;re doing. Tired of  these?   <a href="http://lifehacker.com/#!5772581/mobile-notifier-is-a-near+perfect-ios-notifications-replacement-for-jailbroken-ios-devices">MobileNotifier</a> is an excellent solution.  This is a jailbreak hack, so you&#8217;re out of luck  if you&#8217;re sticking with a jailed device. If you need a reason to  jailbreak, this is a good one.</p>
<p>MobileNotifier handles notifications similarly to the way Android  does—by keeping them in an always-accessible drawer and by notifying you  without interruption so you can continue doing what you&#8217;re doing. When  you receive a text message, for example, a little bar will pop up top to  let you know that you&#8217;ve received a notification. You can leave it up  there for as long as you need and dismiss it (or act on it) whenever you  want. To see all of your notifications (or to clear them), you just  need to double tap the home button and you&#8217;ll see your notifications  drawer (as well as multi-tasking mode). If you&#8217;d like to set up  MobileNotifier (and you should), <a href="http://lifehacker.com/#!5772581/mobile-notifier-is-a-near+perfect-ios-notifications-replacement-for-jailbroken-ios-devices">follow these instructions on Lifehacker</a>.</p>
<h3>Getting Google Apps on your iPhone</h3>
<p>Here are some <a href="http://www.google.com/apps/">Google Apps</a> that you can get on your iPhone:</p>
<ul>
<li>The official Google Mobile App</li>
<li>Google latitude</li>
<li>Google Earth</li>
<li>Google Voice</li>
<li>GoogleReader (use Google  docs?  Super useful and worth the $5 or so that it costs)</li>
</ul>
<p>You may prefer to use the mobile webapps provided by Google over the original options, so make sure you put them on your iOS and bookmark them if you do.  Just make a bookmark on your homescreen that links to them.</p>
<h3>Turn on Google Sync</h3>
<p>So you&#8217;ve never been able to do this before, but now there is a way.  Google Sync for iOS will let you push your contacts, calendars, and  mail to your iOS device and it&#8217;s really easy to set up. It&#8217;s almost  identical to setting up MobileMe, except it uses the Microsoft Exchange  protocol. Google Sync requires iOS 3.0 or higher, but iOS 4.0 or higher  will let you add multiple Exchange accounts (so you&#8217;ll want to make sure  you&#8217;ve upgraded if you need multiple Exchange accounts on your device).  If you want to get Google Sync set up, Google has some instructions here: <a href="http://www.google.com/support/mobile/bin/answer.py?answer=138740&amp;topic=14252">Setting up Google Sync</a>. Once you have it up and running,  you&#8217;ll have your Google data pushed and syncing over-the-air to your iOS  device just like you would with Android.</p>
<h3>Improving Voice Recognition</h3>
<p>iOS&#8217; VoiceOver is what it is. For some it&#8217;s helpful and for others (like  myself) you just forget it even exists until you accidentally hold down  the home button for too long. While there aren&#8217;t any great improvements  to iOS&#8217; voice recognition capabilities, there are two things that can  help. First, if you haven&#8217;t already download the you should, if only for its voice search  capabilities. Additionally, you want to get your hands on a copy of the Dragon  Dictation app, which will let you create notes as well as send  email and SMS text messages with your voice. Both apps are free in the  iTunes App Store so you really have every reason to give them a shot.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/introduction/prefer-android-make-your-iphone-more-like-it.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Circular Buffers</title>
		<link>http://engineersphere.com/basic-computer-concepts/circular-buffers.html</link>
		<comments>http://engineersphere.com/basic-computer-concepts/circular-buffers.html#comments</comments>
		<pubDate>Sat, 16 Oct 2010 06:04:24 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Basic Computer Engineering Concepts]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[circular buffers]]></category>
		<category><![CDATA[data transmission]]></category>
		<category><![CDATA[subroutines]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=1935</guid>
		<description><![CDATA[TweetTweetSoftware circular buffers are data structures used to pass data from one section of code to another, where the code sections usually have no other interaction with each other. One situation that dictates that a “buffer” be used is when it is possible that a burst of data to occur that exceeds the “processing” codes [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/basic-computer-concepts/circular-buffers.html&via=EngineerSphere&text=Circular Buffers&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/basic-computer-concepts/circular-buffers.html&via=EngineerSphere&text=Circular Buffers&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>Software circular buffers are data structures used to pass data from one section of code to another, where the code sections usually have no other interaction with each other. One situation that dictates that a “buffer” be used is when it is possible that a burst of data to occur that exceeds the “processing” codes ability to keep up on an item by item basis. Then a separate section of code to buffer (accept from the external source and insert it into a circular buffer) is necessary.</p>
<p>On average, the processing must keep up, or no amount of buffering will prevent an eventual overrun and loss of data. Another situation where you might use a “buffer” is to compartmentalize the functions of your code. For example, if you are using a keypad on a project, you may choose to write one section of code that detects that a key has been pressed, determines what it is, and places the ASCII code for it in a circular buffer.</p>
<p>A completely separate section of code could then process the “stream” of key-presses for the purpose at hand, say a combination lock code. Partitioning the code in this fashion not only makes each section easier to write (each is smaller and you get to focus on a simpler task), but also makes each section more reusable. The combination decoding could easily be used virtually unchanged with the code sequence coming from the SCI instead. The proper view of data in a circular buffer is a “stream” of sequential data items, often characters.</p>
<p>The section of code that sends data to another section inserts each new datum item into the buffer. In general, that code inserts data as fast as it becomes available. The section of code that receives the data removes each item from the buffer.  The receiver almost always has some processing task to perform on the received data items, and often processes at a slower instantaneous rate than the insertion code. It is often the case that several circular buffers will exist within a program. It is also often the case that the sending and/or receiving code sections are in interrupt handler routines. A possible point of confusion is that any receiving ISR routine (say an SCI receive ISR) will probably play the role of sender via the circular buffer. Virtually the only SCI receiver ISR I have ever written was to have it read the incoming characters and place them in a circular buffer, and nothing more.</p>
<h3>How Do Circular Buffers Work?</h3>
<p>A circular buffer is really a linear sequential buffer that is used from beginning to end, over and over. Unlike a STACK which operates as a first-in-last-out (FILO) buffer and naturally keeps reusing memory as items are popped on and later pulled off of the stack, with a circular buffer one must work at reusing memory. This is accomplished by having code to wrap around to the beginning of the buffer whenever the next location gets past the end of the buffer. Picture the buffer as a consecutive set of memory locations that has its last location adjacent to its first location (in effect a circle).<a href="http://engineersphere.com/wp-content/uploads/2010/10/circular-buffer.png"><img class="alignright size-full wp-image-1936" title="circular-buffer" src="http://engineersphere.com/wp-content/uploads/2010/10/circular-buffer.png" alt="circular-buffer" width="423" height="338" /></a><span id="more-1935"></span></p>
<p>This circular buffer forms an endless queue. The queue functions as an endless first-in-first-out (FIFO) buffer. It is indeed endless as long as the process receiving the data never gets a complete buffer length behind the one sending the data. An evaluation of how far behind the receiver may get is the only way to determine the size one needs for the buffer. If it never gets more than one data value behind then a 2-long buffer is sufficient. If it gets up to 99 behind then a 100 element buffer is needed, and so on. In addition to the memory for the buffer itself, essentially an array of data, a circular buffer requires two markers, one to tell where to insert the next datum and one to tell from where to extract the next datum. Note that a stack required only one marker (called the Stack Pointer). The two markers can take either of two forms –<strong> indices or pointers</strong>.</p>
<p>Either type tells the next available location to place new data into the buffer and the next location containing data to be taken out of the buffer. If the buffer is four bytes long, an index would have a value from 0 to 3, whereas, a pointer would contain the address from buffer to buffer+3. The out marker chases the in marker around the buffer. Whenever it catches up it means the code receiving data has caught up with the code sending data and so the buffer is empty (has no more data to process at the moment). There is never a conflict between the two code sections in updating the markers as in marker is only updated (incremented) by the code inserting the buffered data, and out marker is only updated (incremented) by the code extracting the data.</p>
<h3>Common Uses for Circular Buffers</h3>
<p>Probably the most common use of a circular buffer is for storing characters received from an input device. The interrupt handler for the device simply reads the device (usually whenever an interrupt occurs indicating new data has been received), places it in a circular buffer, and exits (returns from the interrupt). There are numerous other uses for circular buffers and no assembly language programmer or high-level language programmer (especially one working with real-time or event-driven systems) should be without this powerful software tool. To implement a circular buffer in any language you need four distinct code sections. First, you must declare the buffer and the two pointer variables that will be used with it. In HCS08 assembler that section will look like this:</p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/10/declare-circular-buffer.png"><img class="alignleft size-full wp-image-1937" title="declare-circular-buffer" src="http://engineersphere.com/wp-content/uploads/2010/10/declare-circular-buffer.png" alt="declare-circular-buffer" width="590" height="84" /></a></p>
<p style="text-align: left;">There also needs to be an initialization section that is executed before the buffer can be used and must be executed only once in your program. This should exist with the code that is executed almost immediately after reset on any embedded system that uses such buffers. In HC11 assembler it could be:</p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/10/initialize-circular-buffer.png"><img class="alignleft size-full wp-image-1938" title="initialize-circular-buffer" src="http://engineersphere.com/wp-content/uploads/2010/10/initialize-circular-buffer.png" alt="initialize-circular-buffer" width="494" height="57" /></a></p>
<p style="text-align: left;">So if we are using our circular buffers to move data between a sender and a receiver we will need to make a few<strong> subroutines</strong> to implement our buffers.  The next two sections of code are in (or are in a subroutine called by) the sender or receiver, respectively. I will first show example code for buffers containing single byte data values. (The previous examples are independent of data item size.) The examples are in subroutine form.</p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/10/add-byte-subroutine.png"><img class="alignleft size-full wp-image-1939" title="add-byte-subroutine" src="http://engineersphere.com/wp-content/uploads/2010/10/add-byte-subroutine.png" alt="add-byte-subroutine" width="551" height="138" /></a></p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/10/get-byte-subroutine1.png"><img class="alignleft size-full wp-image-1940" title="get-byte-subroutine1" src="http://engineersphere.com/wp-content/uploads/2010/10/get-byte-subroutine1.png" alt="get-byte-subroutine1" width="500" height="92" /></a></p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/10/get-byte-subroutine2.png"><img class="alignleft size-full wp-image-1941" title="get-byte-subroutine2" src="http://engineersphere.com/wp-content/uploads/2010/10/get-byte-subroutine2.png" alt="get-byte-subroutine2" width="500" height="110" /></a></p>
<p>If the data items are more than one byte then something more than an sta or lda is needed to add or retrieve them, and more than a single increment is needed to advance the pointer in the buffer. Those are the only two changes.</p>
<p>I hope you enjoyed learning about circular buffers! They are truly wonderful.</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/basic-computer-concepts/circular-buffers.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assembly Language Examples</title>
		<link>http://engineersphere.com/microcontrollers/assembly-language-examples.html</link>
		<comments>http://engineersphere.com/microcontrollers/assembly-language-examples.html#comments</comments>
		<pubDate>Sun, 26 Sep 2010 02:30:24 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[assembly language examples]]></category>
		<category><![CDATA[assembly language tutorials]]></category>
		<category><![CDATA[HCS08 programming]]></category>
		<category><![CDATA[machine language]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=1857</guid>
		<description><![CDATA[TweetTweetThis article gives another step-by-step lesson about assembly language programming.  In order to follow along with this article, you should have this previous article on hand:  An Assembly Language Example Refer to that program and do the following: Rewrite step 3 above using 32 and 96 instead of C6 and C7. This sounds like a [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/microcontrollers/assembly-language-examples.html&via=EngineerSphere&text=Assembly Language Examples&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/microcontrollers/assembly-language-examples.html&via=EngineerSphere&text=Assembly Language Examples&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>This article gives another step-by-step lesson about assembly language programming.  In order to follow along with this article, you should have this previous article on hand:  <a title="Assembly Language Examples" href="http://engineersphere.com/microcontrollers/an-assembly-language-example.html">An Assembly Language Example</a></p>
<p>Refer to that program and do the following:</p>
<p><strong>Rewrite step 3 above using 32 and 96 instead of C6 and C7.</strong></p>
<p>This sounds like a good idea at first. Only about half the number of instructions will be needed as we move 2 bytes at a time instead of one. But wait! How do we move an odd number of bytes? We can’t move only the 5th byte using these two instructions. For this exercise it is not fair to revert back to the previous instructions for the 5th byte (although in an actual program that would be a very good idea). Read the code below to find out!</p>
<p>E425: 32 E24E                              load H:X from ni[0-1]<br />
96 0188                                           store H:X into n[0-1]<br />
32 E250<br />
96 018A<br />
32 E251<br />
96 018B</p>
<p>This is expressed more cryptically in a simulator/debugger memory display, but is the same info:</p>
<p>E420: .. .. .. .. .. 32 E2 4E<br />
E428: 96 01 88 32 E2 50 96 01</p>
<p>E430: 8A 32 E2 51 96 01 8B ..</p>
<h3>Another Assembly Language Task:</h3>
<p>Perform I = 3*J &#8211; K + 21, where I, J, and K are variables. We will need some new instructions. They are:</p>
<p>CB hh ll Add value at location hhll into A<br />
C0 hh ll Subtract value at location hhll from A</p>
<p><strong>Step1</strong>. Decide where to place I, J, and K in memory. Remember they must be in RAM.</p>
<p>019E: ?? Location for I showing its value is unknown<br />
019F: ?? Location for J<br />
01A0: ?? Location for K</p>
<p>Usually we just place all our variables in consecutive RAM locations.</p>
<p><strong>Step2</strong>. Decide where in memory to place the constant 21. It must be in ROM.</p>
<p>E0E0: 15                        Note the value looks different in hex!</p>
<p><strong>Step3</strong>. Decide where to place the program and write it.</p>
<p>E10C: C6 019F                    load A with value from J<br />
CB 019F                                add in another J to form 2*J in A<br />
CB 019F                                add in another J for 3*J<br />
C0 01A0                              subtract K from 3*J in A<br />
CB E0E0                              add the constant 21 into A<br />
C7 019E                              store the result into I</p>
<p><strong>Step4</strong>. Define the starting address in the reset address in ROM.</p>
<p>FFFE: E10C</p>
<p>You should enter these values in the S08 simulator memory, and run the program a couple of times. REMEMBER to enter test values into the variables J and K before running the program. This section of code assumes that those values get placed there by sections of code not shown. To test this section you must provide some values to test. Verify that the value stored into I by the last instruction is correct for the values of J and K that you provide.</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/microcontrollers/assembly-language-examples.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Assembly Language Example</title>
		<link>http://engineersphere.com/microcontrollers/an-assembly-language-example.html</link>
		<comments>http://engineersphere.com/microcontrollers/an-assembly-language-example.html#comments</comments>
		<pubDate>Sun, 26 Sep 2010 02:13:47 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[assembly language]]></category>
		<category><![CDATA[assembly language example]]></category>
		<category><![CDATA[HCS08]]></category>
		<category><![CDATA[microcontroller programming]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=1855</guid>
		<description><![CDATA[TweetTweetAssembly Language Example Okay, so this post is just an example of an elementary assembly language program.  It will be useful to you if you haven&#8217;t learned how to program in assembly before, or simply want to learn some syntax.  This article specifically talks about the HCS08 microcontroller, so if you want to compile this [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/microcontrollers/an-assembly-language-example.html&via=EngineerSphere&text=An Assembly Language Example&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/microcontrollers/an-assembly-language-example.html&via=EngineerSphere&text=An Assembly Language Example&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><h3>Assembly Language Example</h3>
<p>Okay, so this post is just an example of an elementary assembly language program.  It will be useful to you if you haven&#8217;t learned how to program in assembly before, or simply want to learn some syntax.  This article specifically talks about the HCS08 microcontroller, so if you want to compile this code, you should have one of those handy.  Also, make sure you have the databook on hand.</p>
<p>We are now ready to write our first machine language program. This program is to initialize a 5-byte variable (an array that I will think of as being named n) by copying a 5-byte constant (an array I will think of as being named ni) into it. There are several steps that must be taken – it is very important to understand what each step does and how it fits into the programming picture.<br />
<strong>Step 1.</strong> Decide where in memory the array variable (n) will be located. It must be in RAM so all five must be between addresses 0060-025F. All five must be in succession for it to be an array. Lets pick 0188-018C. If asked for the address of n, the correct answer would be 0188 (the lowest number in the set of addresses). There is nothing more to do for any variable other than to decide on its address.</p>
<p><strong>Step 2.</strong> Decide where in memory the array constant (ni) will be located and what values it has. Constants must be in ROM so all five must be between addresses E000-FFFF (actually about FFAE is upper limit). I will select location E24E-E252. Many constants have self-defining values. Suppose we needed the constant five. Its value would be 5. The values I am about to choose for ni are not self-defining. I will select the ASCII (ASCII is a character code for alphanumeric information) value of the letters A to E. These decisions can be expressed as follows:</p>
<p>E24E: 41 42 43 44 45<br />
<strong>Step 3</strong>. Decide where in memory to place the program, and write it. It also must be in ROM. I choose E425 to start. We will see where it ends. Here it is:<br />
E425: C6 E24E load A from ni[0]<br />
C7 0188 store A into n[0]<br />
C6 E24F<br />
C7 0189<br />
C6 E250<br />
C7 018A<br />
C6 E251<br />
C7 018B<br />
C6 E252<br />
C7 018C                     store A into n[4] – last byte of n<br />
<strong>Question:</strong> What is the address of the last byte of this program segment?<br />
Step 4. Tell the HCS08 to start at location E425 when power is first applied to it. We do this by defining a pointer constant with that value at location FFFE. We will discuss this reset location later in another article. For now all you need to know is that at power-on the value at location FFFE is loaded into the PC (because the PC is 16 bits, the value at FFFF contains part of the starting address as well.</p>
<p style="text-align: center;">FFFE: E425</p>
<p style="text-align: left;">Our first <strong>machine language program</strong> is finished. You can bring up the S08 simulator, type all of the values specified for the ROM into it – 5 bytes of data, 30 bytes of program, 2 bytes of reset address – press the reset icon and then single step repeatedly to watch it run. The above steps must be performed for every machine-language and every <strong>assembly-language program</strong> that you write with the HCS08.</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/microcontrollers/an-assembly-language-example.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Printable World Maps</title>
		<link>http://engineersphere.com/introduction/printable-world-maps.html</link>
		<comments>http://engineersphere.com/introduction/printable-world-maps.html#comments</comments>
		<pubDate>Sun, 12 Sep 2010 21:39:16 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[map of africa]]></category>
		<category><![CDATA[map of asia]]></category>
		<category><![CDATA[map of australia]]></category>
		<category><![CDATA[map of china]]></category>
		<category><![CDATA[map of europe]]></category>
		<category><![CDATA[map of japan]]></category>
		<category><![CDATA[map of middle america]]></category>
		<category><![CDATA[map of north america]]></category>
		<category><![CDATA[map of russia]]></category>
		<category><![CDATA[map of south america]]></category>
		<category><![CDATA[map of united states]]></category>
		<category><![CDATA[map of world]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=1602</guid>
		<description><![CDATA[TweetTweetHere are some blank maps of different countries and continents around the world.  I&#8217;ve found them useful on several different occasions.  Enjoy! Blank Map of The World Blank Map of The United States Blank Map of South America Blank Map of Russia Blank Map of North America Blank Map of Middle America Blank Map of [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/introduction/printable-world-maps.html&via=EngineerSphere&text=Printable World Maps&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/introduction/printable-world-maps.html&via=EngineerSphere&text=Printable World Maps&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>Here are some blank maps of different countries and continents around the world.  I&#8217;ve found them useful on several different occasions.  Enjoy!</p>
<h3><a title="Blank Map of The World" href="http://engineersphere.com/worldmaps/Blank_Map_Of_World.pdf" target="_self">Blank Map of The World</a></h3>
<h3><a title="Blank Map of The United States" href="http://engineersphere.com/worldmaps/Blank_Map_Of_United_States.pdf" target="_self">Blank Map of The United States</a></h3>
<h3><a title="Blank Map of South America" href="http://engineersphere.com/worldmaps/Blank_Map_Of_South_America.pdf" target="_self">Blank Map of South America</a></h3>
<h3><a title="Blank Map of Russia" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Russia.pdf" target="_self">Blank Map of Russia</a></h3>
<h3><a title="Blank Map of North America" href="http://engineersphere.com/worldmaps/Blank_Map_Of_North_America.pdf" target="_self">Blank Map of North America</a></h3>
<h3><a title="Blank Map of Middle America" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Middle_America.pdf" target="_self">Blank Map of Middle America</a></h3>
<h3><a title="Blank Map of Japan" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Japan.pdf" target="_self">Blank Map of Japan</a></h3>
<h3><a title="Blank Map of Europe" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Europe.pdf" target="_self">Blank Map of Europe</a></h3>
<h3><a title="Blank Map of China" href="http://engineersphere.com/worldmaps/Blank_Map_Of_China.pdf" target="_self">Blank Map of China</a></h3>
<h3><a title="Blank Map of Australia" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Australia.pdf" target="_self">Blank Map of Australia</a></h3>
<h3><a title="Blank Map of Asia" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Asia.pdf" target="_self">Blank Map of Asia</a></h3>
<h3><a title="Blank Map of Africa" href="http://engineersphere.com/worldmaps/Blank_Map_Of_Africa.pdf" target="_self">Blank Map of Africa</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/introduction/printable-world-maps.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>History of Computer Technology</title>
		<link>http://engineersphere.com/basic-computer-concepts/history-of-computer-technology.html</link>
		<comments>http://engineersphere.com/basic-computer-concepts/history-of-computer-technology.html#comments</comments>
		<pubDate>Thu, 26 Aug 2010 03:33:06 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Basic Computer Engineering Concepts]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[Arithmetic Operations]]></category>
		<category><![CDATA[Big Endian]]></category>
		<category><![CDATA[Bit]]></category>
		<category><![CDATA[Branch Instruction]]></category>
		<category><![CDATA[Byte]]></category>
		<category><![CDATA[Byte Conventions]]></category>
		<category><![CDATA[Computer History]]></category>
		<category><![CDATA[Computer Technology]]></category>
		<category><![CDATA[Conditional Branching]]></category>
		<category><![CDATA[HCS08]]></category>
		<category><![CDATA[I/O Devices]]></category>
		<category><![CDATA[IAS]]></category>
		<category><![CDATA[IAS Computer]]></category>
		<category><![CDATA[John Von Neumann]]></category>
		<category><![CDATA[Little Endian]]></category>

		<guid isPermaLink="false">http://engineersphere.com/?p=1582</guid>
		<description><![CDATA[TweetTweetSo this post is a little out of the ordinary, however I figured this nice rant about the history of computer technology may be useful to some readers out there. The History of Computer Technology The first computer built in America was the IAS computer. It was developed at the Institute for Advanced Study at [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/basic-computer-concepts/history-of-computer-technology.html&via=EngineerSphere&text=History of Computer Technology&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://engineersphere.com/basic-computer-concepts/history-of-computer-technology.html&via=EngineerSphere&text=History of Computer Technology&related=EngineerSphere:&lang=en&count=none" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>So this post is a little out of the ordinary, however I figured this nice rant about <strong><span style="text-decoration: underline;">the history of computer technology</span></strong> may be useful to some readers out there.</p>
<h3>The History of Computer Technology</h3>
<p>The first computer built in America was the <strong>IAS computer</strong>. It was developed at the Institute for Advanced Study at Princeton under the direction of John Von Neumann between 1946-1950.</p>
<p>This obsolete machine’s architecture is presented not just for its historical significance, though that would be reason enough. Details about it are presented because many (most) modern computers (including the <strong>HCS08</strong>) trace their ancestry to the <strong>IAS machine</strong>. Those that do are referred to as von Neumann (or Princeton) architecture machines. The <strong>IAS architecture</strong> is relatively simple and is a convenient starting point for assembly language programming. An assembly language program for the IAS (though programs for it were written in machine language) would not look very different from modern load/store style machines. Also, a sense of the relative importance of concepts results from learning the IAS architecture. Programs written in a carefully selected subset of the HCS08 instruction set would look almost identical to an IAS assembly program (were we to create an assembler for that machine). We will then see how the complete HCS08 instruction set improves on the IAS instruction set and addressing scheme. The general design of the IAS machine is given below. The HCS08 is almost identical to it.</p>
<p style="text-align: center;"><a href="http://engineersphere.com/wp-content/uploads/2010/08/iasmachine.png"><img class="aligncenter size-full wp-image-1583" title="ias-machine-architecture" src="http://engineersphere.com/wp-content/uploads/2010/08/iasmachine.png" alt="ias-machine-architecture" width="458" height="206" /></a>As originally designed (to cut costs the machine was built with less memory), the memory consisted of 4096 40-bit words. The number of words in <strong>computer memory systems</strong> (at least the maximum memory) always consists of a power of two. This is because the specific word in memory to be accessed at any given time is specified by a set of binary valued wires or lines called the address bus. The number of different locations in memory such a bus can specify is simply all the possible combinations of the two values possible on each of the lines. For an n-bit bus, that value is 2n. The address bus size for the <strong>IAS memory</strong> was therefore 12 providing for 212 = 4096 unique memory locations. The number of bits per word is up to the computer designer. Memory word sizes of 4, 8, 12, 16, 18, 24, 32, 36, 40, 48, 60, and 64 have all existed for some computer. Almost all computers made today use 8-bit memory words, although they all support data types that use several consecutive memory words together as a single value. Most desktop (or larger) computer systems support 8-bit, 16-bit, 32-bit, and 64-bit values. Some even support 128-bit values. Note, all of these sizes are multiples (in fact powers of 2 multiples) of the basic 8-bit word size so these values use 1, 2, 4, and 8 (some even 16) words, respectively. Whatever the memory size, anyone with some programming experience taking their first look at the memory system in a computer design, should think of the memory as an array with 2n elements. The address bus carries the value of an n-bit unsigned index into the memory array. The data bus returns (or supplies if a write instead of a read is issued) the m-bit memory word value of the specified element, where m is the word size (in bits) of the memory system.</p>
<p>The REGS component of the general design represents the register set used by the CPU (Central Processor Unit). Registers are fast special-purpose memory separate from the main memory. They support the fetching and execution of instructions stored in memory. The registers in the IAS design are given below:</p>
<p style="text-align: center;"><a href="http://engineersphere.com/wp-content/uploads/2010/08/iasdesign.png"><img class="aligncenter size-full wp-image-1584" title="ias-design" src="http://engineersphere.com/wp-content/uploads/2010/08/iasdesign.png" alt="ias-design" width="587" height="139" /></a></p>
<h3>IAS Instructions and Data</h3>
<p>The <strong>IAS computer</strong> embodied the concept of a <span style="text-decoration: underline;"><strong>stored-program computer</strong></span>. The main memory contained two main categories of information – instructions and data. It is the ability to place different sequences of instructions in the memory that makes the computer so useful – it is what makes it a general-purpose computing device rather than a special-purpose or single-function computer. Instead of being constrained to building computers that perform only predefined single tasks (or small set of tasks), we can build a computer that does different tasks at different times. Such a computer can be reconfigured (reprogrammed) at any time to perform a new or different task. Often an important task is not even conceived of at the time the computer is designed. For the IAS machine, it was important that the programs and data shared the same memory. That way the instructions themselves could be processed as other data values. Self-modifying programs were the only scheme that the <strong>IAS designers</strong> thought of for performing loops that worked on different array elements each time through the loop. Between iterations of the loop, the instructions that accessed the array element were loaded into the AC and a value added to them to change the address portion of the instruction to the next array element to be processed. The modified instruction was then stored back in its memory location for execution the next time through the loop. Computer designers have since come up with several methods of accomplishing this type of operation without modifying the instructions themselves. Today, self-modifying code is considered taboo, as it is prone to logic errors that are hard to discover, cannot be executed out of <span style="text-decoration: underline;"><strong>Read-Only Memory (ROM)</strong></span>, and other deficiencies that are beyond this article.</p>
<h3>IAS Instruction Sets</h3>
<p>The IAS instructions consisted of 20 bits – a 12-bit address and an 8-bit operation code (opcode). The operation code part specified both an operation and a register. The instruction’s 12-bit address part usually specified an operand by giving the memory address of the memory word involved in the operation. Basic operations like load (copy a value from a memory word to the implied register), store (copy a value from the implied register to a memory word), add (add the value in a memory word to the value in the AC replacing the AC value with the sum) are referred to as memory-reference instructions and form the core instructions for both the IAS machine and the HCS08 microcontroller. When an instruction contains the actual full address of the operand, as the IAS memory-reference instructions did, the value is usually referred to as a direct address and those instructions are said to use the direct addressing mode. Unfortunately, Freescale’s terminology for the HCS08 refers to such instructions as extended addressing mode instructions, and uses direct addressing mode to mean something else. The IAS instruction set had only one other class of instructions which were called register-reference instructions. Such instructions were said to use the inherent addressing mode. The HCS08 also has many such instructions and also refers to them as inherent addressing mode instructions. It is almost an oxymoron to say these instructions have an addressing mode as they use no memory address at all. Such operations involved only the registers. An example of such an instruction for the IAS machine was to add the value in the MQ to the value in the AC replacing the value in the AC with the sum. At this point we should note that descriptions of computer instructions usually shorten the phrase “the value in the Register-name” to just “Register-name”. Thus we describe the above addition as adding MQ to AC. It is implied that we mean the value in or content of the registers, and that by adding “to” we are replacing the original value after it is used in the operation with the result of the operation. An example of a similar instruction in the HCS08 instruction set is the “mul” instruction. It means multiply X times A, where X and A are HCS08 registers, replacing the value in the X:A pair with the 16-bit product.</p>
<p>Normally, instructions are executed in the sequence they appear in memory with the instruction in Memory[i+1] being executed immediately following the execution of the instruction in Memory[i]. The <strong>CPU register</strong> that keeps track of where the next instruction is located is the PC. Its name come from the fact that it is an index into the Program and that its normal mode of being modified is to be incremented (so it Counts) after each instruction. On the IAS machine each instruction occupied only half a word so the PC was incremented after every other instruction. There was an additional Register bit that told whether the current instruction was in the first or last half of the word referenced by the PC. On the HCS08 instructions take from one to four memory words, so its PC may be incremented several times per instruction.</p>
<h3>Branch (jump) Instruction</h3>
<p>A different type of instruction from those that manipulate data is the branch (or jump) instruction. They are so named because they cause the CPU to deviate from the normal sequence of instructions. Instructions in this class change the value of the PC from its normal incrementing sequence by loading a new value into it in much the same way that the loading of other registers work. A big difference, however, is that branch and jump instructions usually come in both unconditional and conditional varieties. The unconditional ones always change the course of execution from the normal sequential order, the conditional ones, however, may change it or they may let the normal order continue. Which program path occurs usually depends on the outcome of some previous operation such as subtracting one value from another. The IAS’s conditional branch would change the normal sequence if the result of the most recent arithmetic operation were positive, otherwise it would let the normal sequence continue. Conditional branching is the feature that gives computers the power to perform complex algorithms. Without it they would only be able to perform simple formula-based calculations! The HCS08 has a rich assortment of conditional branch instructions. <strong><em>Conditional branching is the feature that gives computers the power to perform complex <span style="text-decoration: underline;">algorithms</span>.</em></strong> Without it they would only be able to perform simple formula-based calculations! The HCS08 has a rich assortment of conditional branch instructions.</p>
<h3>Arithmetic Instructions</h3>
<p>Data values in the IAS machine consisted of signed binary fixed-point numbers 40 bits in size. The sign used one bit so 39 bits remained to hold the magnitude of the value. The 39 bits are equivalent to about 12 decimal digits. As is true today, these fixed-point numbers could be considered to be integers or to contain fractional parts depending on where the binary point was considered to be. The hardware that performs calculations on the data works for a wide variety of conventions. Addition and subtraction require only that both operands are considered to have the binary point in the same position, there is no restriction on where it is considered to be. Multiply and divide don’t have even that restriction, but one must understand where the binary point of the results must be considered to be. Experimentation with decimal numbers with varying number of digits following the decimal point will allow one to understand the outcomes, and formulate the rules for properly placing binary points for the various computer operations. It should be made perfectly clear that no bits are used to indicate where the binary point is located; its position only exists in the way the programmer intends to interpret the value represented by the bits in the data word. Addition and subtraction instructions in the HCS08 support 8-bit unsigned and 2’s complement (signed) values. The multiply supports only 8-bit by 8-bit unsigned values – producing a 16-bit unsigned result. The divide instruction supports only a 16-bit by 8-bit unsigned divide, that produces an 8-bit quotient and a 8-bit remainder. By dividing the remainder by the original dividend, the quotient’s precision can be extended another 8 bits. This process can be repeated to any desired precision.</p>
<h3>Indirect Addressing</h3>
<p>The first architectural improvement in computers that eliminated the need to have self-modifying code was <strong><span style="text-decoration: underline;">indirect addressing</span></strong>. This addressing mode makes use of a pointer data type. A pointer is a word (or multiple words if a word is too small) that has a value used as an address to another word in the memory. To specify an address indirectly, the indirect addressing mode instruction contains the address of a pointer instead of the data. The CPU knows that for such instructions there must be two memory areas accessed. The first reads the pointer and then uses its value as the address to access (read or write) the actual operand. To change the memory location accessed by such an instruction, the instruction itself need not be modified, only the value of the pointer variable. Few computers still use this form of indirect addressing, but rather its cousin, register addressing or a variation of it. In <strong><span style="text-decoration: underline;">register addressing</span></strong>, the pointer value must be loaded into an address register with one instruction, and then that address used with another instruction. Again, to modify the actual data location a register addressing mode instruction accesses, one need only modify the value in the address register. The HCS08 has two such address registers, H:X and SP, although the SP main use is as a stack pointer. A variety of addressing modes based on those two registers are available.</p>
<p>Modern desktop computers now have many registers that can be used as accumulators and/or address registers. It is not uncommon for a computer to have 32 32-bit general- purpose registers that can be used for either. The HCS08 has only a microprocessor as its computing core, so it has only a single 8-bit accumulator and a pair of 16-bit index (address) registers – no general-purpose registers. In order to program in <span style="text-decoration: underline;"><strong>machine language</strong><strong> assembly language</strong></span> or you must first learn the architecture of the computer you plan to program. The architecture of a computer specifies the registers in the CPU, the main memory size, and the instruction set (including not only the operations it can perform, but also all the addressing modes supported).</p>
<p>We are ready to study the architecture of the HCS08 microcontroller’s microprocessor core. The general design is given below. It is only a slight modification of the IAS one shown earlier. The only difference is that the Input/Output (I/O) devices are <strong><span style="text-decoration: underline;">memory-mapped devices</span></strong>. That is, you access them as though they were normal memory, with load and store instructions within the main memory address space.</p>
<p style="text-align: center;"><a href="http://engineersphere.com/wp-content/uploads/2010/08/HCS08architecture.png"><img class="aligncenter size-full wp-image-1585" title="HCS08-architecture" src="http://engineersphere.com/wp-content/uploads/2010/08/HCS08architecture.png" alt="HCS08-architecture" width="423" height="193" /></a>There are big differences with the details of the design. The register set is different, the memory size and shape are different, and the instruction set contains many more instructions. However, the basic functioning of the machines is very much the same. They both have the same load/store nature where most ALU operations must be performed on values in the CPU’s registers. They are both single address machines in that at most one of the operands of binary (two operand) operations (such as add) can come from main memory. (Actually the HCS08 has a very limited set of “move” instructions that transfer data from one memory location to another without going through a register.) The main memory can contain both instructions and data at virtually any location (even intermixed – although we will try not to do that). The CPU can operate on instructions as though they were data.</p>
<h3>Memory Comparisons</h3>
<p>Let’s check out the differences. The main memory of the IAS held 4096 40-bit values. The memory space of the HCS08 provides for 65536 8-bit values. Thus the HCS08 memory system uses a 16-bit address bus (216 = 65536) and an 8-bit data bus. The address bus carries information only one direction, to the memory system, but the data bus can carry information either to or from the memory (thus the double arrowheads on the data bus above). Not shown in the above diagram are control signals that tell the memory such things as whether a read or write is being performed. Each of the 65536 memory locations should be thought of as having an address and a contents (or value). The address is a 16-bit (4-hexadecimal-digit) number, while the contents is an 8-bit (2-hexadecimal digit) number. When we look at the instruction format we will find it is convenient that the value of an address can be stored exactly in two words of memory. In truth, that ability is the cause of the memory space being the size that it is.</p>
<p>At the risk of being too remedial, I will emphasize a possibly painfully obvious, but extremely important, concept. We often show the content of a section of memory by listing the memory address in one column and its content in another. Consider the example below. The left pair are in binary and the right in hexadecimal.</p>
<p><a href="http://engineersphere.com/wp-content/uploads/2010/08/memoryaddress.png"><img class="alignleft size-full wp-image-1586" title="memory-addressing" src="http://engineersphere.com/wp-content/uploads/2010/08/memoryaddress.png" alt="memory-addressing" width="521" height="134" /></a></p>
<p>First, note how much more compact the hexadecimal (we’ll shorten that name as well, and start calling it hex) notation is. From this point on we will use mostly hex notation for address and values.</p>
<p>The key point I want to make is that only the value part is stored anywhere. The address is a fleeting number generated one at a time as needed and then its value disappears. When a program is being executed the Program Counter (PC) provides that value for instruction fetch. After each use of the PC it is incremented so the previous address value does not exist anywhere any more. The new value will exist only while it is being used to read the next word of the program.<br />
Because the addresses are consecutive over an area of interest we often will show only the lowest address with a set of data values. By convention know that each successive memory content value is at an address that is one greater than the previous content. Thus the above set of memory values could be given as:<br />
020D: 5B D8 74 06 31<br />
A colon is often used to separate the address from a sequence of data values for added clarity. Here is my last restatement of the (hopefully blatantly obvious) address/data relationship – whenever the contents of locations 020D-0211 are given, the address part can never change, only the content can.</p>
<h3>Byte Conventions</h3>
<p>The HCS08 instruction set supports one 16-bit load operation. As 16-bit values require 2 words of memory, and the instructions specify only a single address, a convention must be established as to which of the two memory addresses that contain the 16-bit value will be specified in the instruction. It must also be decided whether the most-significant byte (MSB) or the least-significant byte (LSB) should be stored in the lower-numbered address of the pair. For me, this last question has an obviously best answer. Place the MSB at lower-numbered addresses. This convention is known as <span style="text-decoration: underline;"><strong>big-endian</strong></span> memory organization. When consecutive address values are written horizontally, the MSB will be to the left. This follows the standard convention for decimal numbers where more-significant digits appear to the left of less-significant digits. This convention, that more-significant bytes of multi-byte value be stored at lower address values, will never be violated in this course. In every situation that the HCS08 hardware dictates how they will appear, that convention is adhered to. In every situation where the programmer must decide, I will require that this rule be followed as well. Some machine designs even specify that two-byte values must start on an even address. Such requirements are referred to as memory alignment restrictions, but the HCS08 has no such restriction. The HCS08 always uses the address of the MSB, which is the lower of the pair. We will adopt that same convention, using the lowest address as the “handle”, for any program-defined groups of bytes for any size group that we create.</p>
<h3>Registers to know</h3>
<p>The Registers that you may need to know the most about are the ones in the Programmer’s Model as shown on Page 86 of the MC9S08QG Data Sheet for HCS08 Microcontrollers that is available in pdf form on the web and distributed in booklet form in class compliments of Freescale. The A register is an 8-bit accumulator used primarily for 8-bit arithmetic and load/store style moving of data. The H:X and SP register are used primarily for addressing. They are 16-bit registers so can point to any location in the memory space. The stack pointer (SP) exists primarily to support stack operations built into the hardware – we will learn all about these operations later. It is a 16-bit register as the stack utilizes main memory, and a 16-bit value allows the stack data to be placed anywhere in the memory space. The program counter (PC) tells where in the memory the next instruction to be executed is located. It is a 16-bit register so that instructions can exist and be executed out of any location in the memory space. The condition code register (CCR) keeps machine state information – our main programming use of it will be to guide conditional branch execution along the two paths that such instructions can direct a program. It is an 8-bit register.</p>
<p>This was wordy and didn&#8217;t necessarily wrap up completely but we have learned a lot of new information!  I hope you enjoyed this article about the history of computer technology and how this introduces you to how a simple computer called a <span style="text-decoration: underline;"><strong>microcontroller </strong></span>works.</p>
]]></content:encoded>
			<wfw:commentRss>http://engineersphere.com/basic-computer-concepts/history-of-computer-technology.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

