Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement