problem mit Header Datei

Gast #1868925
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
}
Gast #1868952
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?
#1868954
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
#1868981
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.
Gast #1869011
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:(
#1869030
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren