Hallo, für ein Uniprojekt muss ich einen ATMEGA48A programmieren und habe beim herumprobieren ein Problem. Ich habe einen simples Programm geschrieben bei dem LEDS Leuchten nachdem ein Interrupt ausgeführt wird. Mein Problem ist aber das die LEDs nur leuchten während der Interrupt aktiv ist. Das muss also bedeuten das die Variable trotz volatile immer nach ende des Interrupts wieder auf 0 gesetzt wird. Im Simulator von Atmel Studio 7 funktioniert das Programm normal aber beim richtigen Controller nicht. Danke für etwaige Ideen und Lösungsvorschläge. Hier der Code:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdbool.h>
volatile uint8_t test;
int main(void)
{
EIMSK|=(1<<INT1); //Interrupt 1 enabled
EIMSK|=(1<<INT0); //Interrupt 0 enabled
PCMSK2|=(1<<PCINT20); //Pin Change Interrupt für Pin 20
PCICR|=(1<<PCIE2); //Pin Change Interrupt enabled
DDRD|=0b11100011;
DDRC|=0b0111111;
PORTD|=0b00011100; //Pullup für Eingänge wiederstände werden aktiviert
test=0;
sei();
while (1)
{
for(int i=0; i<=(20-pwm); i++){
_delay_us(100);
}
if (test==1)
{
PORTC|=0b0111111;
PORTD|=0b11100011;
}
for(int i=0; i<=pwm; i++){
_delay_us(100);
}
PORTC&=~(0b0111111);
PORTD&=~(0b11100011);
1 |
|
}
ISR(INT1_vect){
test=1;
}