Uart empfängt nicht richtig

Gast #991258
Hallo ich schon wieder mit eim UART das problem was ich jetzt habe ist 
das ich was sende aber nicht das bekomme was ich gesendet habe.

Mein Programm und der atmega16 können Daten empfangen und auch auf PortB 
ausgeben, in dem ich UDR auf Port B gebe. Aber so wie ich die Daten mit 
einem anderen MC sende kommen sie nicht auf den Ausgang B an.
Wenn ich ein 10001010 sende zeigt mein oszi am Eingang des emfpängers 
------_-_-___--------- an was schon mal richtig ist. An meinem Port B 
des Empfängers bekomme ich aber 11100000 aber da müsste eigentlich 
01010001 sein. Wenn ich eine 11111111 sende bekomme ich an Port b des 
Empfängers 11111110. Ich sende 8bite und 1 Stopbit mit 2400 Baud. Kann 
mir jemand helfen und sagen was ich falsch mache.


1
#include <stdlib.h>
2
#include <avr/io.h>  
3
#include <util/delay.h>
4
#include <inttypes.h>
5

6
#define F_CPU 1000000L
7
#define BAUD 4800L
8
#define ubrr_value (  ( F_CPU / (16*BAUD) ) - 1  )
9

10
// Prototypen
11
uint8_t uart_getc(void);
12
void initusart ();
13
void uart_gets( char* Buffer, uint8_t MaxLen );
14

15

16

17

18

19
//********************  main   *********************
20
int main(void)
21
{
22
  char strBuffer[256];
23
  DDRB = 0xff;
24
  initusart ();   
25
    
26
  while (1)
27
  {
28
    // void uart_gets( char* Buffer, uint8_t MaxLen )
29
    uart_gets( &strBuffer[0], 255 );  //void  
30
  }
31
}
32
/************************ Zeichen empfangen *******************/
33
uint8_t uart_getc(void)
34
{
35
    while (!(UCSRA & (1<<RXC)));   // warten bis Zeichen verfuegbar    
36
    PORTB = UDR;
37
  return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
38
}
39

40
//********Zeichen sammeln und zum String zusammen setzen*********
41
void uart_gets( char* Buffer, uint8_t MaxLen )
42
{
43
  uint8_t NextChar;
44
  uint8_t StringLen = 0;
45
 
46
  NextChar = uart_getc();         
47
   
48
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
49
    *Buffer++ = NextChar;
50
    StringLen++;
51
    NextChar = uart_getc();
52
  }
53
}
54

55
//***************UART Initialisieren********************
56
void initusart ()
57
{
58
  //UBRRH = (unsigned char)(ubrr_value>>8);
59
    //UBRRL = (unsigned char)ubrr_value;
60
    
61
  UBRRH = ubrr_value >> 8;
62
    UBRRL = ubrr_value & 0xFF;
63

64
  
65
  
66
  UCSRB = (1<<RXEN)|(1<<TXEN);// UART RX einschalten                 
67
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
68
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.