UART kontra USART w 90S2313 i Tiny2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
michul1
-
Posty: 3
Rejestracja: 06 sie 2006, 12:02
Lokalizacja: Tychy

UART kontra USART w 90S2313 i Tiny2313

Post autor: michul1 » 06 sie 2006, 12:07

Witam,
mam program napisacy w bascomie po kompilacji i wgraniu do 90S2313 wszytko jest ok, po załadowaniu to Tiny2313 wszytko działa z wyjątkiem komunikacji po RS-232, z tego co czytałem to w tiny jest inny układ transmisji bardziej rozbudowany. I pytanko jako zmiany trzeba wprowadzić aby wszystko było ok?

Z 'góry' dzięki

ZbeeGin

Post autor: ZbeeGin » 06 sie 2006, 13:59

Problem z Tiny2313 to jego bity konfigurujące (fuse bits). Jeśli ich nie zmieniałeś to procesor pracuje z częstotliwością 1MHz (wewnętrzny oscylator 8MHz z podziałem przez 8 ) i dlatego komunikacja nie działa.

:arrow: Opisz w jaki sposób będziesz taktował procesor (kwarc, układ RC, zewnętrzny lub wewnętrzny oscylator) i z jaką częstotliwością będzie miał pracować. Wtedy możemy Ci zaproponować jak ustawić te bity.

michul1
-
Posty: 3
Rejestracja: 06 sie 2006, 12:02
Lokalizacja: Tychy

Post autor: michul1 » 06 sie 2006, 15:39

Układzik mam na kwarcu 4MHz, i potrzebuje uzyskać transmisje z szybkością 9600. Jeżeli była by możliwośc proszę o pomoc jak zrobic to przy pomocy bascoma i ewentualnie jak co zrobić jak bym chciał inną prędkość transmisji?

Z 'góry' dzięki

ZbeeGin

Post autor: ZbeeGin » 06 sie 2006, 18:36

OK. Najpierw zajmijmy się bitami konfiguracji ATTiny2313. AT90s2313 nie jest aż tak skomplikowany, więc nie trzeba go konfigurować. Zakładam też, że używasz programatora wbudowanego w BASCOM, gdyż tam jest o wiele łatwiej i trudniej o błąd.

Uruchamiasz programator ze środowiska BASCOM-a i po poprawnym wykryciu procesora na liście Chip powinien się pojawić ATtiny2313. Pod spodem znajdują się zakładki, z których wybierasz Lock and Fuse Bits. Po chwili w oknie powinna się pojawić bieżąca konfiguracja odczytana z układu. Jeśli się nie pojawi - naciśnij Refresh. W części Fusebits klinij na linię Fusebit C i z rozwijanej listy obok wybierz 1 : Divide clock by 8 disabled. Teraz klinij na linię Fusebit A987 i znów z listy wybierz jedną z dwóch ostatnih pozycji xxxx : xxxx external XTAL. Teraz naciśnij odbokowany przycisk Write FS po prawej. Jeśli masz podłączony i prawidłowo działający kwarc to ponowna identyfikacja procesora powinna odbyć się bez problemów. Aby sprawdzić czy ustawienia się zachowały naciśnij Refresh.
Reszta bitów nas w tej chwili nie interesuje. Lecz muszę Ci zwrócić uwagę na dwa z części Fusebits High: Fusebit I oraz Fusebit D. Pod żadnym pozorem nie zmieniaj ich bez wyraźnej potrzeby! Straciłbyś w ten sposób możliwość programowania procesora w układzie - przez ISP.


Teraz zajmiemy się transmisją. Aby transmisja przebiegała wg Twoich założeń, to na początku programu powinny się znaleźć dwie dyrektywy:

Kod: Zaznacz cały

$crystal = 4000000
$baud = 9600
Pierwsza określa w Hz czestotliwość z jaką pracuje procesor, np. częstotliwość kwarcu. Druga zaś określa prędkość transmisji w bodach (bps) z jaką będzie pracował układ U(S)ART. Tu także drobna uwaga: Jeśli użyjesz $BAUD to musisz użyć także $CRYSTAL, gdyż te dyrektywy powinny występować razem (odwrotnie już nie trzeba).

Warto jescze w pierwszej linijce programu dopisać:

Kod: Zaznacz cały

$regfile "attiny2313.dat"
by kompilator wiedział z jakim procesorem będzie miał do czynienia.
Ostatnio zmieniony 07 sie 2006, 16:35 przez ZbeeGin, łącznie zmieniany 2 razy.

michul1
-
Posty: 3
Rejestracja: 06 sie 2006, 12:02
Lokalizacja: Tychy

Post autor: michul1 » 06 sie 2006, 19:42

Wielkie dzięki, po wykonaniu wszytkiego według powyższej instrukcji wszystko działa poprawnie. Naprawdę wielkie dzięki, za przyśpieszenie dalszej pracy nad projektem.

Pozdrawiam

ODPOWIEDZ