SHARE
TWEET

Untitled

a guest Jan 21st, 2020 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void setup() {
  2.  
  3.  //konfiguracja ARDUINO
  4.  #include <math.h>
  5.  #include <fix_fft.h>
  6.  
  7.   DDRA |= B11111111; //ustaw caly port A jako OUTPUT, ukladowo sluzy jako sterowanie wysokoscia kolumny zerem 22 -> 29
  8.   DDRC |= B11111111; //ustaw caly port C jako OUTPUT, ukladowo sluzy jako sterowanie zasilaniem kolumny jedynka 37 -> 30
  9.  
  10.  //ustaw przerwania timer1 co 400 Hz
  11.  TCCR1A = 0; // set entire TCCR1A register to 0
  12.  TCCR1B = 0; // same for TCCR1B
  13.  TCNT1  = 0; //initialize counter value to 0
  14.  
  15.  // ustaw rejestr timer1 na zliczanie 400 Hz
  16.  OCR1A = 39;// = (16*10^6) / (391*1024) - 1 ; 391*1024 ~ 400000
  17.  TCCR1B |= (1 << WGM12); // wlacz tryb CTC - Clear Timer on Compare
  18.  TCCR1B |= (1 << CS12) | (1 << CS10);  // Ustaw bity CS10 i CS12 dla preskalera 1024
  19.  TIMSK1 |= (1 << OCIE1A); // wlacz tryb timer compare interrupt
  20.  
  21.  //The Power Reduction Timer/Counter1 bit, PRTIM1, in “PRR0 – Power Reduction Register 0” on page 55 must be written to zero to enable Timer/Counter1 module.
  22.  PRR0 |= (0 << PRTIM1); //ustaw 0 na PRTIM1 aby wlaczyc modul Timer/Counter1 wg instrukcji ATMEGA
  23.  
  24.  sei(); //zezwól na przerwania
  25.  
  26. }
  27.  
  28. void loop() {
  29.  
  30. // maski oraz tablice danych
  31. int wysokosc_kolumny_1[8] = {254 , 253 , 251 , 247 , 239 , 223 , 191 , 127}; // tabela wartosci uzywanych do wyswietlenia wysokosci kolumny LED (tylko szczyt)
  32. int wysokosc_kolumny_2[8] = {254 , 252 , 248 , 240 , 224 , 192 , 128 , 0}; // tabela wartosci uzywanych do wyswietlenia wysokosci kolumny LED (kolumna wypelniona)
  33.  
  34. for (int a = 0; a <= 7; a++) //rozpocznij petle for, przy kazdym kolejnym rozpoczeciu petli zwieksz a o 1
  35.  
  36.   {
  37.     PORTA = wysokosc_kolumny_1[a];
  38.     delay(125);
  39.   }
  40.  
  41. }
  42.  
  43. ISR(TIMER1_COMPA_vect){//obsługa przerwania timer1 - timer1 compare interrupt service routine. Jedno przerwanie jedno przesuniecie bitu
  44.  
  45. if(PORTC != B10000000) // jezeli PORTC jest rozny od 0 to :
  46.   {
  47.   PORTC = PORTC << 1; //przesun bit o jeden w lewo
  48.   }
  49.   else {
  50.     PORTC = B00000001; // jezeli PORTC jest rowny zero ustaw jedynke na osmy bit
  51.     }
  52.  
  53. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top