Re: RS232 lesen/schreiben bei hoher baudrate Kategorie: Programmierung C (von neutrino - 19.04.2009 23:08) | ||
Als Antwort auf Re: RS232 lesen/schreiben bei hoher baudrate von PeterS - 18.04.2009 10:11 | ||
| ||
Hallo Peter Danke für die schnelle Hilfe. Hab die Initialisierung aus der Schleife genommen, und siehe da, es geht. Hät mich ja auch gewundert wenn der Controler das nicht kann. gru� neutrino > > Hallo, > > was auf jeden Fall falsch ist, ist die Dauer-Neuinitialisierung mit Serial_Init_IRQ() in der > "while(true) Schleife". Der Aufruf von Serial_Init_IRQ() sollte nur EINMAL am Anfang gemacht > werden, sonst werden dauernd die internen Zähler gelöscht. > > Gruss Peter > > > Hallo Forum > > > > Habe folgendes Problem mit den RS232 Schnittstellen. > > Es soll von einem Gerät ein Protokoll ausgeleden (COM0) und an der zweiten (COM1) ausgegeben werden. > > Es ist nur möglich einen Baud von 19200 ohne Steuermöglichkeit einzustellen. > > Sendevorgang auslösen und eine Protikolldatei mit ca.850 Zeichen (inklusive Steuerzeichen) wird gesendet. > > wird später ein Unterprogramm: > > > > byte buffer0[255]; > > byte buffer1[255]; > > > > //------------------------------------------------------------------------------ > > // Hauptprogramm > > // > > void main(void) > > { > > byte count; > > byte sz; > > > > while(true) //Endlosschleife nur zum testen > > { > > > > Serial_Init_IRQ(0,buffer0,240,10,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200); > > Serial_Init_IRQ(1,buffer1,10,240,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200); > > > > count=Serial_IRQ_Info(0,RS232_FIFO_RECV); > > > > while(count!=0) > > { > > sz=Serial_ReadExt(0); > > Serial_Write(1,sz); > > count=Serial_IRQ_Info(0,RS232_FIFO_RECV); > > } > > } > > } > > > > Leider geht das Programm so nicht. Es werden nur einige zeichen gesendet der rest fehlt oder ist an der > > falschen Stelle. (test über Hyperterminal) > > Wird ein Thread_Delay(1) eingefügt verschlimmer das die Sache noch. > > Werden allerdings einige Msg_WriteInt(count) eingefügt gehts dann fast vollständig. > > Hab aber keine Ahnung warum. Msg_WriteInt(count) bremsen den Controler doch auch nicht anders aus > > als ein Delay? Soll ja auch ohne USB-Anbindung bzw. Testboard laufen. > > Zuerst in Arrays scheiben und danch ausgeben hat auch keien erfolg gebracht. > > Wird die Baud testhalber auf 9600 gesetzt geht es dann tadellos.(test über Hyperterminal) > > Das wurde aber dafür sprechen das der mega128 zu langsam währe. > > Steht aber im wiederspruch zum ausbremsen mit Msg_WriteInt(count). > > Allerdings kann man ja noch sehr viel höhere Bauds einstellen (115200bps) nach dem Handbuch. > > Und mit weniger schritten wie jetzt, um die Zeit zu optimieren, geht es denke ich auch nicht. > > > > Ich hoffe das ich nicht zuviel Infos reingepackt habe, und es unübersichtlich wird. > > Vieleicht kann mir ja jemand den Denkfehler den ich habe erklären, oder ein Beispeilprogramm > > Schreiben, wo mit baud 19200 einen ca.850 Zeichendatei mittels RS232 durch den Mega128 geleiten werden > > kann. > > > > gru� > > neutrino > > > > > > > > > > | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum