Forum: Mikrocontroller und Digitale Elektronik I2C atmega328p Problem


von R. B. (dxx255)


Lesenswert?

Hallo,

Ich versuche mittels I2C/TWI eine Kommunikation zwischen Arduino Uno und 
atmega328p herzustellen. Auf dem Arduino läuft die Wire Library mit 
Beispielcode und am atmega die I2C Master library.
Code:
1
#include <avr/io.h>
2
#include <i2cmaster.h>          
3
#ifndef F_CPU
4
#define F_CPU 16000000UL
5
#endif
6
#include <util/delay.h>
7
int main (void) {      
8
     
9
   DDRB |= (1<<PB0);
10
   
11
   //PORTB = (1 << PB0);
12
   
13
   i2c_init();             
14
   while(1){
15
       int err = i2c_start( 2 + I2C_WRITE );
16
     if ( !err ){
17
       i2c_write('0');
18
       i2c_stop();
19
       _delay_us(500); 
20
     }else{
21
         PORTB = (1 << PB0);
22
         i2c_stop();
23
     }
24
  }
25
   return 0;                
26
}

Es geschieht jedoch nichts und die LED an PB0 geht an.
Woran könnte das liegen?

von R. B. (dxx255)


Lesenswert?

Wenn ich jedoch auch auf dem atmega die wire Library verwende, 
funktioniert es tadellos...

PS: hier der Link zur C-Library
http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__ic2master.html

: Bearbeitet durch User
von R. B. (dxx255)


Lesenswert?

Habe die Wire Lib durch den Slave Code von dieser Seite ersetzt:
http://rn-wissen.de/wiki/index.php/TWI_Slave_mit_avr-gcc

Und siehe da es funktioniert...
Ist die Wire Lib mit anderen nicht kompatibel?

von Karl H. (kbuchegg)


Lesenswert?

Roman B. schrieb:


>        int err = i2c_start( 2 + I2C_WRITE );

zusammen mit dem letzten Satz aus der Arduino Doku
1
Note
2
3
There are both 7- and 8-bit versions of I2C addresses. 7 bits identify
4
the device, and the eighth bit determines if it's being written to or
5
read from. The Wire library uses 7 bit addresses throughout. If you have
6
a datasheet or sample code that uses 8 bit address, you'll want to drop
7
the low bit (i.e. shift the value one bit to the right), yielding an
8
address between 0 and 127. However the addresses from 0 to 7 are not
9
used because are reserved so the first address that can be used is 8.

Du verwendest die 7-Bit Adresse 1

: Bearbeitet durch User
von R. B. (dxx255)


Lesenswert?

Das macht Sinn!
Dankeschön

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.