Show Posts
Pages: [1] 2 3 ... 64
1  International / Deutsch / Re: Mega 2560 als "stand alone" - flashen on: Today at 03:58:30 am
Hallo,

könntest Du mal den Strom messen, den Dein nackter Mega2560 in Idle und in Sleep aufnimmt?
Der Sketch funktioniert auf meinem Arduino Mega2560. Ich hätte gern gewußt, wieviel Strom der nackte µC aufnimmt.
Würdest Du das mal bitte messen?  Mit Pin 2 gegen Masse holst Du ihn aus dem Schlafmodus.

Code:
/* Sleep Demo Serial
 * -----------------
 * Example code to demonstrate the sleep functions in a Arduino. Arduino will wake up
 * when new data is received in the serial port USART
 * Based on Sleep Demo Serial from http://www.arduino.cc/playground/Learning/ArduinoSleepCode

 "Aufwach-Taster" an Pin 2 gegen Masse

 Originalboard Arduino Mega 2560
 Idle 59,2mA   Sleep 22,3mA   ohne 16U2 Jumper
 Idle 54,5mA   Sleep 15,5mA   mit Jumper auf GND-Reset für 16U2
 
 ohne Spannungsregler auf Board, abgegelötet
 Idle 55,1mA   Sleep 16,5mA   ohne 16U2 Jumper
 Idle 49,9mA   Sleep  9,8mA   mit Jumper auf GND-Reset für 16U2

 alles Sleep Mode nochmals durchgemessen:
 nur 5V anlegen: 21,4mA
 5V anlegt und Jumper gesetzt: 9,9mA
 Jumper gesetzt gelassen, 5V weggenommen und wieder angelegt: 12,2mA
 5V bleiben angelegt und Jumper entfernt: 16,2mA
 Jumper wieder gesetzt: 9,9mA
 
 Reset Pin 16U2 ergänzt für sicheren und dauerhaften 9,9mA Effekt.
 
*/   
   

#include <avr/sleep.h>

//#define RESET16U2  22       // Reset für 16U2 an Pin 22

int sleepStatus = 0;        // variable to store a request for sleep
int count = 0;              // counter

int ledPin = 13;            // LED connected to digital pin 13
//int interruptPin = 10;      // LED to show the action of a interrupt
int wakePin = 2;            // active LOW, ground this pin momentary to wake up
//int sleepPin = 12;          // active LOW, ground this pin momentary to sleep
int ledState = LOW;

void wakeUpNow()        // here the interrupt is handled after wakeup
{
  // execute code here after wake-up before returning to the loop() function
  // timers and code using timers (serial.print and more...) will not work here.
  // digitalWrite(interruptPin, HIGH);  // LED an Pin 10 ein
}


void sleepNow()
{
    /* Now is the time to set the sleep mode. In the Atmega8 datasheet
     * http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf on page 35
     * there is a list of sleep modes which explains which clocks and
     * wake up sources are available in which sleep modus.
     *
     * In the avr/sleep.h file, the call names of these sleep modus are to be found:
     *
     * The 5 different modes are:
     *     SLEEP_MODE_IDLE         -the least power savings
     *     SLEEP_MODE_ADC
     *     SLEEP_MODE_PWR_SAVE
     *     SLEEP_MODE_STANDBY
     *     SLEEP_MODE_PWR_DOWN     -the most power savings
     *
     *  the power reduction management <avr/power.h>  is described in
     *  http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
     */ 
       
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here

  sleep_enable();          // enables the sleep bit in the mcucr register
                           // so sleep is possible. just a safety pin
 
    /* Now it is time to enable an interrupt. We do it here so an
     * accidentally pushed interrupt button doesn't interrupt
     * our running program. if you want to be able to run
     * interrupt code besides the sleep function, place it in
     * setup() for example.
     *
     * In the function call attachInterrupt(A, B, C)
     * A   can be either 0 or 1 for interrupts on pin 2 or 3. 
     *
     * B   Name of a function you want to execute at interrupt for A.
     *
     * C   Trigger mode of the interrupt pin. can be:
     *             LOW        a low level triggers
     *             CHANGE     a change in level triggers
     *             RISING     a rising edge of a level triggers
     *             FALLING    a falling edge of a level triggers
     *
     * In all but the IDLE sleep modes only LOW can be used.
     */
 
  attachInterrupt(0,wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function
                                     // wakeUpNow when pin 2 gets LOW
     
  sleep_mode();            // here the device is actually put to sleep!!
 
                           // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
  sleep_disable();         // first thing after waking from sleep:
                           // disable sleep...
 
  detachInterrupt(0);      // disables interrupt 0 on pin 2 so the
                           // wakeUpNow code will not be executed
                           // during normal running time.
   
}


void setup()
{
  //pinMode(RESET16U2,OUTPUT);       // 16U2 wird dauerhaft
  //digitalWrite(RESET16U2, LOW);    // im Reset Mode gehalten, spart 2mA
 
  pinMode(ledPin, OUTPUT);         // LED connected to digital pin 13
 
  pinMode(wakePin, INPUT);         // active LOW, ground this pin momentary to wake up
  digitalWrite(wakePin, HIGH);     // Pullup aktiv
     
  attachInterrupt(0,wakeUpNow, LOW);   // use interrupt 0 (pin 2) and run function
                                       // wakeUpNow when pin 2 gets LOW
                           
}


void loop()
{
 
   if ( digitalRead(2) == LOW ) {
     digitalWrite(ledPin, HIGH);     
   }
   else {
     digitalWrite(ledPin, LOW);
     sleepNow();                   // sleep function called here
   }
     
 
}



2  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: Today at 03:49:34 am
Hallo,

okay, von elektrischen Störungen auf der Leitung bin ich jetzt nicht ausgegangen. Dann benötigt man erstmal ein Oszi. Mir ging es primär um die reinen Logiksignale bei meiner Betrachtung. Von der Sache her benötigt man beide Meßgeräte.
3  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 28, 2014, 05:52:09 pm
Hallo,

@ Skoby: mit einem normalen Oszi kann man doch keine Logiksignale anschauen. Also nicht so wie ich das meine. Man triggert auf irgendeine Flanke, die Datensignale rauschen durch und das wars. Was sieht man auf dem Oszi? Nichts. Der Logik-Analyzer speichert die Aufzeichung und man kann in aller Ruhe die Signale anschauen, rein- rauszoomen, Zeiten messen usw.  Das Oszi nützt einem nur etwas, wenn es regelmäßig in sehr kurzen Abständen wiederholt wird. Sonst kann man das mit dem Oszi wirklich vergessen. Als ich das mit meinem Meßschieber programmiert habe, war das ein Graus das Logiksignal vom Protokoll auf dem Oszi anzuschauen. Ich bekam das nicht stabil und wenn ich die Zeitbasis "zum reinzoomen" verändert habe, fehlte mir der Überblick, wenn die komplette Signalfolge auf dem Schirm war, konnte man kaum etwas erkennen, weil alles zu eng zusammen gequetscht war.

@ sth77: das steht und fällt mit der Software. Die Software von dem Open-Logic-Sniffer sieht genauso aus wie das was ich erst hatte. Den Arduino Sketch als Logic-Analyzer mit OLS Java Software. Die Software ging zwar, aber zu der Saleae Software liegen Welten.

Die Software steht frei zum Download. Das ist keine Demo zum Download. Immer die Fullversion. Wenn Disconnect erkannt wird, startet eine Simulation. Wenn man das Teil ansteckt, kann es manchmal sein das Disconnect stehen bleibt. Man drückt Start und es geht richtig los. Beta Version bei mir. Die Final funktioniert auch. Laut meiner Beobachtung kommen viele Betaversionen raus. Wann die nächste Final kommt weis ich nicht. Ich nutze die 1.1.20 beta. Wenn man dann noch die Protokollfunktionen nutzt wird es richtig geil. Einfach ausprobieren, danach, nie wieder ohne. Wetten?  smiley

4  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 28, 2014, 05:57:45 am
Hallo,

das sinnvollste ist sicherlich zuerst ein Oszi. Hatte damals mein Hameq gebraucht aus der Bucht gekauft. Nur kann man damit keine Logiksignale ordentlich anschauen. Die Software erkennt Busprotokolle und dekodiert diese schon für einen. Für meine Fehlersuche letztens am SPI wäre ich ohne Logik-Analyzer aufgeschmissen gewesen. Sagen wir mal so, es ist eine sinnvolle Ergänzung zum Oszi.

5  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 28, 2014, 05:38:25 am
Hallo,

wenn man googeln kann, weis man das es ein Logik-Analyzer ist mit modifizierter Firmware, damit die Saleae Software funktioniert. Was ist daran keine Fälschung. Deswegen sollte man das jetzt nicht unnötigerweise groß breit treten. Auch wenn es an jeder Ecke verkauft wird. Kann man denn nicht mal einen Hinweis geben ohne das es immer groß ausgetreten wird. Das nervt.
6  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 28, 2014, 05:00:44 am
Hallo,

was wird denn das jetzt? Ich würde das nicht weiter ausschmücken mit Links und Bildern. Weil das Ding ist nicht ganz legal. Nimms wieder raus.

7  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 28, 2014, 04:02:35 am
Hallo,

ich hatte vorher den OLS LogicSniffer und den passenden Sketch auf meinen Arduino geflasht. Nur erstens ist damit mein Arduino blockiert, kann also nichts messen mit dem Arduino selbst und zweitens sind nur maximal 4MHz möglich und nur ganz kurze Meßzeiten. Machte Spaß, aber kurze Zeit später war es nicht mehr praxistauglich. http://physudo.blogspot.de/2013/08/arduino-als-logic-analyzer.html    Das mit dem Saleae ist eine ganz andere Größenordnung. Auch wenn der nicht ganz legal ist. Die Software ist um Welten besser. Bei mir läuft die 1.1.20 beta.



8  International / Deutsch / Re: Screw shield für Mega gesucht on: August 27, 2014, 05:43:34 pm
okay, dann hilft es Dir skorpi, auch nicht verkehrt.  smiley-wink
9  International / Deutsch / Re: Screw shield für Mega gesucht on: August 27, 2014, 05:13:47 pm
Hallo,

trotz seiner letztens Entgleisung im Forum gebe ich mal einen kleinen Hinweis.
Schraubklemmen bei Conrad im RM 2,54, Bsp. 8pol. Bestellnr. 567844







10  International / Deutsch / Re: Logik Analyser / Oszilloskop gesucht on: August 27, 2014, 04:58:33 pm
Hallo,

bei allen günstigen digitalen Oszis ist die Bildschirmauflösung zu gering. Unter 800x ... geht da nix los wenn es brauchbar sein soll.

Wenn ein Logic Analyzer reicht, warum nicht in der Bucht einen Saleae 24M kaufen und die Software von Saleae verwenden. Habe ich und noch jemand aus dem Forum im Einsatz. Funktioniert astrein. Mein erster ging unerklärbar kaputt, Ersatz kam innerhalb paar Tage. Bekommt man für unter 20,- mit 8 Kanälen. Was will man damit falsch machen? Mußt nur in der Bucht nach "saleae" suchen lassen.


.
11  International / Deutsch / Re: Code Fragen probleme bei - Debounce, LCD Anzeige on: August 26, 2014, 10:51:29 am
Hallo,

warum nimmt niemand ein char array? Damit entfällt das lästige abfragen der Potenzen, es ist formatiert und man kann den LCD Cursor immer an die gleiche Stelle auf Anfang setzen.

ist rechts formatiert mit Unterdrückung der führenden Null.

char CHAR_out[9]; 

für Fließkommazahlen (99999.99):
dtostrf(VALUE_in, 8, 2, CHAR_out);  // Eingangsvariable, Gesamtstellen inkl. Komma, davon Nachkommastellen, Ausgang char array

für Ganzzahlen:
snprintf(CHAR_out,9,"%7d",VALUE_in);   // Ausgang char array, Größe von char_out, Foramtierungsoptionen, Eingangsvariable

char array muß nur groß genug definiert sein. Benötigte Länge + 1. Hab ich alles von Serenifly gelernt.   smiley

12  International / Deutsch / Re: Arduino Mega und die Carrera-Bahn on: August 25, 2014, 12:23:58 pm
Hallo,

genau das wird das Problem sein. Klingt alles sehr ähnlich wie beim Meßschieber auslesen. DigitalRead dauert dafür zu lange, Du mußt direkt an die Register.

Das auslesen von Deinem Protokoll sollte ähnlich vom Meßschieber sein. Ich warte in einer while Schleife auf den Anfang der Daten und lese dann hintereinander eine bestimmte Anzahl an Daten ein. Nur hast Du keine getrennte Clock- und Datenleitung wenn ich das richtig lese. Das Grundprinzip sollte jedoch schon helfen, denke ich. Funktioniert alles ohne Interrupt. Für Daten aller 7,5ms hat man für Spielereien zwischendurch kaum Zeit. Da mußte dann vielleicht doch einen Interrupt verwenden und darin notgedrungen die Daten einlesen. Wenn Du aber danach wieder Zeit für andere Dinge vertrödelst und der Interrupt wieder dazwischen funkt, kommste auch mit den anderen Dingen nicht mehr hinter, weil der der Interrupt laufend unterbricht.

Kannst Dir das ja mal anschauen.   http://forum.arduino.cc/index.php?topic=213037.new;topicseen#new

Das könnte auch noch von Interesse sein.  http://forum.arduino.cc/index.php?topic=248661.msg1777013#msg1777013

Pinbelegung gibts hier:
http://forum.arduino.cc/index.php?topic=259877.msg1836009#msg1836009
http://pighixxx.com/megapdf.pdf
13  International / Deutsch / Re: Lösung für „Shield Prinzip“ gesucht on: August 25, 2014, 11:47:34 am
Hallo,

die Leisten mit langen Wire Wrap Stiften sind nicht zum stapeln gedacht, wenn man die ineinander würgt, macht man sich die Kontaktbuchsen zur Sau. Die anderen mit gedrehten Stiften sind zu kurz zum stapeln. Da muß alles auf IC Höhe flach gehalten werden. Die Arduino Header sind die derzeit einzig brauchbaren. Die Bricks Slot-Kontakte sehen auch gut aus. Die wird nur nicht jeder verlöten können.
http://forum.arduino.cc/index.php?topic=259865.0

14  International / Deutsch / Re: Gibt es eine Software um Arduino Boards und weitere Komponenten zu simulieren? on: August 21, 2014, 10:43:06 am
Hallo,

ich hatte mir mal ziemlich am Anfang den hier gegönnt. Kostet ca. 10 €uro, jede Verlängerung weniger.
http://virtronics.com.au/

Die Simulation hat aber ihre Grenzen. Man kann nur das simulieren was der Programmierer vorgesehen hat. Und angeschlossene Hardware simulieren ist eh immer schwierig. Wird sich in der Praxis mit echten µC anders verhalten. Ich habe mir das gekauft um nicht für jeden kleinen Test von irgendwelchen Schleifen und seriellen Ausgaben den µC zu flashen. Man kann auch Pins als Eingabe und Ausgabe nutzen. Dafür ist der Simulator sehr gut. Für alles andere benötigt man einen echten µC.

Mit Multisim/Workbench ist das ähnlich. Elektrische Simulationen stimmen eben in der Praxis nicht zu 100%. Wofür simuliert man dann? Nur für erste Annäherungen. Und die Software war kein Schnäppchen gewesen. Als ich noch Lehrling war gabs mal eine Sonderaktion über die Firma  zu Ausbildungszwecken. Damit der gemeine Lehrling nicht sinnlos tausende Transistoren o.ä.  in den sicheren Tod schickt.   smiley  Sonst hätte ich mir das nie gekauft. Hat seinen Zweck erfüllt.


15  International / Deutsch / Re: Mega 2560 - Power Saving - Strom sparen on: August 20, 2014, 02:06:52 pm
Hallo,

habe das heute nochmal mit der ganzen Jumperei wiederholt. Mit meinem Board ohne 5V Spannungswandler.

Alle Werte im Sleep Mode:

nur 5V anlegt: 21,4mA
5V angelegt gelassen und Jumper gesetzt: 9,9mA
Jumper gesetzt gelassen, 5V weggenommen und wieder angelegt: 12,2mA
5V bleiben angelegt und Jumper entfernt: 16,2mA
Jumper wieder gesetzt: 9,9mA

Bedeutet wirklich, der Jumper darf erst nach Spannung anlegen gesetzt werden um minimalen Strom zu messen.

Dann habe ich den Code um Deine Idee ergänzt und siehe da, funktionert stabil und dauerhaft. Egal ob ich 5V wegnehme und wieder anlege oder mehrfach resete, lande immer im Sleep bei 9,9mA. Wenn das mal nicht geil ist.   smiley   Auf die Idee einfach einen Pin dafür zubenutzen wäre ich wohl nicht gekommen. Hätte das mit Transisitor erstmal gelöst bzw. lösen wollen. Habe vorher noch sicherheitshalber den Resetstrom vom 16U2 gemessen. Sind 0,6mA. Wirklich nahe den ausgerechneten 0,5mA.

Besten Dank für die Unterstützung!

Code:
/* Sleep Demo Serial
 * -----------------
 * Example code to demonstrate the sleep functions in a Arduino. Arduino will wake up
 * when new data is received in the serial port USART
 * Based on Sleep Demo Serial from http://www.arduino.cc/playground/Learning/ArduinoSleepCode

 "Aufwach-Taster" an Pin 2 gegen Masse

 Originalboard Arduino Mega 2560
 Idle 59,2mA   Sleep 22,3mA   ohne 16U2 Jumper
 Idle 54,5mA   Sleep 15,5mA   mit Jumper auf GND-Reset für 16U2
 
 ohne Spannungsregler auf Board, abgegelötet
 Idle 55,1mA   Sleep 16,5mA   ohne 16U2 Jumper
 Idle 49,9mA   Sleep  9,8mA   mit Jumper auf GND-Reset für 16U2

 alles Sleep Mode nochmals durchgemessen:
 nur 5V anlegen: 21,4mA
 5V anlegt und Jumper gesetzt: 9,9mA
 Jumper gesetzt gelassen, 5V weggenommen und wieder angelegt: 12,2mA
 5V bleiben angelegt und Jumper entfernt: 16,2mA
 Jumper wieder gesetzt: 9,9mA
 
 Reset Pin 16U2 ergänzt für sicheren und dauerhaften 9,9mA Effekt.
 
*/   
   

#include <avr/sleep.h>

#define RESET16U2  22       // Reset für 16U2 an Pin 22

int sleepStatus = 0;        // variable to store a request for sleep
int count = 0;              // counter

int ledPin = 13;            // LED connected to digital pin 13
//int interruptPin = 10;      // LED to show the action of a interrupt
int wakePin = 2;            // active LOW, ground this pin momentary to wake up
//int sleepPin = 12;          // active LOW, ground this pin momentary to sleep
int ledState = LOW;

void wakeUpNow()        // here the interrupt is handled after wakeup
{
  // execute code here after wake-up before returning to the loop() function
  // timers and code using timers (serial.print and more...) will not work here.
  // digitalWrite(interruptPin, HIGH);  // LED an Pin 10 ein
}


void sleepNow()
{
    /* Now is the time to set the sleep mode. In the Atmega8 datasheet
     * http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf on page 35
     * there is a list of sleep modes which explains which clocks and
     * wake up sources are available in which sleep modus.
     *
     * In the avr/sleep.h file, the call names of these sleep modus are to be found:
     *
     * The 5 different modes are:
     *     SLEEP_MODE_IDLE         -the least power savings
     *     SLEEP_MODE_ADC
     *     SLEEP_MODE_PWR_SAVE
     *     SLEEP_MODE_STANDBY
     *     SLEEP_MODE_PWR_DOWN     -the most power savings
     *
     *  the power reduction management <avr/power.h>  is described in
     *  http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
     */ 
       
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here

  sleep_enable();          // enables the sleep bit in the mcucr register
                           // so sleep is possible. just a safety pin
 
    /* Now it is time to enable an interrupt. We do it here so an
     * accidentally pushed interrupt button doesn't interrupt
     * our running program. if you want to be able to run
     * interrupt code besides the sleep function, place it in
     * setup() for example.
     *
     * In the function call attachInterrupt(A, B, C)
     * A   can be either 0 or 1 for interrupts on pin 2 or 3. 
     *
     * B   Name of a function you want to execute at interrupt for A.
     *
     * C   Trigger mode of the interrupt pin. can be:
     *             LOW        a low level triggers
     *             CHANGE     a change in level triggers
     *             RISING     a rising edge of a level triggers
     *             FALLING    a falling edge of a level triggers
     *
     * In all but the IDLE sleep modes only LOW can be used.
     */
 
  attachInterrupt(0,wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function
                                     // wakeUpNow when pin 2 gets LOW
     
  sleep_mode();            // here the device is actually put to sleep!!
 
                           // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
  sleep_disable();         // first thing after waking from sleep:
                           // disable sleep...
 
  detachInterrupt(0);      // disables interrupt 0 on pin 2 so the
                           // wakeUpNow code will not be executed
                           // during normal running time.
   
}


void setup()
{
  pinMode(RESET16U2,OUTPUT);       // 16U2 wird dauerhaft
  digitalWrite(RESET16U2, LOW);    // im Reset Mode gehalten, spart 2mA
 
  pinMode(ledPin, OUTPUT);         // LED connected to digital pin 13
 
  pinMode(wakePin, INPUT);         // active LOW, ground this pin momentary to wake up
  digitalWrite(wakePin, HIGH);     // Pullup aktiv
     
  attachInterrupt(0,wakeUpNow, LOW);   // use interrupt 0 (pin 2) and run function
                                       // wakeUpNow when pin 2 gets LOW
                           
}


void loop()
{
 
   if ( digitalRead(2) == LOW ) {
     digitalWrite(ledPin, HIGH);     
   }
   else {
     digitalWrite(ledPin, LOW);
     sleepNow();                   // sleep function called here
   }
     
 
}



Pages: [1] 2 3 ... 64