-         

Ergebnis 1 bis 5 von 5

Thema: Interrupt erfolgt zu schnell hintereinander

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    44
    Beiträge
    128

    Interrupt erfolgt zu schnell hintereinander

    Anzeige

    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?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    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.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.595

    Re: Interrupt erfolgt zu schnell hintereinander

    Zitat Zitat von Duesentrieb
    ... 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-USB-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) 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.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    44
    Beiträge
    128
    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?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •