Skocz do zawartości

[serwokontroler] Mini Maestro 12


Pomocna odpowiedź

Dzięki panowie pomogliście. W razie wątpliwości będe pytał. Wiem że to nie ten temat ale gdzie mógłbym znaleźć sposób połączenia joysticka do ps2 z atmega:D

  • 1 miesiąc później...

Transmisja jest taka sama niezależnie od procesora, bo to jest wg. ustalonej specyfikacji. Wystarczy, że w Atmega8 ustawisz odpowiednio uart i wysyłasz te same komendy co w przykładzie.

  • Lubię! 1

Podłącz do komputera (przez transceiver rs232 do kupienia za kilka zł, albo gotowy moduł ft232 lub podobny) i sprawdź czy komputer dostaje odpowiednie pakiety przy odpowiednio ustawionym porcie (prędkość, ilość bitów stopu itd.)

No wiadomo że też tak może być ale w symulacji wszystkie bity rejestrów są ustawione tak jak wyżej. Mój kod wygląda mniej więcej o tak :

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

#define UART_BAUD 9600 

static void UART_init() 
{ 
UCSRB|=0x18;//ustawienie RXEN i TXEN 
UCSRC|=0x8e;//ustawienie URSEL UMSEL UCSZ0 UCSZ1 

UCSRC|=0x04;//ustawienie USBS 
} 

int main() 
{ 
UART_init(); 
DDRB|=0xff; 
while(UCSRA&0x20)//jeżeli UDR jest pusty 
   { 
   _delay_ms(1000); 
   UDR=0xaa;//Bajt startu 
   while(UCSRA&=~0x20);// oczekiwanie na wysłanie 
   UDR=0x0c;// Mini maestro 12 
   while(UCSRA &=(1<<TXC)); 
   UDR=0x04;//Komenda ustaw pozycje 
   while(UCSRA &=(1<<TXC)); 
   UDR=0x00;//kanał 0 
   while(UCSRA &=(1<<TXC)); 
   UDR=0x70; // pozycja neutralna dla serwa 
   while(UCSRA &=(1<<TXC)); 
   0UDR=0x2e; 
   while(UCSRA &=(1<<TXC)); 
   _delay_ms(1000); 
   /*analogicznie druga część*/ 
   UDR=0xaa; 
   while(UCSRA&=~0x20); 
   UDR=0x0c; 
   while(UCSRA&=~0x20); 
   UDR=0x04; 
   while(UCSRA&=~0x20); 
   UDR=0x00; 
   while(UCSRA&=~0x20); 
   UDR=0x40; 
   while(UCSRA&=~0x20); 
   UDR=0x2e; 
   while(UCSRA&=~0x20); 
   _delay_ms(1000); 


   } 
}

Na pierwszy rzut oka... gdzie ustawiasz rejestr UBRRH/L -> prędkość uarta?

Naprawdę podłącz to do komputera, sprawdź jak to działa i dopiero jak będziesz pewien, że do komputera wysyłasz poprawne komunikaty z poprawną prędkością itd. baw się z maestro.

Mam taki problem że gdy wpisuje UBBRH to wpisuje się w symulacji ta sama wartośc też do UCSRC mimo ustawienia bitu URSEL. Wg datasheet atmega8 dla zegara 8MHz oraz predkosci uart 9600 do UBRR nalezy wpisac 51 wiec wystarczy gdy to wpisze do UBRRL?

Wpisuje tą wartość do UBRRL ale i tak zas mi sie zmienia UBRRH (w symulacji) tak jak UCSRC mimo że ustawiam URSEL. A w dokumentacji ta wartość jest podana heksadecymalnie czy dziesiętnie?

W którym miejscu w dokumentacji?

W dokumentacji jest taka tabelka z wartością UBRR w zalezności od prędkości zegara i docelowej prędkosci UART. Z tego co pamiętam tam wartości są podane dziesiętnie

Po prostu nic tam nie wpisywać?

Powtórzę jeszcze raz.. opanuj transmisję z PC i wtedy z maestro pójdzie gładko. Inaczej nie wiesz co robisz, chyba, że masz analizator stanów logicznych lub oscyloskop...

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...