Serielle Kommunikation

Hey Leute, bitte um Hilfe: Meine Aufgabe ist es mit dem Arduino auf die Register eines Audio-Chips zugreifen zu können (Datasheet im Link), da ich aber leider vorher noch nie mit Arduino gearbeitet habe und generell nicht umbedingt "die Leuchte" in Programmiersprachen bin habe ich leider keine Ahnung wie ich das anstellen soll.Der Chip soll mittels Hucker-Platine auf den Arduino gesteckt werden. Ich habe das Protokoll für die Master/Slave Verbindung bereits hinbekommen, jedoch weiß ich nicht mehr weiter. Vielen dank im voraus Mfg Kevin

http://www.analog.com/media/en/technical-documentation/data-sheets/SSM2529.pdf

Um das Klarzustellen: hier geht es um I2C. Das geht auf dem Arduino mit der Wire Library:
https://www.arduino.cc/en/Reference/Wire
Wenn du “serielle Kommunikation” sagst, denken die meisten Leute an Serial oder RS-232

Das Datenblatt verwirrt da eher, da da so vieles drinsteht das man nicht braucht. Der ganze Kram mit Start/Stop Conditions und die Timing Diagramme sind volkommen irrelevant.

Generell geht Schreiben so:

Wire.beginTransmission(Device_Adr);
Wire.write(Adresse);      //Adresse auf der man anfängt zu Schreiben
Wire.write(...)       //eines oder mehrere Daten-Bytes in den Ausgangspuffer schreiben
...
Wire.endTransmission();    //Daten aus dem Puffer auf den Bus schreiben

Und Lesen so:

Wire.beginTransmission(Device_Adr);
Wire.write(Adresse);         //Adresse auf der man anfängt zu Lesen
Wire.endTransmission();

Wire.requestFrom(Device_Adr, Number_of_Bytes);    //Daten empfangen
Wire.read()     //Daten aus dem Eingangspuffer lesen. Muss natürlich einer Variablen zugewiesen werden!
...

Also vor dem Lesen sendet man erst mal die Adresse des Bytes auf dem anfängt zu lesen. Dann kann man mehrere Bytes lesen. Je nachdem was man an requestFrom() übergeben hat

Das kann man dann in Funktionen packen. Die Schreib-Funktion hat als Parameter die Adresse und das Daten-Byte. Die Lese-Funktion hat als Parameter die Adresse und gibt das Byte zurück.

Die Device Adresse steht in Tabelle 40 auf Seite 22

Vielen Dank!
Die Serielle Kommunikation funktioniert und Werte können am Serial Monitor angezeigt werden.
Jedoch besteht meine Aufgabe darin eine Benutzeroberfläche mit Processing aufzubauen und in meinem Programm soll eine Spannungsänderung (zwischen 0 - 5V) sowie eine Strommessung in einem Textfeld angezeigt werden. Ich habe versucht mit Processing über die Serielle Schnittstelle zuzugreifen, aber es funktioniert nicht!
Bitte um Hilfe…
Im Anhang findet ihr ein Bild vom GUI und das Programm für das zu sendende PWM-Signal
Danke schon mal!!

PWM.ino (1.58 KB)

Eine 100%ige Lösung zu deinem Problem kann ich nicht liefern, aber eine vielleicht gute Vermutung wo der Fehler liegen könnte: In deinem Code steht ein eindeutiger Hinweis:

/*
 SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
*/

So, nun hast du aber in deiner loop() ganz am Ende ein delay(1000) stehen, was der ganzen Sache zuwider läuft.

Meine Idee dazu wäre folgendes: Pack den kompletten Bereich von "analogWrite( analogOut, value )" bis einschließlich "Serial.println('')" in die IF-Abfrage hinter "stringComplete = false".

Dadurch wird die Ausgabe nur dann generiert, wenn Daten ankommen.

Und das delay(1000) muß dann natürlich gelöscht werden. Is nur 'n Vorschlag zu 'nem Versuch...

Zu Processing gibt es die Firmata Bibliothek, mit der sich ein Arduino von Processing steuern läßt. Damit muß man keinen eigenen Code mehr für den Arduino schreiben, sondern kann alles von Processing aus steuern. In der Arduino IDE findet man mehrere Versionen dieser Bibliothek (Firmata Examples), mit den genauen Unterschieden habe ich mich noch nicht befaßt.

Ja, das wäre dann natürlich die einfachste Variante. Ich selbst setze Processing allerdings nicht ein, weil ich individuelle Dinge selbstständig mittels DELPHI löse. Das klappt super gut und ich bin "frei" von irgendwelchen Zwängen und anderen fremden Abenteuern...

Sorry for OT: wie findet Dein Programm den richtigen COM Port?

Danke für eure tollen Rückmeldungen, ich habe den besagten Teil meines Programmes in die if Schleife reinkopiert, allerdings habe ich immer noch keine Verbindung zu meinem Processing GUI. # RudiDL5 du sagst, dass du Processing nicht verwendest, welche Grafische Oberfläche könnte ich denn sonst noch verwenden, die ca. gleich ausschaut aber leichter zu programmieren wäre? Hätte jemand eine Idee? Danke schon mal!

I'm so sorry... Ich kann dir da absolut keine Empfehlung geben. Ich selbst benutze DELPHI (eine IDE für Object-Pascal) womit ich letztendlich alles selbst programmiere. Heißt: Ob Kleinigkeiten wie serielle Übertragung zum Arduino, schnuckelige graphische Oberflächen, oder große Software-Pakete für irgendwas... Es ist alles reine "Handarbeit" und hat nix mit "mal eben" zu tun... :(