mam nastepujaca zagwostke ...
oto moj kod prostego programu:
jak kazdy widzi, program ma za zadanie wyslanie znakow alfabetu oraz tego znaku, jaki nacisnie uzytkownik na klawiaturze PCta, wszystko ladnie i pieknie chodzi, jesli predkosc jest nie wieksza niz 28800 bodow, powyzej tej wartosci pojawiaja sie duze przeklamania przy wysylaniu znaku z PCta na uC, natomiast w druga strone wszystko jest ok. (wszystkie instrukcje typu "USART_Transmit('Z');" realizowane sa poprawnie). Moim zadaniem jest uzyskanie predkosci 115,2k, niestety poprawna komunikacja jest przy 3 razy nizszej:/ ... oczywiscie uzywam zewn. kwarcu 11,0592MHz, z dwoma C = 22pF (oczywiscie fuse bits sa dostosowane). Uzywam rowniez kosci FTDI jako modulu MMusb232RL, zakupionego w propoxie, co do konfiguracji tego modulu jest ok, gdyz korzystalem z wytycznych manuala. Co do kabli ... sa one krotkie,zamienialem je na inne i nadal nic. Nie wiem co moze byc nie tak, gdybym cos zle poustawial to transmisja w obie strony nie bylaby poprawna na mniejszych predkosciach... . Z gory dzieki za jakiekolwiek sugestie, pozdr
oto moj kod prostego programu:
#include <avr/io.h>
#include <avr/signal.h>
#include "uart.h"
//register unsigned char data_uart asm("r15");
unsigned char data_uart; //dana
**********************************************************************************************/
/*PROGRAM GLOWNY*/
/**********************************************************************************************/
int main( void )
{
USART_Init (17); //9,6k=71;14,4k=47;19,2k=35;28,8k=23;38,4k=17;57,6k=11;76,8k=8;115,2k=5
while(1)
{
data_uart = USART_Receive();
USART_Transmit(data_uart);
USART_Transmit('\n');
USART_Transmit('a');
//...
USART_Transmit('Z');
USART_Transmit('\n');
}
return(0);
}
/**********************************************************************************************/
/*FUNKCJE deklaracje*/
/**********************************************************************************************/
void USART_Init( unsigned int baud )
{
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
UCSRB = (1<<RXEN)|(1<<TXEN);//|(1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
/**********************************************************************************************/
/*WYSYLANIE*/
void USART_Transmit ( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE))) ;
UDR = data;
}
/**********************************************************************************************/
/*ODBIOR*/
unsigned char USART_Receive( void )
{
while ( !(UCSRA & (1<<RXC)) );
return UDR;
}
jak kazdy widzi, program ma za zadanie wyslanie znakow alfabetu oraz tego znaku, jaki nacisnie uzytkownik na klawiaturze PCta, wszystko ladnie i pieknie chodzi, jesli predkosc jest nie wieksza niz 28800 bodow, powyzej tej wartosci pojawiaja sie duze przeklamania przy wysylaniu znaku z PCta na uC, natomiast w druga strone wszystko jest ok. (wszystkie instrukcje typu "USART_Transmit('Z');" realizowane sa poprawnie). Moim zadaniem jest uzyskanie predkosci 115,2k, niestety poprawna komunikacja jest przy 3 razy nizszej:/ ... oczywiscie uzywam zewn. kwarcu 11,0592MHz, z dwoma C = 22pF (oczywiscie fuse bits sa dostosowane). Uzywam rowniez kosci FTDI jako modulu MMusb232RL, zakupionego w propoxie, co do konfiguracji tego modulu jest ok, gdyz korzystalem z wytycznych manuala. Co do kabli ... sa one krotkie,zamienialem je na inne i nadal nic. Nie wiem co moze byc nie tak, gdybym cos zle poustawial to transmisja w obie strony nie bylaby poprawna na mniejszych predkosciach... . Z gory dzieki za jakiekolwiek sugestie, pozdr
