Hallo,
Ich bin dabei einen ATmega2560 so zu konfigurieren, dass er mehrere
Sensoren über einen Multiplexer nacheinander abfragt. Der ATmega soll
dann die Antworten (Messwerte) aufnehmen und weiter verarbeiten. Das
"anpeilen" der Sensoren klappt ganz gut, jedoch gibt es Probleme bei der
übermittlung der Antwort, was meiner Einschätzung nach ein Timing
Problem sein könnte (Sensor braucht eine Weile bis er antwortet, paar
ms).
Also hier meine main()
angehangen sind die weiteren files wie uart init, uart senden und uart
empfangen.
Nochmal mein Ziel: Ich sende einen String über den UART1 an den Sensor.
Dieser antwortet (er antwortet wirklich, habe eine TX-kontroll-LED) und
die Antwort soll in ein char array eingelesen werden. Leider Antwortet
der Sensor nur wenn ich im Einzelschrittmodus das Programm ausführe,
führe Ich das Programm normal aus bleibt er irgendwo stecken
(warscheinlich weil er auf eine Antwort wartet)
Ich hoffe ihr habt ein paar Lösungsansätze und konstruktive Kritik für
mich.
1 | #define BAUD1 19200U
|
2 | #define BAUD2 38400U
|
3 | #define UART1_BAUD_RATE (((F_CPU + BAUD1*8)/(16UL*BAUD1))-1)
|
4 | #define UART2_BAUD_RATE (((F_CPU + BAUD2*8)/(16UL*BAUD2))-1)
|
5 | #define UART_MAXSTRLEN 10
|
6 | #include "USART_init.c"
|
7 | #include "USART_send.c"
|
8 | #include "USART_receive.c"
|
9 | volatile uint8_t uart_str_complete = 0;
|
10 | volatile uint8_t uart_str_count = 0;
|
11 | volatile char uart_string[UART_MAXSTRLEN + 1] = "";
|
12 |
|
13 | int ports[4] = {0x00, 0x01, 0x02, 0x03};
|
14 | char* cmd[] = {"&i\r\n", "&e\r\n","&s\r\n"};
|
15 |
|
16 | int main()
|
17 | {
|
18 |
|
19 | char Line[43];
|
20 | DDRA = 0xff;
|
21 | PORTA = ports[1];
|
22 | uart_init(); //Funktion in UART_init.c
|
23 | uart_puts(cmd[1]); //funktion in UART_send.c
|
24 | uart_gets(Line, sizeof(Line));//funktion in UART_receive.c
|
25 | while (!(UCSR3A & (1<<UDRE3))); /* warten bis Senden moeglich */
|
26 | for(int i = 0; i < 41; i++)
|
27 | {
|
28 | UDR3 = Line[i];
|
29 | }
|
30 | return 0;
|
31 | }
|
ALs Ausgabe (UART3 ist an PC angeschlossen) erhalte Ich in HTerm nur die
erste Zahl des messwertes und dann viele \0.