Witam.
Złożyłem sobie wyświetlacz modułowy jak w linku niżej:
http://cyfronika.com.pl/kityavt2010/avt5226.pdf
Składa się on z 5 modułów wyposażonych w procesory ATMEGA8, które maja pracować jako urządzenia slave. Sterownikiem master miałby być procesor ATMEGA16.
Niestety jestem kiepski w programowaniu i nie potrafię sobie poradzić z programem do sterownika.
Zarys programu wygląda tak:
Z tego co udało mi się wywnioskować nie jest to pełny program. Jak się domyślam muszę zdefiniować zmienne oraz stworzyć coś na wzór tablicy, w której będą zapisane znaki. Procedura "Zamiana bitów miejscami", jak sądzę, była użyta przez autora dlatego, że miał odwrotnie zdefiniowaną tablicę znaków, niż ta potrzebna do zaświecenia na matrycy. Pozostaje również kwestia wysłania na sterownik tego co chciałbym aby zostało wyświetlone.
Czy ktoś z Was robił coś podobnego i potrafiłby mi pomoc napisać taki program?
Pozdrawiam i z góry dziękuje za odpowiedzi.
Złożyłem sobie wyświetlacz modułowy jak w linku niżej:
http://cyfronika.com.pl/kityavt2010/avt5226.pdf
Składa się on z 5 modułów wyposażonych w procesory ATMEGA8, które maja pracować jako urządzenia slave. Sterownikiem master miałby być procesor ATMEGA16.
Niestety jestem kiepski w programowaniu i nie potrafię sobie poradzić z programem do sterownika.
Zarys programu wygląda tak:
/***********************************
Zapisanie 8 bajtów do modułu wyświetlacza
o adresie zawartym w argumencie adr.
***********************************/
void WriteLed(char addr){
char i=0;
i2c_start();
i2c_write(addr);//adres slave R/W=0
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_write(BufPom[i++]);
i2c_stop();
}
/***********************************
Zamiana bitów miejscami
***********************************/
unsigned char ConvData(unsigned char data){
char i,zn;
zn=0;
for(i=0;i<8;i++){
if((data&0x80)==0x80)
zn|=0x80;
data<<=1;
zn>>=1;}
return(zn);
}
/***********************************
Zapisywanie pamięci wyświetlacza wzorcami znaków
***********************************/
void DispChar(char code){
int code_point;
code_point=((int)code*6);//wyliczenie początku defi nicji znaku
w tablicy
BufPom[0]=ConvData(rom_gen[code_point++]);
BufPom[1]=ConvData(rom_gen[code_point++]);
BufPom[2]=ConvData(rom_gen[code_point++]);
BufPom[3]=ConvData(rom_gen[code_point++]);
BufPom[4]=ConvData(rom_gen[code_point++]);
BufPom[5]=ConvData(rom_gen[code_point]);
}
/***********************************
Pobranie wzorca znaków z tablicy generatora
***********************************/
void DispLed(const char *s){
char i,j;
j=0;
for(i=0;i<MAXBUF;i++)//czyszczenie bufora
BufString[i]=0;
while(*s){
DispChar(*s++);
for(i=0;i<6;i++)
BufString[j++]=BufPom[i];
}
}
/***********************************
Zapisanie bufora do 5 segmentów wyświetlacza
***********************************/
void SendDisp(char st){
char i,k;
char pom[8];
for(i=0;i<5;i++)
{
for(k=0;k<8;k++)
{BufPom[k]=BufString[st++];
if(st==MAXBUF)
st=0;
}
WriteLed(i*0x10+0x10);
}
}Z tego co udało mi się wywnioskować nie jest to pełny program. Jak się domyślam muszę zdefiniować zmienne oraz stworzyć coś na wzór tablicy, w której będą zapisane znaki. Procedura "Zamiana bitów miejscami", jak sądzę, była użyta przez autora dlatego, że miał odwrotnie zdefiniowaną tablicę znaków, niż ta potrzebna do zaświecenia na matrycy. Pozostaje również kwestia wysłania na sterownik tego co chciałbym aby zostało wyświetlone.
Czy ktoś z Was robił coś podobnego i potrafiłby mi pomoc napisać taki program?
Pozdrawiam i z góry dziękuje za odpowiedzi.