Hallo Hannes,
auf ein Neues!!!
Ich habe deine Hinweise beachtet und die beiden Dateien eingebunden. Dann habe ich mein kleines Projekt geschrieben. Es wurde fehlerfrei compiliert. Allerdings liest der Nibo2 nicht die Werte des Gyros.
Ich dachte mir, vielleicht liegt es daran, dass die vorher vorhandenen i2c-Routinen für den eingebauten Abstandsmesser nds3 nicht mehr vorhanden sind. Habe also folglich die alten i2c-Dateien wieder eingebunden (wie es vorher war) und die neuen i2c-Dateien namenlich angepasst (i2c__master.h und die Routine i2c__init), damit nichts kollidiert.
Es wird fehlerfrei compiliert, aber in der Textausgabe zum Schluss kommt nichts an. Wenn ich den Zugriff auf den Sensor auskommentiere (siehe Code), dann wird die Textausgabe (stellvertretend mit x=5, y=6, z=7) geschrieben.
Nun bin ich mit meinem Latein wieder mal am Ende und bitte dich um Hilfe.

Code:
/*  Nibo2-Programm Test_Gyro_I2C, erstellt von Klaus Beutel  im Februar 2020                        */ 
/********************** Bibliotheken einbinden ******************************************************/
#include <math.h>
#include <stdio.h>								// Standardein- und -ausgabefunktionen
#include <avr/interrupt.h>						// Interrupts ermöglichen
#include <stdlib.h>								// notwendig u.a. für die abs-Funktion
#include <nibo/niboconfig.h>					// Konfiguration der Nibo-Bibliothek
#include <nibo/display.h>               		// Ansprechen eines Displays
#include <nibo/gfx.h>							// Ansteuerung eines LC-Grafik-Displays                
#include <nibo/spi.h>							// Kommunikation über SPI.
#include <nibo/copro.h>							// Ansprechen des Coprozessors
#include <nibo/delay.h>							// Warteschleifen
#include <nibo/iodefs.h>						// Zuordnung der physikalischen Pins zu symbolischen Namen
#include <nibo/bot.h>							// allgemeine Funktionen des Roboters
#include "i2c__master.h"						// Kommunikation ueber den I2C Bus
#include <nibo/pwm.h>							// Erzeugung der PWM-Signale und der Systemzeit.
#include <nibo/leds.h>							// Ansteuerung der LEDs
#include <nibo/i2cmaster.h>						// Kommunikation ueber den I2C Bus
#include <nibo/nds3.h>							// Kommunikation mit dem NDS3 Modul

/************************* Konstante definieren *****************************************************/
#define gyroaddr 0x0D							// i2c-Adresse für HMC5883

/************************* Globale Variable definieren **********************************************/
char text[22] = "                     ";		// Text-Ausgabe-Buffer
uint16_t x,y,z; 								// triple axis data

/************************* Hauptprogramm ************************************************************/
int main()
{
/********************** Initialisierung *************************************************************/   
  	sei(); 										// Interrupts global erlauben
  	bot_init(); 								// Controller reseten
  	leds_init(); 								// LEDs initialisieren
  	pwm_init(); 								// PWM-Kanäle initialisieren
  	display_init(2); 							// Display initialisieren
  	spi_init(); 								// SPI initialisieren 	
	gfx_init(); 								// Graphikdisplay initialisieren
	i2c_init();									// i2c-Bus initialisieren
	nds3_init();
	i2c__init();

/********************* Lokale Variable definieren ***************************************************/
	
/****************************************************************************************************/
  	nds3_move(82);								// nds3 auf Null-Position
    leds_set_displaylight(1024); 				// Display-Hintergrundsbeleuchtung einschalten
  	gfx_set_proportional(0); 					// Schrift auf normal setzen
	gfx_move(0, 50);
	gfx_print_text("S3: Start");

  	while (PIND&(1<<4)) 						// warten auf Betätigung von S3 zum Starten
	{
    	delay(250); 							// alle grünen LEDs blinken
    	PORTC=0xFF;
    	delay(250);
    	PORTC=0x00;
  	}

  	gfx_fill(0x00); 							// Display leeren
	gfx_move(0, 0);
	gfx_print_text("      x    y    z");
 
/*	i2c_start(gyroaddr+I2C_WRITE);       		// set device address and write mode
	i2c_write(0x09);                       		// write address = 9
    i2c_write(0x1D);                       		// Define OSR = 512, Full Scale Range = 8 Gauss, ODR = 200Hz, set continuous measurement mode)
    i2c_write(0x0A);                       		// write address = 10
    i2c_write(0x40); 							// The I2C data pointer will automatically roll, 6.Bit = 1 setzen
	i2c_write(0x0B);                       		// write address = 11
    i2c_write(0x01); 							// Define Set/Reset period
	i2c_stop();                            		// set stop conditon = release bus
*/
  	while (1) 									// Hauptschleife
	{
/*		i2c_start_wait(gyroaddr+I2C_WRITE);     // set device address and write mode
        i2c_write(0x00);                        // write address = 0
        i2c_rep_start(gyroaddr+I2C_READ);       // set device address and read mode
        x = i2c_readAck()<<8;                   // read one byte from address 0	MSB  x 
        x |= i2c_readAck();                    	//  "    "    "    "     "    1	LSB  x 
        y = i2c_readAck()<<8;                   //  "    "    "    "     "    2	MSB  y
        y |= i2c_readAck();                    	//  "    "    "    "     "    3	LSB  y
		z = i2c_readAck()<<8;                   //  "    "    "    "     "    4	MSB  z
        z |= i2c_readNak();                    	//  "    "    "    "     "    5	LSB  z
        i2c_stop();                            	// set stop condition = release bus
*/		x=5;
		y=6;
		z=7;
		gfx_move(0, 10);
		sprintf(text,"->  %04d %04d %04d", x, y, z);
		gfx_print_text(text);

  	}
  	return 0;
}
Gruß
Klaus

P.S.: Die Adressen habe ich aus dem Datenblatt des IC entnommen. Vielleicht liegt ja da der Fehler?!?