INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Interrupt bei Serieller Übertragung
20.06.2016, 05:01
Beitrag #1
Interrupt bei Serieller Übertragung
Moin Moin

Die serielle Schnittstelle nutzt wohl jeder.

Einen Interrupt hab ich so verstanden, das mein Programm an irgendwelcher Stelle unterbrochen wird.
Dann wird der Interrupt ausgeführt
Dann wird das Hauptprogramm fortgesetzt.

Jetzt möchte ich aber den Interrupt dazu nutzen, eine Drehzahl zu erfassen und auch die Drehrichtung. (Inkrementalgeber)
Die Frequenz wird sich bei bescheidenen 100 Hz bewegen, doch mir geht's in dieser Sache um das Prinzip.

kommt die Serielle Übertragung durcheinander, wenn während der Übertragung der Interrupt ausgelöst wird?

Dann weiter:
SoftSerial wird da wohl in jedem Fall aus dem Takt kommen, oder?

Besten Dank
Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 06:11
Beitrag #2
RE: Interrupt bei Serieller Übertragung
Hallo,
nun das kommt grundsätzlich darauf wie wer was programmiert hat. Denn Interrupts kann man auch gezielt sperren...aber dann sind alle gesperrt.
Andererseits und da bin ich mir bei den AVR's jetzt absolut unsicher gibt es eine Priorisierung der Interrupts wo dann höher Priore Interrupts solche mit niedriger Prio unterbrechen können. Und sollte in der Soft-Seriell-Lib der Interrupt während einer Seriellen Übertragung gesperrt sein dann fehlen dir mit Sicherheit ein paar Impulse bei deiner Drehzahl.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 06:24
Beitrag #3
RE: Interrupt bei Serieller Übertragung
Hallo Binatone,

dies ist ein ganz guter Artikel:

http://arduino.stackexchange.com/questio...via-serial

Wenn du HardwareSerial nutzt werden die Daten in ein extra Register geschrieben und dann verschickt, sodass die Interrupts weiterlaufen.
Wenn du Software Serial nutzt, darf kein Interrupt dein Timing stören.
D.h. wird ein Interrupt während einer SoftwareSerial Übertragung ausgelöst, wird der Interrupt in ein Register für Interrupts eingetragen und nach der SoftwareSerial übertragung ausgelöst.

Das gleiche würde passieren, wenn ein zweiter Interrupt während eines laufenden Interrupts auslöst.
Es geht kein Interrupt verloren, wird nur ggf. später bearbeitet
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 06:30
Beitrag #4
RE: Interrupt bei Serieller Übertragung
(20.06.2016 06:24)tausday schrieb:  ....
Es geht kein Interrupt verloren, wird nur ggf. später bearbeitet

...ich meine zu wissen das wenn der gleiche Interrupt mehrmals hintereinander auftritt bevor der Erste davon abgearbeitet ist dann gehen die noch nicht abgearbeiteten verloren...
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 06:34 (Dieser Beitrag wurde zuletzt bearbeitet: 20.06.2016 06:37 von tausday.)
Beitrag #5
RE: Interrupt bei Serieller Übertragung
Das Impulse verloren gehen, glaube ich kaum.
Wenn die Impulse per Interrupt getriggert werden geht in der Theorie schonmal nix verloren und wird nur verspätet ausgelöst.

Bei einer Seriellendatenübertragung mit 115.200 bit/s werden rund 8,68 µs benötigt.
Geht man von einer gesamten Übertragung aus: sind das 11bits a 8,68 µs = 95,48 µs
16Mhz sind 0.0625µ

D.h. wenn ich es richtig verstehe, könnte nach jeden 95,48µ ein Interrupt bearbeitet werden, weil dann ein Zyklus der Seriellnübertragung abgeschlossen sind.

Geht man jetzt einfach mal von 100Hz aus, sind das 100.000µ.
Also bewegen wir uns hier bei der Genauigkeit in der zweiten Nachkommastelle.

@Bitklopfer

Das ist korrekt das wenn ein Interrupt mehrmals auslöst aber der "erste" noch nicht abgearbeitet ist einer "verloren" geht.
Das liegt aber einfach daran, das jeder Interrupt ins Register schreibt.. Hallo ich wurde ausgelöst bitte arbeite meine Schleife ab..
Wann die Schleife auslöst liegt aber am Programm.

ich denke aber oben die Rechnung zeigt das aus meiner Sicht die Zeit unkritisch ist
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 10:59
Beitrag #6
RE: Interrupt bei Serieller Übertragung
Also ich versuche mal ein Fazit:
Bei meinen 100 Hz UND der Verwendung von Hardware Serial kein Problem.

Im Interrupt würde halt nur per IF abgefragt, ob der andere Inkrementalgeber High oder Low ist.
Dementsprechend würde halt ein INT um den Wert 1 hoch oder runter gesetzt.
Das wäre alles.

Aber trotzdem lese ich mir jetzt den Link von Tausday noch durch.

Besten Dank!


Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2016, 16:12
Beitrag #7
RE: Interrupt bei Serieller Übertragung
Also mein Englisch ist nicht das allerbeste.
Aber ich glaube, mit meinem Fazit lieg ich nicht falsch.

Bei Frequenzen um 10 kHz gibt es aber Probleme.

Danke Euch allen!

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.06.2016, 11:49
Beitrag #8
RE: Interrupt bei Serieller Übertragung
so wurde ich es auch sehen, das bei Signalen um die 10khz(100 µs) es nicht sichergestellt ist, das diese nicht verzögert ausgelöst wird.

Hintergrund:
-Nach meiner Berechnung siehe oben dauert eine Übertragung schon 89..µs.
-Arduino benutzt selber schon interrupts fürs Timing(micros/delay etc).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  while Schleife nach sleep mode interrupt tklaus 13 265 23.11.2016 17:40
Letzter Beitrag: Tommy56
  NRF24L01 Interrupt MeisterQ 22 519 02.11.2016 15:50
Letzter Beitrag: MeisterQ
  Interrupt matthias3579 5 225 15.10.2016 13:23
Letzter Beitrag: hotsystems
  Interrupt und Sicherung der Prozessorregister MKc 5 227 31.08.2016 11:17
Letzter Beitrag: MKc
  Interrupt wenn softwareSerial Daten BennIY 3 447 01.05.2016 18:39
Letzter Beitrag: tiny85fan
  Timer Interrupt Anfängerprobleme Fox 4 623 05.03.2016 02:28
Letzter Beitrag: Fox
  Problem mit Pin Change Interrupt in Library Retian 0 321 10.02.2016 23:37
Letzter Beitrag: Retian
  Aus While-Schleife durch Interrupt aussteigen Zill3 10 1.194 08.02.2016 16:28
Letzter Beitrag: ardu_arne
  Servo per Serieller Mointor ansteuern iggy 1 820 03.08.2015 03:08
Letzter Beitrag: yasi
  serieller Monitor friert ein oder Programm hängt sich auf MaHaI976 3 785 22.06.2015 13:45
Letzter Beitrag: MaHaI976

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste