Hallo, ich habe eine Lochrasterplatine mit einm ESP8266, der mir auf ein Atmega168 ein RX-Signal senden soll. Baudrate: 115200, Benutzung der FleuryLib. Ich bekomme aber immer FrameErrors beim Empfang. ESP ist mit 3V29 und m168 mit 4V98 angeschlossen (gemessen). High Signal sollte der m168 bei 3V erkennen. Ich habe mal den Takt auf PB0 rausgegeben, siehe Screenshot anbei. Sieht erst einmal gut aus, oder? 2 Kerkos an VCC/AVCC/GND sind vorhanden, weitere uF nach dem LDO. Das Oszi sagt Vpp=160mV. Die Leitungslänge des TX Signals beträgt ca. 10cm. F_CPU ist 73728000UL entsprechend des Quarz Wertes. Als Ausgabe auf dem Display sehe ich eine 4608, was 0x1200 ist und den FrameError beschreibt.
1 | const uint32_t BAUD = 115200; |
2 | int main(void) { |
3 | unsigned int readint; |
4 | |
5 | _delay_ms(300); |
6 | |
7 | uart_init(UART_BAUD_SELECT(BAUD, F_CPU)); // receive from ESP8266 |
8 | sei(); |
9 | |
10 | i2c_init(); |
11 | |
12 | ssd1306_init(); |
13 | |
14 | ssd1306_clear(); |
15 | |
16 | |
17 | for (;;) { |
18 | |
19 | readint = uart_getc(); |
20 | if ((readint & UART_FRAME_ERROR) || (readint & UART_OVERRUN_ERROR) |
21 | || (readint & UART_BUFFER_OVERFLOW)) { |
22 | |
23 | ssd1306_setpos(80, 7); |
24 | ssd1306_string(" "); |
25 | ssd1306_setpos(80, 7); |
26 | ssd1306_numdec(readint & 0xFF00); |
27 | } else if (readint & UART_NO_DATA) { |
28 | } else { |
29 | switch ((unsigned char) readint) { |
30 | case '\n': |
31 | break; |
32 | case '\r': |
33 | line[ind] = 0; // end of string |
34 | ind = 0; |
35 | parse(line); |
36 | break; |
37 | default: // put the received char in line |
38 | if (ind > BUFLEN - 1) |
39 | break; // small memory so small buffer |
40 | line[ind++] = (unsigned char) readint; |
41 | }
|
42 | |
43 | }
|
44 | |
45 | }
|
46 | |
47 | return 0; |
48 | }
|
Hat jemand eine Idee?