Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Deutsch / Re: Arduino Nano resettet sporadisch on: August 21, 2009, 12:20:06 pm
Hallo kcx

also, wenn die TX/RX-LEDs flackern, dann läuft tatsächlich ein Traffic über die serielle (USB) Schnittstelle zwischen PC und Arduino. Wahrscheinlich checkt Windows in gewissen Abständen, ob die USB-Geräte noch aktiv sind. Windows tut sowieso viele Dinge im Hintergrund, von denen der User nichts mitbekommt. Aber ds wissen die Windows-Spezialisten sicherlich besser.

Ob dabei wirklich ein RESET ausgelöst wird, bekommst Du folgendermaßen mit:

Erweitere Dein Miniprog dermassen daß nur beim Start Deines Boards die LED zwei- oder dreimal kurz blinkt, und dann mit der normalen Programmausführung so wie gehabt endlos weitermacht. Dazu muß dieser zusätzliche Programmcode in der
void setup {}-Prozedur eingefügt werden, die nur einmal durchlaufen wird. Im Gegensatz dazu wird alles, was in void loop{} steht, endlos wiederholt.

Da stellen sich folgende Fragen:
- Kann eine Routine von Windows, die einem ganz anderen Zweck dient, den Arduino wirklich RESETten?

Und wenn es kein RESET ist:
- Wieviel Rechenleistung beansprucht die serielle Kommunikation beim Arduino eigentlich?
- Was passiert, wenn auf dem Arduino gerade eine Zeitkritische Anwendung läuft? Wie lange wird die dann unterbrochen von de seriellen Kommunikation? (Im schlimmsten Fall fällt der Roboter vom Tisch, weil er gerade versuchen wollte, die Tischkante zu erkennen  smiley-wink )
- Und: kann eine zufällige serielle Sequenz dazu führen, daß der Arduino in den Programmiermodus geht, und er dann RICHTIGE Probleme bekommt?

Hat jemand Antworten?

Grüße

Bobo
2  Forum 2005-2010 (read only) / Deutsch / Re: "#define" oder "int"? on: August 20, 2009, 01:29:58 pm
Hallo Leute,

vielen Dank für die vielen, schnellen und kompetenten Antworten.

@marleaux,
von dem Datentyp "uint8_t" habe ich bisher noch nichts gehört, das schaue ich mir mal genauer an. Das wiring.h ist auch einen Blick wert, aber das wäre jetzt gerade etwas viel auf einmal.

@Udo klein,
sind Makros gleichbedeutend mit libraries? Der Begriff Makro ist mir im Zusammenhang mit Arduino noch nicht begegnet. Auch da muß ich mich erstmal schlauer machen.

@madworm
Oh,oh, funktioniert das von der Eingabeaufforderung (Windows) aus? Bei mir nicht, und ich habe AVR Studio 4 bei mir installiert. please help, denn Dein Tip klingt gut!

Nun, meine Motivation, etwas genauer hinter die Arduino-Kulissen zu schauen, ist folgende:
Als Anzeide für einen Frequenzzähler habe ich erstmal ein 8x7-Segment-LED-Display aufgebaut. Die 8 digits werden gemultiplext. Um Arduino-Pins zu sparen, werden sowohl die 8-Bit Segment-Daten als auch die 3-Bit Digit-Informationen in zwei Schieberegister am Display mit shiftOut() übertragen. Da brauche ich nur 3 Arduino-Pins + Spannungsversorgung. Das klappt auch prima, aber die Anzeige flackert, "so als ob da eine Interferenz mit dem Display-Takt durchläuft". Versorgungsspannung ist OK, und diese Störung tritt bei jeder getesteten Multiplex-Frequenz auf. Meine Vermutung: irgend ein Prozess im Hintergrund stört mein Timing. Seitdem versuche ich etwas genauer zu ergründen, was sich alles auf dem Arduino abspielt.
Und das wird so langsam immer weniger "KISS" >smiley-sad

Vielen dank für eure Ideen.

Bobo

3  Forum 2005-2010 (read only) / Deutsch / Re: "#define" oder "int"? on: August 20, 2009, 01:33:40 am
Hi Michael,
vielen Dank für die schnelle Antwort! smiley

Quote
Im Prinzip kann man auch die #defines weglassen und die Pinnummern direkt in die Funktionsaufrufe schreiben. Davon würde ich allerdings abraten. Ändert sich ein Pin (oder jemand anders will den Code mit anderer Pinbelegung nutzen) ist es wesentlich einfacher, nur die Angabe im #define Statement zu ändern.

Also, das sehe ich genauso. So etwas wie eine Pin-Belegung sollte an genau einer Stelle im Code eindeutig deklariert werden. Und ich sehe auch normalerweise nicht die Notwendigkeit, sie während der Programmlaufzeit zu ändern.

Quote
Der Typ int wird vermutlich deswegen verwendet, weil die Funktionen (z.B. pinMode() als Parameter eine int erwarten

Ist das so? Das habe ich in der Referenz nirgens gefunden. Und nach meiner Erwartung werden die 8-Bit-Ports beim AVM-Prozessor mit 8-Bit-Werten angesteuert. Da würde sich ja "byte" als Variablentyp anbieten.

Quote
der Compiler wandelt aber auch deb Typ byte automatisch in int um.

OK, und jetzt beginnt für mich das Mysterium, wie der Compiler den C-Code in Assembler umwandelt. Gibt es die Möglichkeit, sich den vom Compiler übersetzten Assembler-code anzuschauen? Am besten mit den im C-code verwendeten Namen!?
Habe halt früher (lang,lang ists her...) mal in Assembler programmiert, und es erscheint mir als eine faszinierende Aussicht, die wirklich einfache und  übersichtliche Programmierung des Arduino in C mit der schnellen und ressourcensparenden Assemblersprache zu ergänzen. Da habe ich auch im englischsprachigen Forum noch nicht wirklich etwas gefunden.

Grüße  Bobo
4  Forum 2005-2010 (read only) / Deutsch / "#define" oder "int"? on: August 19, 2009, 01:13:59 pm
Guten Abend.

Als ziemlicher Anfänger der Arduino-Sprace bin ich beim Lesen vieler Beispiel-Sketche auf folgendes gestossen:
Z.B. Festlegung des Pins für die interne LED

Manchmal wird das so angegeben:
int ledPin = 13;
und an anderen Stellen:
#define ledPin 13

Mir erscheint die zweite Möglichkeit sinnvoller, ist doch dieser Pin für die LED hardwaremäßig festgelegt und wird beim kompilieren in AVR-Maschinensprache dort hineincodiert.
Und warum deklariert man bei der ersten Version eine Integer-Variable (=2 Byte, 16 Bit)?
Macht das Sinn, was habe ich da nicht verstanden?
Über eine Antwort würde ich mich sehr freuen.

Bobo
Pages: [1]