Show Posts
Pages: [1] 2
1  International / Deutsch / Re: XBee serielle Kommunikation (Problem bei der Verareitung ...) on: June 05, 2013, 06:34:14 pm
Vielleicht noch ein interessanter Nachtrag für alle die, die genau wie ich, noch auf der Suche nach Basisinformationen zur seriellen Kommunikation sind.

Es gibt zur Zeit ein kostenloses Kapitel des Buches "Arduino Kochbuch" zum Download beim O'Reilly Verlag: http://www.oreilly.de/catalog/arduinockbkger/chapter/ch04.pdf

Zufällig behandelt dieses Kapitel die "Serielle Kommunikation".
2  International / Deutsch / Re: XBee serielle Kommunikation (Problem bei der Verarbeitung ...) on: June 05, 2013, 10:27:34 am
Dank Deiner ausführlichen Erklärung, habe ich das verstanden.

Ich werde mal versuchen die Messwerte mit Trennzeichen zu senden und die ankommenden Werte entsprechend auszuwerten.

Nochmals tausend Dank für Deine Hilfe.

Frank_
3  International / Deutsch / Re: XBee serielle Kommunikation (Problem bei der Verabareitung der übertragen Daten) on: June 05, 2013, 09:19:39 am
@ jurs

Es funktioniert! Vielen Dank für den Code und Deine ausführlichen Erklärungen. Dieses Forum ist echt klasse. Ein Lösung in weniger als 2 Stunden, toll.

Zwei Fragen hätte noch:

1.) Ich habe den Code etwas angepasst, sodass das Relais nur einen Impuls von delay(500); auslöst. Deine Funktion habe ich eingebaut (eigentlich nur reinkopiert). Warum erhalte ich bei einem großen Wert für delay(2000); am Ende des Hauptprogramms fünfstellige Messwerte? Lasse ich den delay weg, wird alles korrekt angezeigt.

Code:
void loop() {
  lcd.setCursor(0, 1);   
  lcd.write("                ");
  lcd.setCursor(0, 1);   
  int messWert = receiveMesswert();
  if (messWert >= 0) lcd.print(messWert);
  if (messWert > 1000) {
    digitalWrite(relais, HIGH);
    delay(500);
    digitalWrite(relais, LOW);
  }
  else {
    digitalWrite(relais, LOW);
    delay(100);
  }
  delay (2000);
}

2.) Kennst Du eine Arduino-bezogene Anleitung/Doku im Internet für die serielle Kommunikation, die nicht nur code-Examples beinhaltet sondern auch Hintergrundinformationen liefert. Sozusagen "Arduino serial for Dummies".

Nochmals vielen Dank für Deine Hilfe!

Liebe Grüße
Frank_
4  International / Deutsch / Re: XBee serielle Kommunikation (Problem bei der Verabareitung der übertragen Daten) on: June 05, 2013, 08:21:54 am
@ legotechnicus

Danke für die Hinweise.

1.) int value = 0;  hilft leider auch nicht
2.) lcd.clear(); löscht mir das ganze Display, ich möchte aber nur die Zweite Zeile löschen (mit Leerzeichen überschreiben) und den Statustext der 1. Zeile behalten
3.) delay(1000); am Ende des Sketches löst die besagten Störungen im LCD Display aus. Die empfangenen Werte werden dann 10-14stellig angezeigt.


@ jurs

Danke auch Dir für die Hinweise.

Code:
while (Serial.available() > 0) {
      value = Serial.read();

Ich dachte, dass diese While-Schleife den kompletten Messwert "abwartet". Komischerweise werden die gesendeten Messwerte ja korrekt am Empfänger-LCD angezeigt. Lediglich die Weiterverarbeitung funktioniert nicht. Über Empfängercode wäre ich natürlich sehr dankbar, da ich mich bisher mit serieller Datenübertragung nicht gut auskenne, aber das habt Ihr ja bereits gemerkt.
5  International / Deutsch / Re: XBee serielle Kommunikation (Problem bei der Verabareitung der übertragen Daten) on: June 05, 2013, 07:55:17 am
Sorry, ich habe den Code wohl nicht korrekt geposted. Die Code-Tags habe ich zu spät gesehen.
6  International / Deutsch / XBee serielle Kommunikation (Problem bei der Verabareitung der übertragen Daten) on: June 05, 2013, 07:34:06 am
Hallo zusammen,

ich möchte gerne über eine Funkverbindung Daten von einem Sensor (LDR, Ultraschall, IR Distanz etc.) am "Sender-Uno" übertragen und im "Empfägner-Uno" auswerten. Hierzu habe ich 2 Arduino UNO R3 Boards (1x SainSmart Uno R3 und einmal Arduino Uno R3) mit jeweils einem XBee Schield mit einem XBee Series 1 verwendet. Zusätzlich habe ich an jedem Uno ein LCD Display 1602 zur Anzeige der Daten angeschlossen.

Beide Xbee Module sind auf 57600 Baud eingestellt und können miteinander kommunizieren. Ich lese auf dem "Sender-Uno" einen LDR 07 am Analogport A0 aus und sende die empfangenen Werte über serial/XBee an den Empfänger. Auf dem LCD Display des "Sender-Uno" werden die Werte angezeigt (bei eingeschaltetem Licht schwanken die Werte des LDR in einem Bereich von ca. 900-950). Der "Empfänger-Uno" empfängt die Werte und stellt sie auch korrekt im LCD dar (natürlich ebenfalls in einem Bereich von ca. 900-950).

Soweit so gut...

Ich habe es jedoch noch nicht geschafft die empfangenen Werte zur Weiterverarbeitung zu nutzen, Ich möchte gerne ein Relais auslösen, wenn der empfangene Wert ("value = Serial.read();") des LDR vom "Sender-Uno" größer als 1000 ist. Das passiert z. B. wenn ich den LDR mit einer Taschenlampe anleuchte. Das Relais reagiert leider nicht auf Werte über 1000 und schaltet nicht ein. Wenn ich die Variable relais im Sketch des "Empänger-Uno" um Testen auf 1001 setze, löst das Relais aus, es scheint also korrekt angesteuert zu werden.

Als Nebenkriegsschauplatz spinnt mein LCD-Display, wenn ich die delay-Werte im Sketch des "Empfänger-Uno" über 400 ms einstelle. Aber das nur nebenbei.

Hier noch der Code der beiden Uno's:

"Sender-Uno":

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 7, 6, 5, 4);

int outgoing;
int analogPin = 0;
int ldr=0;

void setup() {
  Serial.begin(57600);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("XBee Sender LDR");
  lcd.setCursor(0, 1);
}

void loop() {
  lcd.write("          ");
  lcd.setCursor(0, 1);
  ldr = analogRead(analogPin);
  lcd.print(ldr);
  Serial.print(ldr);
  delay(300);
}



"Empfänger-Uno":

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 7, 6, 5, 4);

int relais = 9;
int value = 999;

void setup() {
  pinMode(relais, OUTPUT);
  Serial.begin(57600);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("XBee Rec LDR");
  lcd.setCursor(0, 1);
}

void loop() {
  if (Serial.available()) {
    lcd.setCursor(0, 1);   
    lcd.write("                ");
    lcd.setCursor(0, 1);   
    while (Serial.available() > 0) {
      value = Serial.read();
      lcd.write(value);
    }
  }
  if (value > 1000) {
    digitalWrite(relais, HIGH);
    delay(200);
  }
  else {
    digitalWrite(relais, LOW);
    delay(200);
  }
}



Hat von Euch einer eine Idee, wo der Fehler liegen könnte. Ich verzweifle, da ich seit mehreren Stunden des testens keine lösung finden kann.

Viele Grüße
Frank_
7  International / Deutsch / Re: erneutes brennen des Bootloader? on: January 25, 2013, 06:28:43 am
Ich habe auch ein Problem mit dem Brennen eines Bootloaders auf einen ATMEL 328P-PU (s. http://arduino.cc/forum/index.php/topic,144690.0.html). In diesem Thread sind einige Möglichkeiten beschrieben.
8  International / Deutsch / Re: Bootloader ATMEGA328P-PU brennen geht nicht on: January 25, 2013, 06:17:52 am
Ich habe Reichelt das Problem geschildert und war angenehm überrascht. Sie senden mir einen neuen ATMEL 328P-PU zu. Das finde ich sehr kulant.

@uwefed: Die Möglichkeit mit dem HV-Programmer werde ich demnächst ausprobieren. Ich habe leider momentan nicht alle Bauteile da, werde diese aber bei meiner nächsten Bestellung berücksichtigen.

Ich möchte mich hier nochmals für die tolle Unterstützung und die vielen Ideen bei Euch bedanken.

Viele Grüße
Frank_
9  International / Deutsch / Re: Bootloader ATMEGA328P-PU brennen geht nicht on: January 24, 2013, 01:01:27 pm
Hast du mail mit dem AVR-Studio versucht, die Signatur des Mikrocontrollers auszulesen, wenn die Fehlermeldung "avrdude: Yikes! Invalid device signature." kommt? Wäre auf jeden Fall ganz interessant.

So, ich habe das AtmelStudio 6 mal installiert. Das hat ziemlich lange gedauert (>800 MB und das ganze Microsoft Zeugs).

Beim Start habe ich unter Tools meinen STK500 hinzugefügt, konnte aber keinen 328P in der Liste finden. Die allwissende Müllhalde (Google) gab mir dann einen Artikel zurück, mit dem ich den 328P Eintrag hinzufügen konnte: http://www.pololu.com/docs/0J36/3.b.1

Leider scheint der Prozessor defekt zu sein. Ich erhalte jedenfalls beim Auslesen der Device Signature die Fehlermeldung "Reading device ID........Failed!" (Code 0xFFFF0F). Im Output-Fenster wird mir folgendes angezeigt:

18:55:02: [ERROR] Unexpected signature 0x001eff2a (expected 0x001e950f)., ModuleName: TCF (TCF command: Device:startSession failed.)

Ich vermute, dass der Prozessor tatsächlich defekt ist. Ich kenne mich aber mit dem AtmelStudio (früher wohl AVRStudio) nicht aus und die Fehlermeldung sagt mir eigentlich das gleiche, was ich schon von AVRdude gemeldet bekommen habe.

Ich komme leider nicht an den Prozessor heran, kann also auch keine Änderungen vornehmen wie etwa Bits setzen oder den Chip löschen.

@pylon: Der Chip sitzt fest im Sockel und keines der Beine ist verbogen.

Viele Grüße
Frank_
10  International / Deutsch / Re: Bootloader ATMEGA328P-PU brennen geht nicht on: January 24, 2013, 11:01:56 am
Hast Du schon versucht, die Boards zu tauschen? Also den Proz auf den Original-Arduino UNO stecken und den Sainsmart oder besser den ICSP-Programmer als Brenn-Controller zu verwenden? Die Power-Komponenten beim Original könnten etwas hochwertiger sein. Auch wenn alles andere nicht klappte, mit einem Programmer auf ein Original UNO-Board (dort kam der neue Prozi in die Fassung) war immer möglich bei mir. Dann mit der IDE, richtigen Programmer und richtiges Board angewählt und "Burn Bootloader".

Hallo pylon,

Ja, ich habe beide Boards ausprobiert, leider ohne Erfolg.

Ich vermute aber aufgrund der Ergebnisse aus "http://arduino.cc/forum/index.php/topic,144249.0.html", dass der 328P-PU wohl defekt ist.

Viele Grüße
Frank_
11  International / Deutsch / Re: Bootloader ATMEGA328P-PU brennen geht nicht on: January 24, 2013, 10:57:08 am
@Frank_
Wie brennst Du die ATmegas? auf einem Breadboard oder hast Du einen Sockel oder ZIF-Sockel?

Grüße Uwe

Hallo Uwe,

ich habe die 328P auf folgende Art und Weise gebrannt (zu 1. und 2. s. auch den ersten Post):

1.) Zwei Arduino Uno Boards wie hier beschrieben: http://arduino.cc/en/Tutorial/ArduinoISP

2.) Ein Diamex Programmer und ein Arduino Uno Board wie hier beschrieben: http://www.cczwei-forum.de/cc2/thread.php?threadid=6060"

3.) Ein Arduino Uno Board und ein 328P-PU auf Breadboard mit minimaler Schaltung wie hier beschrieben: http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=11637


Die 3.) Variante habe ich eben erst hier (http://arduino.cc/forum/index.php/topic,144249.0.html) gefunden und ausprobiert. Leider mit den besagten Fehlermeldungen (verification errors).

Viele Grüße
Frank_
12  International / Deutsch / Re: Bootloader ATMEGA328P-PU brennen geht nicht on: January 24, 2013, 10:41:04 am
Vielen Dank für Eure zahlreichen Rückmeldungen. Das geht immer so schnell in diesem Forum. SPITZE !!!


@pylon: Die Stromversorgung kommt über den Diamex-Programmer (und damit über USB). Das Arduino Uno Board, auf dem der zu brennende 328P sitzt wird also über den Diamex-Programmer mit Strom versorgt.

@DreiMalNull: Ich habe immer das Uno Board eingestellt. Das ist auch das Board auf dem der zu brennende 328P sitzt. Wenn ich ein anderes Board angebe, kommt eine andere Fehlermeldung: "avrdude: Expected signature for ATmega .... is ...".

@sth77: AVR-Studio habe ich noch nicht installiert, werde das aber noch tun und mich mit dem Ergebnis wieder melden.

@MaFu: Der Hinweis auf den günstigeren 328P inkl. Bootlader ist klasse, wenn man größere Mengen bestellt, da ja noch die Versandkosten drauf kommen. Ich hatte auch noch andere Sachen bei Reichelt bestellt und deswegen die 328P gleich mitgeordert. Aber Du hast natürlich recht, für die 25 Euro des Programmers hätte ich einige 328P inkl. Bootloader bestellen können. Wenn ich vorher gewusst hätte, was noch für Probleme auf mich zu kommen, hätte ich den Programmer sicher nicht bestellt.


Zwischenzeitlich habe ich noch weitere Hinweise im englischsprachigen Teil des Forums gefunden: "http://arduino.cc/forum/index.php/topic,144249.0.html". Hier wird u.a. beschrieben wie man einen Bootloader ohne avrdude schreiben kann. Leider erhalte ich Fehlermeldungen ("verification errors" nach dem schreiben des Bootloaders), die darauf hindeuten, dass der 328P einen Defekt hat. Vielleicht versuche ich auch einen defekten Prozessor mit einem Bootloader zu versehen. Ich denke nach dem Versuch die Signatur des Mikrocontrollers auszulesen, werde ich mal einen Umtausch bei Reichelt versuchen, obwohl ich nicht damit rechne einen neuen Prozessor zu bekommen.

Gruß
Frank_
13  International / Deutsch / Bootloader ATMEGA328P-PU brennen geht nicht on: January 24, 2013, 08:58:03 am
Hallo zusammen,

ich verzweifle gerade und bin mit meinem Latein am Ende.

Ich habe mir vor 3 Wochen einen ATMEGA328P-PU bei Reichelt bestellt und diesen mittels der Anleitung "http://arduino.cc/en/Tutorial/ArduinoISP" gebrannt. Als Boards habe ich ein original Arduino Uno und ein SainSmart UNO R3 benutzt. Auf dem SainSmart Board war der zu brennende 328P-PU aufgesteckt. Das ganze hat auf Anhieb geklappt.

In der Vorfreude keine 20-25 Euro mehr für ein komplettes Arduino Board ausgeben zu müssen, habe ich mir 3 weitere 328P-PU bei Reichelt bestellt. Als diese bei mir eintrafen, habe ich sofort versucht diese - mit meiner vorgenannten Methode - mit einem Bootloader zu versehen. Leider ohne Erfolg, keiner der 3 neuen 328P-PU wollte den Bootloader annehmen. Ich erhielt bei meinen Versuchen überwiegend die Fehlermeldung "avrdude: Yikes! Invalid device signature.".

Nach etlichen Stunden Suche im Internet habe ich u.a. eine Lösung gefunden, die in der avrdude-Config-Datei die Signatur des 328P ändert. Leider hat auch dieser Lösungsansatz nicht funktioniert. Völlig entnervt habe ich weiter gesucht und den folgenden Beitrag von Erik Bartmann gefunden: "http://www.cczwei-forum.de/cc2/thread.php?threadid=6060". In diesem Beitrag wird beschrieben, wie man einen Bootloader mittels eines Diamex AVR-Programmers auf einen ATMEL 328 brennen kann. In der Hoffnung auf Besserung habe ich dann 25 Euro in die Hand genommen und diesen Programmer direkt bei Diamex bestellt.

Nach Erhalt des Programmers habe ich natürlich sofort ausprobiert, ob sich meine 3 neuen ATMEL 328P-PU mit dem Bootloader bestücken lassen. Leider auch hier wieder ohne Erfolg, ich bekam bei allen 3 Prozessoren wieder die gleiche Fehlermeldung. Das war vor ein paar Tagen.

Ich habe das Problem völlig frustriert und an mir zweifelnd vertagt und mich heute mal wieder drangesetzt. Und siehe da, der erste 328P-PU konnte problemlos mit dem Diamex Programmer gebrannt werden. Auch der nächste 328P-PU ließ sich problemlos brennen. Nur der Dritte 328P-PU lässt sich nicht mit dem neuen Bootloader brennen. Ich bekomme auch hier wieder die Fehlermeldung "avrdude: Yikes! Invalid device signature.".

Ich habe alles mir möglich versucht: Signatur des 328P in der avrdude-Config-Datei geändert, den Rechner (Windows 7 64-Bit) neu gestartet, die Treiber des Diamex neu installiert, den USB-Port des Diamex gewechselt, mehrere Arduino Programmierumgebungen ausprobiert. Leider ohne Erfolg.

Ich habe so den Eindruck, dass das brennen eines Bootloaders auf den 328P-PU vom Zufall oder/und dem Wetter abhängt.

Hat von Euch jemand ähnliche Erfahrung mit der Thematik und kann mir helfen. Ich bin jedenfalls total gefrustet.

Viele Grüße
Frank_
14  International / Deutsch / Re: Analog-In Werte je nach Spannungsquelle nicht stabil on: January 23, 2013, 11:29:36 am
Oh, jede Menge neuer Infos. Das finde ich ja klasse.

Wie gesagt, ich kann mit dem Ergebnis des Sampelns leben. Die Schwankungen sind seltener und nur noch sehr gering: +- 1

Ich bin mir sicher, dass ich die zusätzlichen Ideen und Tipps in meinen weiteren Projekten einsetzen kann.

Nochmals vielen Dank an Euch.

Viele Grüße
Frank_
15  International / Deutsch / Re: Analog-In Werte je nach Spannungsquelle nicht stabil on: January 23, 2013, 06:46:59 am
So, ich melde mich mit den Ergebnissen.

Die Erhöhung der Kapazitäten an V(in) und V(out) des 7805 hat leider nicht den gewünschten Erfolg gebracht. Die Verbesserungen waren nur marginal.

Der Tipp mit dem Samplen der analogen Messungen hat dagegen eine deutliche Verbesserung gebracht. Die Werte schwanken zwar immer noch ein wenig, aber lange nicht mehr so deutlich wie vorher.

Ich habe ein wenig experimentiert und festgestellt, dass das Samplen von bis zu 30 Messwerten in einer for-Schleife einwandfrei funktioniert. Bei mehr als 30 Messwerten (ich habe 35, 50 und 100 versucht) gibt der Controller in einem Teil des hochohmigen Bereichs des Potis auch negative Werte zurück. Jedenfalls passiert das in meiner Konfiguration mit dem Atmel 328P-PU auf einem Breadboard.

Mit dem samplen von 30 Messwerten und der Mittelwertbildung kann ich ganz gut leben und möchte mich nochmals für die Unterstützung bei Euch bedanken.

Viele Grüße
Frank_
Pages: [1] 2