atmega1284p sendet immer die gleichen Daten

Gast #2826353
Lesenswert?
• ▲
▼
Hallo Leute,

Ich versuche jetzt schon einen Tag lang Daten über den usart0 des 
atmega1284 zu senden. Es wird zum einen ein String und danach ein 
Zeichen über den Usart0 gesendet.

RealTerm gibt mir aber immer die gleichen Daten zurück. RealTerm ist 
richtig eingestellt.

Als ob sich der Wert im Datenregister des usart0 nie geändert wird.
Ich sende mit 9600 Baud, 8n1, 8 MHz Prozessortakt.

Ich würde mich sehr freuen, wenn ihr mal drüber schauen würdet.
Ich bin für jeden Tip dankbar.

Grüße Kermit

Haupt Programm:
1
#include <avr/io.h>
2
#include "m1284usart.h"
3

4

5

6

7
int main(void)
8
{  uint8_t hello[] = "Hallo\n\r";    //Variable für Ausgabetext
9
  uint8_t helloWorld[] = "HalloWelt\n\r";  
10
  uint8_t bitPattern0 = 0b11111111;
11

12

13
  const unsigned long baudRateUsart0AndUsart1 = 9600;
14
  const unsigned long fCpuInHertz = 8000000;
15

16

17

18
    m1284usart *rs232 = new m1284usart(baudRateUsart0AndUsart1, fCpuInHertz);
19

20

21
  while(1)
22
  {  
23
    rs232->usart0Flush();
24
    rs232->usart0SendString(helloWorld);
25
    rs232->usart0SendByte(bitPattern0);
26
  }
27
  return 0;
28
}


cpp File usart Klasse:
1
#include "util.h"
2

3
#include "m1284usart.h"
4

5
void m1284usart::usart0SendByte(uint8_t byte)
6
{
7
  while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich */
8
  {
9

10
  }
11

12
  UDR0 = byte;
13
}
14

15

16
void m1284usart::usart1SendByte(uint8_t byte)
17
{
18
  while (!(UCSR1A & (1<<UDRE1)))  /* warten bis Senden moeglich */
19
  {
20

21
  }
22

23
  UDR1 = byte;
24
}
25

26

27
void m1284usart::usart0SendString(uint8_t *string)
28
{
29
  while (*string)
30
  {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
31
    usart0SendByte(*string);
32
    string++;
33
  }
34
}
35

36

37

38
void m1284usart::usart1SendString(uint8_t *string)
39
{
40
  while (*string)
41
  {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
42
    usart1SendByte(*string);
43
    string++;
44
  }
45
}
46

47

48

49

50

51

52
m1284usart::m1284usart(unsigned long baudRate, unsigned long fCpu)
53
{
54
  unsigned long myBaudRate = fCpu/16/baudRate;
55

56
  UBRR1H = (uint8_t)(myBaudRate>>8); //set baudRate usart1
57
  UBRR1L = (uint8_t)myBaudRate;
58

59
  UBRR0H = (uint8_t)(myBaudRate>>8); //set baudRate usart0
60
  UBRR0L = (uint8_t)myBaudRate;
61

62

63
  UCSR1B |= (1<<TXEN1);            //enable usart1 transmitter
64

65
  UCSR0B |= (1<<TXEN0);            //enable usart1 transmitter
66

67
  UCSR0B |= (1<<RXEN0);            //enable usart0 reciver
68

69
  UCSR1B |= (1<<RXEN1);           //enable usart1 reciver
70
}
71

72

73
m1284usart::~m1284usart(void)
74
{
75
  UCSR1B &= ~(1<<TXEN1);            //enable usart1 transmitter
76

77
  UCSR0B &= ~(1<<TXEN0);            //enable usart1 transmitter
78

79
  UCSR0B &= ~(1<<RXEN0);            //enable usart0 reciver
80

81
  UCSR1B &= ~(1<<RXEN1);           //enable usart1 reciver
82
}
83

84

85
void m1284usart::usart0Flush( void )
86
{
87
  unsigned char dummy;
88
  while ( UCSR0A & (1<<RXC0) ) dummy = UDR0;
89
}
90

91

92
void m1284usart::usart1Flush( void )
93
{
94
  unsigned char dummy;
95
  while ( UCSR1A & (1<<RXC1) ) dummy = UDR1;
96
}



Header File usart Klasse:
1
#include <avr/io.h>
2

3
class m1284usart
4
{
5
  private:
6
  //#define usartDataBuffer (*(volatile struct st_io    *)0x32)
7
    uint8_t buffer;
8
    #define F_CPU 8000000
9
    #define BAUD 9600
10
    #define MYUBRR F_CPU/16/BAUD-1
11

12
  public:
13
    void usart0SendByte(uint8_t byte);
14
    void usart1SendByte(uint8_t byte);
15
    void usart0SendString(uint8_t *string);
16
    void usart1SendString(uint8_t *string);
17
    void usart0Flush(void);
18
    void usart1Flush(void);
19

20

21
  m1284usart(unsigned long baudRate, unsigned long fCpu);
22
  ~m1284usart(void);
23
};

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.