PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Studio A/D befehle bug



horsty
21.11.2009, 11:59
Hallo,

ich benutze das AVR Studio und den gcc compiler. funktioniert auch alles eigentlich ganz gut. normales kleines programm geschrieben mit einer while schleife drin, compiliert und dann per AVR Studio auf den µC übertragen. läuft.

dann habe ich mich daran gemacht, mal den A/D wandler zu aktivieren.
erstmal die bits richtig gesetzt und dann versucht zu compilieren. Da bricht er aber mit etlichen Fehlermeldungen ab. Z.B: ADEN undeclared usw.


hier der code:


#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <setjmp.h>

//volatile

void adwandler();
uint16_t calcADC();

void main()
{
DDRA = 0x00;
DDRB = 0x1F;
DDRC = 0x00;
DDRD = 0x7F;

PORTB = 0x1F;
PORTD = 0x7F;

while(1)
{
/*PORTD = (1<<0x7F);
_delay_ms(1000);
PORTD = (1<<0x6F);
_delay_ms(1000);*/
return;
}


}

//define AD bits
void adwandler()
{

ADMUX = (1<<AREFS0);

ADCSRA = (1<<ADEN) | (1<<ADCE) | (1<<ADFR) | (1<<ADSC) | (1<<ADPS2) | (1<<ADPS0);


return(1);
}

//rechnung
uint16_t calcADC()
{
uint16_t i;
uint8_t erg;

while(1)
{
i = ADCW;
erg = i/4;
return(0);
}
}



hier die fehlermeldungen des compilers:


Build started 21.11.2009 at 12:42:09
avr-gcc -I"G:\Program Files\WinAvr\avr\include" -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Bot.o -MF dep/Bot.o.d -c ../Bot.c
../Bot.c:12: warning: return type of 'main' is not 'int'
../Bot.c: In function 'adwandler':
../Bot.c:38: error: 'AREFS0' undeclared (first use in this function)
../Bot.c:38: error: (Each undeclared identifier is reported only once
../Bot.c:38: error: for each function it appears in.)
../Bot.c:40: error: 'ADCE' undeclared (first use in this function)
../Bot.c:40: error: 'ADFR' undeclared (first use in this function)
../Bot.c:43: warning: 'return' with a value, in function returning void
make: *** [Bot.o] Error 1
Build failed with 5 errors and 2 warnings...


ich weiß wirklich nicht, was daran falsch sein soll.

Bitte helft mir mal und ihr dürft mich auch schlagen wenns ein richtig dummer fehler war!!


greetz horsty

021aet04
21.11.2009, 12:18
1.) Ändere "void main()" in "int main(void)" ist zwar nur eine Warnung, es ist aber besser
2.) Laut diesen Fehlern ../Bot.c:38: error: 'AREFS0' undeclared (first use in this function), ../Bot.c:40: error: 'ADCE' undeclared (first use in this function) und ../Bot.c:40: error: 'ADFR' undeclared (first use in this function) sind AREFS0, ADCE, ADFR nicht definiert. Entweder hast du es falsch geschrieben (schau im DB nach) oder die h-Datei ist nicht bzw falsch eingebunden.

MfG Hannes

sternst
21.11.2009, 13:24
AREFS0, ADFR, ADCE, allesamt Schreibfehler.

horsty
21.11.2009, 16:14
schonmal vielen Dank an euch!

aber vielleicht schreibt sternst dann bitte auch wie das richtig geht?!?!

Sorry ich bin anfänger in sachen programmierung und besonders im programmieren von µC's. Deswegen brauch ich das ein oder andere mal hilfe und ich bitte euch dann nicht nur aufs Datenblatt zu verweisen, was dann zwar der einfacherere weg für euch wäre, aber dadurch bringt mir das nicht viel!!

greetz horsty

sternst
21.11.2009, 16:24
Deswegen brauch ich das ein oder andere mal hilfe und ich bitte euch dann nicht nur aufs Datenblatt zu verweisen
Aber genau das tue ich jetzt. Nimm dir das Datenblatt, und schau selber nach, wie die Bits korrekt heißen. Das ist doch nun wohl wirklich nicht zu viel verlangt, im Datenblatt z.B. nach dem Register ADMUX zu suchen, und nachzusehen, wie die Bits darin heißen. Ich bin immer gerne bereit, dir irgendwelche Dinge zu erklären, aber solch simple "Fleißarbeit" werde ich dir ganz sicher nicht abnehmen. Auch weil ...


aber dadurch bringt mir das nicht viel!!
Im Gegenteil. Das ist genau das, was dir am meisten bringt. Je öfter du selber in das Datenblatt schaust, um was nachzuschlagen, desto vertrauter wirst du damit, und desto eher findest du selber dort die Sachen, die du brauchst.

horsty
21.11.2009, 16:46
oh stimmt.... vielleicht sollte ich das mit dem "nicht ins datenblatt verweisen", mal zurücknehmen, weil ich nur ins avr-gcc-titorial gesehen hatte und weil die da auch nen atmega32 verwenden, dachti ich das war dort stand übernehmen kann....

ein blick ins datasheet und ich urde grade eines besseren belehrt.

Danke!!