Get the Flash Player to see this player.

time2online Joomla Extensions: Simple Video Flash Player Module


Get the Flash Player to see this player.

time2online Joomla Extensions: Simple Video Flash Player Module
Rs232

Jeśli ktoś akurat nie ma pod ręką wyświetlacza LCD, to może zastosować transmisję szeregową UART poprzez interface RS232 (popularny COM), który jest dostępny w niemal każdym mikrokontrolerze. Większość laptopów nie posiada gniazdka RS232, dlatego często są montowane konwertery RS232 na USB. Na naszej płytce zamontowany jest moduł FT232 (USB), który naśladuje RS232. Komputer wykrywa moduł USB jako COM. Żeby zobaczyć pod jakim numerem COM'a został zainstalowany, należy wejść Panel Sterowania-> Narzędzia Administratora ->Menadżer Urządzeń ->Porty USB i COM. Jeśli chcemy zmienić numer COM'a wystarczy wejść do opcji zaawansowane i ustawić odpowiadający nam numer.

Ważne!! nie każdy USB będzie działał poprawnie!!! Ja w moim laptopie mam 2 różne USB o dziwo na jednym działa wszystko aż miło na drugim nawet nie chce nic ruszyć. Dlatego ten kod co jest zamieszczony poniżej działał mi na 200% i może on być wyznacznikiem do napisania własnego programu.

Do odbioru i wysyłania danych po stronie komputera służy program Hyper Terminal. Niestety ten program w Windows7 nie jest już standardem (gdy się tym bawiłem, to był za darmo w każdym XP). Dlatego polecam także program Hercules, Wireshark, albo Terminal, który można ściągnąć z:

http://www.hw-group.com/products/hercules/index_en.html

http://sites.google.com/site/terminalbpp/

http://www.wireshark.org/

Tworzymy nowe połączenie na dole ustawiamy urządzenie przez które będziemy się łączyć (u nas jest to COM). Jest on dostępny w każdym Windows'ie. Ważną sprawą jest ustalenie tych samych opcji przesyłu zarówno po stronie komputera jak i po stronie mikrokontrolera. Standardowo ustalam to tak:

hyper

Ważną sprawą jest ustawienie sterowania przepływem na Brak, ponieważ jak się tego nie zaznaczy, to powstają jakieś cuda. Do samej konfiguracji UART po stronie mikrokontrolera służą rejestry UBRRL, UBRRH, UCSRB oraz UCSRC. Te nazwy mogą się różnić w zależności od tego jaki mamy mikrokontroler.

W rejestrze UBRRL ustawiamy szybkość transmisji. W nocie aplikacyjnej Atmegi16 jest napisane, że trzeba wpisać 51 żeby dostać 9600 bps, czyli tyle ile ustawiliśmy w hyper terminalu.

W rejestrze UCSRB odblokowaliśmy odbiornik, nadajnik oraz przerwanie wywołane przez odbiornik.

Następnie w rejestrze UCSRC załączyliśmy 1 bit stopu, 8 bit danych i brak bitu parzystości, czyli dokładnie tak samo jak skonfigurowaliśmy Hyper Terminal.

Do transmisji danych służy nam rejestr UDR. Jeśli wpiszemy tam jakieś dane przez mikrokontroler, to efekt uzyskamy na wyjściu Hyper Terminal'a. W naszym przypadku zaprezentowałem wysłanie literki 'a', na dwa różne sposoby. Po naciśnięciu PD6 w UDR pojawi się liczba 0x61 co w kodzie ASCII oznacza 'a', odsyłam do poprzedniego artykułu o wyświetlaczach. Natomiast gdy naciśniemy PD5 zmienna a typu char staje się literką 'a' po czym zostaje zrzutowana na liczbę integer i wpisana do rejestru transmisji.

program

#include <avr/interrupt.h>    // funkcje sei(), cli()
#include <stdio.h> 
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include "LCD.h"


SIGNAL(USART_RXC_vect)                        // odbior
{
LCD_send_1(UDR);

}

int main(void)
{
char a;

UBRRL = 51;  //predkosc 9600 uart
UCSRB =_BV(TXEN)|_BV(RXEN)|_BV(RXCIE);
UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Format ramki danych: 8-bitowe słowo, brak bitu parzystości, 1 bity stopu

sei();                // włącz obsługę przerwań 
DDRD = 0b00000000;
PORTD = 0xFF;
LCD_start();

while (1) 
{


if(bit_is_clear(PIND,PD6 ))
{ 
_delay_ms(1500);
if (bit_is_set(UCSRA,UDRE))
{
UDR=0x61; 
loop_until_bit_is_set(UCSRA,TXC);
}
}
if(bit_is_clear(PIND,PD5 ))
{
_delay_ms(1500);
a='a';
UDR = (int)a;
loop_until_bit_is_set(UCSRA,TXC);
}


}
}

 

Jest to pierwszy program, w którym wykorzystaliśmy przerwania, dlatego poświęcę chwilkę, żeby je omówić. Jak widzimy, żeby przerwania były dostępne w naszym programie, należy dodać standardowe biblioteki  avr/interrupt.h i avr/signal.h. Dzięki nim mamy dostęp do procedur, które wywołane są  dzięki określonym przerwaniom. W naszym przerwaniu (signal) odbieramy dane, które wysyłamy z klawiatury komputera za pomocą programu Hyper Terminal i od razu wyświetlamy je na ekran wyświetlacza za pomocą funkcji LCD_send_1(UDR). Przerwanie jest wywołane, gdy wszystkie dane zostaną sczytane i zapisane do UDR. Żeby przerwanie było wykonane należy w części inicjacyjnej użyć funkcji sei(), która włączy obsługę przerwań.

Program do pobrania tu pobierz