Hallo zusammen,
ich sitze nun am selben Problem wie damals Micha in dem Beitrag (
klick mich). Wir sollen ebenfalls zu Anschauungszwecken eine TWI-Verbindung zwischen 2 Atmega8 herstellen. Leider ist im Forum nicht das genaue Ergebnis ersichtlich und wir kommen nicht mehr weiter (eigentlich haben wir auch keine besonders große Ahnung

)
Es trat kein Fehler beim kompilieren auf, das Programm wurde gebrannt, die Controller an den SDA und SCL-Pins verbunden.
Folgende Frage zu diesem Code:
- Ist dieser Code für Master und Slave? Wenn ja, was muss beim Master und Slave angepasst werden?
| Code : |
/* Anfang main.c */
#include "twi.h"
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#define ADRESSE 32
#define SLAVE_ADRESSE 54
#define EVENT_KEY_PRESSED 0b10101010
#define F_CPU 3686400
volatile uint8_t i2c_flag;
int main(void)
{
DDRB = 0b00000001; // Eingänge und Ausgänge definieren
PORTB = 0b00000010; // PORT 0 Ausgang / PORT 1 Eingang BYTE B
i2c_switch_slave(ADRESSE<<1); // Slave Modus starten
for (;;)
{
if( i2c_flag )
{
PORTB |= (1<<PB0);
i2c_flag = 0;
}
else
{
PORTB &=~(1<<PB0);
}
if (! (PIND & (1<<PB1)))
{
i2c_switch_master(calc_SCL_freq(100000));
i2c_start();
i2c_transmit(SLAVE_ADRESSE<<1); /* ohne +1, es wird ja geschrieben, und nicht gelesen... */
i2c_transmit(EVENT_KEY_PRESSED);
i2c_stop();
i2c_switch_slave(ADRESSE<<1);
}
}
}
/* Interrupthandler für TWI */
ISR(TWI_vect)
{
/* setze Flagge */
i2c_flag = 1;
}
/* Ende main.c */
|
|
Danke im Vorraus
Gruß Bob