Witam serdecznie,
pisze program na aTmega 128, mam już napisaną zdecydowanie wieksza czesc kodu ale gubie sie przy operacjach na tablicach.
Otoz, dostaje pomiary z 5 czujnikow. Kazda paczka danych od jednego czujnika sklada sie z 2 bajtow- starszego oraz mlodszego. Po wyborze odpowiedneigo czujnika, z ktorego chce czytac dane nastepuje ich zczytanie i zapisanie do tablicy. Chce zrobic cos takiego,zeby kazdy czujnik cztany byl przykladowo 5 razy. Starszy bajt wpisywany do pierwszej kolumny tablicy, a mlodszy do drugiej kolumny tablicy (wszystko w pierwszym wierszu). Nastepnie Staram sie zeby dalej w tej samej petli dokonywana byla suma, sumuje starsze bajty, sumuje mlodsze bajty, licze srednia ze starszego bajtu, mlodszego i chce wysylac po uarcie. Wszystko odbywa sie w przerwaniu. Niestety robie cos zle, nie do konca wiedzac gdzie jest moj blad.
Prosze o podpowiedz/pomoc. Z gory dzieki za sugestie/podpowiedzi.
Moj kod, wklejam tylko to co uznalem za stosowne.
pisze program na aTmega 128, mam już napisaną zdecydowanie wieksza czesc kodu ale gubie sie przy operacjach na tablicach.
Otoz, dostaje pomiary z 5 czujnikow. Kazda paczka danych od jednego czujnika sklada sie z 2 bajtow- starszego oraz mlodszego. Po wyborze odpowiedneigo czujnika, z ktorego chce czytac dane nastepuje ich zczytanie i zapisanie do tablicy. Chce zrobic cos takiego,zeby kazdy czujnik cztany byl przykladowo 5 razy. Starszy bajt wpisywany do pierwszej kolumny tablicy, a mlodszy do drugiej kolumny tablicy (wszystko w pierwszym wierszu). Nastepnie Staram sie zeby dalej w tej samej petli dokonywana byla suma, sumuje starsze bajty, sumuje mlodsze bajty, licze srednia ze starszego bajtu, mlodszego i chce wysylac po uarcie. Wszystko odbywa sie w przerwaniu. Niestety robie cos zle, nie do konca wiedzac gdzie jest moj blad.
Prosze o podpowiedz/pomoc. Z gory dzieki za sugestie/podpowiedzi.
Moj kod, wklejam tylko to co uznalem za stosowne.
#define rozmiar_wierszy 4
#define rozmiar_kolumn 1
// definicje zmiennych użytych w programie
volatile char wynik_msb = 0;
volatile char wynik_lsb = 0;
unsigned int preskaler;
int k;
int raw_data0_tab[rozmiar_wierszy][rozmiar_kolumn];
int raw_data1_tab[rozmiar_wierszy][rozmiar_kolumn];
int raw_data2_tab[rozmiar_wierszy][rozmiar_kolumn];
int raw_data3_tab[rozmiar_wierszy][rozmiar_kolumn];
int raw_data4_tab[rozmiar_wierszy][rozmiar_kolumn];
int wyniki_sred_msb;
int wyniki_sred_lsb;
//volatile unsigned char flaga;
volatile char flaga;
SIGNAL (SIG_OUTPUT_COMPARE1A) //obsługa przerwania od T1
{
int suma_lsb = 0;
int suma_msb = 0;
int wyniki_sred_msb = 0;
int wyniki_sred_lsb = 0;
for(k=0; k<=4; ++k) // wybieranie który czujnik ma zostać obsłużony
{
if(k==0)
{
for (int p=0; p<=rozmiar_wierszy; p++)
{
czujnik0;
off_SS;
spiTransmisja(0xFF); // czytanie pierwszego bajtu danych
wynik_msb=SPDR;
//raw_data0_tab[p][0]=wynik_msb; // wpisanie wynik_msb do tablicy
spiTransmisja(0xFF); // czytanie drugiego bajtu danych
wynik_lsb=SPDR;
//raw_data0_tab[p][1]=wynik_lsb; // wpisanie wynik_lsb do tablicy
set_SS;
suma_msb +=wynik_msb;
suma_lsb +=wynik_lsb;
//suma_msb += raw_data0_tab[p][0]; // suma elementow bajtu msb
//suma_lsb += raw_data0_tab[p][1]; // suma elementow bajtu lsb
}
wyniki_sred_msb = suma_msb/rozmiar_wierszy; // srednia 5 elementow bajtu msb
wyniki_sred_lsb = suma_lsb/rozmiar_wierszy; // srednia 5 elementow bajtu lsb
flaga = 0;
PORTA &=~_BV(PA2);
}
}
}