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. Direction of each separate port pin can be changed. Each pin buffer has symmetric capability with ability to drive and sink source. 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 direction of port pins. If logic one is written to DDRx then port is configured to be as output. Zero means that port is configured as input. If DDRx is written zero and PORTx is written logic “1” then port is configured as input with internal pull-up resistor. Otherwise if PORTx is written to zero, then 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 to “1”, then port pin is driven high. And if PORTx=0,…

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. The main advantage of this framework 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. Beside, 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, developer needs about twelve weeks. While using Ruby on Rails, a web developers needs six weeks to complete a similar project. 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

What is Ruby on Rails? Ruby on Rails (known also as RoR or simply Rails) is an object-oriented, multi-level, full-stack framework running via a programming language called Ruby. 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 the support offered by Ruby on Rails community increase the speed of development 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 routing and titles of the website sections, so that your projects always have simple and beautiful URLs. 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 a great programming (scripting) language that is supported on all platforms. Embedded enthusiasts love it because of variety of modules that allows connecting things to internet and other crazy stuff by writing only few lines of code. Today my interest was to read serial data with using Python 3.3 and pyserial module. Python 3.3 is still new and there is a majority of modules that needs to be ported from Python 2 to Python 3, but I hope soon they will here. Serial module seems to be working fine in Windows 7 x64 and 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 in you computer. We wont go in to details on how to setup this tool. It is pretty robust. After setup python install is placed in C:\Python33. To test if things work OK open command prompt and type python you should see python prompt:

Continue reading

Custom software design 2012

Not every company can easily afford the complete custom software design. There are several reasons for it; however the main one is the drastic tendency of the multiple templates used in this field. The usual templates are meant for different cases including most kinds of the offered software. They are basically used when the new product is actually based on something already existing, so you are not forced to start everything from the very beginning. Instead you can just use the basic template and make some kind of IT remix with it. As a result you will get the newly created software in comparably small time. This means less efforts, time and skills; however you still can get enough money for this work. Sure thing this creation will never be as craved as the one made from the start, yet some of the clients are completely satisfied with it. On the other hand there are cases when you just can’t use the basic stuff and have to perform the custom software design. This happens when the software is of the rare kind, so there are just not enough ready templates for it. On the other and the needed software can…

Continue reading