PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein I2C Logger-Problem



oberallgeier
02.11.2010, 10:22
Hallo alle,

mein I 2C-Logger legt eine bestehende, funktionierende I 2C-Verbindung lahm, sobald er (heiß oder kalt) zugeschaltet wird. Die I 2C-Verbindung ist mein erstes, der Sniffer mein zweites I 2C-Projekt - ich habe also s..wenig Erfahrung.

Die bestehende Verbindung geht von einem BMA020-Steckbrettaufbau an eine Experimentierplatine mit mega168/20 MHz und LCD, Aufbau siehe hier. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=523501#523501) Dieser Aufbau zeigt sauber, glaubwürdig und zuverlässig Messwerte und Statusbytes am Display, die Modi "messen" und "Stati melden" lassen sich problemlos schalten. Dieser Aufbau und die unten beschriebene Platine sind getrennt mit Akkublocks versorgt, GND ist verbunden (testweise auch offen mit gleichem Misserfolg).

Der Logger stammt aus dieser Bauanleitung, (http://www.mikrocontroller.net/topic/102228#890624) realisiert mit tiny2313/16 MHz auf einer Experimentierplatine. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=331177#331177) Ports des USI und des Software-UART wurde dem t2313 angepasst. Die Ausgabe erfolgt über eine U SB-Verbindung mit FTDI-Chip, Software-UART über PB1, 115k2 Bd, Terminal v1.9b - by Br@y. Die FIFO beim tiny musste ich von 256 Byte auf 64 verkleinern. Der Anmeldestring wird sauber übertragen. Vermutlich kneifen diese Zeilen:


Auszug aus definitionen vor main.h
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SCL SBIT( PORTB, 7 )
#define SCL_DDR SBIT( DDRB, 7 )
#define SCL_PIN SBIT( PINB, 7 )
#define SDA SBIT( PORTB, 5 )
#define SDA_DDR SBIT( DDRB, 5 )
#define SDA_PIN SBIT( PINB, 5 )
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Auszug aus I2Cs.c
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init_i2c( void )
{
SCL = 1;
SCL_DDR = 1; // force busy waiting
SDA = 1;
SDA_DDR = 0; // listen only, no ACK, no data
USICR = 1<<USIWM1^1<<USIWM0; // I2C, no counter
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Beim Start mit zugeschaltetem Logger kann ich nicht mal ein einziges Statusbyte lesen - der BMA-Messaufbau verweigert offensichtlich den Lesevorgang eines Bytes und bleibt hängen. Bei laufenden BMA-Messaufbau wird eine laufende Messung nach Zustecken von SCL oder SDA des Tiny13 unterbrochen - es werden im Display keine Zeichen mehr angezeigt (die Anzeigezeile "Werte" wird bei mir stets zwischen zwei Messvorgängen gelöscht).

Kann bitte jemand helfen? Danke im Voraus.

oberallgeier
08.11.2010, 23:54
Hat jemand von Euch schon den I2 C-Logger mit dem Lab von christian und der zugehörigen Firmware ingang bekommen? Ich kann zwar die Firmware für den Logger ins Lab flashen, aber das Tool kann ich danach nicht so öffnen, dass ich den Logger ansprechen kann - vielmehr, dass der Logger MIR erzählt, was auf den Leitungen los ist.

Getestet habe ich das mit zwei verschieden alten, als Flashtool sauber arbeitenden Labs. Dazu verschiedene Lab-Tools, sprich verschiedene Versionen der Firmware, dazu WinXPpro mit SP3, auch mit einem Notebook-Win7/32. Jedes Mal wars für die Tonne.

Zweite Frage: hat jemand hier schon mal einen I2 C-Sniffer gebaut/gekauft/betrieben ?

oberallgeier
20.11.2010, 09:45
Mein Versuch, die I 2C-Kommunikation mit einem Controlleraufbau mitzuschneiden läuft einfach nicht, siehe oben. Da ich nur ein analoges Oszilloskop habe (und nicht etliche Hunderter für einen komfortablen Logikanalysator ausgeben möchte) kann ich auch nicht erkennen, was auf dem Bus los ist. Das Lab funktioniert übrigens bei Christian bestens, bei mir garnicht *wärfastzumheulen*.

Wie horcht ihr in den I 2C-Bus? Horcht überhaupt jemand rein mit einer Hobbylösung? Es gibt verschiedene I2 C-Tools im Handel. Kann ich mit denen auch "mithören" ? Welche funktionieren als Testausrüstung problemlos - notfalls eben nicht als Logger/Sniffer ?

Sorry für die penetrante Fragerei und danke für Antworten.

021aet04
20.11.2010, 10:50
Bei Elektor gibt es den I2C-Analiser (Erschienen März 2008). Habe aber keine Erfahrung mit dem.

MfG Hannes

Hubert.G
24.11.2010, 16:43
Ich habe mit der neuesten Software den I2C-Logger getestet.
Das Ergebnis war nicht sehr berauschend.
Mit I2C Takt 100kHz kommen nur Fragmente, man sieht das die Kommunikation läuft.
Heraus lesen kann man aber kaum was.

oberallgeier
24.11.2010, 20:29
Danke für eure Antworten, danke Hubert für Deinen Erfahrungsbericht (... Kommunikation läuft ...).

Mittlerweile bin ich seit diesem Wochenende ein bisschen weiter. Christian und ich haben etwas Zeitmangel, trotzdem haben wir einiges geklärt. Mein Lab neuerer Bauart, etwa 1 Jahr alt, funktioniert, mein "altes", etwa zweieinhalb Jahre, tuts nicht. Die Übertragungsgeschwindigkeit bei meinem Test-Aufbau mit dem BMA020 kann ich nicht fixieren/feststellen/messen (wie macht man das ????). Ein Test ergibt beim Loggen mit 1 kHz internem Takt am Controller ein deutliches Ergebnis (Start- und Stopbits der Reihe nach), aber übertragene Werte werden nicht angezeigt. Das Problem dürfte die nicht sehr hohe Übertragungsgeschwindigkeit der USB-Softwarelösung des Lab sein. Aber extra Geld für ein Gerät will ich nicht ausgeben - mal sehen, ob ich PeterDanneggers Logger noch ans Laufen bekomme (das haben ja etliche Hobbykollegen geschafft - keine Ahnung wo es bei meinem Aufbau klemmt - möglicherweise ist der Quarztakt der Bösewicht).

Hubert.G
24.11.2010, 20:52
Also bei mir funktionieren alle Ausführungen des Lab gleich.
Wenn ich im Programm einen 12MHz Quarz eingebe, aber nur einen 3MHz stecke, die Taktfrequenz auf 25kHz stelle, tatsächlich sind es dann nur etwa 6kHz, dann ist das Ergebnis fast brauchbar.
Es gibt dann nur ganz wenig Fehler.
Was ist das für ein Logger von Peter Dannegger, hast du einen Link?
Wäre interessant wenn er einfach zum nachbauen ist.

oberallgeier
24.11.2010, 21:52
Hallo Hubert.G,

das ist ja ein lustiges Takt-ieren. Muss ich mal ausprobieren.

Den Dannegger-Logger hatte ich zuerst auf meiner Experimentierplatine mit einem 2313/20MHz und danach mit einem tiny85 auf einem Steckbrett aufgebaut. Der erste Versuch auf meiner Experimentierplatine mit dem 2313/20 MHz lief genauso schlecht wie am Steckbrett mit einem tiny85/16MHz. Ohne sinnvolle Funktion ausser der Anmeldung über die Software-UART und dem Stoppen des Datenverkehrs am I²C-Bus. Ich muss mir PeterD´s krummen Quarzwert besorgen und es dann nochmal probieren, denn es gibt ja etliche erfolgreiche Nachbau-Berichte. Den Link zu seinem Logger-Tread (http://www.mikrocontroller.net/topic/102228#890624) hatte ich ja schon eingangs genannt. Der Hickhack am Ende dieses Treads hatte zu einer separaten Fortsetzung (http://www.mikrocontroller.net/topic/103332#new) geführt mit den weitergehenden Diskussionen.

Viel Erfolg wünsche ich Dir beim Nachbau - (schon aus reinem Eigennutz - vielleicht fällt für mich dabei etwas ab).

Hubert.G
25.11.2010, 10:57
Hallo Joe
Den Link oben hatte ich wohl übersehen.
So gut ich das mikrokontoller.net finde, so sehr geht mir das dortige Hick-Hack auf den Geist.
Ich verwende grundsätzlich diese krummen Quarze wenn ich mit UART oder Timer arbeite. Die Taktfrequenz lässt sich schöner teilen.
Ich werde das ganze mal aufbauen, testen und gib dir dann hier Bescheid über den Erfolg.

Hubert.G
25.11.2010, 15:54
So, die Version mit dem C-File funktioniert einwandfrei.
Probleme hatte ich nur, da ich ohne MAX232 das Signal nicht invertierte.
Das zweite Problem hatte ich, da ich einen ununterbrochenen schreib/lese zugriff auf den Slave machte.

Hubert.G
25.11.2010, 16:18
Hallo Joe
Jetzt das *.asm File geladen, mit 460800 und 400kHz I2C-Takt, funktioniert ebenfalls bestens.
Allerdings nur über den Seriell-USB-Adapter.
Ich kann da nur sagen, wow, ist der Mann gut.
Aufbau nur auf einem Steckbrett.
Ich nehme daher mal an das du Probleme mit dem Quarz hast.
In den Originalfiles ist das UART-Signal nicht invertiert.
Das sollte man nicht übersehen wenn man ohne MAX arbeitet.