Hallo nach langer suche hier im Forum und im Internet wollte ich euch
mal fragen ob ihr mir bei einem Problem zum Kommunikation zwischen 2
Atmega8 über RS 485 helfen könnt.
Ich habe ein kleines Testprogramm geschrieben was alle 2 Sekunden einen
Text über denn Bus schicken soll doch nach 4 Sendungen bricht die
Kommunikation ab und nichts passiert mehr.
Hier mal mein Programm:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/pgmspace.h>
|
4 | #include <stdlib.h>
|
5 | #define F_CPU 4000000UL
|
6 | #define BAUD 9600
|
7 | #include <util/setbaud.h>
|
8 | #include <util/delay.h>
|
9 |
|
10 |
|
11 | void USART_Init()
|
12 | {
|
13 | UBRRH = UBRRH_VALUE;
|
14 | UBRRL = UBRRL_VALUE;
|
15 | UCSRB =(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
|
16 | UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0);
|
17 | }
|
18 |
|
19 | int uart_putc(unsigned char c)
|
20 | {
|
21 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
22 | {
|
23 | }
|
24 | UDR = c; /* sende Zeichen */
|
25 | return 0;
|
26 | }
|
27 | void uart_puts (char *s)
|
28 | {
|
29 | while (*s)
|
30 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
|
31 | uart_putc(*s);
|
32 | s++;
|
33 | }
|
34 | }
|
35 |
|
36 | int main()
|
37 | {
|
38 | DDRB = 0xFF;
|
39 | sei();
|
40 | USART_Init ();
|
41 | while(1)
|
42 | {
|
43 | _delay_ms(200);
|
44 | _delay_ms(200);
|
45 | _delay_ms(200);
|
46 | _delay_ms(200);
|
47 | PORTB |= (1<<PB0);
|
48 | _delay_ms(20);
|
49 | uart_puts("00010002H*");
|
50 | while (!(UCSRA & (1<<TXC)))
|
51 | ;
|
52 | PORTB &= ~(1<<PB0);
|
53 | }
|
54 | }
|
Ich weiß wirklich nicht mehr weiter und währe über eure Hilfe sehr
dankbar.