PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI Slave mit Mega8 und Mega128



Zeroeightfifteen
26.11.2007, 22:11
Hallo
ich habe nun das ganze Forum durchgesucht aber nichts richtiges gefunden.
Ich will als Master einen Mega128 verwenden und als Slave einen Mega8.
Als Bus verwende ich TWI.
Für den Master verwende ich die Lib von Fleury.
Der Interrupt kommt beim Slave aber ich kann die Daten nicht empfangen.

Mit dem Master sende ich ein Byte zum Slave

#include <avr/io.h>
#include "i2cmaster.h"


#define Motor1 0x50 // device address of Motor1


int main(void)
{


i2c_init(); // initialize I2C library

i2c_start_wait(Motor1+I2C_WRITE); // set device address and write mode
// i2c_write(0x10); // write address = 10
i2c_write(0xFF); // write value 0x75 to Motor1
i2c_stop(); // set stop conditon = release bus
}

im Slave warte ich bis TWSR auf 0x80 gesetzt ist.

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "util/twi.h"

#ifndef F_CPU
#define F_CPU 16000000UL
#endif


ISR( TWI_vect )
{
//Statusregister abfragen

switch(TWSR)
{
case TW_SR_DATA_ACK:

OCR1A = TWDR; //PWM-Signal

return;

}


TWCR |= (1 << TWINT);
}

void main (void)
{

TWAR |= 0x50; // Slave Adresse
TWCR |= (1<<TWEN)|(1<<TWEA)|(1<<TWIE) ; //TWEN das TWI Modul aktivieren TWEA das Senden des Bestätigungsbits (ACK) zulassen

sei();


DDRB = 0xff;
PORTB = 0x02;
DDRD = 0xff;
PORTD = 0x44;


TCCR1A = (1<<WGM10)|(1<<COM1A1); // PWM, phase correct, 8 bit.
TCCR1B = (1<<CS11) |(1<<CS10); // set clock/prescaler 1/64 -> enable counter

OCR1A = 30; //PWM-Signal


}


was habe ich da falsch gemacht?

Zeroeightfifteen
28.11.2007, 14:24
nun bin ich schon so weit dass ich weis dass das TWSR Register immer auf 0x00 steht.

PicNick
28.11.2007, 16:00
Probier mal einfach:
TWAR |= 0x50; ===> TWAR = 0x50;
wer weiss, was da vorher dringestanden hat


Und du brauchst im Main noch eine Dauerschleife ( While (1); )
sonst macht er ja flutsch und is weg

Zeroeightfifteen
28.11.2007, 16:31
danke ein blöder Fehler. nun funktioniert alles