Problem z przerwaniami w AVR-GCC atmega8

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
darek1632
-
Posty: 2
Rejestracja: 08 lut 2007, 15:52
Lokalizacja: Gdynia
Kontakt:

Problem z przerwaniami w AVR-GCC atmega8

Post autor: darek1632 » 21 sty 2009, 19:09

Witam, zacząłem właśnie nauke C na AVR z kursu EDW prowadzonego przez Radosława Koppel. Nie wiem co źle robie ale w cz.3 ww. kursu program kompiluje się poprawnie jednak na wyswietlaczach nic nie widać. Sprzet mam podłączony dobrze gdyż w pętli programowej wyświetlał. Po przeprowadzeniu sumulacji w AVR Studio program zatrzymuje się przed pętlą for i dalej nic. Podaje KOD i prosze o pomoc Pozdrawiam.

KOD

Kod: Zaznacz cały

#include <avr\io.h>
#include <inttypes.h>
#include <avr\interrupt.h>
#include <avr\signal.h>


#define LED_A 0 
#define LED_B 1
#define LED_C 2
#define LED_D 3
#define LED_E 4
#define LED_F 5
#define LED_G 6
#define LED_DP 7
#define LEDPORT PORTB
#define LEDDDR DDRB
#define COM1 6
#define COM2 5
#define COM3 4
#define COM4 3
#define COMPORT PORTD
#define COMDDR DDRD

uint8_t g_AktWyswietlacz = 0;

uint8_t g_DaneWyswietlacza[4];

uint8_t g_DaneCom[4] = { (1<<COM1), (1<<COM2), (1<<COM3), (1<<COM4) };

    

int main(void)
{

        //////////////////////////////////
       // inicjalizacja
		LEDDDR = 0xff;
		COMDDR = 1<<COM1 | 1<<COM2 | 1<<COM3 | 1<<COM4;
		//Timer0
		TCCR0 = 1<<CS01 | 1<<CS01;
		TIMSK = 1<<TOIE;
		//KONIEC INICJALIZACJI
		//////////////////////////
		//GLOBALNE ZEZWOLENIE NA PRZERWANIE
		sei();
		//koniec inicjalizacji
		/////////////////////////////////////////////
		

		 //Wpisanie do tablicy próbnych wartosci
		g_DaneWyswietlacza[0] = ~(1<<LED_B | 1<<LED_C);
		g_DaneWyswietlacza[1] = ~(1<<LED_A | 1<<LED_B | 1<<LED_D | 
		1<<LED_E | 1<<LED_G);
		g_DaneWyswietlacza[2] = ~(1<<LED_A | 1<<LED_B | 1<<LED_C | 
		1<<LED_D | 1<<LED_G);
		g_DaneWyswietlacza[3] = ~(1<<LED_B | 1<<LED_C | 1<<LED_F | 
		1<<LED_G);
		
		for(;;)
		{
		}
		
		return 0;
}		
//Obsluga przerwan
SIGNAL(SIG_OVERFLOW0)
{
				//Wygaszanie wyswietlaczy
				COMPORT = ~(1<<COM1 | 1<<COM2 | 1<<COM3 | 1<<COM4);
								//wYSYLANIE ODPOWIEDNIEJ DANEJ
				LEDPORT = g_DaneWyswietlacza[g_AktWyswietlacz];
				//Wlaczenie odpowiedniego wyswietlacza
				COMPORT &= g_DaneCom[g_AktWyswietlacz];
			
				// Zwiekszenie stanu zmiennej wskazujacej na obslugiwany wyswietlacz
				
				++g_AktWyswietlacz;
				if(g_AktWyswietlacz > 3)
					g_AktWyswietlacz = 0;
				
}	

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 22 sty 2009, 13:12

Nie wchodzi do przerwania - źle się inicjalizuje procek.
Sprawdz czy masz dobrze ustawiony typ procesora w makefile.

Pzdr

ODPOWIEDZ