Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // inicjalizacja globalnych masek oraz tablic danych
- //const int wysokosc_kolumny[8] = {251 , 247 , 254 , 253 , 191 , 127 , 239 , 223}; // tabela wartosci uzywanych do wyswietlenia wysokosci kolumny LED (tylko szczyt)
- const int wys_kol[8] = {251 , 243 , 242 , 240 , 176 , 48 , 32 , 0}; // tabela wartosci uzywanych do wyswietlenia wysokosci kolumny LED (kolumna wypelniona)
- // tylko do odczytu (const int)
- int wartosc_kolumny[8]; //tablica uzywana do obslugi wysokosci kolumny
- int k; //globalna zmienna do czytania wartosc_kolumny
- void setup() {
- //konfiguracja ARDUINO
- #include <math.h>
- #include <fix_fft.h> //dodatkowa biblioteka algorytmu fix_fft
- DDRA |= B11111111; //ustaw caly port A jako OUTPUT, ukladowo sluzy jako sterowanie wysokoscia kolumny zerem 22 -> 29
- DDRC |= B11111111; //ustaw caly port C jako OUTPUT, ukladowo sluzy jako sterowanie zasilaniem kolumny jedynka 37 -> 30
- // ustaw przerwania timer1 co 400 Hz
- TCCR1A = 0; // set entire TCCR1A register to 0
- TCCR1B = 0; // same for TCCR1B
- TCNT1 = 0; //initialize counter value to 0
- // ustaw rejestr timer1 na zliczanie 400 Hz
- OCR1A = 39;// = (16*10^6) / (391*1024) - 1 ; 391*1024 ~ 400000
- TCCR1B |= (1 << WGM12); // wlacz tryb CTC - Clear Timer on Compare
- TCCR1B |= (1 << CS12) | (1 << CS10); // Ustaw bity CS10 i CS12 dla preskalera 1024
- TIMSK1 |= (1 << OCIE1A); // wlacz tryb timer compare interrupt
- sei(); //zezwól na przerwania
- PORTC = 1; //zainicjuj stan portu C
- }
- void loop() {
- for (int i = 0; i <= 7; i++){
- wartosc_kolumny[i] = wys_kol[i];
- delay(250);
- }
- }
- ISR(TIMER1_COMPA_vect){//obsługa przerwania timer1 - timer1 compare interrupt service routine. Jedno przerwanie jedno przesuniecie bitu
- if(PORTC != B10000000) // jezeli PORTC jest rozny od 0 to :
- {
- PORTC = PORTC << 1; //przesun bit o jeden w lewo
- k++; //k = k + 1, przesun odczyt z wartosc_kolumny
- PORTA = wartosc_kolumny[k]; //wybierz wysokosc kolumny z tablicy
- }
- else {
- PORTC = B00000001; // jezeli PORTC jest rowny zero ustaw jedynke na osmy bit
- k = 0; //ustaw odczyt z wartosc_kolumny dla kolumny 1
- PORTA = wartosc_kolumny[k]; //wybierz wysokosc kolumny z tablicy
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement