Skocz do zawartości

[SOLVED] ATtiny13A Serial (tylko tx) na 9.6 MHz - ktoś coś?


ethanak

Pomocna odpowiedź

Hej.

Mam taki kaprys - uruchomić transmisję serial z ATtiny13A (prędkość dowolna, może być 1200 abym z terminala w kompie to odebrał), w dodatku z ustawieniem wewnętrznego zegarka na 9.6MHz.

Niestety - próbowałem czegoś takiego, najniższa możliwa prędkość wyszła 57600, owszem, coś się wysyła ale to co odbieram ma niewiele wspólnego z tym co wysłałem.

Domyślam się że to problem w niestabilności częstotliwości wewnętrznego oscylatora... tylko niespecjalnie interesuje mnie informacja że to nie może działać z takiego to a takiego powodu, ale działająca transmisja... sugestie zmiany taktowania również są niemile widziane (patrz pierwsze zdanie).

Coś ktoś wie na ten temat?

po przespaniu się i kawie

Mogłem sobie darować szukanie - szybciej było napisać.

Jakby ktoś potrzebował (działa z prędkością 9600):

#ifndef F_CPU
# define        F_CPU           (9600000UL) 
#endif  /* !F_CPU */

#include <util/delay.h>
#include <avr/io.h>

#define UART_DELTA -11
#define UART_US ((10000 / 96) + UART_DELTA)
#define UART_PIN PB3

#define uart_put_bit(a) do { if (a) PORTB |= (1<<PB3);\
    else PORTB &= ~(1<<PB3);\
    _delay_us(UART_US); } while(0)
    
void uart_put_byte(unsigned char bte)
{
    uart_put_bit(0); //start bit
    for (unsigned char i = 0x1; i ; i <<= 1) uart_put_bit(bte & i);
    uart_put_bit(1); // stop bit
}

int main(void)
{
  DDRB |= (1 << PB3);
  PORTB |= (1 << PB3);
  /* tu dalsza część programu */
}

Stałą UART_DELTA trzeba sobie znaleźć 🙂

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

Dnia 27.04.2019 o 19:00, ethanak napisał:

Stałą UART_DELTA trzeba sobie znaleźć 🙂

W dłuższej perspektywie i tak się rozjeżdża, nie pozostaje nic innego jak kwarc uartowy albo nawiązywanie połączenia od nowa kiedy zaczynają się błędne ramki. Dzięki za zwrócenie uwagi na tę pchełkę atiny13a, akurat podpasowała. Apropo, tego typu soft lepiej pisać w asm. Pozdr

AVR Instruction Set Manual

Link do komentarza
Share on other sites

O co chodzi z tym rozjeżdżaniem? Używam czegoś takiego z załącznika z prędkością 115200 i nic się nie rozjeżdża. W Attiny problem m ógłby być odbieranie, ale jako TX do debug można bajty przerzucać nawet łopatą. W najprostszej wersji tej biblioteki od Ralph Doncaster całość z wysłaniem 1 znaku zajmuje 76B. Problemem są niższe prędkości niestety, dla 9.6MHz dobrą prędkością jest 115200 czy 230k, inne od 28800 powinny działać OK. Jak to jest terminal PC to chyba im szybciej tym lepiej...

Attiny13A_SoftUARTA.zip

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.