Gast
#1868925
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
}
