Master är en ETRAX 100LX MCM från Axis och leverar 3.3V på bussen.
Hastigheten är låg (kring 1KHz).
Problemet är att AVR:en helt enkelt inte reagerar (ger interrupt) ö.h.t. när datat kommer.
Har kopplat in en 2-kanals scopemeter och bussen ser bra ut.
Har det kopplat via Axis 82+ Developer Board och in på ett STK500 där AVR:en sitter. Har även en AVR Dragon genom vilken jag debuggar koden.
Ett prov som jag gjorde genom att göra en oändlig loop i main (programmerar i C) som läser av SCL eller SDA (båda funkar) och ger en blinkning på PORTB (kopplad till lysdioderna på STK500) då respektive pinne rycks ner, och det funkar kanon.
Alltså, AVR:en tar 3,3V som hög om man läser av pinnarna manuellt.
Kan det vara så att den inte är tillräckligt hög för att ge interrupt?
Här är koden jag använder för TWI/I2C:
Kod: Markera allt
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "serial.h"
/* TWI interrupt routine */
ISR(TWI_vect)
{
for(;;) {
PORTB = 0x00;
_delay_ms(100);
PORTB = 0xFF;
_delay_ms(100);
}
/* Clear interrupt flag */
TWCR &= ~_BV(TWINT);
}
void twi_init(uint8_t addr)
{
/* Set device address */
TWAR = addr << 1 | 0x01;
/* Clear content */
TWDR = 0x00;
/* Enable TWI interface with Acknowledge and interrupt */
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWIE) | _BV(TWINT);
}
Mycket tacksam för tips och idéer!
Mvh
speakman