Hallo, wenn ich an dieses Thread mal anknüpfen darf ....
Ich möchte ebenfalls einen ATmega8 als Slave verwenden (RN-Mini Control), nun habe ich das Problem, dass jedes mal wenn ich vom Master aus was senden möchte scheinbar ein Reset an dem ATmega8 ausgeführt wird. Ich sende vom Master aus an den Slave (Code für Slave steht unten) ein Byte in das register rxbuffer[0]. Jedoch schaltet sich die Diode die an Port PC1 hängt über die If-Abfrage in der for-Schleife nie ein, sondern der AVR startet anscheinden neu weil sie dann kurz aufblinkt.
Was mache ich falsch bitte um Hilfe ...
P.S. benutze auch die Libs von P.Fleury und Uwegw, nur die i2cmaster.S habe ich gelöscht da ich die twimaster.c verwende.
Code:
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <compat/twi.h>
#include <avr/io.h>
#include <compat/twi.h>
#define F_CPU 16000000
volatile uint8_t rxbuffer[8];
#define rx_PWM_L 2
#define rx_PWM_R 3
#define rx_DIR 1
volatile uint8_t txbuffer[8]
void init_twi_slave (uint8_t adr)
{
TWAR= adr; //Adresse setzen
TWCR|= (1<<TWEA) | (1<<TWEN)|(1<<TWIE);
TWCR &= ~(1<<TWSTA)|(1<<TWSTO);
buffer_adr=0xFF;
sei();
}
int main(void) {
/*******************************************************************************************************************/
/* Initialisierung */
/*******************************************************************************************************************/
//*** Alle Ports an PortD als Ausgang definieren
DDRB = 0xFF;
PORTB = 0x00;
DDRD = 0xFF;
PORTD = 0x00;
DDRC = 0xFF;
PORTC= 0x00;
PORTC &= ~(1<<DDC1);
init_twi_slave(0x60); // Init I2C interface
Delay(1000);
// Diode einmal anblicken ob sie funktioniert
PORTC |= (1<<DDC1);
Delay(400);
PORTC &= ~(1<<DDC1);
Delay(400);
rxbuffer[0]=0;
for(;;){
if (rxbuffer[0]!= 0){
PORTC |= (1<<DDC1);
Delay(2000);
}
}
Lesezeichen