Moin Jungs,
ich bin am verzweifen mit meinem Mega8 und der USART-Schnittstelle.
Ich bekomme einfach den String nicht ausgewertet.
Hier der Code:
1 | #define USART_RX_BUFFER_SIZE 6 // Puffergröße für Benutzerkommandos
|
2 | uint8_t USART_RxBuf[USART_RX_BUFFER_SIZE]; // Lesepuffer für Benutzerkommandos
|
3 | void empfangenen_string_auswerten (uint8_t temp[USART_RX_BUFFER_SIZE])
|
4 | {
|
5 | if (strncmp(temp, "DL", 2)==0) // Gültiges Zeichen
|
6 | {
|
7 | SETBIT(PORTC,PC0);
|
8 | if (temp[2] == (DIP + 48)) // Ja, richrtige Platine
|
9 | {
|
10 | //CLEARBIT (PORTC,PC0);
|
11 | set_chanel((temp[3]*10)+temp[4]); // Ja, Kanal aus String lesen
|
12 | set_supply(temp[5]); // Versorgung aus String lesen
|
13 | }
|
14 | }
|
15 | }
|
16 |
|
17 | // ****************************************************************************
|
18 | // Byte empfangen
|
19 | SIGNAL (SIG_UART_RECV)
|
20 | {
|
21 | //if (PINC & (1 << PC0)) {PORTC &= ~(1 << PC0);} // LED an? Wenn ja, dan aus machen
|
22 | //else {PORTC |= (1 << PC0);} // Wenn nicht an, dann an machen
|
23 | unsigned char data;
|
24 | data = UDR; // Daten auslesen
|
25 |
|
26 | // Daten im Lesepuffer um 1 weiterschieben
|
27 | for (uint8_t i=0; i<=USART_RX_BUFFER_SIZE-2; i++)
|
28 | {USART_RxBuf[i] = USART_RxBuf[i+1];}
|
29 |
|
30 |
|
31 | USART_RxBuf[USART_RX_BUFFER_SIZE-1] = data; // neu empfangenes Zeichen einfügen
|
32 | empfangenen_string_auswerten (USART_RxBuf); // auf empfangene Kommandos testen und ggf. umsetzen
|
33 | }
|
Es wird ein String DL1010 gesendet und ich versage schon beim Abfragen
des ""DL". Kann mir jemand helfen?
Ich weiß das der Rest fehlt, es geht auch nur um
1 | if (strncmp(temp, "DL", 2)==0) // Gültiges Zeichen
|
bis hierher komme ich und dann wir die Bedingung "DL" nicht erfüllt.
Die Schaltung läuft aufm internen OSC, da dieser nicht so genau ist,
habe ich mir den Takt ausgeben lassen => 995225 Hz.
Ich lasse mir den String von einem CR800 ausgeben, dass klappt auch und
im Terminal kommt auch alles an. Was übersehe ich?
Gruß Knut