Guest User

Untitled

a guest
Jun 25th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.10 KB | None | 0 0
  1. /*****************\
  2. |   16 LED Herz   |
  3. |   lfuse: 0xE4   |
  4. |   hfuse: 0xF3   |
  5. \*****************/
  6. //Taktrequenz 8 mhz
  7. #include <avr/io.h>
  8. #include <avr/interrupt.h>
  9. #include <avr/pgmspace.h>
  10.  
  11. const unsigned char muster1[16][16] PROGMEM = {
  12. //sekunde 1
  13. {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
  14. {0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f},
  15. {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f},
  16. {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},
  17. {0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f},
  18. {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07},
  19. {0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03},
  20. {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
  21. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  22. {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
  23. //sekunde 2
  24. {0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03},
  25. {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07},
  26. {0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f},
  27. {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},
  28. {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f},
  29. {0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f}
  30. };
  31. //gesamt: 1,6 sekunden, = 256 bytes speicher = 16 zeilen
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38. volatile unsigned char helligkeit0[8];
  39.     //helligkeit der ersten 8 leds
  40. volatile unsigned char helligkeit1[8];
  41.     //helligkeit der zweiten 8 leds
  42. volatile unsigned char aktHelligkeit[8];
  43.     //helligkeit der gerade aktiven leds
  44. volatile unsigned char haelfte;
  45.     //gerade aktive haelfte (0 oder 1)
  46. volatile unsigned char taktzaehler=0;
  47.     //zaehlt 10 takte zwischen 2 led schritten
  48. volatile unsigned char schritt=0;
  49.     //aktueller schritt
  50.  
  51. void initTimer1(void)
  52. {
  53.     //Timer 1: Umschalten zwischen den LEDs, alle 20 ms
  54.     //Ein Interrupt alle 10 ms nötig
  55.     //10ms = 80.000 Taktzyklen
  56.     //Prescaler für Timer 0: 512
  57.     //Timer muss bis 156 zählen
  58.     OCR1C  = 156;     //Maximalwert festlegen
  59.     TCCR1A = 0x00;    //Alle Eigenintelligenz abschalten
  60.     TCCR1B = 0x8A;    //Timer 1 einschalten, Maximalwert
  61.                       //aktivieren, Takt/512
  62.     //Timer zählt jetzt mit Systemtakt/512 Hz, immer bis 156.
  63.     TIMSK = 0x04;     //TOV1 Interrupt aktivieren (Timer OverFlow)
  64. }
  65. void initTimer0(void)
  66. {
  67.     //Timer 0: Dieser TImer muss nur zählen. So lange der
  68.     //Zähler unter dem Helligkeitswert der LED ist, bleibt die LED
  69.     //an. je größer der helligkeitswert, desto länger bleibt die
  70.     //LED an.
  71.     TCCR0 = 0x02;    // Timer 0 einschalten, Takt = Systemtakt/8
  72. }
  73. ISR(TIMER1_OVF1_vect)
  74. {
  75.     if(haelfte==0)
  76.     {
  77.         //wenn bis jetzt haelfte 0 aktiviert war, aktiviere 1:
  78.         haelfte=1;
  79.         //schalte transistor 0 aus:
  80.         PORTB &= ~(1<<PB0);
  81.         //schalte transistor 1 an:
  82.         PORTB |= (1<<PB1);
  83.         //ausserdem müssen die neuen helligkeiten geladen werden:
  84.         for(int i=0;i<8;i++)
  85.         {
  86.             aktHelligkeit[i]=helligkeit1[i];
  87.             //die helligkeit von haelfte 1 in die aktuelle
  88.             //helligkeit kopieren
  89.         }
  90.     }
  91.     else
  92.     {
  93.         //wenn bis jetzt haelfte 1 aktiviert war, aktiviere 0:
  94.         haelfte=0;
  95.         //schalte transistor 1 aus:
  96.         PORTB &= ~(1<<PB1);
  97.         //schalte transistor 0 an:
  98.         PORTB |= (1<<PB0);
  99.         //ausserdem müssen die neuen helligkeiten geladen werden:
  100.         for(int i=0;i<8;i++)
  101.         {
  102.             aktHelligkeit[i]=helligkeit0[i];
  103.             //die helligkeit von haelfte 0 in die aktuelle
  104.             //helligkeit kopieren
  105.         }
  106.     }
  107.     //alle 100 ms sollen neue led werte geladen werden. also 10 akte abwarten
  108.     taktzaehler++;
  109.     if(taktzaehler==10)
  110.     {
  111.         taktzaehler=0;
  112.         schritt++;
  113.         if(schritt==16) schritt=0;
  114.  
  115.         for(int i=0;i<16;i+=2)
  116.         {
  117.             helligkeit0[i]=pgm_read_byte(&muster1[schritt][i]);
  118.             helligkeit1[i]=pgm_read_byte(&muster1[schritt][i+1]);
  119.  
  120.         }
  121.     }
  122. }
  123. int main(void)
  124. {
  125.     DDRA=0xFF;
  126.     DDRB = 0xFF;
  127.     PORTB |= (1<<PB2);
  128.     initTimer0();
  129.     initTimer1();
  130.     sei();
  131.     helligkeit1[0]=0;
  132.     helligkeit1[1]=128;
  133.     helligkeit1[2]=0;
  134.     helligkeit1[3]=128;
  135.     helligkeit1[4]=0;
  136.     helligkeit1[5]=128;
  137.     helligkeit1[6]=0;
  138.     helligkeit1[7]=128;
  139.  
  140.  
  141.     helligkeit0[0]=0;
  142.     helligkeit0[1]=128;
  143.     helligkeit0[2]=0;
  144.     helligkeit0[3]=128;
  145.     helligkeit0[4]=0;
  146.     helligkeit0[5]=64;
  147.     helligkeit0[6]=128;
  148.     helligkeit0[7]=255;
  149.  
  150.  
  151.  
  152.     while(1)
  153.     {
  154.         for(int i=0;i<8;i++)
  155.         {
  156.             if(TCNT0<aktHelligkeit[i])
  157.                 PORTA |= (1<<i);
  158.             else
  159.                 PORTA &= ~(1<<i);
  160.         }
  161.     }
  162.     return 0;
  163. }
Add Comment
Please, Sign In to add comment