Empfangen über UART mit ATmega32

Gast #2361495
Lesenswert?

Hallo Profis ;)

ich bin hier in der Programmierung von AVRs noch ein Anfänger und hab 
jetzt mal eine Frage.
Ich habe mir die usart.h und usart.c Dateien von Ulrich Radig geladen 
und wollte das Senden und Empfangen über die Uart testen.
Das Senden funktioniert auch schon super nur beim Empfangen stell ich 
mich leider zu doof an...

Technische Daten:

Controller:        ATmega32
Quarz:             16MHz
Betriebsspannung:  +5V

Mein Programm:

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#include "usart.h"


#define F_CPU 16000000// Angepasst 16MHZ


int main(void)
{

unsigned long a;

DDRC=0xFF;
PORTC=0xFF;


usart_init(9600); // Einstellung der Baudrate

usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die 
UART ausgeben

usart_write("\n\r"); // Leerzeile

usart_write("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage



return(0);
}

Es währe super wenn Ihr mir iwie helfen könntet, dass ich z.B. meinen 
Namen über ein Terminal Programm eingeben kann und diesen dann Später 
wieder über UART senden.

Vielen Dank schonmal im Vorraus :D
Andi
Angehängte Dateien:
#2361528
Lesenswert?

Andi schrieb:

> Das Senden funktioniert auch schon super nur beim Empfangen stell ich
> mich leider zu doof an...

Wie Michael schon sagte: Interrupts mittels sei() freigeben.

Das ist der erste Teil.
Das andere. Die Funktion ist offenbar so zu benutzen
1
   ....
2

3
int main()
4
{
5
  unsigned long a;
6

7
  DDRC = 0xFF;
8
  PORTC = 0xFF;
9

10
  usart_init(9600); // Einstellung der Baudrate
11

12
  usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben
13

14
  usart_write("\n\r"); // Leerzeile
15
  usart_write("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage
16

17
  while( 1 ) {
18

19
    if( usart_status.usart_ready ) {
20
      usart_write( "\n\rDu heisst " );
21
      usart_write( usart_rx_buffer );
22
      usart_status.usart_ready = 0;
23
    }
24
  }
25

26
  return(0);
27
}
#2361562
Lesenswert?

Markus schrieb:
> Hallo ich versteh des nicht so ganz den bei mir kommt bei der
> Zeile mit
> usart_write( usart_rx_buffer );
> eine Fehlermeldung mit der Bezeichnung "invalid initializer"

Ich (und du auch) habe die falsche Funktion benutzt.
ANstelle von usart_write wollten wir in allen Fällen usart_write_str 
haben. usart_write macht eigentlich ganz was anderes und wird wie printf 
benutzt. Bei dir macht das keinen Unterschied (ausser dass du dem µC 
Mehrarbeit aufbürdest), beim letzten Aufruf macht es aber einen 
Unterschied.
1
....
2

3
int main()
4
{
5
  unsigned long a;
6

7
  DDRC = 0xFF;
8
  PORTC = 0xFF;
9

10
  usart_init(9600); // Einstellung der Baudrate
11

12
  usart_write_str("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben
13

14
  usart_write_str("\n\r"); // Leerzeile
15
  usart_write_str("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage
16

17
  while( 1 ) {
18

19
    if( usart_status.usart_ready ) {
20
      usart_write_str( "\n\rDu heisst " );
21
      usart_write_str( usart_rx_buffer );
22
      usart_status.usart_ready = 0;
23
    }
24
  }
25

26
  return(0);
27
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren