/* ---------------------------------------------------------------------------
* AVR Blink Demo Application
* www.mlab.cz miho 2008
* ---------------------------------------------------------------------------
* Demo program for AVR processors
* Simple blinking application for ATtiny13/ATmega8 and similar
* ---------------------------------------------------------------------------
* 00.00 2008/04/18 First Version
* ---------------------------------------------------------------------------
*/
// Configuration
// -------------
// Define LED port here
// Use port available on all devices with no conflict with ISP port
#define LED B
#define LED_BIT 3
// Define CPU clock frequency here
// Do not forget to set Clock Oscillator in Low Fuse
// Select just one
//#define F_CPU 1000000UL // Frequency in Hz
#define F_CPU F_CPU_DEFAULT // Default internal RC clock frequency
//#define F_CPU F_CPU_MAX // Maximum internal RC clock frequency
// Define blink period
#define PERIOD 5000 // in ms
#define DUTY 20 // in %
// End of Configuration
// --------------------
// Helpers
#define GLUE(a,b) a##b
#define PORT(a) GLUE(PORT,a)
#define PIN(a) GLUE(PIN,a)
#define DDR(a) GLUE(DDR,a)
// Port definitions
#define LED_PORT PORT(LED)
#define LED_DDR DDR(LED)
// Processor definitions
#include <avr/io.h>
// Define clock values for selected processors
// ATtiny13
#if _AVR_IOTN13_H_
#define F_CPU_DEFAULT 1200000UL // Default clock 9.6MHz/8
#define F_CPU_MAX 9600000UL // Maximal internal clock
#endif
// ATmega8/16/32/64
#if _AVR_IOM8_H_ | _AVR_IOM16_H_ | _AVR_IOM32_H_ | _AVR_IOM64_H_ \
| _AVR_IOM88_H_
#define F_CPU_DEFAULT 1000000UL // Default clock 1MHz
#define F_CPU_MAX 8000000UL // Maximal internal clock
#endif
// Use delay library
#include <util/delay.h>
// Define ON and OFF times on PERIOD and DUTY
#define TIME_ON (1L*PERIOD*DUTY/100)
#define TIME_OFF (1L*PERIOD*(100-DUTY)/100)
// Main program
int main()
{
LED_DDR |=1<<LED_BIT; // Set LED port as output
for(;;) // Never ending story
{
LED_PORT |= 1<<LED_BIT; // Set LED port to 1
_delay_ms(TIME_ON); // Wait
LED_PORT &= ~(1<<LED_BIT); // Clear LED port to 0
_delay_ms(TIME_OFF); // Wait
}
return 0;
}