Atmega 32 UART Problem

Gast #2518775
Hallo Leute,

Ich bräuchte Hilfe bei einem kleinen Problem und zwar geht es um die 
UART Schnittstelle bei einem Atmega 32. Ich möchte den Chip mit einem PC 
kommunizieren lassen. Das Senden vom Chip zum Pc funktioniert wunderbar 
nur das Empfangen mit dem Chip klappt irgendwie nicht. Zum Testen hab 
ich nur eine Schleife zum Empfangen gemacht die zum Senden wird später 
ergänzt.

Ich wäre wirklich froh wenn mir jemand helfen könnte. Vielen Dank schon 
mal im Voraus.

Das Programm:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4

5
#ifndef F_CPU
6

7
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
8
#define F_CPU 16000000UL  
9

10
#endif
11
 
12
#define BAUD 9600UL      
13
 
14

15
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   
16
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     
17
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) 
18

19
uint8_t c=0;
20

21
int main(void) {
22
  
23
  DDRD = 0b01100000;
24
  void uart_init(void);
25
  
26
  while (1) {
27
    uint8_t c;
28
    uint8_t UART_getc();
29
    c = UART_getc();
30
    if(c==1) {
31
      PORTD = 0b01100000;
32
    }
33
  }
34
  
35
return(0);  
36

37
}
38

39
  
40
void uart_init(void) {
41

42
  UBRRH = UBRR_VAL >> 8;
43
  UBRRL = UBRR_VAL & 0xFF;
44
 
45
  UCSRB |= (1<<TXEN)|(1<<RXEN);          //Sender und Empfänger Initialisieren
46
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  //asynchrone übertragung
47
 
48
}
49

50
uint8_t UART_getc(void) {
51

52
  while ( !(UCSRA & (1<<RXC)) ) {      //Auf ein Zeichen warten
53
  }
54
  
55
return UDR;
56
}
terminator schrieb:
1
    c = UART_getc();
2
    if(c==1) {

womit sendest du?
Du bist dir ganz sicher, dass du PC-seitig ein Byte mit dem Wert 1 auf 
die Reise schickst?

Hinweis: wenn du auf dem PC ein Terminalprogramm laufen hast und dort 
die Taste '1' drückst, dann wird kein Byte mit dem Wert 1 übertragen, 
sondern der ASCII Code für das Zeichen '1'. Das ist aber etwas anderes 
als 1:
1
    c = UART_getc();
2
    if(c == '1') {

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.