Witam prosiłbym o pomoc z uruchomieniem transmisji RS485 pomiędzy Atmegą644P a PC z przejściówką
Link do schematu :
https://www.elektroda.pl/rtvforum/topic1754125.html#8457769
Przejściówka:
https://www.elektroda.pl/rtvforum/topic1731213.html
Definicje:
Kod:
Próbowałem już odbierać i wysyłać jak narazie bez sukcesów.
Link do schematu :
https://www.elektroda.pl/rtvforum/topic1754125.html#8457769
Przejściówka:
https://www.elektroda.pl/rtvforum/topic1731213.html
Definicje:
#define UART_DE_PORT PORTC
#define UART_DE_DIR DDRC
#define UART_DE_BIT (1<<PC5)
#define UART_DE_ODBIERANIE UART_DE_PORT |= UART_DE_BIT
#define UART_DE_NADAWANIE UART_DE_PORT &= ~UART_DE_BIT
#define UART_BAUD 9600 // tu definiujemy interesującą nas prędkość
#define __UBRR F_CPU/16/UART_BAUD-1 // obliczamy UBRR dla U2X=0
Kod:
void USART_Init( uint16_t baud ) {
/* Ustawienie prędkości */
UBRR1H = (uint8_t)(baud>>8);
UBRR1L = (uint8_t)baud;
/* Załączenie nadajnika I odbiornika */
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
/* Ustawienie format ramki: 8bitów danych, 1 bit stopu */
UCSR1C = (3<<UCSZ10);
// jeśli korzystamy z interefejsu RS485
// inicjalizujemy linię sterującą nadajnikiem
UART_DE_DIR |= UART_DE_BIT;
UART_DE_ODBIERANIE;
}
unsigned char USART_Receive(void)
{
while(!(UCSR1A&(1<<RXC1)));
return UDR1;
}
void USART_Transmit(unsigned char data)
{
while(!(UCSR1A & (1<<UDRE1)))
;
UDR1 = data;
}
int main(void)
{
unsigned char c = 0;
ks0108Init(0);
ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK);
ks0108GotoXY(5,10);
ks0108Puts_P(PSTR("Temp.:"));
USART_Init( __UBRR ); // inicjalizacja UART
ks0108GotoXY(5,10);
ks0108Puts_P(PSTR("Temp.:"));
while(1)
{
UART_DE_NADAWANIE;
USART_Transmit("a");
_delay_ms(500); // odczekaj 0,5 sekundy
ks0108Puts_P(PSTR("wyslalem"));
}
}
Próbowałem już odbierać i wysyłać jak narazie bez sukcesów.
