24. Lektion: UARTAus Attraktor WikiVersion vom 11. Januar 2024, 17:26 Uhr von Kapest (Diskussion | Beiträge) Inhaltsverzeichnis
|
Bitrate | Bitdauer |
---|---|
50 bit/s | 20,0 ms |
110 bit/s | 9,09 ms |
150 bit/s | 6,67 ms |
300 bit/s | 3,33 ms |
1.200 bit/s | 833 µs |
2.400 bit/s | 417 µs |
4.800 bit/s | 208 µs |
9.600 bit/s | 104 µs |
19.200 bit/s | 52,1 µs |
38.400 bit/s | 26,0 µs |
57.600 bit/s | 17,4 µs |
115.200 bit/s | 8,68 µs |
230.400 bit/s | 4,34 µs |
460.800 bit/s | 2,17 µs |
921.600 bit/s | 1,08 µs |
2.000.000 bit/s | 500 ns |
3.000.000 bit/s | 333 ns |
Pegel
Die Spannungspegel sind wie folgt zugeordnet:
- Logisch 0 - Space = +12V
- Logisch 1 - Mark = -12V
Die Spannung kann 3...15V betragen.
In der Microcontrollertechnik wird der Aufwand der positiven und negativen Spannungen nicht realisiert. Hier wird die Betriebsspannung (5V, 3V3) als Logisch 1 und GND als Logisch 0 verwendet. Das wird als TTL bezeichnet, in Anlehung an die digitale TTL Famile, die mit 5 Volt arbeitet.
Synchron/Asynchron
Synchron
Bei einer synchronen Übertragung werden Daten und Takt parallel übertragen, so dass die Daten immer mit dem Takt synchron sind. Selbst bei langen Übertragungen werden die Daten immer zum richtigen Zeitpunkt abgetastet. Beispiele hier für sind SPI und I2C.
Asynchron
Bei der asynchronen Übertragung wird kein Takt übertragen. Deshalb muss das Timing von Sender und Empfänger sehr genau sein. Da sich ein Auseinanderlaufen des Timings bei Sender und Empfänger nicht vermeiden lässt, muss bei der asynchronen Übertragung immer wieder eine Synchronisierung zwischen Sender und Empfänger stattfinden. Dazu dient das Startbit. Wenn es vom Empfänger dedektiert wird beginnt sein Timing bei Null. Die Übereinstimmung vom Sender- und Empfängertiming muss dann nur noch << 8% sein.
Die Klasse UART in Micropython
Die Klasse UART befindet sich im Modul machine
. Sie enthält folgende Methoden:
- machine.UART(id, ...)
- UART.init(baudrate=9600, bits=8, parity=None, stop=1, *, ...)
- UART.deinit()
- UART.any()
- UART.read([nbytes])
- UART.readinto(buf[, nbytes])
- UART.readline()
- UART.write(buf)
- UART.sendbreak()
- UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)
UART im Raspberry Pi Pico W
In Microcontrollern sind häufig USART's implementiert. Das sind UART's die auch synchrone Übertragungen ermöglichen.
There are two UARTs, UART0 and UART1. UART0 can be mapped to GPIO 0/1, 12/13 and 16/17, and UART1 to GPIO 4/5 and 8/9.
TX | RX |
---|---|
0 | 1 |
12 | 13 |
16 | 17 |
TX | RX |
---|---|
4 | 5 |
8 | 9 |
Die default Einstellungen sind:
>>> print(UART(0)) UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=0, rx=1, txbuf=256, rxbuf=256, timeout=0, timeout_char=1, invert=None) >>> print(UART(1)) UART(1, baudrate=115200, bits=8, parity=None, stop=1, tx=4, rx=5, txbuf=256, rxbuf=256, timeout=0, timeout_char=1, invert=None)
Eine Instanz von UART hat folgende 'Eigenschaften:
>>> from machine import UART >>> uart = UART(0) >>> print(uart) UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=0, rx=1, txbuf=256, rxbuf=256, timeout=0, timeout_char=1, invert=None) >>> dir(uart) ['__class__', '__next__', 'any', 'read', 'readinto', 'readline', 'write', 'CTS', 'INV_RX', 'INV_TX', 'RTS', 'deinit', 'flush', 'init', 'sendbreak', 'txdone']