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
Probleme!!
16.05.2015, 16:57 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 17:05 von HaWe.)
Beitrag #25
RE: Probleme!!
ja, aber ich will ja mehrere Sensoren gleichzeitig pingen lassen, damit ich bei 6 Stück schneller 1x rum bin.

Ich denke an eine Anordung wie im Sechseck, radial nach außen gerichtet.
Je nach Abstrahlwinkel möglicherweise auch 8 im Achteck.

vllt reichen 6xUS mit je 5ms für gut 1m Distanz auch nicht aus, mal sehen, aber schon bei 5ms und 6 US Sensoren braucht man ja mindestens 30ms (bei 8xUS und 7ms timeout sind es schon knapp 60ms).

Gleichzeitige Pingereien rundrum (1+4, 2+5, 3+6) oder sogar (1+3+5, 2+4+6) würde die Sache erheblich beschleunigen und man hätte nach 1 Runde auch noch Zeit, sich um andere Roboter-Dinge zu kümmern.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 17:04
Beitrag #26
RE: Probleme!!
(16.05.2015 16:48)HaWe schrieb:  hier darf es nicht passieren, dass einer von den ersten beiden noch ein spätes eigenes oder ein reflektiertes Fremd-Echo registriert, wenn sein eigenes Zeitfenster bereits rum ist
Aber das kannst Du sowieso nicht vermeiden, nicht einmal wenn Du einen nach dem anderen behandelst. Wenn der erste (oder eben einer der ersten beiden) nach 8ms zurückkommt, dann misst Du das als 3ms für einen der nächsten, falls sie sich überlappen.

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
16.05.2015, 17:08 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 17:15 von HaWe.)
Beitrag #27
RE: Probleme!!
nein, ich habe ja die Erkennung für jede selektive 2er oder 3er-Gruppe nach 5ms abgeschaltet.
Ein PCI würde die Änderung registrieren, aber mein gewünschter Code soll das übersehen (s. 1. Seite).

Ein SR04 misst max. 3m, das sind rund 10ms.
(Hindernisse in 3m Entfernung interessieren mich zwar nicht, dennoch können Echos von dort zurückkommen.)

Also kann ich in gut 10ms-Runden alle 6 (8) Sensoren durchpingen lassen.
Würde ich das einzeln tun müssen, um jedes Spät-Echo abzuwarten, würde es sogar 60-80ms pro Runde dauern - viiiieel zu lang!

Gruppenweises Pingen würde es mir aber erlauben,
- in rund 10-15 ms 1x rum zu sein
- zusätzlich noch Zeit für andere Berechnungen oder Sensoren oder I2C oder Display etc. zu haben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 17:08 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 17:10 von Thorsten Pferdekämper.)
Beitrag #28
RE: Probleme!!
(16.05.2015 16:57)HaWe schrieb:  und man hätte nach 1 Runde auch noch Zeit, sich um andere Roboter-Dinge zu kümmern.
Wenn Du das ganze per Interrupt machst, dann hast Du die Zeit sowieso. Du könntest dann sogar einen nach dem anderen behandeln.
Ich würde es allerdings ganz anders angehen: Hänge den Trigger von allen Sensoren auf denselben Pin. Die Rückmeldungen gehen an jeweils eigene Pins. Die Rückmeldungen wertest Du per PCI aus.
Der Rest ist Trigonometrie...

(16.05.2015 17:08)HaWe schrieb:  nein, ich habe ja die Erkennung für jede selektive 2er oder 3er-Gruppe nach 5ms abgeschaltet.
Ein PCI würde die Änderung registrieren, aber mein gewünschter Code soll das übersehen (s. 1. Seite).
Das verstehe ich jetzt wieder nicht. Der PCI weiß schon, um welchen Pin es geht. Im Prinzip kannst Du Dir das auch so schreiben, dass Du in den Interrupt-Routinen schon bestimmte Pins ignorierst. Das wäre aber nicht so geschickt, da das die Interrupt-Routine ohne Not langsamer macht.

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
16.05.2015, 17:18 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 17:21 von HaWe.)
Beitrag #29
RE: Probleme!!
nee, das mit dem PCIntr ist mir ehrlich gesagt zu undurchsichtig, timer ginge ja gerade noch, aber bitte nicht noch so ein low-level-AVR-Register-Gewusele - ganz zu schweigen von der Problematik, dass jeder Sensor sein eigenes, privates Zeitfenster hat, das sich aber mit anderen von den Echos = Pin changes überschneidet Wink

es sei denn, du programmierst es mal komplett, und ich gucke dann mal, ob es schnell genug und vor allem auch korrekt funzt Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 17:21
Beitrag #30
RE: Probleme!!
(16.05.2015 17:18)HaWe schrieb:  nee, das mit dem PCI ist mir ehrlich gesagt zu undurchsichtig, timer ginge ja gerade noch, aber bitte nicht noch so ein low-level-AVR-Register-Gewusele
Ist es doch gar nicht. Mit der PinChangeInt-Library ist es ganz einfach.

Zitat: ganz zu schweigen von der Problematik, dass jeder Sensor sein eigenes, privates Zeitfenster hat, das sich aber mit anderen von den Echos = Pin changes überschneidet Wink
Im Prinzip kannst Du Dir in einer globalen Variable merken, auf welchen Pin Du gerade wartest. In der Interrupt-Routine ignorierst Du einfach alle anderen.

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
16.05.2015, 17:25 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 17:34 von HaWe.)
Beitrag #31
RE: Probleme!!
sorry, mit PCIntr bin ich überfordert, das habe ich noch nie gemacht, und damit will ich auch nicht anfangen.
Prinzipiell ist es ja auch nur für einen slave-Mega und einmalig für ein paar SR04s, mein Hauptcode ist wichtiger, der läuft aber auf einem Due, und der hat keine AVR-PCIntr. Nur für ein paar USS an 1 AVR-slave will ich mich dafür nicht einarbeiten müssen.

Aber, wie gesagt -

es sei denn, du programmierst es mal komplett, und ich gucke dann mal, ob es schnell genug und vor allem auch korrekt funzt. Dann kann ich sicher ne Menge aus deinem Code lernen Wink

es würde mir aber schon reichen, wenn dieser Code soweit funktioniert (für jede der einzelnen Gruppen):

Code:
uint32_t   tmicro, emicro1, emicro2; // timestamp, echo1, echo2
bool eread1, eread2;

pinMode(TrigPinRechts,OUTPUT);
pinMode(EchoPinRechts,INPUT);
pinMode(LedPinRechts,OUTPUT);
pinMode(TrigPinLinks ,OUTPUT);
pinMode(EchoPinLinks,INPUT);
pinMode(LedPinLinks,OUTPUT);


void loop() {

  digitalWrite(TrigPinRechts,HIGH);
  digitalWrite(TrigPinLinks,HIGH);
  delayMicroseconds(11);
  digitalWrite(TrigPinRechts,LOW);
  digitalWrite(TrigPinLinks,LOW);

  // 1. Gruppe:

  tmicro=micros();
  emicro1=emicro2=0;
  eread1=eread2=0;
  
  while ( micros()-tmicros<=5000)  ) {
    if ( (! eread1) && ( digitalRead(EchoPinLinks)==HIGH) {
      emicro1=micros()-tmicros;
      eread1=1;  
    }  
    if ( (! eread2) && ( digitalRead(EchoPinRechts)==HIGH) {
      emicro2=micros()-tmicros;
      eread2=1;
    }
  }


  // analog 2. Gruppe

  // analog 3. Gruppe
  
  // jetzt sollte man eigentlich wissen, ob nach je  5000µs ein Echo
  // links oder rechts empfangen wurde oder nicht, und wenn ja, wie lang genau...
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 17:37
Beitrag #32
RE: Probleme!!
(16.05.2015 17:25)HaWe schrieb:  der läuft aber auf einem Due, und der hat keine AVR-PCIntr.
Naja, der hat dafür einen Interrupt für jeden einzelnen Pin, oder?

Zitat:es würde mir aber schon reichen, wenn dieser Code soweit funktioniert (für jede der einzelnen Gruppen):
Wenn die Pulse, die zurück kommen, lang genug sind, dann sollte das klappen.
Allerdings hast Du immer noch das Problem, dass Deine zweite Gruppe möglicherweise einen verspäteten Impuls aus der ersten Gruppe auffängt.

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
  ArduinoDroid Probleme Brother Tak 1 205 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Roboter-Bau Probleme blebbens 8 381 12.07.2016 07:35
Letzter Beitrag: Binatone
  Probleme mit sprintf() und dtostrf() GMBU 11 818 22.06.2016 10:52
Letzter Beitrag: GMBU
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 978 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.178 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 576 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 333 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 836 21.02.2016 18:00
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.153 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  Probleme mit SPI - Ethernet und nRF24L01 itsy 35 2.984 21.11.2015 19:59
Letzter Beitrag: ardu_arne

Gehe zu:


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