Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
64 walter 1
//############################################################################
2
// - PWM CTRL 
3
// - ATMEGA8 mit 8MHz
4
// - Nur für den privaten Gebrauch
5
// - Keine Garantie auf Fehlerfreiheit
6
// - Kommerzielle Nutzung nur mit meiner Zustimmung
7
// - walter Meyer @ www.freakware.de
8
//############################################################################*/
9
#include <avr/io.h>
10
#include <util/twi.h>
11
#include "main.h"
12
#include "twislave.h"
13
 
14
unsigned char I2C_IN;
15
 
16
 
17
//############################################################################
18
//I2C (TWI) Interface Init
19
void StartI2C(void)
20
//############################################################################
21
{
22
    TWAR = 0x62;                //I2C client address
23
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
24
}
25
 
26
//############################################################################
27
//ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
28
//sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
29
SIGNAL (TWI_vect)
30
//############################################################################
31
{  
32
    switch (TWSR & 0xF8)
33
    {  
34
        case SR_SLA_ACK:  
35
            TWCR |= (1<<TWINT);
36
            return;
37
 
38
        case SR_PREV_ACK:                       //receive 
39
            I2C_IN = TWDR;
40
            TWCR |= (1<<TWINT);
41
            return;
42
 
43
        case SW_SLA_ACK:                        //send  0x00
44
            TWDR = 0x00;
45
            TWCR |= (1<<TWINT);
46
            return;
47
 
48
        case SW_DATA_ACK:                       //send  0x00
49
            TWDR = 0x00;
50
            TWCR |= (1<<TWINT);
51
            return;
52
 
53
        case TWI_BUS_ERR_2:                     //bus error / reset bus
54
            TWCR |=(1<<TWSTO) | (1<<TWINT);
55
 
56
        case TWI_BUS_ERR_1:                     //bus error / reset bus
57
            TWCR |=(1<<TWSTO) | (1<<TWINT);
58
    }
59
    TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
60
}
61
 
62