<div>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Hallo</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Ich hab folgendes Problem. Ich möchte ein Netzwerk über 485 aufbauen. Hierfür benötige ich das 9.Bit für die Unterscheidung Adresse und Daten. Wenn ich das 9.Bit aber Aktiviere bekomme ich ein Fehler und es wird nur die 8 Bit Übertragung aktiviert. </font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Wenn ich das 9.Bit direkt im Register aktiviert kann ich am Oszilloskop sehen das er es auch überträgt aber ich habe keinen Einfluss darauf was er überträgt solang ich den Ausgabe Stream benutze.</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Nur wenn ich direkt ins UDR Register schreibe kann ich das Bit setzten oder rücksetzten. Allerdings fehlt mir dann mein Freischaltungssignal damit ich die 485 Schnittstelle Halbduplex betreiben kann.</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman"> </font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Hier mein Quelltext:</font></font></p></div>
<div> </div>
<div>#include <dev/board.h><br>#include <sys/timer.h> <br>#include <string.h><br>#include <stdio.h><br>#include <io.h><br> <br>int main(void)<br>{<br> uint32_t baud_dbg = 115200;<br> uint32_t baud_485 = 230400;<br>
uint32_t parity = 0;<br> uint32_t stopBit = 1;<br> uint32_t DataBit = 9;<br> uint32_t flow_485 = USART_MF_HALFDUPLEX;<br> uint32_t to_485 = 1000;<br> <br> FILE *rs485;<br> <br> outb(DDRB, 0xf0);<br> <br> NutRegisterDevice(&DEV_DEBUG, 0, 0);<br>
freopen(DEV_DEBUG_NAME, "w", stdout);<br> _ioctl(_fileno(stdout), UART_SETSPEED, &baud_dbg);<br> puts("\nRS485 Master Sample");<br> <br> if (NutRegisterDevice(&devUsartAvr1, 0, 0)) {<br>
puts("Failed to register " DEV_UART1_NAME);<br> }<br> if ((rs485 = fopen(DEV_UART1_NAME, "r+")) == NULL) {<br> puts("Failed to open " DEV_UART1_NAME);<br> }<br> if (_ioctl(_fileno(rs485), UART_SETFLOWCONTROL, &flow_485)) {<br>
puts("Failed to set flow control");<br> }<br> if (_ioctl(_fileno(rs485), UART_SETSPEED, &baud_485)) {<br> puts("Failed to set baudrate");<br> }<br> if (_ioctl(_fileno(rs485), UART_SETDATABITS , &DataBit)) {<br>
puts("Failed to set DataBit");<br> }<br> if (_ioctl(_fileno(rs485), UART_SETPARITY , &parity)) {<br> puts("Failed to set Parity");<br> }<br> if (_ioctl(_fileno(rs485), UART_SETSTOPBITS, &stopBit)) {<br>
puts("Failed to set StopBits");<br> }<br> if (_ioctl(_fileno(rs485), UART_SETREADTIMEOUT, &to_485)) {<br> puts("Failed to set read timeout");<br> }</div>
<div> sbi(PORTD, 2);<br> sbi(UCSR1A, U2X);<br> </div>
<div>sbi(UCSR1B, UCSZ12); // Aktivier 9 BIT modus<br> </div>
<div>for (;;) {<br> </div>
<div> UCSR1B |= TXB81; // Setze Bit 9 da nun eine Adresse kommt </div>
<div><br> putc(0x55,rs485);</div>
<div><br> UCSR1B &= ~TXB81; // Rücksetzt 9.Bit da nun Daten fogeln</div>
<div><br> fflush(rs485);<br> </div>
<div> fprintf(rs485, "Data");<br> <br> NutSleep(1000);<br> }</div>
<div>return 0;<br>}</div>
<div> </div>
<div>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Hat jemand eine Idee wie ich dieses Problem in den Griff bekommen kann.</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Muss ich vielleicht noch etwas im Nut OS einstellen?</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman"> </font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Vielen Dank im Voraus.</font></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="Times New Roman">Mit Freundlichen Grüßen Kai</font></font></p></div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>