Witam. Już od kilku godzin siedzę nad prostym programem i nie mogę zrozumieć w czym problem. W programie chodzi o to, że na pin 1 portu B podawany jest stan wysoki kiedy na pinie 6 portu A (przetwornica) jest stan wysoki. Jeśli na tym pinie jest stan niski a na pinie 7 ( agregat) stan wysoki to pin 0 portu B ustawiany jest w stan wysoki. Jeśli obydwa są w stanie niskim na wyjściach nie ma nic. Podłączenie źródła zewnętrznego na pin 5 portu A (połączonego z INT0) ustawia przerwaniem pin 2 portu B.
Program prosty, w avr studio przy symulacji działa jak należy. Po zaprogramowaniu atmegi 8515L i podłączeniu diod LED do wyjść zaczynają się problemy. Diody mimo, że nie powinny świecić się wcale kiedy na wejściach nie ma nic- migają w różnym tempie. Zgłaszając przerwanie zapala się nie ta dioda co powinna. Dodam tylko, że po wyjęciu procesora z podstawki i podłączeniu wszystkiego "na krótko" problem nie znika, więc to nie jest wina, źle zlutowanych ścieżek.
Proszę o umieszczenie kodu w znacznikach code.
Robak
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR (INT0_vect)
{
PORTB |= _BV(2);
PORTB &=~(_BV(1)); //wylacza inne zrodla
PORTB &=~(_BV(3));
_delay_ms(1);
while (PINA & 0b00100000){};
}
int main(void)
{
//wyjscia
_delay_ms(1);
DDRB |= _BV(3);
DDRB |= _BV(1);
DDRB |= _BV(2);
PORTB = 0b00000000;
//wejscia
DDRA &=~(_BV(5)); //zewnetrzne
DDRA &=~(_BV(6)); //przetwornica
DDRA &=~(_BV(7)); //agregat
DDRD &=~(_BV(2)); //INT0
// konfiguracja przerwania int0
GICR |= _BV(INT0);
MCUCR |= _BV(ISC00);
MCUCR |= _BV(ISC01);
sei();
while (1)
{
if (PINA & 0b01000000)
{
PORTB |= _BV(1);
PORTB &=~(_BV(0)); //wlacza przetwornice i wylacza inne
PORTB &=~(_BV(2));
_delay_ms(100);
}
while (PINA & 0b01000000){};
if(PINA & 0b10000000)
{
PORTB |= _BV(0);
PORTB &=~(_BV(1)); //wlacza agregat i wylacza inne
PORTB &=~(_BV(2));
_delay_ms(100);
}while (PINA & 0b10000000){};
}
}
Program prosty, w avr studio przy symulacji działa jak należy. Po zaprogramowaniu atmegi 8515L i podłączeniu diod LED do wyjść zaczynają się problemy. Diody mimo, że nie powinny świecić się wcale kiedy na wejściach nie ma nic- migają w różnym tempie. Zgłaszając przerwanie zapala się nie ta dioda co powinna. Dodam tylko, że po wyjęciu procesora z podstawki i podłączeniu wszystkiego "na krótko" problem nie znika, więc to nie jest wina, źle zlutowanych ścieżek.
Proszę o umieszczenie kodu w znacznikach code.
Robak