Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt erfolgt zu schnell hintereinander
Duesentrieb
17.01.2011, 17:27
Hallo,
nach auslösen eines Interrupts erfolgt eine Portabfrage.
DDas Ergebnis dieser Abfrag wird per RS232 als Text an einen PC zur auswertung gegeben.
Leider erfolgt der Interrupt manchmal sehr oft direkt hintereinander.
Die Textübertragung erhält damit einen fließenden Übergang wodurch der PC das Ende der ersten und den Anfang der nächsten meldung nicht mehr erkennt.
Obwohl ich Anfang und Ende eindeutig gekennzeichnet habe schafft es das VB2010 Programm nicht.
Auch das Anhängen des ; oder CHR(13) bringt nicht das gewünschte Ergebnis.
Meine nächste Möglichkeit wäre eine gewollte Verzögerung des Sendens.
Hat jemand einen Vorschlag wie ich das realisieren kann?
peterfido
17.01.2011, 17:56
Wer löst den Interrupt aus? Du sendest hoffentlich nicht in der Interrupt-Routine per RS232. Ich kenne dein VB-Programm nicht. (Ist hier auch das falsche Forum dafür...)
Du siehst, viel zu wenig Informationen um dir zu helfen. Spekulativ würde ich sagen: Sende nur, wenn sich die Ports geändert haben. Ändern sie sich oft in kurzer Zeit, dann Sammeln und in Intervallen eine Zusammenfassung senden. Baudrate hochsetzen. VB-Programm optimieren.
oberallgeier
17.01.2011, 19:11
... Interrupts ... Portabfrage ... Ergebnis ... wird per RS232 als Text an einen PC zur auswertung gegeben ...Einmal sind Interruptserviceroutinen nicht sonderlich dazu geeignet, längere Aktionen drin durchzuführen. Einen Text - wie lange ist der denn? - in der ISR abzusenden würde man spätestens nach Deiner Anfrage als Unfug bezeichnen. Wenn schon am PC ausgewertet wird, könnte doch ein einziges Byte als Portstatus genügen ! ? ! ?
Weiter Fragen sind offen. Welche Übertragungsrate hast Du für die Verbindung? Hast Du schon mal den üblichen und den kürzesten Abstand zwischen zwei Interrupts festgestellt oder geschätzt? Das ist hier offensichtlich wichtig. Diesen Abstand könnte man mit einem Portwechsel in der ISR markieren und per Oskar auswerten. Schließlich wäre es möglich, mal die Übertragungsgeschwindigkeit hochzunehmen. Ich fahre mit meinem USARTPEGEL-nach-U SB-Konverter problemlos 256 kBd. Dabei müsste natürlich die Abholerei am PC entsprechend schnell reagieren.
Schließlich wäre es auch noch denkbar, die Geschichte sozusagen offline (siehe hier - 600 int16 in ca. 1/3 Sekunde) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=457587#457587) an den seriellen Port zu senden. Da Du so gut wie nix über Deine Aufgabenstellung und die aktuell bekannten Parameter schreibst, bleibt das Raten von Lösungen für Dein Problem aber ein Glückspiel.
Duesentrieb
17.01.2011, 22:06
o.k. ich dachte es reicht wenn ich grob erkläre um was es geht.
Also jetzt konkret:
Ich betreibe einen CAN Bus. Der CAN Prozessor sendet bei Empfang eines Telegramms einen Interrupt auf einen Mega32.
Daraufhin werden das Telegramm über ISP abgefragt und über Print am RS232 ausgegeben.
Im Prinzip müssten die Telegramm in einen Zwischenspeicher gehen der in einem festen Taktzyklus die Ausgabe organisiert.
Wie könnte man so etwas realisieren?
Wie könnte man so etwas realisieren?
In dem du eine Liste (Zwischenspeicher) erstellst, in der die Ausgaben gespeichert werden und nach und nach ausgegeben werden. Bin aber C Programmierer, wie man das genau in Bascom umsetzt, kann ich dir nicht sagen. Da musst du aber auch wieder aufpassen das dieser "Zwischenspeicher" nicht überläuft.
Vielleicht könntest du aber auch den Code, der durch den Interrupt ausgelöst wird, optimieren (falls es da noch Potential zum optimieren gibt).
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.