Hallo zusammen,
bin neu bei AVr-Studio 5 und habe ein Problem. Ich möchte eine AD
Wandlung durchführen.
Hier der Quelltext:
#define F_CPU 1000000
#include <avr/io.h>
void ADC_Init();
int main (void) {
uint16_t adcval;
DDRB = (0 << DDB0);
DDRD = (1 << DDB5)| (1 << DDB6) ;
while(1) {
adcval = ADC_Read(0); // Kanal 0
if (adcval> 500)
{
PORTD = (1<<PB5)|(0<<PB6);
}
else
{
PORTD = (0<<PB5)|(1<<PB6);
}
}
return 0;
uint16_t ADC_Read (uint16_t channel)
{
ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); //Kanal auswählen
ADCSRA |= (1<<ADSC); // Wandlung ausführen
while (ADCSRA & (1<<ADSC) ) {} // Auf Ergebnis warten
return ADCW; // Wert auslesen und zurückgeben
}
Fehlermeldung lautet "undefined reference to 'ADC_Read'
Den Text hab ich aus dem mikrocontroller ADC-Tutorial.
Vielen Dank schon mal :)
sry, nur die hälfte kopiert :-/
void ADC_Init(void)
{
uint16_t result;
ADMUX = (1<<REFS1) | (1<<REFS0); // Referenz einstellen, hier
intern
ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
ADCSRA |= (1<<ADEN); // ADC aktivieren
//ADC-Wandlung durchführen, zwecks "Einpendeln"
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC) ) {} // auf Abschluss der
Konvertierung warten
result = ADCW; //Wandlung auslesen
}
}
Peter schrieb: > sry, nur die hälfte kopiert :-/ Die Klammer muß zu main(). Die letzte ... So definierst Du irgendwas innerhalb der Funktion main(), klar kann das der Compiler nicht auflösen.
Peter schrieb: > if (adcval> 500) > { > PORTD = (1<<PB5)|(0<<PB6); > } > else > { > PORTD = (0<<PB5)|(1<<PB6); > } Bist du sicher, daß das immer das macht, was du vor hast? In diesem konkreten Fall schon; du könntest im else-Zweig auch einfach PORTD = 0; schreiben. Eine Null schieben macht meistens nicht das, was beabsichtigt ist. Spätestens, wenn noch andere Pins an PORTD gleichzeitig für andere Sachen benutzt werden, wirst du dich wundern. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ausg.C3.A4nge http://www.mikrocontroller.net/articles/Bitmanipulation
Lutz schrieb: > du könntest im else-Zweig auch einfach PORTD = 0; schreiben Einspruch: PORTD = (0<<PB5)|(1<<PB6); ^^^^^^^^^
datenschützer schrieb: > Einspruch: > PORTD = (0<<PB5)|(1<<PB6); > ^^^^^^^^^ Einspruch stattgegeben, da Tomaten auf den Augen!!! Ist aber auch eine sehr unsauber geschriebene 1; vielleicht schwanger und daher schon etwas ausladend und schon etwas in den Bereich 0 übergehend ...;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.