www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MRC Borad Empfangen und senden


Autor: Koshiro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite noch nicht sehr lange mit meinem mrc board, ich habe aber 
ein programm geschrieben, sodass ich über ein terminal programm Zeichen 
zu meinem board schiken kann und diese werden mir als acsii code auf dem 
board angezeigt. das ganze passiert über die serielle schnittstelle. 
hier mal der code:


#include <avr/io.h>
#include <util/delay.h>


int x = 65;

void usart1_init(unsigned long baudrate) // Initialize USART0
{
  UBRR1H  = 0;
  UBRR1L = 0x10; // set baud rate UBRRN sei 12 für 8 MHZ und 38400
  UCSR1B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter
  UCSR1C = 0x06;// 8 Datenbit 1 Stoppbit no parity
}


void usart1_tx (char data) // transmit byte via usart0
{
  while (!(UCSR1A & (1 << UDRE1))); // wait for empty transmit buffer

  UDR1 = data; // put data to buffer = send data
}


void uart1_send(unsigned char *buf, unsigned int size)    //  sendet 
Daten über UART
{
  for(int i=0; i<=size;i++)
  {
    while ( !(UCSR1A &(1<<UDRE1)));  /* warten bis Senden moeglich 
*/
    {
      }
    UDR1 = buf[i];
  }
}



void main()
{
  DDRA = 0xFF;

  usart1_init(16);

  while(1)
  {
    unsigned char buffer;
           // Warten bis Daten empfangen wurden
        while ( !(UCSR1A & (1<<RXC)) )
            ;

        // Empfangsregister auslesen
        buffer = UDR1;

    PORTA= buffer;
        /* PORTA = 0x01;
     _delay_ms(3000);
       PORTA = 0x00;
     _delay_ms(3000);
     */

  }
}

ich will jetzt nurnoch das das borad nicht nur empfangen sondern auch 
senden kann, und das will eifach nicht klappen. ich hab jetzt 
stundenlang seiten durchsucht, und ihr seid meine letzte hoffnung^^

ich bedanke mich schonmal im vorraus für die hilfe :-)

lg
koshiro

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hälst du nix von den Routinen und Beispielen im AVR UART Tutorial in der 
Artikelsammlung oder kennst du die nicht?

#include <avr/io.h>
#include <util/delay.h>

void usart1_init(unsigned long baudrate) // Initialize USART0
{
  UBRR1H = 0;
  UBRR1L = 0x10; // set baud rate UBRRN sei 12 für 8 MHZ und 38400
  UCSR1B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter
  UCSR1C = 0x06;// 8 Datenbit 1 Stoppbit no parity
}

unsigned char usart1_rx(void) // receive byte via usart1
{
  while ( !(UCSR1A & (1<<RXC)) )
    ;
  // Empfangsregister zurückgeben
  return UDR1;
}

void usart1_tx (char data) // transmit byte via usart1
{
  while (!(UCSR1A & (1 << UDRE1)))
    ; // wait for empty transmit buffer
  UDR1 = data; // put data to buffer = send data
}

void uart1_send(unsigned char *buf, unsigned int size)    
{
  for(int i=0; i<=size; i++)
  {
    usart1_tx( buf[i] );
  }
}

int main(void)
{
  DDRA = 0xFF;
  usart1_init(16);
  while(1)
  {
    unsigned char buffer;
    buffer = usart1_rx(); // Zeichen empfangen 
    usart1_tx(buffer);    // und als Echo zurücksenden
    PORTA = buffer;       // Lokale Ausgabe
  }
}

Wenn das nicht funktioniert, dann den Loopback-RS232 Test machen, um die 
Hardware zu prüfen: AVR aus der Fassung nehmen, RXD und TXD in der 
Fassung brücken und vom PC aus etwas senden. Das Gesendete sollte als 
Echo zurück kommen.

Autor: Koshiro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke dir für die schnelle antwort :-) ich denke das wird mir auf 
jeden fall weiter helfen, besten dank.

ich hatte mal ein avr uart tutorial aber das war ziemlich kompliziert 
erklärt und bin da nur teilweise durchgestiegen ^^

lg
koshiro

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.