ATmega644 UART

OP #2424104
Lesenswert?
• ▲
▼
Hallo,

bin ein µC - Neuling, möchte ASCII zeichen an ein Terminalprogramm am PC 
mit Hilfe der UART schicken. Wäre Hilfreich, wenn jemand ein kurzes 
Beispiel, wenn möglich in C bringen könnte. Habe schoin verschiedenste 
Beispiele ausprobiert, doch ohne Erfolg. Das letzte Beispiel war 
folgendes:

______________________________________________________________________

#include <avr/io.h>
#include <avr/interrupt.h>

#define FOSC 1843200// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1

const int baud = 51;  //wegen 8MhZ Clock
const char* data = "Hallo\0";  //Char-Pointer

int main() {

  //test
  DDRC = 0x01;            --Kontrollregister
  //PORTC = 0xFF;

  USART_Init (baud);
  while(1) {
  USART_Transmit(data);
  }
  //USART_receive();

  sei();         //... die Interrupts abfangen
}

void USART_Init(int baud) {

  /* Set baud rate */
  UBRRL = (char)baud;

  /* Enable  transmitter */
  UCSRB = (1<<TXEN);
  UCSRB =  (1<<UDRIE); //KO: entweder UDRIE oder TXIE

  /* Set frame format: asynchron, 1 stop - bit, 8 data - bit */
  UCSRC = (0<<URSEL)|(0<<USBS)|(2<<UCSZ0); //KO: Frameformat im Prinzip 
egal, muss aber mit Gegenseite übereinstimmen

}



// transmit

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

// C:\WinAVR-20100110\avr\include\avr\iom64.h
ISR(USART0_TX_vect) {

}


// receive

void USART_receive() {

  //init receive
  UCSRB = (1<<RXEN);

  //wait for unread data in the register
  while(!(UCSRA & (1<<RXC)));
  return UDR;

}

__________________________________________________________________

Komme nicht weiter, wäre echt super, wenn mir jemand helfen könnte, 
danke.

MfG Vali1991
#2424356
Lesenswert?
• ▲
▼
Sepp Horst schrieb:
> Habe schoin verschiedenste
> Beispiele ausprobiert, doch ohne Erfolg. Das letzte Beispiel war
> folgendes:
Da hilft nur noch "Alles markieren" und Strg + x.

Dann löten wir einen Draht am RS232-Stecker zwischen Pin 2 und Pin 3
und du kannst mit dem Terminal schreiben und die Zeichen werden gleich 
wieder empfangen. Schon mal das erste Erfolgserlebnis.

Zuerst nimmt man sich das Datenblatt vor und guckt sich an, welche 
Register eingestellt werden müssen.
Das ist beim 644 gar nicht so dramatisch:

#ifndef F_CPU
#define F_CPU 8000000UL   //(!)wichtig ist das UL(!)
                         //sonst verrechnet sich  der Compiler
#endif

#define Baud 19200

UCSR0B |= (1 << RXCIE0) | (1 << TXCIE0) | (1 <<RXEN0) | (1 << TXEN0);
UBR0 = (F_CPU+_Baud*8)/(_Baud*16)-1;
sei();

Jetzt bauchen wir noch 2 Interrupt-Handler:

ISR(USART0_RX_vect)
{
  //Und hier löten wir jetzt den Draht ein
  char nUdr = UDR0;
  UDR0 = nUdr;
}

ISR(USART0_TX_vect)
{
  //Die macht erstmal gar nichts
}

Wenn du jetzt mit dem Terminal deines Vertrauens, ohne lokales Echo, 
schreiben kannst, steht deine Verbindung. Das ist schon mal die halbe 
Miete.

Wenn das funktioniert, lässt du ihn selber was senden:

void Senddata(char* data)
{
   int nInd=0;
   while(data[nInd])
   {
      while (UCSR0A & (1 << TXC0)){}
      UDR0 = data[nInd++];
   }
}

Senddata("Hello World");


mfg.

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.