Atmega8 RS232

OP #3096059
Lesenswert?
• ▲
▼
hallo, ich nutze einen Atmega8, programmiere mit Amtel Studio6 und 
möchte eine Kommunikation über RS232 zum PC. Als Terminal verwende ich 
HTerm port com1,baud 9600, data 8, stop1, parity non.

am terminal kommt nix an, was mach ich falsch? danke fürs feedback!
1
#include <avr/io.h>
2
#include <stdio.h>
3
#include <string.h>
4
#include <util/delay.h>
5
#include <avr/interrupt.h>
6
#include <stdint.h>    
7
#include <inttypes.h>
8

9

10
#define BAUD 9600
11
#define MYUBRR F_CPU/16/BAUD -1   //#define F_CPU 4000000
12

13

14
volatile char ReceivedChar;
15
void sendletter(unsigned char);
16

17
void sendletter(unsigned char letter)
18
{
19
  while ( !(UCSRA & (1 << RXC)) )
20
  letter= UDR;
21

22
  while ( !( UCSRA & (1<<UDRE)) )
23
  UDR = letter;
24
}
25

26
void inituart()
27
{
28
  UBRRH = (MYUBRR >> 8);
29
  UBRRL = MYUBRR;
30
  UCSRB = (1<<RXEN)|(1<<TXEN);
31
  UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0);
32
}
33

34
int main(void)
35
{
36

37
  inituart();
38

39
  while(1==1)
40
  {
41
    
42
  sendletter('.');
43

44
    
45
  }
46
  
47
  return 0;
48

49
}
Angehängte Dateien:
#3096092
Lesenswert?
• ▲
▼
> am terminal kommt nix an, was mach ich falsch?

drück mal eine Taste.

Denn genau das hast du hier ( wenn auch falsch ) programmiert:
1
void sendletter(unsigned char letter)
2
{
3
  while ( !(UCSRA & (1 << RXC)) )
4
  letter= UDR;
5

6
  while ( !( UCSRA & (1<<UDRE)) )
7
  UDR = letter;
8
}

Da steht

   warte auf ein eingehendes Zeichen
    (und während du wartest hol immer wieder irgendwas von der
     UART und speichere es in letter)

   gib danach letter auf der UART aus
    (und zwar solange, solange die UART nicht frei ist)


d.h. dein COde wartet prinzipiell schon mal darauf, das was über die 
UART reinkommt. Und erst dann geht es weiter.
OP #3096147
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> d.h. dein COde wartet prinzipiell schon mal darauf, das was über die
> UART reinkommt. Und erst dann geht es weiter.

ok,
1
void sendletter(unsigned char letter)
 hab ich rausgenommen.

die whileschleife hab ich so geändert, dass bei einem Tastendruck,
1
char test[10];

test gesendet werden soll.
1
while(1==1)
2
{
3

4
  test[0]='t';
5
        test[1]='e';
6
        test[2]='s';
7
        test[3]='t';
8

9
  if( !(PINB & (1<<PB0)))   // Taste gedrückt
10
  {  
11
    
12
    UDR= test;
13

14
  }
15
}
16
  return 0;
Gast #3096214
Lesenswert?
• ▲
▼
Nunja, nachdem er sich in Beitrag "LCD Initialisierung scheitert Atmel8" 
schon für exakt dieses "Projekt" sein LCD hat machen lassen, gings mit 
danach funktionierendem LCD in 
Beitrag "Interner Pullup Widerstand, Buttonansteuerung klappt nicht" direkt mit den Tastern 
weiter.
Jetzt sind wir also beim UART angelangt. Das mit dem Entprellen hat er 
scheinbar im zweiten Thread überlesen, daher auch wohl der letzte 
Codeschnipsel.
Das nächste (wenn Code und Verkabelung mal passen) dürfte dann die 
vergessene Fuse für den Quarz sein.
Im nächsten Thread dürfen wir uns dann wohl über disfunktionale 
AD-Wandler freuen ;)
Gast #3096216
Lesenswert?
• ▲
▼
Wenn Deine reelle Schaltung eine gewisse Ähnlichkeit mit dem Schaltbild 
hat, könnte der Rechner genau das machen was er soll: Nämlich Resetten.

Soll er das nicht, könnte Pin1 = High etwas Schwung in die Sache 
bringen.

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.