UART des AT90CAN128 mit WinAvr

Gast #691180
Lesenswert?
• ▲
▼
Hallo.
Ich möchte mit WinAvr den UART des AT90Can nutzen. Doch alle 
Beispielprogramme, die ich so eintippe machen Fehler. Es kommen dann 
Sachen wie "error: 'UBRRL' undeclared (first use in this function)".
Kann mir einer ein Beispiel für den AT90Can zukommen lassen, mit dem ich 
was anfangen kann oder mir tipps geben, woher meine Fehler rühren?
Bin neu im WinAvr.
Gruß, Alex
#691194
Lesenswert?
• ▲
▼
Alex wrote:
> Hallo.
> Ich möchte mit WinAvr den UART des AT90Can nutzen. Doch alle
> Beispielprogramme, die ich so eintippe machen Fehler. Es kommen dann
> Sachen wie "error: 'UBRRL' undeclared (first use in this function)".


Wäre es nicht sinnvoller, sich mal damit zu beschäftigen, wie die UART 
funktioniert, statt nur stupid copy&paste zu machen?

Schau dochmal, für welchen AVR der Beispielcode mit UBRRL gemacht ist.
Dann schau ins Datenblatt, welche Funktion UBRRL hat.

Und dann schau ins Datenblatt Deines AVR, wie dort das Register mit 
derselben Funktion heißen könnte.


Peter
Gast #691287
Lesenswert?
• ▲
▼
Ja, hast recht.
Bin damit berits zurande gekommen, nachdem ich im datenblatt nachgesehen 
habe.
Problem war, dass der At90Can 2 UARTS hat, die mit 0 und 1 bezeichnet 
werden. Demnach werden die Register auch anders genannt. UBRRH heist 
beispielsweise ubrr0h und ubrr1h für das jeweilige uart. hatte mit 
ubrrh0 etc experimentiert, aber zwecklos.
lesen ist halt doch nicht immer sinnlos!
Gast #691294
Lesenswert?
• ▲
▼
Hab nun aber ein neues Problem!
Win AVR kompiliert den Code nun Problemlos.
Möchte ich allerdings das Testprogramm bein AVR Studio Simulieren, 
bleibt das Programm hängen, sobald das UCSR0A leer ist.

//---------------------------------------------------------------------- 
---
//USART0 Initialisieren
void USART0_init(void)
{
  //Baudrate einstellen (Normaler Modus)
  UBRR0H = (unsigned char) (UBRR_BAUD>>8);
  UBRR0L = (unsigned char) UBRR_BAUD;
  //Aktivieren von receiver und transmitter
  UCSR0B = (1<<RXEN)|(1<<TXEN);
  //Einstellen des Datenformats: 8Datenbits, 1 Stopbit
  UCSR0C = (0<<UMSEL0)|(0<<UPM0)|(0<<USBS0)|(3<<UCSZ0);
  //Receiver und Transmitter Freigeben
  UCSR0B = (1<<RXEN0) | (1<<TXEN0);
}

//---------------------------------------------------------------------- 
---
//USART0 Übertragen
void USART0_Transmit(unsigned char data)
{
  //Warten auf leeren Transmitbuffer
  while (!(UCSR0A & (1<<UDRE0)))
  {
  }
    //Daten in den  buffer, senden der daten
    UDR0 = data;
}
/----------------------------------------------------------------------- 
--
//---------------------------------------------------------------------- 
---
//Hauptprogramm
int main(void)
{
  unsigned char i;
  //uint8_t buffer;

  USART0_init();

  //Endlosschleife
  while (1)
  {
    PORTB = i++;
----> !!Fehler    while (!(UCSR0A & (1<<UDRE0)))
  {
  }
    //Daten in den  buffer, senden der daten
    UDR0 = 'x';
    //USART0_Transmit("x");
    //i=USART0_Receive();

  }
  return 0;
}

Hat es was mit dem Simulieren zu tun oder mit meinem Programmcode??
Gruß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.