Forum: Mikrocontroller und Digitale Elektronik problem mit Header Datei


von smith (Gast)


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
}

von Klaus W. (mfgkw)


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.

von smith (Gast)


Lesenswert?

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

von B e r n d W. (smiley46)


Lesenswert?

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

von B e r n d W. (smiley46)


Lesenswert?

Verwendes Du kein AVR-Studio?

von Karl H. (kbuchegg)


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_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F

von Stefan B. (steckersammler)


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.

von smith (Gast)


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?

von Karl H. (kbuchegg)


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_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F

von smith (Gast)


Lesenswert?

womit soll ich die einzelene .c dateien compilieren.ganz normal compiler 
oder mit avrstudio

von Karl H. (kbuchegg)


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.

von mar IO (Gast)


Lesenswert?

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

von smith (Gast)


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:(

von Karl H. (kbuchegg)


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.

von smith (Gast)


Lesenswert?

Danke sehr hat funktioniert

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Hier (siehe Bild)

Einfach mit der Maus drauf und rechte Maustaste

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.