i2c BUS ist bockig

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

i2c BUS ist bockig

Beitrag von QuadPrime »

hey Frickler.. ich versuche grad, dass sich ein Duino Micro und ein nano /w 328 über i2c (Spricht man das im Deutschen dann "i hoch zwei" aus....??) ans laufen zu kriegen...

die beiden wurden mir Master send (micro), und slave Receive (nano) beschrieben...

hier der Code - habe einen BEispielcode von Instructables minimal geändert:

Code: Alles auswählen

#include <Wire.h>

#define LED_PIN 13
byte x = 0;

void setup()
{
  
  Wire.begin(); // Start I2C Bus as Master
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  Serial.begin(9600);

}
void loop()
{
  delay(450);
  digitalWrite (LED_PIN, HIGH);
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write(x);              // sends x 
  Wire.endTransmission();    // stop transmitting
  x++;
  if (x > 5) x=0;
  delay(450);
  digitalWrite (LED_PIN, LOW);
   Serial.println(x);
}
und

Code: Alles auswählen

#include <Wire.h>

#define LED_PIN 13
#define LED_1 8
#define LED_2 9

int x;

void setup() {
  Wire.begin(9);                // Start I2C Bus as a Slave (Device Number 9)
  Wire.onReceive(receiveEvent); // register event
  
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  
  digitalWrite(LED_PIN, LOW);
  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  
  Serial.begin(9600);
  
  
  
  x = 0;
}

void loop() {
  //If value received is 0 blink LED 1
  if (x == 0) {
    digitalWrite(LED_1, HIGH);
    delay(200);
    digitalWrite(LED_1, LOW);
    delay(200);
  }
  //If value received is 1 blink LED 2
  if (x == 1) {
    digitalWrite(LED_2, HIGH);
    delay(200);
    digitalWrite(LED_2, LOW);
    delay(200);
  }
Serial.println(x);
}

void receiveEvent(int howMany) {
  x = Wire.read();    // receive byte as an integer
}
So ist's verstrippt

Bild

Eigtl teilen sich die beiden Arduinos nur die Betriebsspannung + Bus + 2 LEDs.

Arduino Micro Pin D2 SDA, gelb, geht auf Arduino nano Pin D4 SDA
Arduino Micro Pin D3 DCL, grün, geht auf Arduino nano Pin D5 SCL

inkl den beiden blauen 20 k Pullups

die weißen sind die beiden LEDs mit 200 Ohm direkt an DOs 8/9...

Der Master zählt definitiv aufwärts - also das klappt. Der slave liest nur nullen aus byte "x" zeigt der Serial monitor (-> Led 1 Blinkt).

Ideen?? Danke schonmal
ozonisator
Beiträge: 1653
Registriert: So 11. Aug 2013, 19:53
Wohnort: bei Frankfurt/Main

Re: i2c BUS ist bockig

Beitrag von ozonisator »

Moin, bei uns inner 4ma schimpft sich das "Ihh Quadrat Ce".
Hast du bedacht, dass du da 3,3V und 5V I²C miteinander vertütelst? Pullups müssten an 3,3V gehn.
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Bild

so hab ich's getan. direkt mal mit 3,3v probiert - doch leider kein Erfolg...

Der micro wird vom nano mitversorgt und läuft, also der ist zwingend mit den 5V inkl masse verbunden
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Wenn ich die 5V Brücke zum slave entferne, der also aus geht - arbeitet der Master sein Programm nicht mehr ab! Wie geht das denn!?!??? Trenne ich den Bus bemerkt er es gar nicht. :?: :?: :?: :?:
Benutzeravatar
Bastelbruder
Beiträge: 11566
Registriert: Mi 14. Aug 2013, 18:28

Re: i2c BUS ist bockig

Beitrag von Bastelbruder »

QuadPrime hat geschrieben:Wenn ich die 5V Brücke zum slave entferne, der also aus geht - arbeitet der Master sein Programm nicht mehr ab! Wie geht das denn!?!??? Trenne ich den Bus bemerkt er es gar nicht. :?: :?: :?: :?:
Das gehört so, steht in der Spec. scl_Low vom slave = Busy. Wenn die Pullups an 5V gehen, sollte das eigentlich funktionieren. Außer der 5V-Empfänger hat einen Schmittrigger mit großer Hysterese.
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

So wies aussieht fehlen hier:
1. Grundlagenwissen, also mal zu I2C einlesen: http://www.rn-wissen.de/index.php/I2C
2. ein Logicanalyzer, also mal den USbee Clone für 10€ beim Chinesen bestellen. (oder zumindest mal nen Oszi ranhalten).
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

gelesen. Kann trotzdem keinen Fehler finden. :cry:

Habe kein Oszilloskop/analyzer zuhaus... meh. Mit dem Multimeter messe ich aber keinerlei Frequenz auf dem SCL...
Benutzeravatar
Finger
Administrator
Beiträge: 7485
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Finger »

Der Fritzler meinte so ein Teil hier :

http://www.electrodragon.com/product/sa ... 8-channel/

Ist zur Fehlersuche fast unverzichtbar (und spottbillig!), weil die Software auch die Busprotokolle aufdröseln kann. Für Pegelprobleme wäre aber auch ein Scope hilfreich.
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Schon geordert aus Shengzhou :)

Ansonsten erscheint euch das auf den ersten Blick auch korrekt...?

es wundert mich dass ich SDL und SDA nicht deklarieren musste, obwohl die bei praktisch jedem µc woanders sind ... steckt wohl in der wire.h..?!
shaun
Beiträge: 2401
Registriert: Mo 12. Aug 2013, 20:37

Re: i2c BUS ist bockig

Beitrag von shaun »

Danke für den Link. Eigentlich mag ich ja hochwertige Werkzeuge, aber mal ehrlich - für zwei mal im Jahr Logikanalyse richtig Geld lassen oder den aaaaaaalten Kontron mit dem toten 286er Board fixen...? Um dann auf dem Grünmonitor Protokolle im Biorechner zu analysieren?
Wird direkt mal bestellt :)
Benutzeravatar
Finger
Administrator
Beiträge: 7485
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Finger »

Die Soft könnt ihr direkt von Selae runterladen und damit spielen. Ohne Analyser läuft sie im Demo-Modus und kann Dummydaten erzeugen.
shaun
Beiträge: 2401
Registriert: Mo 12. Aug 2013, 20:37

Re: i2c BUS ist bockig

Beitrag von shaun »

> es wundert mich dass ich SDL und SDA nicht deklarieren musste, obwohl die bei praktisch jedem µc woanders sind ... steckt wohl in der wire.h..?!

Hmm.. mal reingucken...? Irgendwo müssen die natürlich deklariert werden, je nachdem, ob man ein Hardware-TWI benutzt, so vorhanden, oder eine Soft-Implementation ist die Auswahl mehr oder weniger eingeschränkt. Bei der "harten" Variante gibt's ja nur eine Option, die Portpins müssen aber trotzdem korrekt behandelt werden (v.a. nicht anderweitig aus Versehen beschrieben)
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

die Pins beschreibe ich sonst nirgends...

Wire.h deklariert die auch nicht wirklich... #include'd aber Steam.h, das wieder Print.h mit code den ich net verstehe :/ augenscheinlich . gehe mal davon aus dass das automatsich passiert - beim upload muss ich ja den korrekten Duino angeben...
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Wenn man nicht weis was eine überladene Lib macht, dann nimmt man eine kleinere:
http://homepage.hispeed.ch/peterfleury/ ... tware.html (unter Librarys)
Und noch den Slave:
http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc
http://www.jtronics.de/avr-projekte/lib ... slave.html
und noch mehr Lektüre:
http://www.atmel.com/Images/doc2565.pdf
Noch was zu den Registern:
http://www.mikrocontroller.net/articles/AVR_TWI
avion23
Beiträge: 154
Registriert: Mo 12. Aug 2013, 13:10

Re: i2c BUS ist bockig

Beitrag von avion23 »

Ich habe auch die Software i2c lib von peter fleury verwendet. Alle Hardware implementationen haben nicht funktioniert.

Zum Test habe ich mir ein i2c eeprom von einem Mainboard abgelötet.

Die ersten Tests bestanden nur daraus, ob ein "ack" zurück kommt, d.h. die funktion true zurück liefert.
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: i2c BUS ist bockig

Beitrag von Nicki »

Finger hat geschrieben: Ist zur Fehlersuche fast unverzichtbar (und spottbillig!), weil die Software auch die Busprotokolle aufdröseln kann.
Ohne das Ding fange ich keine Busfrickelei mehr an.
Allerdings braucht man nen flotten Port, selbst am ansonsten ungenutzten USB 3.0 sind mit viel Glück (und dann auch nur bei günstiger Planetenkonstellation) 16MHz Samplerate drin, 24 habe ich noch nie geschafft.

Arduinos untereinander über I2C quatschen zu lassen hatte ich vor einer Weile auch mit Wire.h gemacht, war kein großer Akt...
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Was willst du mit USB3 an dem Ding?
Das isn USB2 Gerät und da nutzt kein USB3 Port was, vor allem da ja USB3 nur shcnelelr ist wegen den zusätzlichen Datenleitungen.
Benutzeravatar
timaks
Beiträge: 502
Registriert: So 11. Aug 2013, 21:01

Re: i2c BUS ist bockig

Beitrag von timaks »

Den Logic-Analyzer kann ich auch nur empfehlen.
Hatte auf einem Treffen mal so einen Clone von Stefan_R gekauft.
Dieser liess sich aber erst nach einem EEPROM-Update überreden, mit der Salae-Software zu sprechen
(der Clone natürlich, nicht der Stefan)...

Seitdem spielt das Ding aber herzig. Ich habe mit noch eine Huckepack-Platine mit nem 74LVX244
als Buffer entworfen und ordentlich Messstrippen angelötet.

Bild->zoom
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Es ist ja auch nur der EEPROM Inhalt der aus dem USbee nen Buspirate macht und umgekehrt :lol:
Unter ordentlichen Messtrippen sollte man aber eher sowas verstehen:
Bild
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: i2c BUS ist bockig

Beitrag von Nicki »

Fritzler hat geschrieben:Was willst du mit USB3 an dem Ding?
Das isn USB2 Gerät und da nutzt kein USB3 Port was, vor allem da ja USB3 nur shcnelelr ist wegen den zusätzlichen Datenleitungen.
Ich habe bisher an keinem 2.0-Port auch nur annähernd die 36MByte/s erreicht (die meine Festplatte am 3.0 mit der 2.0-Platine lieferte), höchstens 24.
Fritzler hat geschrieben:Es ist ja auch nur der EEPROM Inhalt der aus dem USbee nen Buspirate macht und umgekehrt :lol:
Dafuq?
In meinem BP steckt ein PIC(24?)
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Nicki hat geschrieben:
Fritzler hat geschrieben:Es ist ja auch nur der EEPROM Inhalt der aus dem USbee nen Buspirate macht und umgekehrt :lol:
Dafuq?
In meinem BP steckt ein PIC(24?)
Äh ja, hab ich mit nem anderen LA verwechselt der sich nur durch den EEPROM Inhalt unterscheidet, aber leider vergessen wie das hieß.

Komisches Mainboard hast du dann, ne ICH10 (GA-EP43-DS3L) kommt bei USB2 auf 32MB/s bei ner externen HDD und frisst auch die 24MS/s des USBee :D
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: i2c BUS ist bockig

Beitrag von Name vergessen »

Gab's nicht mal irgendwo einen Vergleich zwischen solchen Billig-LAs, oder habe ich das geträumt? Schätze, sowas sollte ich auch mal kaufen, nur nervt China wegen GayPal. :(

Wo hast Du diese Meßstrippen her, die sind ja gar nicht schlecht? Pollin hat keine, und bei Reichelt finde ich sie nicht, weil man in den Suchergebnissen nicht gescheit (z.B. nach Preis...) sortieren kann, und das bei >100 Ergebnisseiten.

@ USB: das kann natürlich auch am Treiber liegen, oder am OS, wahrscheinlich läuft das im "Interrupt"-Betrieb, der allerdings NICHTS mit Interrupts zu tun hat, sondern in Wahrheit pollt. Die Pollfrequenz kann der Treiber ja einstellen.
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Wenn du kein Gaypal willst (gute Entscheidung), dann guck dich auf aliexpress um.
Die Dinger findeste unter dem Suchbegriff "Logic Probe"
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: i2c BUS ist bockig

Beitrag von Name vergessen »

Hm, danke für den Hinweis, da habe ich auch welche gefunden, aber die kommen auch alle aus CN, und der Seitenbetreiber scheint Ami zu sein... angemeldet habe ich mich noch nicht, wie wird da die Zahlung gemacht? Auch da steht was von "Käuferschutz"...? Bevor ich jetzt meine Daten auch noch zu den Amis bringe, um dann doch auf Gaypal zu treffen... welche Alternative bieten die? :?
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Da kannste mit Kreditkarte zahlen ;)
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Was ist das Problem mit PayPal?

Hab das alles nochmal komplett umgestrickt und neu gemacht, mal den Master/Slave getauscht... an den Outputs des Nano messe ich aber genausowenig wie an denen des Micro... Sendet der BUS Blind, egal ob jemand "Acknowledged"? Nichtmal den Clock kann ich messen. Mein Logic analyzer ist noch nciht da, habe mit nem Handheld Oszilloskop von Fluke gemessen. im Moment der Datenübertragung an den PC konnte ich das TX Signal (wobei die Lampe von "rx" blinkt....?!) gut Sichtbar machen.

Aber dem I²C Bus entlocke ich nur ein Dauer-high auf beiden Strippen. Zum Koten.

hf.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: i2c BUS ist bockig

Beitrag von Name vergessen »

Um zu erkennen, ob sich auf einer Signalleitung etwas tut, kannst Du einfach ein retriggerbares Monoflop nehmen (Transistor mit RC-Glied dahinter z.B.). Davor kommt noch ein Serienkondensator (so 100nF) gefolgt von einer Diode zum Abblocken der negativen Spitzen. Daran dann noch ein Transistor, der eine LED schaltet, und schon leuchtet diese nur dann, wenn sich der Zustand der Leitung ändert, also während einer Übertragung. Bei Dauer-H oder Dauer-L bleibt die LED aus. Diese Schaltung habe ich schon zur Überwachung des Vorhandenseins diverser Signale verwendet, klappt supi. :)

@ I2C: der Bus sendet auch, wenn niemand zuhört. ABER er sendet NICHT, solange die Clock-Leitung auf Null gehalten wird (egal von wem). Dadurch kann z.B. ein langsamer Empfänger den Sender davon abhalten, zu schnell Daten zu senden.
Eigentlich müßte die Lösung mit den Pull-Ups gehen. Ich habe dafür Konstantstromquellen (BC558) benutzt, das ist bei längeren Leitungen sinnvoller, aber für die paar cm ist das total egal. Linux hat übrigens eine I2C-Bibliothek, die das via Druckerport unterstützt. Wer will, kann aber auch die diversen I2Cs auf Mainboard, Grafikkarte oder den Speicherriegeln anzapfen und über diese Lib verwenden.

@ Gaypal: mir wäre schon das unsympathisch genug, aber man hört / liest ja zusätzlich auch noch vielerorts von nicht erfolgten / stark verzögerten Gutschriften und sonstigen Ungereimtheiten zum Schaden der Kunden.
Außerdem ist GayPal keine echte Bank und unterliegt nicht einmal deutschem Recht -> noch größeres Risiko als bei Privatbanken.

Auch, wenn SEPA diese idiotisch langen und damit extrem fehleranfälligen Nummern benutzt (was man SIMPELST durch eine Aufteilung in 2 Nummernteile hätte vermeiden können!) könnte damit wenigstens etwas für innereuropäische Überweisungen zum Standard werden, das keine zusätzlichen Risiken / Kosten / Verzögerungen / Datenerhebungen verursacht (außer dem Risiko, daß nicht anhand des Empfängernamens geprüft wird, ob das Zielkonto stimmt, wieder einmal hat da ja "unsere" ReGIERung vor den Bankenlobbyisten einen Kniefall gemacht). Der einzige Mehrwehrt, den GayPal für mich hätte, wäre nämlich der internationale Geldaustausch, aber dafür lege ich ganz sicher keinem halbseidenen Unternehmen irgendwelche Daten offen. Schon "seriöse" Unternehmen treiben da viel zuviel Mißbrauch mit.
shaun
Beiträge: 2401
Registriert: Mo 12. Aug 2013, 20:37

Re: i2c BUS ist bockig

Beitrag von shaun »

Damits wenigstens ein bißchen OnT wird: immerhin hat die IBAN eine Prüfsumme - ist doch schon mal was, nicht so fehleranfällig wie Konto und BLZ, die sich unbedingt eindeutig prüfen lassen.
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Aloha Frickler - wollte euch nur noch folgendes Wissen lassen -

Das Problem war, dass ich die Digitalen pins 4/5, und nicht die analogen genutzt habe.

Bild

Genau wie hier beschrieben -.- Blödes Bild.

Jetzt funktioniert das! ich bin beeindruckt. schaffe leider nur noch nicht es mit dem Logic analyzer sichtbar zu machen...
QuadPrime
Beiträge: 153
Registriert: So 24. Nov 2013, 19:41

Re: i2c BUS ist bockig

Beitrag von QuadPrime »

Saaagtmal...

Habe jetzt auch den Logic Analyzer am laufen, und der liest jetzt Sinnvolle Daten! Verschicke drei Bytes die allesamt auch erkannt werden.

NUR - der analyzer erkennt das erste byte als "Setup Write ['20'] + ACK" während die Andressen auf 10 Eingestellt sind. er erkannte es als 18 bei Adresse 9. Signifikant das Doppelte :/... UND - der BUS funktioniert preoblemlos ohne externe Pullups. DoppelWAT.

hf.
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: i2c BUS ist bockig

Beitrag von Fritzler »

Der LA hat eingebaute Pullups!

Weiterhin ist das lesen/schreiben bit ja das LSB der Adresse, somit wird die Adresse eben als das Doppelte angezeigt.
Einmal nach links schieben = verdoppelung des Wertes.
Antworten