Turn-key PCB assembly services in prototype quantities or low-volume to mid-volume production runs

Example of enumeration c in microcontroller programming

Enumeration allows defining a user data types in C language. For this purpose a #define pre-processor is used which allows describing a set of constants. They allow reading and understanding program code much easier as you may define human readable types. For instance, using pre-processor we can define a simple numbers to be as follows: #define zero 0#define one 1#define two 3 Define is powerful tool for doing many different definitions in pre-processing stage of source code, but in C language there is an alternative way of defining a user data types –  enumerating using keyword enum: enum (zero=0,one, two); //zero=0, one=1; two=2 By default, enumeration assigns values from zero and up. You can use enumeration of new types as in following example: int n;enum (zero=0,one, two);n=one; //n=1 Also you can use enum  to assign special characters to meaningful words like this: enum escapes { BELL = ‘\a’, BACKSPACE = ‘\b’, HTAB = ‘\t’,RETURN = ‘\r’, NEWLINE = ‘\n’, VTAB = ‘\v’ };or enum boolean { FALSE = 0, TRUE }; An advantage of enum over #define is that it has scope, what means that the variable (just like any other) is only visible within the block it was declared.…

Continue reading

AVR GCC Structures

Basically Structures are nothing more than collection of variables so called members. Structures allows to reference all members by single name. Variables within a structure doesn’t have to be the same type. General structure declaration: struct structure_tag_name{ type member1; type member2; … type memberX }; or struct structure_tag_name{ type member1; type member2; … type memberX } structure_variable_name; in second example we declared the variable name. Otherwise variables can be declared this way: struct structure_tag_name var1, var2,var3[3]; Members of structure can be accessed by using member operator (.). The member operator connects the member name to the structure. Lets take an example: struct position{ int x; int y; }robot; we can set robot position by using following sentence: robot.x=10; robot.y=15; or simply robot={10,15}; Structures can be nested: struct status{ int power; struct position coordinates; } robotstatus; to access robot x coordinate we have to write: x=robotstatus.coordinates.x; Actions can be taken with structures: Copy; Assign; Take its address with &; Access members. Of course you can treat a structure like a variable type. So you can create an array of structures like: struct status{ int power; struct position coordinates; } robotstatus[100]; Accessing 15th robot power would be like this: pow=robotstatus[15].power;

Continue reading

Accessing AVR microcontroller ports with AVR GCC

All AVR ports have Read-modify-write functionality when used for general I/O functionality. The direction of each separate port pin can be changed. Each pin buffer has the symmetric capability with the ability to drive and sink source. The pin driver is strong enough to drive LED directly, but it is not recommended to drive even small loads without using proper driver circuit such as transistors. All port pins have internal selectable pull-up resistors. And finally, all pins have protection diodes to both VCC and GND rails. Each port of AVR consists of three registers DDRx, PORTx and PINx (where x means port letter). DDRx register selects the direction of port pins. If logic one is written to DDRx then the port is configured to be as output. Zero means that the port is configured as an input. If DDRx is written zero and PORTx is written logic “1” then the port is configured as input with an internal pull-up resistor. Otherwise, if PORTx is written to zero, then the port is configured as input but pins are set to tri-state and you might need to connect external pull-up resistors. If PORTx is written to logic “1” and DDRx is set…

Continue reading

Why Using Ruby on Rails

Nowadays, many big and small companies prefer using Ruby on Rails when creating applications that are to be delivered on the web. It is not surprising, as Ruby on Rails offers lots of advantages over other web development frameworks. Lets have a closer look at the benefits of Ruby on Rails or Ruby, as it is usually called. This framework’s main advantage is that it makes the life of a web developer easier by allowing writing less code, which is achievable due to a leaner code base. Ruby on Rails is very easy to use. Besides, it gives speed and flexibility that no other scripting language or framework can give. Creating websites with Ruby on Rails is a lot faster and easier than with other web developing solutions. Generally, to develop and launch a website, the developer needs about twelve weeks. While using Ruby on Rails, a web developer needs six weeks to complete a similar project. The modular design of Ruby on Rails allows reusing earlier created elements rather than creating new ones. Making changes and adjustments is also a lot easier if a site is created with Ruby on Rails.

Continue reading

Agile Web Development with Ruby on Rails

Ruby on Rails (also known as RoR or simply Rails) is an object-oriented, multi-level, full-stack framework running via Ruby’s programming language. Many web developers choose to work in Ruby on Rails due to its numerous advantages. Why do developers love RoR? The best-known advantage of Ruby on Rails web development is the speed. A variety of handy instruments and Ruby’s support on the Rails community increase development speed by about 30-40%. With Ruby on Rails, you get excellent built-in testing, caching, localization, validation, and deployment tools. And that’s not it. You also get an opportunity to customize the routing and titles of the website sections so that your projects always have simple and beautiful URLs. The database migration process is perfect in Rails. The database structure always stays in the repository, and every change in structure gets instantly documented.

Continue reading

Reading serial data from chipKIT UNO32 using Python3 and pyserial

installing python3 - path variable

Python is great programming (scripting) language that is supported on all platforms. Embedded enthusiasts love it because of the variety of modules that connect things to the internet and other crazy stuff by writing only a few code lines. Today my interest was to read serial data using Python 3.3 and the pyserial module. Python 3.3 is still fresh, and there is a majority of modules that need to be ported from Python 2 to Python 3, but I hope soon they will here. The serial module seems to be working fine in Windows 7 x64, and I decided to share my experience. First of all download and install Python 3 (current release is Python 3.3) Just be sure to include “Add python.exe to Path” so you could run Python anywhere on your computer. We won’t go into details on how to set up this tool. It is pretty robust. After setup, python install is placed in C:\Python33. To test if things work OK open the command prompt and type python; you should see the python prompt:

Continue reading

Control LPT port under windows XP using Delphi

Another way of controlling the LPT port under Windows 2000 and XP is using the Delphi language. In this case, library, inpout32.dll, is used, which allows controlling LPT port registers. And now how to do this from the beginning. Start Borland Delphi 7.0 and make a simple form where you can enter Data to be sent to the port, Port Address, buttons for writing to and reading from a port. If you are familiar with building forms this should be ease task. Okay, now let’s start programming; first of all wee need to include inpout32.dll in the project. For this, Delphi has several ways, but let’s stay to the easiest one when the library is in the same directory, where the project is. The header in section uses we have to place function prototypes Out32 and Inp32 with special compiler directive external, saying where to find this function.

Continue reading

Controlling external devices using COM port communications programmed using VB language

There are a lot of Radio amateurs that want to control external devices using computer standard ports. One of them is the COM port. Everybody wants things to be easy as people doing electronics are more hardware people, not software. COM port is more often used than LPT because COM port is more resistive to bigger loads, and there are fewer chances of failing. So if you know Visual Basic a little bit, then this shouldn’t be tough to use the MSComm Control component, located in Project->Components. You should check box MSComm Control. Later you have to add this control to the form and write some code for it.

Continue reading

Variables in embedded C programming language

What are variables in the C language? Variables are simple keywords that are defined by the values. Values can be changed. Variables are like a box with some size where values like apples can be put in. So variables can be various forms and sizes, so-called variable types. Variable type is defined by a reserved word which indicates the type and size of variable identifier: unsigned char my_char; long int all_my_numbers; int number; Why do we need variables? The basic answer is that memory is limited, and the compiler needs to know much space to reserve for each variable. The coder needs to specify the variable type and its size by using one of the reserved words from the table:

Continue reading