Allgemeine Verständnisfrage RS Datenüerbtragung.

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von Maik81SE »

Moin @ll,

ich weiß, das viele jetzt den Kopf schütteln werden, aber dennoch nehm ich den Lacher in kauf um eine Grundlegende Frage zu stellen.

Vorweg:
Fakt ist das die Übertragung wie folgt im kern stattfindet.

Startbit (L), bis zu 8 Datenbits, Parity Bit (L) und bis zu 2 StopBit (H).
Was sich mir nun aber entzieht, ist die Info, ob das Start, Parity und StopBit immer mitgesendet werden muß oder nur wenn man unter zB 5 MCUs ein Datennetzwerk aufbauen will, bzw ob diese Überhaupt atkiv übertragen werden müssen.

Habe mir in den letzten Wochen eine ASM-Procedure gebaut, auf avr-sim erfolgreich getestet, jedoch zeigt mir mein ATTiny85 und/oder RS232 - USB Umsetzer den Mittelfinger.

bei dem Test habe ich folgende Parameter ins Auge gefasst.

[*]8 MHz = 0,125 nS / CLK
[*]9600 Baud ~ 104,125 µS / Baud
[*]Fuses (-U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m)

Code: Alles auswählen

procedure RS485_SendByte(value: byte); assembler; nostackframe;
label Daten, H_Bit, L_Bit, Loop_01, Loop_02, Loop_03, Loop_04,
      Loop_05, Loop_06, Next;
asm
  sei
  sbi   23, _RX                                                                 
  ldi  r16, 2                                                                   // Softteiler High alle Loops
  ldi  r17, 17                                                                  // Softteiler Low  Start
  ldi  r20, 19                                                                  // Softteiler Low  Parität
  ldi  r24, 3                                                                   // Zusatzschleife für Letztes Datenbit
  ldi  r21, 21                                                                  // Softteiler Low  Stop
  mov  r22, value                                                               // Daten Kopieren
  ldi  r23, 8                                                                   // länge der Datanbits definieren

// Startbit senden
  cbi  24, _RX
  nop
  Loop_01:                                                                      // begin der ersten Schleife
  dec  r17
  brne loop_01
  dec  r16
  brne loop_01                                                                  // Dauer der Schleife = 104,125 µs

// Datenbyte senden
Daten:
  ldi  r16, 2
  ldi  r18, 16
  ldi  r19, 16
  ror  r22
  brcs H_Bit
  brcc L_Bit

// H_Datenbit senden
H_Bit:
  nop
  sbi  24, _RX
Loop_02:
  dec  r19
  brne Loop_02
  dec  r16
  brne Loop_02
  rjmp Next

// L_Datenbit senden
L_Bit:
  nop
  cbi  24, _RX
Loop_03:
  dec  r18
  brne Loop_03
  dec  r16
  brne Loop_03
  rjmp Next

Next:
  dec r19
  brne Daten

// Restschleife für das Letzte Datenbit
  ldi  r16, 2
Loop_04:
  dec r24
  brne Loop_04
  nop

// Parity Bit senden Test ob Nötig (07.02.2022) https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Rs232_oscilloscope_trace.svg/330px-Rs232_oscilloscope_trace.svg.png
  cbi  24, _RX
  ldi  r16, 2
Loop_05:
  dec  r20
  brne Loop_05
  dec  r16
  brne Loop_05
  ldi  r16, 2
  nop 

// Stop Bit senden
  sbi  24, _RX
Loop_06:
  dec  r21
  brne Loop_06
  dec  r16
  brne Loop_06
  cli
end;
Das Timing ist von mir so angesetzt, das die Zeit genau mit dem ende SBI/CBI und dem Ende des nachfolgenden SBI/CBI 104,00 - 104,25 µS beträgt.

DIes entspricht einer Datenübertragung von 9615,4 bis 9562,3 Baud und damit weit unter 1% was den fehler angeht.

Wünsche euch einen angenehmen Samstag

Gruß Maik
Zuletzt geändert von Maik81SE am Mo 7. Feb 2022, 06:52, insgesamt 2-mal geändert.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von af0815 »

Du kannst übertragen wie du willst. Das mit den Startbit, Datenbits, Parity und Endbit ist nur festgelegt, damit alle vom selben reden. Eine Normung halt.

Wenn du für dich etwas machst ist es komplett egal, ob du dich an eine Norm hältst oder nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von Maik81SE »

af0815 hat geschrieben:
Sa 5. Feb 2022, 16:51
Du kannst übertragen wie du willst. Das mit den Startbit, Datenbits, Parity und Endbit ist nur festgelegt, damit alle vom selben reden. Eine Normung halt.

Wenn du für dich etwas machst ist es komplett egal, ob du dich an eine Norm hältst oder nicht.
Soweit hab ich diverse Dokumentationen verstanden.
Was ich aber Nicht gefunden habe, ich ob Standard (RS - USB Umsetzer, welche man überall kaufen kann) dies benötigen, wenn man am Ausgang eine MCU anhängt und mit 'ner SOFT-UART betreibt oder nicht.

Nachtrag
Ich sehe es von der Seite:
Wenn ich nicht weiß, ob meine Soft-UART mit einem Wald-und-Wiesen-RS232-Umsetzer nicht läuft, brauch ich erst gar weiter versuchen ein RS485-Nerzwerk auf dieser Basis aufzubauen.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von kupferstecher »

Was ist denn deine Gegenstelle?

Eine häufige Konfiguration ist 8 Datenbit, kein Patritätsbit und 1 Stopbit, vielleicht bekommst du es damit ja zum Laufen.

Beide Seiten der Kommunikation müssen die gleichen Einstellungen haben. Es geht ja darum, wie welches Bit im Datenstrom interpretiert wird. Normalerweise müsste in jedem handelsübliche USB-UART-Konverter die Konfiguration einstellbar sein.

Noch eine Sache, du redest von RS232, das arbeitet nicht mit einfachen Logikpegeln. Es wäre also die Frage, ob deine Platine überhaupt RS232 ausgibt oder "nur" die Logikpegel. Dafür brauchst du dann eben einen USB-UART-Konverter und keinen USB-RS232-Konverter.

Ein typischer Fehler ist noch RX an RX und TX an TX anzuschließen, anstatt zu kreuzen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von af0815 »

Wenn es ein reiner Pegelumsetzer ist, so ist das Protokoll egal. Alles was so UART mässig ist, ist auf Standardprotokoll ausgelegt. RS485 ist auch nur eine Signalpegel Gescichte.

Der UART deserialisiert oder serialisiert dir ja das Signal. Vereinfacht gesprochen, sendest du zB. einen 8 Bit Wert an den UART. Der schickt es seriell über die Leitung und auf der anderen Seite, sammelt der UART die seriellen Bits, ist das fertig, macht der einen Interrupt und der Fertige 8 Bit Wert kann parallel abgeholt werden. Deswegen dort das standardisierte Protokoll.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Allgemeine Verständnisfrage RS Datenüerbtragung.

Beitrag von Maik81SE »

kupferstecher hat geschrieben:
Sa 5. Feb 2022, 18:49
Was ist denn deine Gegenstelle?
Am PC hängt ein USB-UART-Konverter, dieser geht auf einen ATTiny85.
Vertauschte Datenleitung kann ich ausschließen.
kupferstecher hat geschrieben:
Sa 5. Feb 2022, 18:49
Eine häufige Konfiguration ist 8 Datenbit, kein Patritätsbit und 1 Stopbit, vielleicht bekommst du es damit ja zum Laufen.
Geladen wird meine Konsole mit

Code: Alles auswählen

picocom /dev/ttyUSB0 -b 9600 -y n -p 1
picocom v2.2

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,
ich hab noch NIE mir einer anderen gearbeitet, hab ich auch nicht vor.
kupferstecher hat geschrieben:
Sa 5. Feb 2022, 18:49
Beide Seiten der Kommunikation müssen die gleichen Einstellungen haben. Es geht ja darum, wie welches Bit im Datenstrom interpretiert wird. Normalerweise müsste in jedem handelsübliche USB-UART-Konverter die Konfiguration einstellbar sein.
Und genau ist der Hase nun im Pfeffer begraben, wenn ich mir mein og. Code anschaue, sende ich das Startbit "0", die 8 Datenbits, das Parity "0" und ein StopBit "1".

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Antworten