Witam, mam problem ze znakiem "$", jest mi on potrzebny do odczytu ramki NMEA. Jak widać poniżej inne znaki działają. Specjalne także, oprócz # i $. Wyskakuje wtedy takie coś: dla $: "<0>13", dla # "#013". Mam przejściówkę USB->RS232 -> ZL3AVR. Przejściówka to model: USB-SERIAL CH340. Nie wiem w czym leży problem. A niestety nie mam kabelka w domu do COM'a ze stacjonarnego kompa, aby sprawdzić czy to wina przejściówki. Dlatego może coś w kodzie jest nie tak..
Pozdrawiam
#define RS_UBRR F_CPU/baud/16-1 //Baud preskaler
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> // Przerwania
void USART_Init(unsigned long int baud)
{
UBRRH=(unsigned char)(RS_UBRR>>8);
UBRRL=(unsigned char) (RS_UBRR);
UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC=(1 << URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
UCSRB |= (1 << RXCIE);
sei();
}
void USART_Transmit(unsigned char data)
{
while (!(UCSRA & (1 << UDRE)));
UDR = data;
}
void USART_Transmit_String(const char *s )
{
while (*s)
USART_Transmit(*s++);
}
unsigned char USART_Receive(void)
{
while (!(UCSRA & (1<<RXC)));
return UDR;
}
SIGNAL(USART_RXC_vect)
{
// Code to be executed when the USART receives a byte here
volatile char znak;
znak=USART_Receive();
USART_Transmit(znak);
}
int main(void)
{
uint8_t c;
USART_Init(4800);
USART_Transmit_String("ATMega88 UART start!\r\n");
while(1)
{
}
}
Pozdrawiam