Atmega128 USART fehler beim Compilieren

Gast #2066047
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!!
Angehängte Dateien:
Gast #2066067
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
Gast #2066096
@..,- 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...
Gast #2066234
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
Persönliche Seite #2066398
>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
Gast #2068506
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.