Witam !!
Napisałem sobie ostatnio prosty program do wysyłania danych na terminal po RSie :
Po podłączaniu uP do komputera przez port szeregowy i odpaleniu programu terminalowego (Terminal v1.9b by Bray++), zamiast mojego wysłanego tekstu (1 2 3 RAZ dwa TRZY 123) otrzymuję coś takiego (ale tylko w przypadku jak w terminalu ustawie 7 bitów danych ):
W kodzie mam zdefiniowaną prędkość 19200, 8 bitów danych, 1 bit stopu, brak parzystości. Jeżeli to samo ustawie w terminalu to otrzymuję już tylko krzaki. Ma ktoś jakieś sugestię dlaczego może się tak dziać ? Jeżeli odłączę kanały Rx i Tx od procka i zewrę je ze sobą to na terminalu otrzymuję dokładnie to co wpisuję z klawiatury. Dlaczego cyfry wysyłają się bez błędy, a zamiast liter wysyła się co chce ?
Atmega korzysta z wewnętrznego oscylatora ustawionego na 8MHz, program piszę w AVRStudio4.
Pomocy, siedzę już nad tym kilkanaście godzin i powoli już głupieję
Napisałem sobie ostatnio prosty program do wysyłania danych na terminal po RSie :
#include <avr/io.h>
#define F_CPU 8000000UL // 8MHz wewnetrzny
#define BAUD 19200UL // predkosc transmisji
#define MYUBRR ((F_CPU/(16*BAUD))-1)
void UART_init(unsigned int ubrr) // inicjalizacja
{
UBRRH = (unsigned char) (ubrr>>8); // ustawienie prędkości transmisji
UBRRL = (unsigned char) ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN); // włączenie odbiornika oraz nadajnika
UCSRC = (1<<URSEL)|(3<<UCSZ0); // 8 bitów danych, 1 bity stopu, brak parzystości
}
void USART_out (unsigned char data) // wysłanie pojedynczego znaku
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
void sendString(unsigned char s[])
{
int i = 0;
while(i < 64)
{
if( s[i] == '\0' ) break;
USART_out(s[i++]);
}
}
void delay(unsigned char t) // wytracanie czasu
{
unsigned char x, z;
for( ; t > 0; --t)
for(z = 10; z > 0; --z)
for(x = 25 * 8; x > 0; --x)
__asm("nop");
}
int main(void)
{
UART_init(MYUBRR); // Inicjalizacja RS232
while (1)
{
delay(100);
sendString("1 2 3 RAZ dwa TRZY 123\r");
}
return 0;
} Po podłączaniu uP do komputera przez port szeregowy i odpaleniu programu terminalowego (Terminal v1.9b by Bray++), zamiast mojego wysłanego tekstu (1 2 3 RAZ dwa TRZY 123) otrzymuję coś takiego (ale tylko w przypadku jak w terminalu ustawie 7 bitów danych ):
W kodzie mam zdefiniowaną prędkość 19200, 8 bitów danych, 1 bit stopu, brak parzystości. Jeżeli to samo ustawie w terminalu to otrzymuję już tylko krzaki. Ma ktoś jakieś sugestię dlaczego może się tak dziać ? Jeżeli odłączę kanały Rx i Tx od procka i zewrę je ze sobą to na terminalu otrzymuję dokładnie to co wpisuję z klawiatury. Dlaczego cyfry wysyłają się bez błędy, a zamiast liter wysyła się co chce ?
Atmega korzysta z wewnętrznego oscylatora ustawionego na 8MHz, program piszę w AVRStudio4.
Pomocy, siedzę już nad tym kilkanaście godzin i powoli już głupieję