#include <avr/io.h>
#include <util/delay.h>


Makrodefinitionen | |
| #define | F_CPU 16000000UL |
| #define | TWI_CLK 400000UL |
| #define | TWI_INT_PULLUP 1 |
| #define | TWI_DDR DDRC |
| #define | TWI_PORT PORTC |
| #define | TWI_SDA PC1 |
| #define | TWI_SCL PC0 |
| #define | TWI_READ 1 |
| #define | TWI_WRITE 0 |
| #define | TWI_TIMEOUT_ON 1 |
| #define | TWI_TIMEOUT_ISR 0 |
| #define | TWI_TIMEOUT_BOUND 250 |
| #define | true 1 |
| #define | false 0 |
Funktionen | |
| void | twi_init (void) |
| uint8_t | twi_start (uint8_t address, uint8_t rw) |
| uint8_t | twi_write (uint8_t data) |
| uint8_t | twi_read_nack (uint8_t *erg) |
| uint8_t | twi_read_ack (uint8_t *erg) |
| void | twi_stop (void) |
Variablen | |
| volatile uint8_t | twi_timeout |
| #define F_CPU 16000000UL |
definiert Mikrocontroller-Taktfrequenz falls diese nicht im Makefile definiert wurde
| #define TWI_CLK 400000UL |
definiert TWI-Taktfrequenz
| #define TWI_INT_PULLUP 1 |
gibt an, ob mit den internen PullUp Widerständen an SCL / SDA des AVR
gearbeiten werden soll ( =1 PullUp akt., =0 PullUp deakt.)
Bei externen PullUp Widerständen an SCL / SDA - unbedinkt deaktivieren!
| #define TWI_DDR DDRC |
Datenrichtungsregister zum aktivieren der internen Pullups der SDA / SCL Leitung
| #define TWI_PORT PORTC |
Portregister zum aktivieren der internen Pullups der SDA / SCL Leitung
| #define TWI_SDA PC1 |
Pin der SDA Leitung zum aktivieren der internen Pullups
| #define TWI_SCL PC0 |
Pin der SCL Leitung zum aktivieren der internen Pullups
| #define TWI_TIMEOUT_ON 1 |
gibt an, ob mit einem Timeout gearbeitet werden soll (=1 ja, =0 nein)
| #define TWI_TIMEOUT_ISR 0 |
gibt an, ob mit bei dem Timeout mit einer Timer Interruptroutine gearbeitet werden soll (=1 ja, =0 nein)
| #define TWI_TIMEOUT_BOUND 250 |
dient als Vergleichswert zur Variablen twi_timeout für das Arbeiten mit einem Timeout
Dies sollte abhängig von der jeweiligen Timer-Interruptroutine eingestellt werden und so bemessen sein, dass ca 300ms bis zum auslösen eines Timeout verstreichen.
(Zeit=300ms=TWI_TIMEOUT_BOUND*'Zeit bis zum auslösen der Timer-Interruptroutine'; Bsp. ist Timer-Interruptroutine auf 100ms eingestellt, so sollte TWI_TIMEOUT_BOUND 3 sein).
Ist TWI_TIMEOUT_ISR = 0, so wird nicht mit einer Interuptroutine gearbeitet und TWI_TIMEOUT_BOUND gibt direkt die Zeit in Millisekunden an (zwischen 1..254).
| #define true 1 |
| #define false 0 |
| void twi_init | ( | void | ) |
Initialisiert die I2C Schnittstelle des Mikrocontrollers
| uint8_t twi_start | ( | uint8_t | address, | |
| uint8_t | rw | |||
| ) |
| uint8_t twi_write | ( | uint8_t | data | ) |
| uint8_t twi_read_nack | ( | uint8_t * | erg | ) |
Empfängt ein Datenbyte ohne senden eines Acknowledgement (vorherrige Angabe der Datenrichtung TWI_READ bei START-Kondition, siehe twi_start)
| erg | Pointer auf Speicherbereich in den das empfangene Datenbyte abgelegt werden soll |
| uint8_t twi_read_ack | ( | uint8_t * | erg | ) |
Empfängt ein Datenbyte und Bestätigt dieses durch Acknowledgement (vorherrige Angabe der Datenrichtung TWI_READ bei START-Kondition, siehe twi_start)
| erg | Pointer auf Speicherbereich in den das empfangene Datenbyte abgelegt werden soll |
| void twi_stop | ( | void | ) |
Sendet eine STOP-Kondition (Freigabe des Busses)
| volatile uint8_t twi_timeout |
globale Variable zum Zählen der Timer-Interrupts
1.5.7.1