5 und 6 Databits -> keine Datenübertragung

OP #2259840
Lesenswert?

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
Persönliche Seite #2259892
Lesenswert?

Jan Peukert schrieb:
> Nun habe ich das Problem, dass die Datenübertragung bei 7 und 8
> Datenbits einwandfrei funktioniert, bei 5 und 6 Datenbits jedoch nicht.

Das ist kein echtes Problem, da diese sehr exotischen Übertragungsarten 
außer mit steinzeitlichen Fernschreibern nirgends verwendet werden.

Die Original-UART des PCs (8250 bzw. 16550) unterstützt diese 
Übertragungsarten, aber z.B. USB-Seriell-Bridges wie FTDI FT232 
unterstützen nur 7- und 8-Bit-Betrieb.
OP #2259970
Lesenswert?

Oktav Oschi schrieb:
> Ich wuerd solche Spielereien seinlassen und immer 8-n-1 verwenden. Dann
> kann man fuer die naechsten 30 Jahre denselben code verwenden und muss
> nicht weiter drueber nachdenken.


Ich hab es jetzt mit zwei USB-RS232-Umsetzern probiert. Bei beiden das 
gleiche Phänomen. Ich habe aber die Möglichkeit es gleich an einem 
Laptop mit echtem RS232 zu testen. Ich werde dann berichten, ob es damit 
klappt.
#2260083
Lesenswert?

Rufus Τ. Firefly schrieb:
> H.joachim Seifert schrieb:
>> manchmal muss man sich aber auch nach anderen schon bestehenden
>> Gerätschaften richten
>
> Das mag schon sein, aber welche bitte von steinzeitlichen Fernschreibern
> abgesehen nutzen 5 bzw. 6 Bits?

Kenn ich auch nicht, war aber auf Antwort auf Oschis

>Ich wuerd solche Spielereien seinlassen und immer 8-n-1 verwenden.

gedacht :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren