1  | /*
  | 
2  |     Anschlüsse des zweiten ATTiny 13:
  | 
3  | 
  | 
4  |                        ---
  | 
5  |           Reset  RES -|*  |- VCC
  | 
6  |       Eingang L  PB3 -|   |- PB2   Eingang Akku Ok von ersten ATTiny13
  | 
7  |       Eingang R  PB4 -|   |- PB1   Warnblinker bei Akku leer
  | 
8  |                  GND -|   |- PB0   Takt weiter auf LEDs
  | 
9  |                        ---
  | 
10  | 
  | 
11  | */
  | 
12  | 
  | 
13  | #define F_CPU 9600000
  | 
14  | #include <avr/io.h>
  | 
15  | #include <util/delay.h>
  | 
16  | 
  | 
17  | #define MIN 16
  | 
18  | 
  | 
19  | /****************************************************************************************/
  | 
20  |   
  | 
21  | void Takt()
  | 
22  | {
 | 
23  |   TCCR0A |= (1<<COM0A1);
  | 
24  |   for (char a=MIN; a<255; a++)   { _delay_us(160); OCR0A = a; }  // Rampe hoch
 | 
25  |   _delay_ms(872.5);                        // Wert beibehalten Spannungen
  | 
26  |   for (char b=255; b>MIN; b--)   { _delay_us(340); OCR0A = b; }  // Rampe runter
 | 
27  |   TCCR0A &= ~(1<<COM0A1);
  | 
28  |   _delay_ms(913.3);
  | 
29  | }
  | 
30  | 
  | 
31  | /****************************************************************************************/
  | 
32  |   
  | 
33  | int main (void)
  | 
34  | {
 | 
35  |   DDRB |= 0x03;   // Ausgänge
  | 
36  | 
  | 
37  |   // Grundeinstellungen für PWM 
  | 
38  |   TCCR0A  |= (1<<COM0A1);      // Compare Match Output A Mode; Non PWM Mode; Fast PWM Mode; Phase Correct PWM Mode
  | 
39  | //  TCCR0A  |= (1<<COM0A0);      // Compare Match Output A Mode; 00 -> Normal Mode OC0x abgeschaltet
  | 
40  | //  TCCR0B  |= (1<<COM0B1);      // Compare Match Output B Mode; 01 -> Res. 
  | 
41  | //  TCCR0B  |= (1<<COM0B0);      // Compare Match Output B Mode; 10 -> Löschen OC0x bei Compare Match, set on Top
  | 
42  | //  Reserve                              11 -> Set Oc0x bei Compare Match, löschen on Top
  | 
43  | //  Reserve
  | 
44  |   TCCR0A  |= (1<<WGM01 );      // Waveform Generation Mode
  | 
45  |   TCCR0A  |= (1<<WGM00 );      // Table 11-8 on Page 72 (ATTiny13(doc2535).pdf)  
  | 
46  |   
  | 
47  | //  TCCR0B  |= (1<<FOC0A );      // Nicht bei Fast PWM
  | 
48  | //  TCCR0B  |= (1<<FOC0B );      // Nicht bei Fast PWM
  | 
49  | //  RESERVE
  | 
50  | //  RESERVE
  | 
51  | //  TCCR0B  |= (1<<WGM02 );      // Binäre Zählung bei WGM02 -> WGM00
  | 
52  | //  TCCR0B  |= (1<<CS02  );      // Prescaler     0  , 1, 2,  3,   4,    5,   6,   7
  | 
53  | //  TCCR0B  |= (1<<CS01  );      // Prescaler  No CLK, 1, 8, 64, 256, 1024, ext, ext
  | 
54  |   TCCR0B  |= (1<<CS00  );      // Prescaler  Binäre Zählung bei CS02 -> CS00
  | 
55  | 
  | 
56  | /****************************************************************************************/
  | 
57  |   
  | 
58  |   OCR0A = MIN;
  | 
59  |   _delay_ms(6000);   // Warten auf Signal von ATTiny 13/1
  | 
60  | 
  | 
61  |   while ((PORTB & 0x04) == 0x04)
  | 
62  |   {
 | 
63  |     if ((PORTB & 0x18) == 0x18) {;} else { Takt(); }
 | 
64  |   }
  | 
65  | 
  | 
66  |   PORTB |= (1<<PB1);
  | 
67  | 
  | 
68  |   while ((PORTB & 0x04) != 0x04)
  | 
69  |   {
 | 
70  |     Takt();
  | 
71  |   }
  | 
72  | 
  | 
73  | return(0);
  | 
74  | }
  |