Forum: Mikrocontroller und Digitale Elektronik 5 und 6 Databits -> keine Datenübertragung


von Jan P. (jiss)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Purzel H. (hacky)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

manchmal muss man sich aber auch nach anderen schon bestehenden 
Gerätschaften richten :-)

von Jan P. (jiss)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Jan P. (jiss)


Lesenswert?

Es geht mir lediglich um die Möglichkeit umstellen zu können. Ob man es 
macht ist eine andere Frage.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Also: Die Möglichkeit, es umzustellen, hast Du, nur funktioniert das 
ganze nur mit Gegenstellen, die das auch können. USB-Seriell-Bridges 
können das halt i.d.R. nicht (weil die Unterstützung toter und schon 
längst weggeräumter Leichen unnötige Chipfläche verbrauchen würde).

von H.Joachim S. (crazyhorse)


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 :-)

von Jan P. (jiss)


Lesenswert?

OK, also mit der realen RS232 Schnittstelle funktioniert es ebenfalls 
nicht.
Ich habe folgende Konfiguration:

PC (USB2SER bzw. RS232) --> MAX232CPE --> ATMEGA644P

Ich tippe auf den MAX232CPE. Die Kommunikation von nem USB2SER Gerät zu 
einem PC mit realem RS232 funktioniert auch mit 5 und 6 Bits.

von Sebastian H. (sebihepp)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.