Hallo Leute,
mein Compiler (AVR-GCC) mendet in ADC einen undeclared indentifer,
ich habe nur <avr/io.h> eingebunden, das muss doch reichen oder?
Code:return ADC;
Druckbare Version
Hallo Leute,
mein Compiler (AVR-GCC) mendet in ADC einen undeclared indentifer,
ich habe nur <avr/io.h> eingebunden, das muss doch reichen oder?
Code:return ADC;
Probiers doch einfach mal mit ADCH und ADCL...
ADC ist nicht als 16-Bit Register definiert ( siehe zum Beispiel die iom16.h ), weil es bei "falscher" Einstellung das auch nicht ist ( ADLAR ist gesetzt ). Von daher ist ist das mit der Fehlermeldung schon richtig ;-)
MfG Kjion
danke, aber jetzt kommt folgender Fehler:
c:\programme\winavr\bin\..\lib\gcc-lib\avr\3.3.2\..\..\..\..\avr\lib\avr5\crtm16.o(.i nit9+0x0): undefined reference to `main'
Obwohl ich c kann versteh ich die Meldung nicht wirklich
Man kann auf ADC als 16 Bit Register zugreifen. Dein Fehler wird irgendwo anders liegen. Poste einfach Quellcode und Makefile und dir wird geholfen. Auf raten habe ich keine Lust.
main.c :
Code:#define CPU_Frequency 4000000 // 4Mhz-Quarz
#define UART_BAUD_RATE 9600 // 9600 Baud
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "funktionen.c"
#include "bitdef.h"
typedef unsigned char BYTE;
typedef unsigned short WORD;
//************************************************************************************************************************
void warten(int t) //ermöglicht Pausen
{
int h;
for (;t>0;t--)
{
for (h=70;h>0;h--) {}
}
return;
}
void uart_init()
{
outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
void uart_nachricht(char* senden) {
for (; *senden != '\0'; senden++) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR=*senden;
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 13;
}
SIGNAL (SIG_UART_RECV) {
char ch;
ch = inp (UDR); // Datenregister auslesen
/* if (inp (USR) & (1 << OR)) { // OverRun Bit gesetzt ?
// Es ist was verloren gegangen / zu lange aufs Auslesen gewartet...
uart_nachricht("UART: Overrun-Bit gesetzt! Nicht schnell genug ausgelesen!");
}
*/
char buffer[1]; buffer[0] = '\0'; buffer[1] = '\0';
buffer[0] = ch;
uart_nachricht("Daten empfangen! Char: ");
uart_nachricht(buffer);
}
int main()
{
DDRA = B00000111; // PortA Pin 0,1,2 als Ausgang, Rest als Eingang
DDRC = 0xff; // PortC als Ausgang
int x = 0; // ADC-Wert
ADCSRA = _BV(ADEN) | _BV(ADPS2);
//Aktivierung des ADC, festlegen eines Prescalers von 16 --> 4Mhz/32=125kHz
//Starten einer einzelnen Konvertierung
//Start einer Wandlung
uart_init();
uart_nachricht("Initalisierung...");
uart_nachricht("Übertragungsrate: 9600 Baud");
for (;;) { // bei 30 läuft der Motor stabil!
PORTA = B00000001; // Rote-LED an
// motor...
PORTC = B00001010;
warten(3000);
PORTC = B00001001;
warten(3000);
PORTC = B00000101;
warten(3000);
PORTC = B00000110;
warten(3000);
}
}
Wo ist dein makefile und was steht da drin?
PS: outp (...) würde ich nicht mehr verwenden, wird mit der nächsten Version von avr-gcc nicht mehr funktionieren.
Wenns noch nicht funktioniert probier mal ADCW. ADC in Zeile 55 von iom32.h und ADCW in Zeile 57 scheinen mir die gleichen "Adressen" zu haben.
Gruß Muraad
ADC wird nicht gefunden und die anderen Register sind alle 0...
Was soll das heissen, die Register sind alle 0..?
Gruß Muraad
ADC, ADCH, ADCW sind alle 0 wenn ich sie abrufe