Hallo,
ich habe die Möglichkeit geschaffen über ein Display die Rahmendaten für
die USART-Übertragung bei einem ATMega644P zu ändern. Das geschieht für
die Datenbits mit folgendem Programmcode
1 | // refresh menu line and set databits for USART communication
|
2 | switch (menu_values->config_usart.databits)
|
3 | {
|
4 |
|
5 | case DB_5 : // refresh menu line to display
|
6 | strcpy(menu_values->content.line_menu[MENU_LEVEL_CONFIG_USART_DATABITS].text, " 2 databits: 5 ");
|
7 | // set databits register
|
8 | UCSR0B &= ~(1 << UCSZ02);
|
9 | UCSR0C &= ~(1 << UCSZ01) & ~(1 << UCSZ00);
|
10 | break;
|
11 | case DB_6 : // refresh menu line to display
|
12 | strcpy(menu_values->content.line_menu[MENU_LEVEL_CONFIG_USART_DATABITS].text, " 2 databits: 6 ");
|
13 | // set databits register
|
14 | UCSR0B &= ~(1 << UCSZ02);
|
15 | UCSR0C &= ~(1 << UCSZ01);
|
16 | UCSR0C |= (1 << UCSZ00);
|
17 | break;
|
18 | case DB_7 : // refresh menu line to display
|
19 | strcpy(menu_values->content.line_menu[MENU_LEVEL_CONFIG_USART_DATABITS].text, " 2 databits: 7 ");
|
20 | // set databits register
|
21 | UCSR0B &= ~(1 << UCSZ02);
|
22 | UCSR0C |= (1 << UCSZ01);
|
23 | UCSR0C &= ~(1 << UCSZ00);
|
24 | break;
|
25 | default :
|
26 | case DB_8 : // refresh menu line to display
|
27 | strcpy(menu_values->content.line_menu[MENU_LEVEL_CONFIG_USART_DATABITS].text, " 2 databits: 8 ");
|
28 | // set databits register
|
29 | UCSR0B &= ~(1 << UCSZ02);
|
30 | UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);
|
31 | break;
|
32 | }
|
Nun habe ich das Problem, dass die Datenübertragung bei 7 und 8
Datenbits einwandfrei funktioniert, bei 5 und 6 Datenbits jedoch nicht.
Dort erhalte ich nur seltsame Zeichen in HTerm.
Woran kann das liegen? Die restlichen Einstellungen liegen bei 9600bps,
1 Stopbit, keine Parität