Witam, męczę się już któryś dzień nad nową Atmegą128 i gdy nic nie znalazłem na forum co by mi pomogło postanowiłem zadać pytanie.
Czemu ten uC nie wchodzi mi w przerwanie?
Napisałem prosty program testowy, steruje on silnikiem krokowym, po określonej liczbie impulsów ma zmienić ICR1 co powoduje wzrost częstotliwości a zarazem prędkość obrotową, na atmega128 nie działa natomiast na atmega8 działa bez problemu.
Dodam że kompatybilność z Atmega103 jest wyłączona.
Zamieszczam kod:
#include <avr/io.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint32_t a;
ISR (TIMER1_COMPA_vect)
{
++a;
}
ISR (BADISR_vect){}
int main()
{
//------------------------------ Ustawienia I/O
DDRB = 0xff; //Port B jako wyjście
PORTB = 0x00;
DDRC = 0x00; //Port C jako wejście
PORTC = 0xff;
//----------------------------- Ustawienia PWM
TCCR1A |= (1<<COM1A1) | (1<<WGM11); //FastPWM, preskaler 1
TCCR1B |= (1<<WGM13) | (1<<CS10) | (1<<WGM12);
TIMSK |= (1<<OCIE1A);
TCNT1 = 0x00;
OCR1A=50;
ICR1=800;
sei();
for(;
{
if(a>=150000)
{
ICR1=300;
}
}
return 0;
}
Czemu ten uC nie wchodzi mi w przerwanie?
Napisałem prosty program testowy, steruje on silnikiem krokowym, po określonej liczbie impulsów ma zmienić ICR1 co powoduje wzrost częstotliwości a zarazem prędkość obrotową, na atmega128 nie działa natomiast na atmega8 działa bez problemu.
Dodam że kompatybilność z Atmega103 jest wyłączona.
Zamieszczam kod:
Kod: C / C++
#include <avr/io.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint32_t a;
ISR (TIMER1_COMPA_vect)
{
++a;
}
ISR (BADISR_vect){}
int main()
{
//------------------------------ Ustawienia I/O
DDRB = 0xff; //Port B jako wyjście
PORTB = 0x00;
DDRC = 0x00; //Port C jako wejście
PORTC = 0xff;
//----------------------------- Ustawienia PWM
TCCR1A |= (1<<COM1A1) | (1<<WGM11); //FastPWM, preskaler 1
TCCR1B |= (1<<WGM13) | (1<<CS10) | (1<<WGM12);
TIMSK |= (1<<OCIE1A);
TCNT1 = 0x00;
OCR1A=50;
ICR1=800;
sei();
for(;
{
if(a>=150000)
{
ICR1=300;
}
}
return 0;
}
Kod: C / C++