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
Interrupts mit Arduino Due
23.09.2015, 13:58
Beitrag #9
RE: Interrupts mit Arduino Due
Hi,
also ich habe das nicht ausprobiert, aber nach meinem Verständnis müsste es sich so verhalten:
Wie "lange" das Signal auftritt dürfte fast egal sein. Wahrscheinlich reicht da weniger als 1µs.
Wie viele der Signale gleichzeitig auftreten dürfte auch egal sein.
Ein Problem dürfte sich nur ergeben, wenn zwei oder mehr Signale auf demselben Interrupt (beim Due also auf demselben Pin) schneller reinkommen, als sie abgearbeitet werden können.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 14:36 (Dieser Beitrag wurde zuletzt bearbeitet: 23.09.2015 14:41 von chhec.)
Beitrag #10
RE: Interrupts mit Arduino Due
Ersteinmal danke für deine Hilfe. Das Problem das auf einem Pin die Signale zu schnell rein kommen ist in der Tat schlecht. Aber ist es nicht sogar so, das ab dem beginn der ISR bereits neue Interrupts auf dem selben Pin erkannt werden können?

Und wie kann ich überhaupt das Interpretieren, das der NVIC nur 30 Interrupts abarbeiten kann? Was passiert wenn 50 Interrupts auftreten? geht dann etwas verloren?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 14:50
Beitrag #11
RE: Interrupts mit Arduino Due
(23.09.2015 14:36)chhec schrieb:  Ersteinmal danke für deine Hilfe. Das Problem das auf einem Pin die Signale zu schnell rein kommen ist in der Tat schlecht. Aber ist es nicht sogar so, das ab dem beginn der ISR bereits neue Interrupts auf dem selben Pin erkannt werden können?
Das kann schon sein, dann hast Du halt ein Problem wenn drei sehr schnell hintereinander kommen.

Zitat:Und wie kann ich überhaupt das Interpretieren, das der NVIC nur 30 Interrupts abarbeiten kann? Was passiert wenn 50 Interrupts auftreten? geht dann etwas verloren?
Das weiß ich nicht. Ich dachte, dass es immer so viele Bits im Interrupt-Register (oder wie auch immer das heißt) gibt, wie es auch externe Interrupts gibt. Womöglich stimmt das aber nicht.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 14:55
Beitrag #12
RE: Interrupts mit Arduino Due
Danke Thorsten,

Ich werde mal ein wenig weiter recherchieren und ansonsten wird es wohl spätestens bei den ersten versuchen etwas klarer
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2015, 08:34
Beitrag #13
RE: Interrupts mit Arduino Due
Ich habe nun versucht mehrere Intterupts zu generieren. leider tut sich da gar nichts. Jemand eine Idee woran das liegt?

void setup()
{

Serial.begin(9600);

attachInterrupt(0, state_a, CHANGE);
attachInterrupt(1, state_a, CHANGE);
attachInterrupt(2, state_b, CHANGE);
attachInterrupt(3, state_c, CHANGE);
attachInterrupt(4, state_a, CHANGE);
attachInterrupt(5, state_c, CHANGE);
attachInterrupt(6, state_c, CHANGE);
attachInterrupt(7, state_c, CHANGE);
attachInterrupt(8, state_c, CHANGE);
attachInterrupt(9, state_c, CHANGE);
attachInterrupt(10, state_c, CHANGE);
attachInterrupt(11, state_d, CHANGE);
attachInterrupt(12, state_d, CHANGE);
attachInterrupt(13, state_b, CHANGE);
attachInterrupt(14, state_d, CHANGE);
attachInterrupt(15, state_d, CHANGE);
attachInterrupt(16, state_a, CHANGE);
attachInterrupt(17, state_a, CHANGE);
attachInterrupt(18, state_a, CHANGE);
attachInterrupt(19, state_a, CHANGE);
attachInterrupt(20, state_b, CHANGE);


}

void loop()
{
//Serial.write('a');

}


void state_a()
{
Serial.println('a');
}

void state_b()
{
Serial.write('b');
}

void state_c()
{
Serial.write('c');
}

void state_d()
{
Serial.write('d');
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2015, 09:23
Beitrag #14
RE: Interrupts mit Arduino Due
bitte poste nochmal den kompletten Code, und alles in Code-Tags!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2015, 09:42 (Dieser Beitrag wurde zuletzt bearbeitet: 28.09.2015 11:11 von chhec.)
Beitrag #15
RE: Interrupts mit Arduino Due
Das war der gesamte code. woltle zunächst nur mal testen ob die interrupts auslösen

Des weitern ist mir nicht klar, wie ich so viele Interrupts sinnvoll verarbeiten kann. Sollte für alle Interrupts die gleiche funktion genutz werden? mein ziel ist es zu erkennen auf welchem Pin de Interrupt ausgelöst wurde.

In wie weit kann ich es nutzen das es verschiedene ports gibt? Lösungsansatz: Je Port eine Funktion?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2015, 13:30 (Dieser Beitrag wurde zuletzt bearbeitet: 28.09.2015 13:40 von Thorsten Pferdekämper.)
Beitrag #16
RE: Interrupts mit Arduino Due
(28.09.2015 08:34)chhec schrieb:  Ich habe nun versucht mehrere Intterupts zu generieren. leider tut sich da gar nichts. Jemand eine Idee woran das liegt?
Ich glaube, Serial.print oder ähnliches funktioniert nicht innerhalb eines Interrupt-Handlers. Versuche mal, von den jeweiligen Routinen aus eine globale Variable hochzuzählen. Diese Variable gibst Du dann in loop() in etwa einmal pro Sekunde über Serial aus.

(28.09.2015 09:42)chhec schrieb:  Das war der gesamte code. woltle zunächst nur mal testen ob die interrupts auslösen
Trotzdem solltest Du code-Tags verwenden. Also coding jeweils in [ code ] und [ /code ] (ohne Blanks) einschließen.

Zitat:Des weitern ist mir nicht klar, wie ich so viele Interrupts sinnvoll verarbeiten kann. Sollte für alle Interrupts die gleiche funktion genutz werden? mein ziel ist es zu erkennen auf welchem Pin de Interrupt ausgelöst wurde.
Ich habe zwar keinen Due, aber rein interessehalber habe ich mir das mal angesehen. Entweder Du verwendest für jeden Pin eine eigene Funktion. Das klingt zwar erstmal relativ übel, aber mit geschickten #defines kann man sich das Leben relativ einfach machen.
...oder: Ich habe in WInterrupts.c das folgende Coding gefunden:
Code:
void PIOA_Handler(void) {
    uint32_t isr = PIOA->PIO_ISR;
    uint32_t i;
    for (i=0; i<32; i++, isr>>=1) {
        if ((isr & 0x1) == 0)
            continue;
        if (callbacksPioA[i])
            callbacksPioA[i]();
    }
}

void PIOB_Handler(void) {
    uint32_t isr = PIOB->PIO_ISR;
    uint32_t i;

...
Das sieht so aus, als ob es hardwareseitig eigentlich nur pro Port einen Interrupt gibt und im PIO_ISR-Register festgehalten wird, welcher Pin den Interrupt ausgelöst hat. Das könntest Du in Deiner Interrupt-Routine ausnutzen.
D.h. sozusagen eine Funktion pro Port und dann obiges Coding reinschreiben, nur ohne die Callback-Aufrufe. Dann ist i die Nummer des Bits im Port.
Dummerweise ergibt sich die Zuordnung der Pin-Nummern zu den Ports nicht ganz so direkt. Ich denke aber, dass ein Blick in die Datei Arduino\hardware\arduino\sam\variants\arduino_due_x\variant.cpp da helfen könnte.

Ach noch was: Pin 0 und 1 würde ich nicht verwenden, da das die serielle Schnittstelle ist. Vielleicht ist das auch Dein Problem: Wenn man deren Interrupt-Routinen umbiegt, dann funktioniert Serial ggf. nicht mehr.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.104 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.124 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  Interrupts für eine bestimmte Zeit unterbrechen?? kai.l 5 1.316 13.10.2014 14:34
Letzter Beitrag: kai.l
  [gelöst:] Hardware-Timer-Interrupts beim Mega HaWe 1 915 26.09.2014 22:11
Letzter Beitrag: HaWe
  Frage zu Interrupts schnutzkurt 3 1.747 17.02.2014 10:47
Letzter Beitrag: Bitklopfer
  Zwei Zeitkritische Interrupts gleich verarbeiten subseven 12 5.881 09.01.2014 19:17
Letzter Beitrag: rkuehle
  Interrupts oder nicht? AtroCty 4 2.198 21.06.2013 16:16
Letzter Beitrag: Tobii

Gehe zu:


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