Forum: Mikrocontroller und Digitale Elektronik Atmega128 USART fehler beim Compilieren


von Salzer Ricardo (Gast)


Angehängte Dateien:

Lesenswert?

hi zusammen,

habe mir neulich ein AVR 128 board gekauft 
(http://cgi.ebay.com/ATmega-ATmega128-AVR-MINI-Development-Board-/260667006636?pt=LH_DefaultDomain_0&hash=item3cb0f6deac#shId) 
und naja jetzt bin ich soweit das ich uart implementieren will, habs mit 
dem testcode hier auf mikrocontroller.net probiert aber es kommen diesen 
error....


Build started 16.2.2011 at 15:44:19
avr-gcc  -mmcu=atmega128 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL 
-Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD 
-MP -MT main.o -MF dep/main.o.d  -c  ../../main.c
../../main.c: In function 'uart_putc':
../../main.c:40: error: 'UCSRA' undeclared (first use in this function)
../../main.c:40: error: (Each undeclared identifier is reported only 
once
../../main.c:40: error: for each function it appears in.)
../../main.c:44: error: 'UDR' undeclared (first use in this function)
../../main.c: In function 'USART_Init':
../../main.c:63: error: 'UBRRH' undeclared (first use in this function)
../../main.c:64: error: 'UBRRL' undeclared (first use in this function)
../../main.c:66: error: 'UCSRB' undeclared (first use in this function)
../../main.c:68: error: 'UCSRC' undeclared (first use in this function)
../../main.c: In function 'main':
../../main.c:83: warning: pointer targets in assignment differ in 
signedness
../../main.c:87: warning: pointer targets in assignment differ in 
signedness
make: *** [main.o] Error 1
Build failed with 8 errors and 2 warnings...




hat jemand ne ahnung??
wäre sehr dankbar!!

von spess53 (Gast)


Lesenswert?

Hi

Nimm dir das Datenblatt vom AVR und sieh nach, wie die Register richtig 
heissen.

MfG Spess

von ..,- (Gast)


Lesenswert?

UBRRH --> UBRR0H //für USART0
UBRRH --> UBRR1H //für USART1

für die andern Register natürlich auch ändern ...

von Salzer Ricardo (Gast)


Lesenswert?

Habe eigentlich schon controlliert...
im Datenblatt steht:

#define FOSC 1843200// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
...
USART_Init ( MYUBRR );
...
}
void USART_Init( unsigned int ubrr )
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC
}

zur initialisierung


und:

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}




aber mein Compiler kennt die Register nicht...
kann das sein das ich noch irgendeine Include benötige??
bin noch neu :)

mfg

von Salzer Ricardo (Gast)


Lesenswert?

@..,- danke geht :D


jetzt ist aber gleich noch eine frage aufgetaucht, also ich habe jetzt 
usart0 und die ist an PE0 bzw. PE1 oder?? weil da tut sich gar nix...

von spess53 (Gast)


Lesenswert?

Hi

>jetzt ist aber gleich noch eine frage aufgetaucht, also ich habe jetzt
>usart0 und die ist an PE0 bzw. PE1 oder?? weil da tut sich gar nix...

Vielleicht stört dein Programmierinterface. Das sind nämlich die Pins, 
über die der ATMega128 programmiert wird.

MfG Spess

von Peter D. (pdiener) Benutzerseite


Lesenswert?

>kann das sein das ich noch irgendeine Include benötige??

Nur
#include <avr/io.h>
wird benötigt.
Dort wird dann je nach eingestelltem Prozessor automatisch aufgelöst, 
was alles eingebunden werden muss. Dafür muss natürlich im AVR-Studio 
der richtige Prozessor eingestellt sein, oder manuell definiert werden.

Grüße,

Peter

von Salzer Ricardo (Gast)


Lesenswert?

vielen dank für die antworten µC sendet wie wild :)

weiteres Problem:
wollte nun auch mit dem avr empfangen können vom pc ( max232, 
terminalprogramm) und habe
so uart initialisiert:
void USART_Init( unsigned int ubrr )
{
  // Set baud rate
  UBRR1H = (unsigned char)(ubrr>>8);
  UBRR1L = (unsigned char)ubrr;



  UCSR1B = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); // RX TX und RX interrupt 
enable
  // Set frame format: 8data, 2stop bit

  UCSR1C = (1<<USBS)|(3<<UCSZ0);
}







und  die interrupt funktion sieht so aus:


ISR(USART_RXC_vect)
{
  unsigned char nextChar;

  // Daten aus dem Puffer lesen
  nextChar = UDR1;
  if( uart_str_complete == 0 ) // wenn uart_string gerade in Verwendung, 
neues Zeichen verwerfen
  {

    // Daten werden erst in string geschrieben, wenn nicht 
String-Ende/max Zeichenlänge erreicht ist/string gerade verarbeitet wird
    if( nextChar != '\n' && nextChar != '\r' && uart_str_count < 
UART_MAXSTRLEN - 1 )
    {
      uart_string[uart_str_count] = nextChar;
      uart_str_count++;
    }
    else
  {
      uart_string[uart_str_count] = '\0';
      uart_str_count = 0;
      uart_str_complete = 1;
    }
  }
}


(standart aus AVR tutorial :))



und naja wenn ich zeichen sende "hängt" sich der µC auf bis er resettet 
wird?


jemand ne idee??


MFG Ricardo!

von Werner B. (werner-b)


Lesenswert?

Ohne ins Datenblatt gesehen zu haben...
Kompiliert das überhaupt?
Muss da nicht USART1_RXC_vect verwendet werden?

P.S. sollte man nicht fertig initialisieren bevor man TX, RX und ISR 
enabled?

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
Noch kein Account? Hier anmelden.