Witam,
Komunikuję się z komputerem PC za pośrednictwem protokołu RS232 wykorzystując do tego celu USART ATmegi8 aktualnie ustawiony na:
- transmicja 8-bitowa (dla 7-bitowej wszystko przebiega zgodnie z zalozeniem),
- 1 bit stopu (identyczna sytuacja dla 2 bitow),
- 2400 bps...
Podczas przesyłania danych wystepują zakłócenia na najstarszym bicie.
**********************************************************
Fragmenty kodu kontrolera:
(...)
void usart_ini(unsigned int baud){
UBRRH = (unsigned char) (baud>>8);
UBRRL = (unsigned char) baud;
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0) | (3<<UPM0);
}
(...)
void usart_trans(unsigned char data){
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
(...)
int main(){
(...)
usart_trans(10);
(...)
**********************************************************
Dane otrzymywane przez komputer
(...)
00001010
00001010
00001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
00001010
00001010
10001010
10001010
10001010
10001010
(...)
********************************************************
Co może być tego przyczyną? Podkreślę, że dla komunikacji 7-bitowej wszystko przebiega bez zastrzeżeń.
Dodam jeszcze, że zakłócenia zwiększają się wraz ze zwiększeniem taktowania kontrolera (dla 2MHz - komunikacji praktycznie idealna, dla 8MHz - najstarszy bit jest ciągle jedynką). Czyżby brak synchronizacji z PC? Jak można temu zaradzić?
Komunikuję się z komputerem PC za pośrednictwem protokołu RS232 wykorzystując do tego celu USART ATmegi8 aktualnie ustawiony na:
- transmicja 8-bitowa (dla 7-bitowej wszystko przebiega zgodnie z zalozeniem),
- 1 bit stopu (identyczna sytuacja dla 2 bitow),
- 2400 bps...
Podczas przesyłania danych wystepują zakłócenia na najstarszym bicie.
**********************************************************
Fragmenty kodu kontrolera:
(...)
void usart_ini(unsigned int baud){
UBRRH = (unsigned char) (baud>>8);
UBRRL = (unsigned char) baud;
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0) | (3<<UPM0);
}
(...)
void usart_trans(unsigned char data){
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
(...)
int main(){
(...)
usart_trans(10);
(...)
**********************************************************
Dane otrzymywane przez komputer
(...)
00001010
00001010
00001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
10001010
00001010
00001010
10001010
10001010
10001010
10001010
(...)
********************************************************
Co może być tego przyczyną? Podkreślę, że dla komunikacji 7-bitowej wszystko przebiega bez zastrzeżeń.
Dodam jeszcze, że zakłócenia zwiększają się wraz ze zwiększeniem taktowania kontrolera (dla 2MHz - komunikacji praktycznie idealna, dla 8MHz - najstarszy bit jest ciągle jedynką). Czyżby brak synchronizacji z PC? Jak można temu zaradzić?