Sebas
18.02.2013, 15:38
Hallo Leute,
ich arbeite zurzeit daran meinen Atmega zu einem I2C Slave zu machen, er soll am Ende die Uart Ausgaben verschiedener Geräte parsen und per I2C zur Verfügung stellen, hierzu benutze ich das Code beispiel aus dem Wiki:http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc
Problem ist, es funktioniert nicht, wenn ich die Register mit dem Master auslese sind sie immer leer.
Hiermal meine Code: (Ist die vereinfachte Test version, schreibt nur etwas ins 0. Register)
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z. B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 14745600 definiert"
#define F_CPU 8000000UL /* Quarz mit 14.7456 Mhz */
#endif
#include <util/delay.h>
#include <avr/io.h>
#include "uart.h"
#include "twimaster.h"
#include "twislave.h"
#include <stdio.h>
uint8_t I2C_Adress = 0x20;
void long_delay(uint16_t ms)
{
for(; ms>0; ms--) _delay_ms(1);
}
void setLED(bool value){
if(value)
PORTB &= ~(1 << PB2);
else
PORTB |= (1 << PB2);
}
int main(void)
{
DDRB |= (1 << DDB2);
setLED(true);
init_twi_slave(I2C_Adress);
sei();
i2cdata[0]= 5;
}
Achja, i2cslave und i2cmaster entsprechen dem Wiki.
Was mache ich falsch? Für Hilfe wäre ich sehr dankbar,
Viele Grüße
ich arbeite zurzeit daran meinen Atmega zu einem I2C Slave zu machen, er soll am Ende die Uart Ausgaben verschiedener Geräte parsen und per I2C zur Verfügung stellen, hierzu benutze ich das Code beispiel aus dem Wiki:http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc
Problem ist, es funktioniert nicht, wenn ich die Register mit dem Master auslese sind sie immer leer.
Hiermal meine Code: (Ist die vereinfachte Test version, schreibt nur etwas ins 0. Register)
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z. B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 14745600 definiert"
#define F_CPU 8000000UL /* Quarz mit 14.7456 Mhz */
#endif
#include <util/delay.h>
#include <avr/io.h>
#include "uart.h"
#include "twimaster.h"
#include "twislave.h"
#include <stdio.h>
uint8_t I2C_Adress = 0x20;
void long_delay(uint16_t ms)
{
for(; ms>0; ms--) _delay_ms(1);
}
void setLED(bool value){
if(value)
PORTB &= ~(1 << PB2);
else
PORTB |= (1 << PB2);
}
int main(void)
{
DDRB |= (1 << DDB2);
setLED(true);
init_twi_slave(I2C_Adress);
sei();
i2cdata[0]= 5;
}
Achja, i2cslave und i2cmaster entsprechen dem Wiki.
Was mache ich falsch? Für Hilfe wäre ich sehr dankbar,
Viele Grüße