Show Posts
Pages: 1 2 [3] 4 5 ... 202
31  International / Deutsch / Re: Leonardo/AduinoRobot Upload USB reparieren on: August 21, 2014, 05:23:39 am
gibt es hier irgendjemanden, der weiß, wie man einen Leonardo/ArduinoRobot wieder dazu bringen kann, einen neuen Sketch aufzuladen?

Ja, Boards mit 32U4 Controller wie Leonardo lassen sich durch fehlerhafte Programmierung extrem leicht bricken und ins Nirvana schicken, so dass Anfänger dann voll auf dem Schlauch stehen.

Wiederbeleben kannst Du solche Boards, indem Du einen "manuellen Reset" beim Uploaden machst, und zwar im genau richtigen Moment, und dann wieder einen fehlerfreien Sketch aufspielst, z.B. den "Blink" Sketch aus den Beispielen.

Um den richtigen Moment für den manuellen Reset zu treffen,solltest Du in den "Datei-Einstellungen" die "Ausführliche Ausgabe anzeigen während Upload" aktivieren, indem Du bei "Upload" ein Häkchen setzt.

Wenn ich es richtig im Kopf habe, ist der Ablauf danach so:
Du drückst Du den Reset-Button und hältst ihn fest gedrückt.
Du startest Du den Upload in der Arduino-Software
Wenn Du dann in den Ausgaben siehst, dass nach einem COM-Port gescannt wird, sofort den Reset-Knopf loslassen

Eventuell mehrmals versuchen.

Klappt's damit?
32  International / Deutsch / Re: Arduino UNO <-> NANO, Software mit INT0 läuft nur auf UNO on: August 20, 2014, 04:08:57 pm
Hab ich irgendwas übersehen? Sind die beiden Chips doch nicht identisch?
Wäre um jede Hilfe dankbar. Aktuell hab ich keine Idee mehr

Die Atmega328 sollten sich gleich verhalten.

Aber hast Du auch die Polung des Optokopplers beachtet oder ist der jetzt vielleicht verpolt an Deinem S0-Zähler angeschlossen?
33  International / Deutsch / Re: Suche Thread/Produkt bezuegl. High-Speed Photographie on: August 20, 2014, 09:15:58 am
Oder http://photoduino.com/
34  International / Deutsch / Re: Quellcode digitalWrite on: August 20, 2014, 04:33:35 am
da die Funktion digitalWrite sehr langsam ist, wollte ich mir einmal den Quellcode dazu ansehen. Leider finde ich ihn nirgends beziehungsweise weiß ich nicht wie ich mir die Arduniobibiliothek ansehen kann. Kann mir jemand sagen wie das funktioniert?

Quellcode digitalWrite aus Arduino 1.0.5:
Code:
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;

if (port == NOT_A_PIN) return;

// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

out = portOutputRegister(port);

uint8_t oldSREG = SREG;
cli();

if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}

SREG = oldSREG;
}

Zu finden unter in der Datei wiring_digital.c im Pfad:
[Installationspfad]\arduino-1.0.5\hardware\arduino\cores\arduino

Hat Dein Betriebssystem keine Suchfunktion?
35  International / Deutsch / Re: Spannungsreglung für LED Bargraph on: August 20, 2014, 04:18:13 am
Für ein dynamisches Verhalten muss ich also R und C anpassen. gibt es da eine "Anleitung" zur Berechnung? Wenn ich das jetzt einfach runterskaliere und sieben 100k widerstände in Reihe schalte, wie wirkt sich das auf die Trägheit der Spannungseinstellung aus?

Wenn Dir die Formel nicht reicht, die in Reply #1 verlinkt ist, es gibt auch einen Online-Rechner für PWM-Tiefpassfilter:
http://sim.okawa-denshi.jp/en/PWMtool.php

Wenn Du die PWM-Frequenz auf 31 kHz hochsetzt, dürften für Deinen Anwendungsfall R=47k und C=100nF brauchbar sein, die ergeben in dem Fall eine Grenzfrequenz fc = 33.86 Hz bei einer Restwelligkeit von knapp 9mV.

Für eine gute Glättung des Ausgangssignals ist nicht nur der Tiefpassfilter entscheidend, sondern dass Du die standardmäßige PWM-Frequenz von ca. 0,5 kHz bis ca. 1 kHz (je nach Pin) auf einen deutlich höheren Wert setzt. Bei den 8-Bit AVR Controllern geht das nur über direkte Registerzugriffe.
36  International / Deutsch / Re: Mega 2560 - Power Saving - Strom sparen on: August 20, 2014, 02:40:37 am
Den seltsamen Effekt mit den 2mA konnte ich nicht mehr nachstellen. Der kam zu stande mit der Reihenfolge wann man den 16U2 Reset jumpert.

Dazu hattest Du geschrieben:
> ich messe noch einen Unterschied von 2mA, wenn ich den 16U2 gejumpert lasse und
> dann 5V anschließe oder erst 5V ran und dann jumper.

Also leitet der 16U2 auf dem Board irgendwelche Stromsparmaßnahmen mit dem ersten Bootvorgang ein.

Was passiert denn jetzt, wenn Du folgendes machst:
- Reset vom 16U2 NICHT direkt mit GND verbinden
- sondern Reset vom 16U2 mit einem freien digitalen Pin des 2560 Controllers verbindest, z.B. 22
- und dann in der setup-Funktion:

Code:
#define RESET16U2 22  // Reset für 16U2 an Pin 22
pinMode(RESET16U2,OUTPUT);

Dann wird beim PowerOn der Reset-Pin zunächst mal nicht auf Low gesetzt, der 16U2 kann genau so normal starten wie der 2560, und sobald der 2560 sein setup ausführt, wird erst in dem Augenblick der Reset vom 16U2 auf OUTPUT/LOW gesetzt.

Das sollte dann doch die zusätzlichen 2mA aus Reply #14 einsparen?
37  International / Deutsch / Re: Bauteile on: August 19, 2014, 03:30:34 pm
wie sieht es eigentlich aus, wenn ich statt dem 2 Meter Flachbandkabel einfach ein serielles Kabel verbaue?
dann würde ich eben etwas mit 2x 25 Polen einlöten.
von der Abschirmung hier sind die doch um Längen besser, oder?

Mit einem abgeschirmten RS232 Kabel als Verbindung hast Du bestimmt größere Chancen, dass nach zwei Metern noch die Zeichen auf dem Display ankommen, die dort ankommen sollen, als mit einem 25pol-Flachkabel.
38  International / Deutsch / Re: Mega 2560 - Power Saving - Strom sparen on: August 19, 2014, 02:31:03 pm
Auf welchen Board ist der MC33269D-5.0 verbaut? Wobei die 5.0 am Ende auf 5V Ausgangsspannung hindeuten würden.

Stimmt, da habe ich mich vertan, das ist ein 5V Regler, und zwar wohl der auf dem ersten MEGA-Board.

Auf dem MEGA2560-R3 sollte ein LP2985-33DBVR als 3.3V Regler sitzen, und der braucht laut Datenblatt wirklich nur knappe 0,1mA und sollte nicht gross zum Stromverbrauch beitragen.

Aber hast Du ein Original-Board mit diesem speziellen LP2985-33DBVR Regler?
Übliche Regler können deutlich mehr Strom fressen als dieser spezielle Lowdrow/LowBias-Regler von TI.
Und wenn Dein 3.3V Regler eher ein "üblicher" als ein "LP2985-33DBVR" ist, kannst Du mit dem auch einsparen, wenn Du ihn auslötest, wenn Du ihn nicht brauchst.

Wobei natürlich jetzt die Frage wäre, was sich noch 7,5mA gönnt, abzüglich der 2,5mA der LED von 10mA in Sleep. Der Sleepmodus ist doch vollständig richtig? Mehr geht mit Code nicht?

Also vom Sleepmode her ist PowerDown schon das niedrigste. Da kann man zwar womöglich noch etwas rausholen über die Abschaltung der Brownout-Detection (keine Ahnung ob das beim 2560 auch per Software geht oder nur über die Fuses), oder die Deaktivierung des ADC, aber da ist man mehr im Microamperebereich als bei Milliampere.

Was ist denn mit den zwei Milliampere, die Du in  Reply #14 beim 16U2 noch als Sparpotential erkannt hast?
Die sparst Du bisher noch nicht ein, oder?
39  International / Deutsch / Re: Waage und Arduino - Befehle senden und Antworten empfangen on: August 19, 2014, 07:29:34 am
Befehl (Master): CAL.TAC (mit ENTER dahinter)
Antwort (Waage): CAL.TAC 1136 (mit ENTER dahinter)

Ich bin mir jedoch nicht sicher wie ich den Befehl an die Waage senden kann. Serial1.write hatte scheinbar keinen Erfolg.

Mit write sendest Du auch keine Strings.

Probier mal
Code:
Serial1.print("CAL.TAC\r");
40  International / Deutsch / Re: Arduino Sketch für 3D Scanner? on: August 19, 2014, 07:11:11 am
Also Stepper wäre schon sehr bevorzugt

Wo genau liegt denn jetzt das Problem?

Diese chinesischen Mini-Seppermotoren sind doch absolut trivial anzusteuern.

Ist das Problem, dass Du irgendwie über ein Potentiometer oder über Serial die Drehzahl beeinflüssen möchtest, damit Dein Drehteller schneller oder langsamer rotiert, wenn Du es bei laufendem Programm ändern möchtest?

Oder soll der Arduino nach je 360° Drehung ein Signal abgeben, z.B. eine LED blinken lassen?

Wo genau liegt denn die Schwierigkeit?

Falls die einzige Schwierigkeit darin besteht, den Motor ständig in eine Richtung laufen zu lassen, ändere die loop-Funktion auf:
Code:
void loop(){
  clockwise();
}

Und wenn der Motor langsamer laufen soll, verlängere die Stepdauer auf größere Werte, z.B:
Code:
int motorSpeed = 24000;  //variable to set stepper speed
41  International / Deutsch / Re: Arduino Uno als Besetzt-Ampel on: August 19, 2014, 07:03:21 am
Das heist, bisher ist es mir nur gelungen einen Rot-Grün wechsel zu erreichen und das mit unterschiedlichen Intervallen.

Im Prinzip mußt Du Dir für ein Programm immer zwei Dinge überlegen:
1. geeignete Datenstrukturen für Deine Variablen, die das Problem abbilden und
2. geeignete Algorithmen, die mit diesen Datenstrukturen hantieren

Das ganze dann in ein strukturiertes Programm nach dem EVA-Prinzip verpacken:
E - Eingabewerte ermitteln
V - Verarbeitung der Eingabewerte zu Ausgangswerten
A - Ausgangswerte ausgeben

Ich würde für Dein Programm zwei Zeitzähler vorschlagen:
- Anwesenheitszähler - zählt immer die Zeit hoch, wenn Abstand unterschritten
- Abwesenheitszähler - zählt immer die Zeit hoch, wenn Abstand überschritten
Beim Wechsel des Abstands unterschritten/überschritten werden beide Zähler auf null zurückgesetzt
Und der Zähler, der seinen Grenzwert überschreitet, bestimmt dann, welche LEDs geschaltet werden
42  International / Deutsch / Re: Interrupt für mehr als LED blinken on: August 19, 2014, 04:48:17 am
Ich habe kein schlechtes Gefühl was wie viel Zeit kostet, ich habe überhaupt kein Gefühl dafür
wie lange welche Schleife braucht!  smiley-yell

Du kannst über den Stand des micros()-Zählers und Debug-Ausgaben auf Serial durchaus messen, wie lange Dein Code läuft.

Testcode beispielsweise:
Code:
int
  signal_soll,
  signal_ist,
  signal_soll_skaliert,
  signal_ist_skaliert,
  signal_soll_berechnet,
  regelabweichung;
 
float
  potenz6,
  potenz5,
  potenz4,
  potenz3,
  potenz2,
  summand6,
  summand5,
  summand4,
  summand3,
  summand2,
  summand1;
 
 const float FACTOR6 = 3.2445916909115E-14;
 const float FACTOR5 = 6.26984473115432E-11;
 const float FACTOR4 = 4.14486340076514E-08;
 const float FACTOR3 = 8.05562633887646E-06;
 const float FACTOR2 = 0.00229807982179864;
 const float FACTOR1 = 1.35441912656097;

void setup()
{
  Serial.begin(9600);
}

void loop() {
   unsigned long zeitmessen=micros(); // Zeitmessung starten
   signal_soll = analogRead(A2);    // liest Soll-Signal ein (160 - 760 = 0.8 - 3.7V)
   signal_ist = analogRead(A4);     // liest Ist-Signal ein (60 - 936 = 0.30 - 4.55V)
   
   // Signale auf gleichen Wertebereich (0 - 900) skalieren
   signal_soll_skaliert = map (signal_soll, 165, 758, 0, 900);
   signal_ist_skaliert = map (signal_ist, 60, 930, 0, 900);
   
      potenz6 = pow(signal_soll_skaliert,6);
      potenz5 = pow(signal_soll_skaliert,5);
      potenz4 = pow(signal_soll_skaliert,4);
      potenz3 = pow(signal_soll_skaliert,3);
      potenz2 = pow(signal_soll_skaliert,2);
     
      summand6 = FACTOR6 * potenz6;
      summand5 = FACTOR5 * potenz5;
      summand4 = FACTOR4 * potenz4;
      summand3 = FACTOR3 * potenz3;
      summand2 = FACTOR2 * potenz2;
      summand1 = FACTOR1 * signal_soll_skaliert;

      signal_soll_berechnet = summand6 - summand5 + summand4 - summand3 - summand2 + summand1;

       //Regelabweichung aus Potistellungen berechnen
       regelabweichung = signal_soll_berechnet - signal_ist_skaliert;
   zeitmessen=micros()-zeitmessen; // Zeitmessung Ergebnis als Differenz zum Startwert bilden
   Serial.println();
   Serial.print("Regelabweichung: ");Serial.println(regelabweichung);
   Serial.println();
   Serial.println("Zeitmessung gestoppt: ");
   Serial.print(zeitmessen); Serial.println(" Mikrosekunden");
   Serial.print(zeitmessen/1000.0,3); Serial.println(" Millisekunden");
   Serial.print(zeitmessen/1000000.0,6); Serial.println(" Sekunden");
   while(1); // Endlosschleife (Programmende)
}     

Damit messe ich auf einem UNO, dass das Ermitteln der Regelabweichung mit Deinem Code z.B. 1864 µs dauert (hängt ein bisschen auch von den Messwerten ab).

Wenn Du für ein digitalRead(PIN) nun 4 µs extra verbrauchst, verlangsamt sich die Ausführung um Faktor 4/1864=0,0021 bzw. um 0,21%.

Wenn es für Deine Regelung ausreicht, dass diese um die 500 mal pro Sekunde nachregelt, macht das den Kohl nicht fett.
43  International / Deutsch / Re: Probleme mit IR Lichtschranke (unzuverlässig) on: August 18, 2014, 03:21:58 pm
40 oder 36 ändert nichts, benutze das Arduino Uno

Klingt nach einem Hardwarefehler. Verkabelung mangelhaft oder mit Wackelkontakt. Arduino-Pin defekt. Oder das IR-Sensormodul defekt.

Also Verkabelung prüfen:
Ist der IR-Empfänger an 5V angeschlossen? Und nicht etwa an 3.3V?
Ist die GND-Verbindung vom IR-Empfänger zu Arduino-GND vorhanden?
Wackelkontakte?

Auch bei der Sendediode alles OK? Spannung? GND? Signal?

Ist der Arduino-Pin noch OK?
Wenn der Sensor vom Arduino abgeklemmt wird und der Pin auf INPUT_PULLUP gesetzt wird, toggelt das Signal dann immer noch hin und her?
44  International / Deutsch / Re: Probleme mit IR Lichtschranke (unzuverlässig) on: August 18, 2014, 02:44:19 pm
ändert leider nichts

Kannst Du die Bauteilebeschriftung des IR-Empfängers identifizieren?

Ob es möglich ist, dass Du keinen 38 kHz Empfänger auf Deinem Modul hast, sondern einen 36 kHz oder 40 kHz Empfänger?

Teste mal:
Code:
irsend.enableIROut(36);
oder
Code:
irsend.enableIROut(40);

Passiert damit noch etwas, oder ist das voll daneben?
Welches Arduino-Board verwendest Du?
45  International / Deutsch / Re: Probleme mit IR Lichtschranke (unzuverlässig) on: August 18, 2014, 02:21:13 pm
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, wenn es nur daliegt...

IR Receiver flackert unregelmäßig...

Ich sehe kein Datenblatt für Dein Modul.

Eventuell wird ein PullUp-Widerstand am Pin benötigt?

Probiere mal:
Code:
pinMode(PIN_DETECT, INPUT_PULLUP);
Pages: 1 2 [3] 4 5 ... 202