www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik init-Problem mit i2c von Fleury


Autor: R. F. (inet_surfer88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite mich gerade in i2c ein und habe ein Problem mit der Funktion 
von Peter Fleury.

Bisher hab ich nur die ersten Bruchstücke von dem Programm, aber es 
kommt schon die erste Meldung.

Die Dateien von Fleury hab ich in das gleiche Verzeichnis kopiert, in 
der auch die .c-Datei von meinem Programm liegt. Allerdings ist da keine 
i2c_init dabei. Und wenn ich wie im Beispielprogramm angegeben die 
i2c_init aufrufe, kommt folgende Meldung:

D:\i2c_test\default/../i2c_test.c:73: undefined reference to `i2c_init'

Ist es überhaupt richtig, die Dateien von Fleury in mein Verzeichnis zu 
packen, oder müssen diese in das include-Verzeichnis vom Win-Avr?

#define F_CPU 8000000UL
#define output1    0x40

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include "i2cmaster.h"



/*   Interruptroutine Timer1
  */
  
ISR (TIMER1_OVF_vect)

{
  cli();

  TCNT1 = 60000;
  
  if (PINB &  (1 << 0))
  {
    PORTB &= ~(1 << 0);
  }

  else
  {
    PORTB |= (1 << 0);
  }

  sei();
}



/*  Hauptprogramm
  */

int main (void)
  
{
  DDRA = 0x00;    // Richtungsregister PortA: alle Pins als Eingänge
  DDRB = 0xFF;    // Richtungsregister PortB: alle Pins als Ausgänge
  DDRC = 0xFF;    // Richtungsregister PortC: alle Pins als Ausgänge
  DDRD = 0xFF;    // Richtungsregister PortD: alle Pins als Ausgänge

  PORTA = 0x00;    // Pull-Up-Widerstände ausschalten
  PORTB = 0b00000000;  // Alle Ausgänge ausschalten
  PORTC = 0x00;    // Alle Ausgänge auschalten
  PORTD = 0x00;    // Alle Ausgänge auschalten

  TIMSK |= (1 << TOIE1);      // Timer1 Interrupt freigeben
  TCCR1B |= (1 << CS10);      // Teiler Timer1 festlegen /1024
  TCCR1B |= (1 << CS12);      // Teiler Timer1 festlegen /1024
  TCNT1 = 60000;        ;  // Blinkgeschwindigkeit ins Timercounterregister laden

  sei();

  i2c_init();

  while (1)
  {
  }
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. F. schrieb:

> Die Dateien von Fleury hab ich in das gleiche Verzeichnis kopiert, in
> der auch die .c-Datei von meinem Programm liegt. Allerdings ist da keine
> i2c_init dabei. Und wenn ich wie im Beispielprogramm angegeben die
> i2c_init aufrufe, kommt folgende Meldung:
>
> D:\i2c_test\default/../i2c_test.c:73: undefined reference to `i2c_init'
>

Das ist eine Meldung vom Linker, der versucht aus den vorübersetzten 
Einzelteilen das komplette Programm zusammenzustellen

> Ist es überhaupt richtig, die Dateien von Fleury in mein Verzeichnis zu
> packen, oder müssen diese in das include-Verzeichnis vom Win-Avr?

Das passt schon.
Aber du musst sie auch zum Projekt hinzufügen, damit sie compiliert und 
mitgelinkt werden.

http://www.mikrocontroller.net/articles/FAQ#Ich_ha...

Autor: R. F. (inet_surfer88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Das passt schon.
> Aber du musst sie auch zum Projekt hinzufügen, damit sie compiliert und
> mitgelinkt werden.


Ich habe jetzt folgendes gemacht:
Die Dateien i2cmaster.s und twimaster.c unter dem Punkt "Source Files" 
im AVR Studio hinzugefügt.
Die Datei i2cmaster.h unter dem Punkt "Header Files" hinzugefügt.

Jetzt erhalte ich die Meldung:
../twimaster.c:12:23: error: i2cmaster.h: No such file or directory

Obwohl die Datei vorhanden und im AVR Studio angegeben ist.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. F. schrieb:
> Die Dateien i2cmaster.s und twimaster.c unter dem Punkt "Source Files"
> im AVR Studio hinzugefügt.

Wenn man schon Software von anderen benutzt, sollte man doch zumindest 
mal die Doku dazu lesen.

R. F. schrieb:
> Die Datei i2cmaster.h unter dem Punkt "Header Files" hinzugefügt.

Das brauchst du nicht unbedingt, es geht auch ohne.

Wenn i2cmaster.h im selben Verzeichnis wie main.c deines Projekts steht, 
wird die normalerweise auch gefunden. Wenn nicht, dann nicht.

Oliver

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. F. schrieb:

> Jetzt erhalte ich die Meldung:
> ../twimaster.c:12:23: error: i2cmaster.h: No such file or directory

Schau dir den Inhalt von ../twimaster.c an und finde heraus, wie diese 
Datei versucht i2cmaster.h zu includen.

Das sollte einen Hinweis geben, wo diese Datei gesucht (und derzeit 
nicht gefunden) wird.

Korrigiere den Text beim #include oder kopiere die Datei an den 
richtigen Ort oder ergänze die Include-Suchpfade in den 
Projekteinstellungen.

Ich habe in meinen Projekten twimaster.c und i2cmaster.h als Kopie im 
gleichen Verzeichnis wie meine selbstgeschriebenen Quellcodes.

Autor: R. F. (inet_surfer88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die i2cmaster.h jetzt einfach ins Programmverzeichnis vom AVR 
GCC kopiert. Jetzt scheint er sie zu finden.

Allerdings kommt jetzt die Meldung:
gcc plug-in: Error: Object file not found on expected location 
D:\i2c\default\i2c.elf

Bei meinen bisherigen Programmen habe ich eine solche Meldung nicht 
bekommen. Allerdings hab ich bisher auch noch keine Programme aus 
anderen Dateien eingebunden, bisher waren es immer nur kleine Projekte 
in einer Datei. Diese .elf-Dateien wurden immer automatisch erzeugt. 
Muss ich hier evtl. am AVR Studio noch was einstellen?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: R. F. (inet_surfer88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In dem Build-Fenster steht:

twimaster.o: In function `i2c_init':
D:\i2c\default/../twimaster.c:28: multiple definition of `i2c_init'
i2cmaster.o:(.text+0x10): first defined here

und so weiter..... Es werden alle Unterprogramme aufgezählt, die in 
Fleurys Datei stehen. Immer die gleichen 3 Zeilen.

Aber wo sollen die doppelten Definitionen herkommen?

Am Ende steht dann noch:

make: *** [i2c.elf] Error 1
Build succeeded with 0 Warnings...

Autor: R. F. (inet_surfer88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst mal vielen Dank für die Hilfe. Hab die Meldung jetzt weg 
bekommen. Hatte die i2cmaster.s mit eingebunden. Diese scheint aber nur 
für Software-I2C benötigt werden und darf nicht im AVR Studio angegeben 
werden.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. F. schrieb:
> Hatte die i2cmaster.s mit eingebunden. Diese scheint aber nur
> für Software-I2C benötigt werden und darf nicht im AVR Studio angegeben
> werden.

Dürfen darf die schon, dann aber nur die, und nicht twimaster.c. Aber 
wie ich schon schrieb: RTFM

Oliver

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.