5 und 6 Databits -> keine Datenübertragung

OP #2259840
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
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
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.
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 :-)
Vielleicht liegt das Problem ganz wo anders. ;)

Mit 5 Bits kannst du 32 Werte darstellen. Wenn du ASCII-Code versendest, 
dann sind die ersten ca. 30 Werte nur Steuerzeichen. Die Buchstaben 
beginnen bei ASCII erst bei 64, also kannst du mit 5 und 6 Bits keine 
Buchstaben senden.

Antwort schreiben

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