Pages: 1 [2]   Go Down
Author Topic: Reaktionszeit Arduino Uno oder Mega unter 10µs ? Allgemeine Tipps gefragt..  (Read 2228 times)
0 Members and 1 Guest are viewing this topic.
Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 270
Posts: 21842
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@MaFu,

danke für den Hinweis!

Könnte man den Schwellwert dann per SW anstatt ein Poti einstellen?

@uwefed
Was mach denn der Interrupt Eingang des Arduino? Ich habe bisschen darüber gelesen, aber leider bin
nicht schlau geworden. Was ich will, ist ja, dass Arduino TTL-Signale (0V->5V, oder 5V->0V) ausgibt, aber trotzdem im Betrieb bleibt.
Bei einem Interrupt wird die Interruptfunktion aufgerufen.

Wenn nur ein TTL Signal notwendig ist dann reicht der bereits vorgeschlagene Komparator mit einem Operationsverstärker.

Grüße Uwe
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 270
Posts: 21842
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Frage ist, wie realisiere ich es ein System ( mit Arduino), welches als Eingangsignal auf Analoge Signale ( per Schwellwert/Sollwert -was ich aber digital einstellen will, nicht per Poti) und TTL Signale sehr schnell (am besten unter 10µs) reagiert, welces aber per SW konfiguerbar ist, und als Antwort drauf wieder Analoge (PWM? ) und Digitale (HIGH, LOW) Signale ausgeben kann.

Ich dachte, sowas wäre perfekt mit Arduino zu realisieren? 
Arduino ist geeignet aber nicht in der Zeit die Dir vorschwebt also schlußendlich ungeeignet.
Grüße Uwe
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin,

ein Mikrocontroller besteht vereinfacht gesagt aus vielen Registern, deren einzelne Werte (= Bits) man auf 1 oder 0 setzen kann.
Um einen Pin am Arduino UNO (=ATMEGA328) auf Ausgang zu setzen, heißt die Funktion in der Arduino IDE (im setup() deklarieren):

pinMode(pinNr, OUTPUT);

wenn man direkt das Register und in diesem Fall das Register für z.B. den PORT B, Pin 5 (beim Arduino also digital Pin 13) auf Ausgang setzen will, dann heißt der Befehl:

bitSet(DDRB,5);

eine andere Schreibweise wäre

DDRB |= (1<<5);

oder

DDRB |= _BV(5);

DDRB = The Port B Data Direction Register

Damit setzt man das Bit 5 von DDRB auf 1 und damit den Ausgang Port B 5 auf 1. Beim Arduino entspricht das dem Pin 13 (digital).

ATEMGA328 zu Arduino Pin-Map:
http://arduino.cc/en/uploads/Hacking/Atmega168PinMap2.png

Will man nun den Pin 13 auf HIGH (oder logisch 1) schalten, dann heißt es in der Arduino IDE

digitalWrite (13, HIGH);

analog, wenn man das Register direkt beschreiben will

bitSet(PORTB,5);

oder

PORTB |= (1<<5);

oder

PORTB |= _BV(5);

PORTB – The Port B Data Register

Damit setzt man das Bit 5 in PORTB auf 1 und damit den Ausgang auf HIGH (bei einem 5V-Arduino UNO also z.B. auf 5V). Der ATMEGA328 braucht in diesem konkreten Fall

für den digitalWrite()-Befehl 66 Taktzyklen, also 66 * 62,5ns = 4.125 ns oder 4µs.
für das direkte Beschreiben der Register (bitSet()) 2 Taktzyklen (Stichwort: SBI) oder 2 * 62,5ns oder 125ns

(62,5ns wenn der ATMEGA328 mit 16 MHz = 16.000.000 Schwingungen/ Sekunde getaktet ist. 1 Sekunde/ 16.000.000  = 0.0000000625 = 62,5 ns pro Taktzyklus).

Ein direktes Beschreiben der Register beschleunigt die Verabeitung dieses einzelnen Befehls also um den Faktor 33.

Vorteil des direkten Beschreiben der Register ist demnach zum einen das i.d.R. schnellere Verarbeiten der Befehle und auch der (teilweise weitaus) geringere Platzbedarf im Flash-Speicher des Arduino.
« Last Edit: February 14, 2013, 02:42:41 pm by markbee » Logged


0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3495
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Also bei den Reaktionszeiten ist wie gesagt ein Komparator die bessere Wahl. Der Arduino kann ja NACH der Abschaltung dann noch weitere Alarmierungen vornehmen die nicht so zeitkritisch sind.

Problematischer sehe ich es wenn ein Sicherheitssystem von jemand konstruiert wird der nicht einmal die Grundlagen dafür beherscht, aber das mußt Du selber wissen.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Problematischer sehe ich es wenn ein Sicherheitssystem von jemand konstruiert wird der nicht einmal die Grundlagen dafür beherscht, aber das mußt Du selber wissen.

Den Satz finde ich sehr schade..Schließendlich will ich somit ja einsteigen und die Grundlagen lernen! Dafür ist die Forum doch hier da, und nicht dafür, dass man fertig gemacht wird, oder gleich wie bei meiner anderen Frage, dass ich eine kostenpflichtige Lösung bevorziehen soll!

Aber herzlichen Dank für den Hinweis mit dem Komperatoren, uwefed! Den habe ich mir auch zum Herzen genommen, und  das werde ich auch berücksichtigen und in der Richtung weiterlesen, mich weiter erkundigen, recherchieren.

Keiner kommt auf diese Welt mit den Kenntnissen aus dem Mutterleib, die bringen wir uns selber bei. Und wenn euch da nach einem Leitfaden frage, hoffe ich und freue ich mich sehr auf so eine geniale, viel erklärende und AUFklärende Antwort von markbee..

Vielen Dank, markbee, noch einmal für die detaillierte Erklärung.

« Last Edit: February 14, 2013, 12:49:37 pm by sloomy » Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3495
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Du wirst nicht fertiggemacht. Aber entweder Deine Anwendung ist nicht kritisch, dann verstehe ich den Aufwand nicht, oder sie ist es, dann ist sie nicht wirklich geeignet zum Einsteigen.

Auf was ich raus will: egal was Du baust, eine Anfängerlösunug funktioniert nie auf Anhieb. Nicht einmal die meissten Profilösungen tun das. Nur wissen die Profis daß und bauen ihre Lösungen nicht als erstes in Sicherheitssysteme ein.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du wirst nicht fertiggemacht. Aber entweder Deine Anwendung ist nicht kritisch, dann verstehe ich den Aufwand nicht, oder sie ist es, dann ist sie nicht wirklich geeignet zum Einsteigen.

Auf was ich raus will: egal was Du baust, eine Anfängerlösunug funktioniert nie auf Anhieb. Nicht einmal die meissten Profilösungen tun das. Nur wissen die Profis daß und bauen ihre Lösungen nicht als erstes in Sicherheitssysteme ein.

DAS sind weise Sätze. smiley Das werde ich mir auch zum Herzen nehmen, und vorher viel testen und verifizieren/validieren, bevor ich es überhaupt als Sicherheitssystem nennen werde. smiley Danke smiley
Logged

Offline Offline
God Member
*****
Karma: 14
Posts: 989
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

wenn ich das ergänzen darf, für Anfänger, welcher jenige ich auch bin, ist vielleicht diese Schreibweise verständlicher. Soll keine Kritik an die Könner sein.
Die binäre Darstellung ist auf den ersten Blick klarer was man definiert hat.

Code:
void setup()
{
 // 0x...  Hexadezimale Angabe
 DDRA  = 0xFF;      // Port.A komplett als Ausgang definiert
 PORTA = 0xAA;      // aber nur jeder 2. auf High Pegel, Bit 1, 3, 5, 7

 // 0b...  Binäre Schreibweise
 DDRA  = 0b11111111;        // Port.A komplett als Ausgang definiert
 PORTA = 0b10101010;        // aber nur jeder 2. auf High Pegel, Bit 1, 3, 5, 7

 //  dezimale Schreibweise
 DDRA  = 255;        // Port.A komplett als Ausgang definiert
 PORTA = 170;        // aber nur jeder 2. auf High Pegel, Bit 1, 3, 5, 7

}

void loop()

  PORTA = 0;        // Port A komplett aus
}
Logged

Tschau
Doc Arduino

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

...und es gibt ja noch eine Schreibweise, die ich vergessen hatte:

PORTB |= _BV(5)     // bit PORTB 5 gesetzt
PORTB &= ~_BV(5)   // bit PORTB5 gelöscht
PORTB ^= _BV(5)     // toggle

Jetzt fehlt ja eigtl. nur noch die Assembler-Fraktion smiley-wink
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 270
Posts: 21842
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du wirst nicht fertiggemacht. Aber entweder Deine Anwendung ist nicht kritisch, dann verstehe ich den Aufwand nicht, oder sie ist es, dann ist sie nicht wirklich geeignet zum Einsteigen.

Auf was ich raus will: egal was Du baust, eine Anfängerlösunug funktioniert nie auf Anhieb. Nicht einmal die meissten Profilösungen tun das. Nur wissen die Profis daß und bauen ihre Lösungen nicht als erstes in Sicherheitssysteme ein.

Ich stimme mit Udo überein daß Du nicht fertiggemacht wirst. Du wirst nur von uns auf den nackten kalten Boden der Wirklichkeit zurückgebracht.

Ich weiß viele Sachen, da ich immer neugierig war und bin und seit ca 30 Jahren zuerst als Jugendlicher und dann in meiner Arbeit mit Elektronik zu tun hatte/habe und auch seit dieser Zeit mich für Programmierung privat interessiere. Mein erster Computer war ein VC20 und dann ein C64.

Schau Dir mal die Internetseite von Udo an und Du wirst sehen welche Programmierkenntnise er hat. Da komme ich bei weiten nicht ran.

Grüße Uwe
« Last Edit: February 14, 2013, 02:51:28 pm by uwefed » Logged

Pages: 1 [2]   Go Up
Jump to: