Intel 8-bit Hex File Format is the most common hex file format used globally, as far as I know. There is also Motorola Hex file format and maybe others. Creating applications with AVR-GCC, we usually select ihex output file format what means Intel hex file format. Let’s go through it and see what’s inside. It is simple as 6 and 6 (six and six) because each Hex file line consists of six parts. And there can be 6 record types in the hex file. Lets go through all six parts of each line:
AVR microcontrollers are loaded with some amount of EEPROM (Electronically Erasable Read-Only Memory ) memory. This is a handy feature allowing developers to store program parameters like service information, constants, menu strings, etc. Atmel states that AVR EEPROM memory can be rewritten over 1000000 times. Reading is unlimited. In this article, I am going to show how to store data to EEPROM by defining variables. For this, we need to include eeprom.h header from avr directory (#include “avr/eeprom.h” ). Then we can write a simple variable declaration using the simple attribute EEMEM: EEMEM keyword indicates to the compiler that variables are stored in EEPROM, and it creates a separate .eep file that has to be written to chip separately. Se what I have got after compiling the above code: You can see compiler information about compiled code sizes. The bold line is indicating the size of occupied EEPROM memory. In this particular case, we see that size is 8 bytes: one-byte variable, one word (two bytes), and a five-byte array – total 8bytes. Open .eep file located in the project folder. The compiler compiled Intel Hex File of EEPROM data: :0800000054657374005555109E :00000001FF The first line shows 8-byte data stored at…
Sampling is a process when a series of discrete samples represent the continuous-time signal. At the same time, the reconstruction is the reverse process when these samples recreating adequate continuous-time signals. Bellow, the overall process is illustrated. Sampling is a process when the continuous-time signal is recorded every T seconds by multiplying by an impulse train.
This is a pretty old standard but still widely used in embedded systems. Using the RS232 interface standard, the data is sent bit by bit. Usually, first comes LSB. The receiver receives data by knowing the position of each data piece and delay. To ensure the quality of data transmission, we need to control the start of transmission. The acknowledgment procedure does this. Let’s take the asymmetrical type of interface RS232-C. The transmitter sends RTC (request to send) signal to the receiver. On the other hand, the receiver detects this signal, finishes the previous operation, and then sends to receiver CTS (clear to send) signal, which means that receiver is ready to accept data. Without CTS transmitter cannot start data transmission. Note: In the RS232 interface, logical “1” corresponds to voltages from -3V to -12V, and logical “0” corresponds to voltages from +3V to +12V. The logical level in the interval -3V to +3V is undefined.
This is a continuing thread. Why use a watchdog variable timer. This post is about how the watchdog timer on the AVR microcontroller works and how to control it. As we mentioned earlier, the watchdog timer is a distinct timer counter, which generates a reset signal when it fills up. After the watchdog timer counts up to maximum, it generates a short pulse duration of 1 clock cycle. This pulse triggers an internal reset timer counting up to tout.
Most of the embedded microcontrollers contain watchdog timers. The watchdog variable timer is literally watchdog. The watchdog timer continuously inspects the program flow. Basically, if the microcontroller program hangs, then the watchdog timer resets it and brings the embedded system back to life. The idea is elementary. Let’s say, you know, that your program has to be executed during 20ms. And you know that the worst-case scenario is 30ms. Then you set the watchdog variable timer connected to the highest priority interrupt RESET. Once the Watchdog timer is triggered, the timer counts up to the time you set, and then it resets the MCU. The only way to avoid resetting is to send a command to the watchdog timer to start counting. Technically watchdog variable timer is nothing more than a retriggerable one-shot multivibrator.
I have been working on the optimization of one of my C codes. I needed one function to be as optimal as possible. I decided to use inline ASM to achieve this. I decided to write a few lines about this. There are a few rules that are necessary to follow. Each ASM statement is divided by colons into 3(up to four parts): Assembler instructions part; A list of output operands (comma separated); A list of input operands (comma separated); Clobbered register – usually left empty.
There is quite a big variety of AVR microcontrollers that ATMEL company produces. This article is about how to Extract information about the AVR microcontroller using its marking on the package. Each microcontroller has its own mark on the package: numbers and letters. The first is the microcontroller type. After follows, a suffix of three fields. The first field is one or two digits, which indicate maximal operation frequency MHz. The second field is a letter showing the package type. And the third field shows the temperature range of the working environment. There are a couple more marking letters “L” and “V” after the microcontroller type. This means that the microcontroller operates at low or very low voltages (and frequencies, of course).
During my spare time, I am developing the program for the AVR controlled DDS generator. I decided to write software using the WinAVR tool-set. How far ahead I have moved with this? I have implemented: Menu system; Reading previous generator configuration from EEPROM; Setting signal mode; Storing last generator configuration to EEPROM to be loaded after reset; Four types of signal output (square, sawtooth, triangle, and sine wave); Things I still need to do: Ability to change signal frequency; Implement other signals (listed below); Make program clean-up;
If you want to bring some interactivity to your embedded projects, one option is to add buttons. This allows you to control program flow, set parameters, and much more. Few words about AVR ports. AVR Port pins can be configured as input or output. See table for all general pin configurations: DDRx register is the so-called direction register; PORTx – is port output register; PINx – is pin input register;