Show Posts
Pages: 1 ... 17 18 [19] 20 21 ... 77
271  International / Deutsch / Re: Frage zu Interrupt kann man die laenge eines Impuls Festsetellen on: February 27, 2014, 11:41:18 am
Sorry, ich komme erst morgen wieder an einen Arduino.
Und so "trocken" fällt mir nix auf.
Vielleicht hat ja einer der Cracks eine Idee?
272  International / Deutsch / Re: Attiny85 mehrere Taster an Analog Pin, Werte ermitteln on: February 27, 2014, 10:47:04 am
@guntherb: mit R1=0 hat Captain-DJ noch mehr Luft für seinen unbestimmten Pullup-Widerstand.
Der Normal-Fall "Kein Taster" muss ja auch sauber erkannt werden. (Ein 200k Widerstand bei 5V ist auch schon recht hoch )  
Alte Gewohnheit.
So kann man auch Kurzschluss nach Masse und nach VCC erkennen und ausschliessen.
Ist aber in dem Fall wohl nicht nötig.
273  International / Deutsch / Re: Attiny85 mehrere Taster an Analog Pin, Werte ermitteln on: February 27, 2014, 10:33:00 am
@guntherb
Wie macht man denn so was ?
Ohmsche Gesetz kann ich, aber es kommt ja nicht nur auf die einzelnen Widerstände an, bei mir hab ich alles mit 100KOhm gemacht und erhalte ja auch vernünftige Werte von 500 - 900 für die 4 Taster.
Das muss ja irgend wie anhand des Gesamtwiderstandes aufgeteilt werden ?

Dann frag doch einfach nach der Berechnung eines Spannungsteilers....  smiley
Meine Schaltung ist so:
vom AD-Pin gehen die Widerstände R1-R4 auf jeweils ihren Taster nach GND.
Wenn der interne Pullup eingeschalten ist, dann kann man die Spannung, die am AD-Eingang anliegt so Berechnen:
UAD = R1/(R1+RPullup)*5V

bzw. wenn ich gleich den AD-Wert ausrechnen will:
AD-Wert = R1/(R1+RPullup)*1023

ich habe dir das Exelsheet, in dem die Abstände angezeigt werden mal  zum Spielen drangehängt.
Die farbigen Balken zeigen dir an, in welchen Bereich sich die AD-Werte bewegen können über die Streuung des Pullup.
Du mußt also auf Bereiche abfragen, z.B. "boolean Taste2pressed = (AD > 133 && AD <279);"
ACHTUNG 1: Die Toleranzen von R1-R4 sind NICHT berücksichtigt, sollten aber kaum ins Gewicht fallen.
ACHTUNG 2: Gleichzeitiges Drücken von Tasten führt zu falschen Ergebnissen.

274  International / Deutsch / Re: Übung mit RGB - Ist das sauber programmiert? on: February 27, 2014, 08:35:58 am
An sich ist das schon recht sauber programmiert, finde ich.

Was ich anders machen würde:
a)  mit
Code:
       do {                                 // Programm fährt erst fort, wenn Taster wieder losgelassen wurde
           digitalRead(taster);
       } while ( !(digitalRead(taster)==0));
blockierst du den Prozessor.
Das macht man eher nicht, Ziel ist es, dass die loop() möglichst oft durchlaufen wird. Wenn du nun eine weitere Funktion dazu packen würdest, würde die nicht ausgeführt werden, solange kein Taster gedrückt ist.
Lass den Teil einfach weg, in die IF geht er sowieso nur rein wenn der Taster gedrückt wurde.

b) die Funktion leuchten() rufst du 2mal auf: einmal in der Loop, einmal nach Tastendruck. Das schadet nicht,  aber es reicht eigentlich, wenn du die Funktion nur nach einem Tastendruck aufrufst und die Ausgänge neu setzt.

c) Du hast die LED-Pins global definiert, übergibst sie aber in die Funktion.
Pins global definieren ist ok. Ich würde im Namen festhalten, dass es ein Pin ist, und, vor allem als Constante definieren. dann können die im Code nicht aus Versehen geändert werden.
Code:
/*Deklaration der Pins*/
const int LED_PIN_ROT = 9;
const int LED_PIN_GRUEN = 10;
const int LED_PIN_BLAU = 11;
const int TASTER_PIN = 2;
Und das übergeben an die Funktion kannst du dir dann sparen.
275  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: February 27, 2014, 08:12:09 am
Ok. Müssen es eigentlich Schottky-Dioden sein oder können es auch andere sein? Die müsste ich sonst noch bestellen. Denn würde ich die mit 30V und 0,2A nehmen.
Ja, Schottky sollte es schon sein.
Weil die bereits bei ca 0,3V leiten, also lange vor den Silizium Dioden im µC.
Bis die ankommen möchte ich mir schon mal Gedanken machen über den sketch:
Kann ich zB 20ms das Signal ausmessen und aus dem höhsten Wert den Effektivwert errechnen, denn müsste ich nur noch diese Zahl in V umrechen. Ist das der Theorie nach richtig oder muss das anders gemacht werden?
Wie schon mehrmals erwähnt:
ja, du kannst den Spitzenwert messen und daraus den Effektivwert berechnen. (dazu mußt du immer jeweils 20ms möglichst schnell den AD-Wert lesen. Da darf der Arduino aber nicht viel sonst nebenbei machen)

Oder, du kannst den Wert analog Filtern, in dem du paralell zum 100n einen Elko mit mindestens 220µ schaltest.
Dann kannst du zeitunkritisch messen und kriegst zu jedem Zeitpunkt (nach ca. 5sek Einschwingzeit) den arithmetischen Mittelwert. Auch aus dem kannst du dir die Effektivspannung berechnen. Ist zwar langsamer, aber das ist deine Heizung auch.
Ansonsten habe ich grad bei mir noch ne ähnliche fertigverlötete Schaltung gefunden die so ähnlich ist.
Die is ohne Gleichrichter und da sind 2 undefinierte Dioden drin.Und da kommt folgendes signal raus:

Da sieht man das die Negativen Wellen wegfallen, aber die positiven Wellen sind dafür nicht so schön. Außerdem ist die Spannung zu hoch.
Und ein Offset ist auch dabei....
Die Schaltung ist wohl für deine Zwecke nicht geeignet.

Wie soll ich denn jetzt mit dem Phasenanschnittregler weiterverfahren?
Gute Frage.
Wenn deine aktuelle Phasenanschnittsteuerung an sich funktioniert, du kannst also einen Wert einstellen, und der bleibt konstant, UND wenn du ein True-RMS Mulimeter hast, dessen Werten du traust, dann würde ich das eher empirisch angehen:
Wert einstellen, Spannung messen: Vor Phasensteller, Nach Phasensteller
Wert einstellen, Spannung messen: Vor Phasensteller, Nach Phasensteller...

So dass du eine Tabelle bekommst, die etwa so aussehen könnte:
Stellgröße   Uin      Uout
   0      229,2   228,9
   1      229,2   219,2
   2      229,2   209,5
   3      229,2   199,8
   ...
(ich kenne deine Stellgröße nicht, ich habe mal einen fikitiven Zähler angenommen)

Und daraus kannst du dir dann sowas ausrechnen:
   Uin/Uout   Stellgröße
   100%         0
   96%            1
   91%            2
   87%            3
   ...

Aus der differenz der aktuellen gemessenen Spannung zu deiner Referenzspannung kannst du dir nun aus der Tabelle deine Stellgröße errechnen (Stichwort: lineare Interpolation)  mit der du an der Heizung wieder die gleiche Effektivspannung einstellen kannst.


276  International / Deutsch / Re: Attiny85 mehrere Taster an Analog Pin, Werte ermitteln on: February 27, 2014, 04:23:47 am
Der interne Pullup ist definiert zwischen 20k und 50k.
Also für den Zweck nicht geeignet.


Edit:

geht doch.
Selbst mit den großen Toleranzen kriegt man das Überschneidungsfrei hin:

277  International / Deutsch / Re: Wasserstandshöhe eines Baches ermitteln on: February 27, 2014, 02:31:57 am
Ich denke Ultraschall sollte funktionieren, vor allem, da es aus dem Bereich Auto-Einparkhilfen Sensoren gibt, die Wasserfest verpackt sind.

Eine andere Art von Sensoren die ich kenne, und die dafür brauchbar wären, ist über die Heizkennlinie eines Widerstandsdrahtes der senkrecht ins Wasser eintaucht.
Das wäre eine Eigenbau Lösung, die aber etwas Elektronik know how erfordert.
278  International / Deutsch / Re: Frage zu Interrupt kann man die laenge eines Impuls Festsetellen on: February 27, 2014, 02:19:56 am
nur Ich wusste nicht was volatile ist und ob die Variablen Scluesselworte sind
Die Variablennamen sind frei gewählt.
Die Bedeutung von volatile hättest du in der Referenz nachlesen können.arduino.cc/en/Reference/Volatile

Volatile bedeutet nur, dass die Variable immer im RAM gehalten wird, und nicht als Kopie in einem Register gehalten werden darf.
Damit ist sichergestellt, dass sie immer aktuell sind.



279  International / Deutsch / Re: Frage zu Interrupt kann man die laenge eines Impuls Festsetellen on: February 26, 2014, 02:02:19 pm
Naja, am einfachsten, in dem man die Funktionen und Variablen mit anderem namen nochmal anlegt.

Also zu
Code:
volatile unsigned long TS1, TS2;
volatile boolean ISR, Flanke;

void ISRpulslang(){
usw...

kommt dazu:
Code:
volatile unsigned long TS1_b, TS2_b;
volatile boolean ISR_b, Flanke_b;

void ISRpulslang_b(){
usw...
Es gibt elegantere Methoden, aber für 2 Interrupts geht das.
Und welcher Pin auf welchen Interrupt geht, kannst du bei ../Reference/AttachInterrupt nachlesen.
280  International / Deutsch / Re: Lüfter schaltet nicht vollständig ab on: February 26, 2014, 07:01:11 am
Wenn du
a) deine Schaltung so verdrahtet hast, wie auf dem Bild und
b) der Fet ok ist,
dann muß das funktionieren.

Wenn es nicht funktioniert, ist entweder a) oder b) nicht richtig.

Vielleicht solltest du doch mal ein (hochauflösendes, scharfes) Foto deines Aufbaus posten?
281  International / Deutsch / Re: Suche logiclevel Mosfet on: February 26, 2014, 06:38:10 am
IRLML2244 42mR  @4,5V
IRLML2246 90mR @4,5V
IRLML9303  220mR @4,5V
BSS84P  5,8 Ohm @ 4,5V
...


Eigenlich fast alle, die in der Suchfunktion  bei Conrad aufpoppen, sind Logic-Level.

282  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: February 26, 2014, 04:06:00 am
Noch was: Diese Spannungsmessung über den Gleichrichter bringt dir Nichtlinearitäten und Ungenauigkeiten.
Wenn du die beiden Schottky-Dioden am AD-Eingang hast, dann kannst du den Gleichrichter auch weglassen.
die negative Halbwelle wird dann über die Schottky-Diode geklemmt, die Positive geht  ungehindert durch.
du mißt dann zwar nur noch die positive Halbwelle, aber das sollte reichen. Dafür wird die Messung des Spitzenwertes genauer sein.
Aber krieg erstmal die prinzipielle Funktion hin, dann kann man sich um die Feinheiten kümmern.
283  International / Deutsch / Re: Abstandsmessung für grbl on: February 26, 2014, 03:20:52 am
Kanst du bitte das Datenblatt dranhängen?
Ich möchte mich nicht extra registrieren müssen um das Datenblatt zu laden.
284  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: February 26, 2014, 03:05:35 am
Quote
Û = 10,69/227,4*240*1,414 = 15,95V

Wo kommt 1,414 her? Nur um das zu verstehen.
wurzel(2) = 1,414

Quote
R2 = R1/(UINmax/UADmax -1)   = 10k /(17,5V / 4,5V - 1) = 3462 Ohm.

Wenn man solch hohe Wiederstände wählt muss man denn auch den Kondensator anpassen damit das Signal unverändert rauskommt?
mit 10k/3,6k und 100nF hast du immer noch eine Grenzfrequenz von 600Hz. Das sollte deine Signalform nicht beeinflussen.
(Laut Simulation ist der gemessene Spitzenwert um 0.4% kleiner als ohne Kondensator)

Sorry ich kenne mich mit Wiederstandsgesetzen nicht aus, aber würde hier der maximale Spitzenwert 4,5V betragen?
UAD = Uin * R2 / (R1+R2)
UAD = 15,95V * 3,6k 7 (10k+3,6k) = 4,22V  ist also noch etwas Luft, aber das passt.
Quote
4,88 mV/digit am AD-Eingang
18,45mV/digit vorm Spannungsteiler
410,8mv/digit vorm Trafo

Verzeih mir all diese dummen Fragen. Ich google auch immer vorher, bin mir aber nicht sicher ob ich es verstanden habe.
Ist ein Digit beim AD-Eingang 1 (von 0-1023) und beim Trafo 1V. Ist das sowas wie ne unbestimmte Maßeinheit?
Wie du richtig erkannt hast: 1 digit ist einer von 1023 Mess-Schritten beim AD-Wandler.
Die verschiedenen Wert kommen von den verschiedenen Spannungteilern.
Der AD teilt die 5V Versorgung in 0-1023 Schritte auf, ein Bit hat also den Wert 5V /1024 = 4,88mV
Da die Spannung am AD ja aber durch 2 Widerstände runtergeteilt wurde, entspricht ein Bit des AD 4,88 /3,6*(3,6+10) = 18,45mV vor dem Spannungsteiler (also am Gleichrichterausgang)
Und für die letzte Spannung habe ich einfach das Verhältnis der von dir gemessenen Spannungen Netz: 227,4V  Gleichrichter: 10,69V genommen.
Quote
dann schau dir mal die Signale an, die damit messen kannst.
Soll ich das ganze also erstmal ohne Kondensator messen?.
den 100nF kannst du drin lassen.
Quote
Sorry, den Teil verstehe ich nicht. Welche Tabelle? 103V bei 7Sekunden???
Is meine Schuld, war zu ungenau ausgedrückt.
Mit Tabelle meine ich die Exeltabelle die du mir gegeben hast, da wo die UEff Formel für Phasenanschnitt ist.
7s/4,5s : Ich stelle mit dem jetzigen sketch die Dauer vom Nulldurchgang bis zur zündung des Triac ein. Testweise, um die Genauigkeit zu prüfen, habe ich da 7s und 4,5s genommen. Die Netzspannung UN habe ich in der Exetabelle meiner Messung angepasst. Und anschließend die gemessenen Effektivwerte mit denen aus der Tabelle verglichen.
Ah, ok du meinst also nicht sekunden, sonder millisekunden. Dann gibt das plötzlich Sinn.
Interessant wäre, wie genau der Nullpunkt gemessen und der Phasenanschnitt umgesetzt wird. Aber das wird ohne Oszilloskop schwer.
285  International / Deutsch / Re: Interrupt & Co gesucht... on: February 25, 2014, 12:30:31 pm
Dein Sketch zählt etwas hoch und runter:

Tschuldigung, da war ein Fehler drin.

So läuft er:
Code:
/*********************************************************************************
** LoopTiming() by GuntherB **
**********************************************************************************
** Funktion um die Loopaufrufzeiten zu ermitteln **
** wird in der Loop aufgerufen **
** benötigt ca (AL * 4 + 10 )Byte RAM **
*********************************************************************************/
void LoopTiming(){
  const int AL = 100; // Arraylänge
  static unsigned long Timestamp[AL];
  static int Nr, Min=0xFFFF, Max, Avg;
  Timestamp[Nr++]=millis();
  if (Nr >= AL){  // Array voll, Daten auswerten
     for (int i = 1; i<AL; i++){
      Max = max(Max, Timestamp[i]-Timestamp[i-1]);
      Min = min(Min, Timestamp[i]-Timestamp[i-1]);
      Avg += Timestamp[i]-Timestamp[i-1];
    }
    Avg = Avg / (AL-1);
    Serial.println(F("Loop wird aufgerufen "));
    Serial.print(F("durchschnittlich alle "));Serial.print(Avg);Serial.println("ms");
    Serial.print(F("minimaler Abstand     "));Serial.print(Min);Serial.println("ms");
    Serial.print(F("maximaler Abstand     "));Serial.print(Max);Serial.println("ms");
    Min = 0xFFFF;
    Max = 0;
    Avg = 0;
    Nr = 0;
  }
}
 

Pages: 1 ... 17 18 [19] 20 21 ... 77