Forum: Compiler & IDEs Empfangen über UART mit ATmega32


von Andi (Gast)


Angehängte Dateien:

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

von Michael (Gast)


Lesenswert?

Da der Empfang der Zeichen über die Interrupt Service Routine läuft, muß 
du den globalen Interrupt auch freigeben.
Sonst passiert da nichts ;-)

von Karl H. (kbuchegg)


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
}

von Markus (Gast)


Lesenswert?

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"

von Karl H. (kbuchegg)


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
}

von Markus (Gast)


Lesenswert?

stimmt danke an alle ;)

von Andi (Gast)


Lesenswert?

Hey Danke :D
also das Senden und Empfangen klappt bei mir jetzt
Kann ich den "usart_rx_buffer" Wert auch iwie vergleichen, z.B. wie bei 
einer Passwortabfrage?

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:
> Hey Danke :D
> also das Senden und Empfangen klappt bei mir jetzt
> Kann ich den "usart_rx_buffer" Wert auch iwie vergleichen, z.B. wie bei
> einer Passwortabfrage?

Spätestens jetzt lässt sich die Standardantwort "Du brauchst ein C-Buch" 
nicht mehr vermeiden.

String-Verarbeitung in C

von Andi (Gast)


Lesenswert?

Ja da hast du nicht ganz unrecht =)
Könntest du mir vielleicht eines empfehlen, das für "Anfänger" gut 
verständlich ist? =)

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:
> Ja da hast du nicht ganz unrecht =)
> Könntest du mir vielleicht eines empfehlen, das für "Anfänger" gut
> verständlich ist? =)

Empfehlung ist immer der Klassiker

Kernighan & Ritchie
Programmieren in C


ansonsten
http://openbook.galileocomputing.de/c_von_a_bis_z/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.