PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C-Slave Probleme



Sebas
18.02.2013, 14: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

porter91
18.02.2013, 19:31
Hey der code vom Master wäre auch mal toll und wie ich das sehe fehlt die lib für die interruptts

Sebas
18.02.2013, 20:07
Das mit den Interrupts muss ich morgen gleich mal ausprobieren, den Master Code hab ich nicht da, aber auch mit einem I2C zu Usb Teil klappt es nicht, und der Master Code ist schon länger in Benutzung und kann somit als Fehlerquelle ausgeschlossen werden, irgendwas ist im Atmega Code falsch...