Hi,
ich verzweifle langsam.
Irgendwie will mir der Kompass nicht richtig antworten.
Hier die verwendeten Routinen
Code:
void RS232_Init(uint32_t iBaurate)
{
/*
** Enable TXEN and RXEN in register UCSRB
*/
UCSRB |= (1 << TXEN);
UCSRB |= (1 << RXEN);
/*
** Set transmission type, Asynchron 8Bit None Parity 2 Stop bit
*/
UCSRC = (1 << URSEL)|(1<< USBS)| (1<<UCSZ0) | (1<<UCSZ1);
/*
** Set baud rate
*/
UBRRH = ((SYSCLOCK / (iBaurate * 16L) - 1)>>8);
UBRRL = (SYSCLOCK / (iBaurate * 16L) - 1);
}
/*******************************************************
Function: RS232_PutByte
Purpose: Send to the UART a data byte
Input Parameter: the byte
Return Value: None
Value = 0
*******************************************************/
void RS232_PutByte (uint8_t Byte)
{
/*
** Wait until previous character is sent
*/
while (!(UCSRA & (1<<UDRE)));
/*
** Send byte to UART
*/
UDR = Byte;
return;
}
/*******************************************************
Function: RS232_GetByte
Purpose: Get from the UART a byte
Input Parameter: None
Return Value: The UART byte
*******************************************************/
int8_t RS232_GetByte (unsigned char *Pointer)
{
int8_t iState;
m_Timeout=0;
/*
** Wait until byte is available
*/
while (!(UCSRA &(1<<RXC)) && m_Timeout<10)
{
Delay_ms(10);
m_Timeout++;
}
if (m_Timeout < 10)
{
*Pointer=UDR;
iState=true;
}
else
{
*Pointer=0;
iState =false;
}
/*
** Get and return the byte from UART
*/
return iState;
}
Das Hauptprogramm ruft dann die Sache so auf:
Testweise habe ich den Code auf die Versionsnummer (nur ein Byte lesen geändert.
Code:
RS232_PutByte(0x11); // Send command get angle high, angle low (0-3600), pitch (+/- 0-85), roll (+/- 0-85)
Delay_ms(100);
iCounter=0;
iRs232State=true;
// while ( iCounter < 1 && iRs232State == true)
// {
iRs232State=RS232_GetByte(&(m_RS232_Buffer[iCounter]));
Delay_ms(10);
iCounter++;
// }
if (iRs232State == true)
CLEAR_BIT(PORTD,OUTPUT_DIAGNOSE_BIT1); //
else
CLEAR_BIT(PORTD,OUTPUT_DIAGNOSE_BIT0); //
Die Routine gibt immer false zurueck. Den Timeout habe ich auch schon mal sehr hoch gesetzt.
Der Wert für die Baudrate ist 103 und laut Tabelle korrekt.
Bit1 wird nie gesetzt sondern immer Bit 0. (testausgänge)
Gruss R.
- - - Aktualisiert - - -
Trau keiner Hardware,
welche Du selber verdrahtet hast.
Fehler in der Verdrahtung. Jetzt geht es.
Lesezeichen