Czesc!
Mam problem. Chce napisac programik do sterowania trzema lampkami (ledami) przy pomocy ATmega16 z uzyciem PWM. Zaczynam programowanie tego uP. Cos napisalem i (nie wiedziec czemu) petla glowna programu wykonuje sie raz i atmega sie samoczynnie resetuje. Dlaczego? Ponizej zalaczam zrodlo. Kompiluje przy pomocy AVR-GCC. Poki co program nie robi nic specjalnego, ale dlaczego sie nie zapetla? Po odpaleniu slychac z buzzerka (PIND7) pik, pik, pik,....
Pozdrawiam
------------------ SOURCE ---------------
// LEDS PWM
// CRYSTAL : 11'059'200 Hz
#include "avr/io.h" #define byte unsigned char
byte led1_time; byte pwm_counter;
void delay ( unsigned int x ) { int z = 0; unsigned char zz = 0; unsigned char zzz = 0; for ( z = 0 ; z < x ; z++ ) for ( zz = 0 ; zz < 255 ; zz++ ) for ( zzz = 0 ; zzz < 10 ; zzz++ ) asm ( "NOP" ); }
void beep () { PORTD &= ~ ( 1 << 7 ); // PIND7 goes LOW (beep ON) delay ( 5 ); // delay PORTD |= ( 1 << 7 ); // PIND7 goes HIGH (beep OFF) }
int main () { // Timer0 setup // PWM DDRA = 0xFF; // On PORT A there are LEDs
DDRD |= ( 1 << 7 ); // PIND7 as output (LED)
beep ();
led1_time = 80;
pwm_counter = 0; GIMSK &= ~ ( 1 << 7 ); // gasze na wszelki wypadek flage I (przerwania)
loop: {
pwm_counter++; if ( pwm_counter >= led1_time ) PORTA |= ( 1 << 0 ); } goto loop; }