BASCOM-AVR software UART na ATtiny25 – konfiguracja, prędkości, ograniczenia

Pytanie

software uart bascom attiny25

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Tak, na ATtiny25 można uruchomić w BASCOM-AVR w pełni funkcjonalny programowy (software) UART, korzystając z komend OPEN, SERIN/SEROUT lub własnych procedur „bit-bang”.
  • Kluczowe punkty: brak sprzętowego USART, konieczność precyzyjnego timingu, sensowne prędkości ≤ 9600 baud przy wewnętrznym 8 MHz, możliwość użycia dowolnych pinów lub modułu USI w trybie pół-dupleks.

Bezpośrednia odpowiedź na pytanie

Szczegółowa analiza problemu

  1. Mikrokontroler i ograniczenia
    • ATtiny25 (2 kB Flash, 128 B RAM) nie ma modułu USART; posiada tylko Timer0/1 i uniwersalny interfejs USI.
    • Software UART obciąża CPU; każda ramka 10 bitów przy 9600 baud zajmuje ≈ 1,04 ms.

  2. Model czasowy UART
    • Start (0), 8 bitów danych (LSB-first), stop (1). Precyzja ±2 % dla zegara.
    • W BASCOM biblioteka swuart.lbx wykorzystuje Timer0 i przerwanie pin-change (RX).

  3. Implementacja w BASCOM

    $regfile = "attiny25.dat"
    $crystal = 8000000                 ' dokładny takt!
    $hwstack = 32 : $swstack = 10 : $framesize = 40
    '--- definicja pinów -------------------------------------------------------
    Const TxPin = Portb.0                      'Tx  PB0   (nóżka 5 DIP)
    Const RxPin = Portb.1                      'Rx  PB1   (nóżka 6 DIP)
    '--- kanały software UART --------------------------------------------------
    Open "comb.0:9600,8,n,1" For Output As #1  'TX
    Open "comb.1:9600,8,n,1" For Input  As #2  'RX (opcjonalnie)
    Do
     Print #1 , "Hello from ATtiny25", CrLf
     If Ischarwaiting(#2) Then
         Dim c As Byte : c = Inkey(#2)
         Print #1 , "RX=" ; Chr(c)
     End If
     Waitms 1000
    Loop

    • Jeżeli potrzebujesz tylko nadawania – otwórz wyłącznie kanał TX (mniej kodu, szybsza praca).
    SEROUT TxPin ,9600 ,Data/SERIN RxPin ,9600 ,Var ‑ alternatywa przy prostych aplikacjach.

  4. USI jako pół-dupleksowy UART

  • Kod z noty AVR307 lub repozytoriów GitHub („USI-UART-attiny85”) pozwala osiągnąć > 38 400 baud, przy mniejszym obciążeniu CPU. W BASCOM trzeba dodać plik ASM i wywołać go poprzez ! .include "usi_uart.asm" lub użyć komend INLINE.
  1. Testowanie i kalibracja
    • Oscyloskop/analizator logiczny: sprawdź czas bitu (powinno być 104 µs dla 9600).
    • Kalibracja RC-oscylatora: odczyt OSCCAL, skoryguj fusy lub wpisz wartość w OSCCAL = &Hxx. Dla prędkości > 19200 baud zalecany kwarc 7,3728 MHz lub 9,216 MHz.

  2. Praktyczne zastosowania

  • Debug przez USB-TTL (FT232/CH340).
  • Sterowanie modułami GSM, BLE, GPS, gdy Tiny25 wystarcza funkcjonalnie, a liczba pinów jest krytyczna.

Aktualne informacje i trendy

▪ Repozytoria online (2023-2024) oferują zoptymalizowane biblioteki:
– ArminJo/ATtinySerialOut → jedynie TX, 115 200 baud przy 16 MHz.
– BecomingMaker – pełny USI-UART TX/RX, kompatybilny z Tiny25/45/85.
▪ W nowych rodzinach AVR 0/1-series (np. ATtiny202) firma Microchip wróciła do pełnego USART – w przyszłych projektach warto rozważyć migrację, zamiast „męczyć” soft-UART.
▪ Kompilator BASCOM-AVR 2.1.9.9 (kwiecień 2024) dodał dyrektywę CONFIG SERIALIN = INTERRUPT, usprawniając bufor 32 B dla programu odbiornika.

Wspierające wyjaśnienia i detale

• Porównanie czasów (8 MHz):

Baud Błąd RC ±10 % Błąd po kalibracji ±1 % Czas znaku
2400 ±0,5 % ±0,05 % 4,17 ms
9600 ±2,0 % ±0,2 % 1,04 ms
19200 ±4,1 % (ryzyko błędów) ±0,4 % 0,52 ms

• Analogia: Soft-UART to „morse’owy telegraf” – procesor musi „stuknąć” każdy bit w dokładnym rytmie, więc nie może w tym czasie robić nic innego.

Aspekty etyczne i prawne

  • Zgodność EMC: długie przewody TX/RX emitują zakłócenia; stosuj skrętki, rezystory szeregowe 100 Ω, filtr RC na Vcc.
  • ESD/ochrona: interfejs TTL-RS232 wymaga bufora (MAX3232) – ochrona przed +/- 12 V.
  • Prywatność: transmisja UART jest nieszyfrowana – w aplikacjach IoT dodaj warstwę szyfrowania (np. AES w warstwie aplikacji).

Praktyczne wskazówki

  1. Implementacja
    a) Zacznij od TX-only; gdy działa – dodaj RX.
    b) Wyłącz zbędne przerwania (Config Timer1 = Off) podczas transmisji.
    c) Buforuj dane w RAM przed wysyłką, aby skrócić blokujące wywołania Print.

  2. Najlepsze praktyki
    – Stosuj makro Disable Interrupts : Print ... : Enable Interrupts dla długich bloków TX.
    – Testuj z konwerterem USB-TTL opartego na FTDI (szybsza enumeracja, stabilny driver).

  3. Wyzwania
    • Kolizje RX/TX w half-duplex – dodaj opóźnienie > 3 znaki pomiędzy kierunkami.
    • Przeciążenie timerów – soft-PWM na Timer0 koliduje z biblioteką UART; przenieś PWM na Timer1.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • 2 kB Flash szybko się kończy; pełny dupleks BASCOM+inne biblioteki może przekroczyć 2048 B.
  • Prędkości powyżej 19200 baud przy 8 MHz wymagają kwarcu i minimalizacji przerwań – w praktyce wybierz 9600 baud.
  • Alternatywa: wykorzystaj interfejs V-USB (USB-CDC) – Tiny25 może bezpośrednio gadać z PC bez UART.

Sugestie dalszych badań

• Porównanie wydajności: software UART vs. USI-UART vs. nowy AVR0-series z USART.
• Implementacja enkapsulacji HDLC lub SLIP na soft-UART dla prostych sieci sensorów.
• Przetestuj biblioteki:
https://github.com/ArminJo/ATtinySerialOut
https://becomingmaker.com/usi-serial-uart-attiny85/
– Nota aplikacyjna AVR307 (Microchip).

Krótkie podsumowanie

Programowy UART w BASCOM-AVR na ATtiny25 jest możliwy i praktyczny do prostych zadań debug- lub komunikacyjnych: wybierz piny, ustaw dokładny zegar, zastosuj komendy OPEN/SERIN/SEROUT lub moduł USI, trzymaj się 9600 baud, testuj oscyloskopem. Przy większych wymaganiach (przepustowość, pełny dupleks, niski udział CPU) rozważ migrację do mikrokontrolera z wbudowanym USART lub implementację USI-UART.

Oceń odpowiedź:

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (1min)...
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.