www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik problem mit Header Datei


Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe den linker Fehlermeldung "undefined reference to 'adc' " 
bekommen trotz dass ich den header Datei in dem Projektverzeichniss von 
mein projekt.

wäre nett wenn mir jemand hilft rauszukriegen wo das problem liegt

Danke im voraus




mein source code:

#include <avr/io.h>
#include <stdint.h>
#include <avr/delay.h>
#include"adc.h"
#define NR_SAMPLES 3    // Anzahl der Messungen, die gemittelt werden


#define LED1  PD0
#define LED2  PD1
#define LED3  PD2
#define LED4  PD3

unsigned short adc(unsigned char admux) ;
void init_ports();



int main()
{


  unsigned short c;    // Variablen definitionn
  init_ports();


  while( 1 )    // Endlosschleife zur kontinuierlichen
                //Auswertung der Eingangsspannung (am ADC)

  {

    c=adc(0);

        if( c <= 158 ) {
      PORTD = ( 1 << LED1 );
    PORTC=0x01;
              }

    else if( c <= 374){
      PORTD = ( 1 << LED2 );
    PORTC=0x00;
    _delay_ms(300);
    PORTC=0x01;
    _delay_ms(300);
              }

  else if( c < 1023) {
      PORTD = ( 1 << LED3 );
    PORTC=0x00;
    _delay_ms(1000);
    PORTC=0x01;
    _delay_ms(1000);
              }

    else
      PORTD = 0;
    PORTC=0x00;


  }
}

void init_ports()
{
DDRD=0xFF; //PORTD als Ausgang
PORTD =0x00;
DDRC=0xFF; //PORTD als Ausgang
PORTC =0x00;
}

In dem Header datei(adc.h) wird den Funktionkopf definiert:


unsigned short adc(unsigned char admux);

In dem (adc.c)

#include <avr/io.h>
#include <stdint.h>
#include "adc.h"

#define NR_SAMPLES 3


unsigned short adc(unsigned char admux)
{
  unsigned short val = 0;
  unsigned char i;

  ADCSRA  =  (1<<ADEN)  | (1<<ADPS1) | (1<<ADPS0);
  //ADC aktivieren und Teilungsfaktor /8 stellen

  ADMUX = admux; //Kanal des Multiplexers wählen

  ADMUX  |=  ( (1<<REFS1) | (1<<REFS0) ); // externr Referenzspannung 
AREF nutzen

  // Den ADC initialisieren und einen sog. Dummyreadout machen
  ADCSRA |= (1<<ADSC);
  while( ADCSRA & (1<<ADSC) ) ;

  for( i = 0; i < NR_SAMPLES; i++ )
  {
    ADCSRA |= (1<<ADSC);         // eine ADC-Wandlung
    while( ADCSRA & (1<<ADSC) )
      ;                          // auf Abschluss der Konvertierung 
warten
    val += ADCW;
  }

  ADCSRA &= ~(1<<ADEN); //// ADC wieder deaktivieren

  val /= NR_SAMPLES;
  return val; // ADC auslesen und zurückgeben
}

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> trotz dass ich den header Datei in dem Projektverzeichniss von
> mein projekt.

trotz was?

Daß die Datei da nur liegt, wird nicht reichen.
Je nach verwendeter IDE muß man sie auch in das Projekt einfügen
- und zwar die .c, nicht die .h.

Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IDE sagt mir nix!!
ich habe beide .c und .h in das projekt.und Fehler taucht immer auf

Autor: B e r n d W. (smiley46)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus hat Recht, die Datei adc.c ins Projekt zu den "source files" 
einbinden.

Autor: B e r n d W. (smiley46)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwendes Du kein AVR-Studio?

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

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> IDE sagt mir nix!!

IDE <==> Entwicklungsumgebung

> ich habe beide .c und .h in das projekt.

Wie genau hast du das gemacht?
Aufs Verzeichnis zu kopieren ist zu wenig

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

Autor: Stefan B. (steckersammler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> #include"adc.h"
          ^
          |
Fehlt da nicht ein Leerzeichen?

smith schrieb:
> IDE sagt mir nix!!
IDE bedeutet Integrated Development Environment, also die 
Entwicklungsumgebung wie z.B. Atmel AVR Studio.

Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich verwende avr studio.ich habe halt header datei von wo anderes 
kopiert und umbennent und in dem projektverzeichniss reingelegt.ist das 
richtig so?oder muss man was anderes machen bei erstellung von header 
datei?

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

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> ja ich verwende avr studio.ich habe halt header datei von wo anderes
> kopiert und umbennent und in dem projektverzeichniss reingelegt.ist das
> richtig so?oder muss man was anderes machen bei erstellung von header
> datei?

Das hat mit dem Header File erst mal gar nichts zu tun.
Du hast ein Linker - Problem. D.h. der Linker kennt nicht alle 
Einzelteile, die zum Projekt gehören.

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

Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
womit soll ich die einzelene .c dateien compilieren.ganz normal compiler 
oder mit avrstudio

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

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> womit soll ich die einzelene .c dateien compilieren.ganz normal compiler
> oder mit avrstudio

Lies alles aus der FAQ zu diesem Punkt!
Auch diesen Abschnitt
http://www.mikrocontroller.net/articles/FAQ#AVR-Studio

Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du 
es bei den Source Files im AVR-Studio Projekt mit einträgst.
Das wars dann auch schon.

Autor: mar IO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schmeiß mal
 unsigned short adc(unsigned char admux) ; 
aus deiner, ich vermute mal, main.c raus. Das steht bereits in adc.h

Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du
>
> es bei den Source Files im AVR-Studio Projekt mit einträgst.

Ich hab gelesen und nicht ganz verstanden wie ich den source Files im 
AVR-Studio Projekt mit eintrage

mar IO schrieb:
> schmeiß mal unsigned short adc(unsigned char admux) ;

das habe ich schon  gemacht und hat nix gebracht:(

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

Bewertung
0 lesenswert
nicht lesenswert
smith schrieb:
> Karl heinz Buchegger schrieb:
>> Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du
>>
>> es bei den Source Files im AVR-Studio Projekt mit einträgst.
>
> Ich hab gelesen und nicht ganz verstanden wie ich den source Files im
> AVR-Studio Projekt mit eintrage


Links in deinem AVR Studio ist eine symbolische Baumdarstellung, was es 
alles in deinem Projekt gibt.
Da gibt es auch den Punkt "Source Files".
Da stellst du die Maus drauf, rechte Maustaste.
Daraufhin erscheint ein Kontextmenü.
Dort wählst du "Add existing Source Files" aus
Daraufhin geht ein File-Open Dialog auf und du wählst deine adc.c aus.

Fertig.
Projekt abspeichern nicht vergessen.

Autor: smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke sehr hat funktioniert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier (siehe Bild)

Einfach mit der Maus drauf und rechte Maustaste

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.