www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C, es tut sich nichts an den Leitungen


Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich arbeite derzeit an einem Projekt in welchem ich den I2C Master von 
Peter Fleury verwende. Es geht darum ein LCD Display via I2C anzusteuern 
(via Channaa Adapter Print). Ich habe  3 Files angehängt, Schema (nicht 
vollständig soll nur I2C Belegung verdeutlichen), i2c_master.s und den 
Versuchscode. Wie zu sehen ist habe ich das Display nicht an den 
Hardware I2C Ports hängen. Ich habe aber in der i2c_master.s Datei die 
Pins korrigiert. Der Code ist wohl nicht fehlerfrei ich erhalte jedoch 
beim kompilieren keinen Fehler. Was micht verwirrt ist das die beiden 
Leitungen dauerhaft auf VCC sind, es sollte sich doch auch bei einem 
Codefehler zumindest während der Initialisierung etwas tun.

Haben sie eine Idee woran es liegen könnte?

Besten Dank :)

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut Schaltplan ist SDA an B.0 und SCL an B.1, eingestellt ist
im asm Code aber B.1 und B.2. Ferner wird der AVR in der Schaltung
mit 8MHz betrieben, der Code jedoch geht von 4MHz aus. Der Bustakt
würde damit ca. 200kHz betragen.

Zumindest an B.1 sollte sich aber dennoch etwas tun. Ich nehme
an du verwendest zum Messen ein Scope o.ä.?
Hast du es schon mit einer einfachen Schleife probiert die
z.B. B.1 toggelt (zwischen In- und Output)?

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe das i2cmaster.s File mal angepasst nun sollte es stimmen. Auch 
den Code habe ich etwas verändert. Ja ich messe mit Scope, tut sich aber 
leider immer noch nichts.

Marcel

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Atmega kann die Pins auf Gnd ziehen wenn ich die Pins normal auf 0 
setze daran liegt es also nicht.

In einem Punkt bin ich mir unsicher:

Müssen i2cmaster.h und i2cmaster.s im gleichen Verzeichniss sein? Ich 
habe mal die i2cmaster.s Datei auf den Desktop verschobe und erhalte 
trotzdem keine Warnung das ist doch etwas komisch?

Marcel

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liegt da vielleicht noch eine alte i2cmaster.o rum? Oder eine
andere i2cmaster.S Datei die übersetzt wird? Es gibt ja auch noch
eine Implementierung in C. Nicht das du am Ende noch die Verwendest.
Bau doch einfach mal einen Syntaxfehler in die .S Datei ein.
Im Schaltbild und im Programm kann ich keinen Fehler entdecken.

Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mal die i2cmaster.s Datei vorübergehend gelöscht und auch 
einmal einen Sysntaxfehler eingebaut was beides keinen Fehler und keine 
Warnung beim Kompilieren erzeugte. Daher bin ich überzeugt das ein 
Implementierungfehler vorliegt. Habe noch die .o Datei angehängt ev 
findet jemand etwas. Jedenfalls wäre ich froh wenn jemand ein Tutorial 
kennt welches die implementierung des i2cmasters ins Avrstudio Schritt 
für Schritt dokumentiert. Das heisst z.B Welche Dateien müssen in 
welches Verzeichniss, wie und weshalb muss ich die .o Datei erzeugen und 
wohin kommt die und welche Einstellungen muss ich im Avrstudio 
vornehmen.

Marcel

Autor: Jörn Ahrens (joerna)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was muss man alles ändern, wenn man die Fleury LIB für i2C nutzen will, 
außer das ich z.b. sein Beispiel-Code aus der Main() nutze?

Ich will mit einem MEGA16 für i2C nutzen...

wo muss ich die Dateien hinkopieren?

Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

seit ich heute die i2cmaster Files in den Projektordner verschoben habe 
tut sich nun etwas an den Leitungen. Die Clockfrequenz beträgt derzeit 
140kHz sie sollte aber 100 oder 400kHz betragen soweit ich weiss. Was 
ist die richtige Wahl ?

(LCD Display:
EA W204-BNLED - (https://www.distrelec.com/distrelec/datasheets.nsf...)
I2C-LCD Adapter von Channaa
(http://www.channaa.com/html/i2c_lcd_adapter.html)

Wo kann ich das einstellen?

Besten Dank,

Marcel

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal in der Delay Routine die Zyklen verdoppelt da ich mit 8Mhz 
arbeite und Fleury mit 4MHz. Dies hat aber keine Änderung gebracht. 
Deshalb habe ich testweise mal auf den internen 4Mhz Geni geschaltet und 
es Funktionierte :)

http://www.flickr.com/photos/15056833@N07/2299154993/

Jetzt wäre es natürlich noch schön wenn das ganze auch mit dem 8MHz 
Resonator funktionieren würde.

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die I2C Spec gibt Mindest-Werte für die Signal-Timings an. Oder anders 
herum (1/s) maximale Werte für die Frequenzen. D.h. ein Low-Speed I2C 
darf mit max. 100kHz laufen, ein Fast I2C mit max. 400kHz. Der ATmega 
kann sowohl in Hardware als auch in Software bis zu 400kHz, es kommt 
also auf dein Display und deine PullUps am Bus an, ob es mit vmax=400kHz 
funktioniert.
Es gibt keine Vorschrift, dass ein I2C Bus mit exakt 100kHz resp. 400kHz 
laufen muss. 1Hz ist auch legal.

Im Grunde kannst Du also Deine Software auf einem 16MHz System mit 
400kHz entwickeln und ohne Änderung dann auf einen mit internen 8MHz 
betriebenen Controller flashen. Dir muss dann nur klar sein, dass dort 
nur 200mHz über den I2C laufen, wenn Du nicht die entsprechenden 
Timer-Routinen änderst.

Gruß, Ulrich

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Fleury konnte mir helfen:
Hallo Marcel,

Ja mit 8Mhz ist dann der I2C Takt doppelt so schnell, also 200khz.   Es gibt 
aber I2C-Bauseine die bis 400khz Takt verarbeiten können.
Falls nicht musst du die delay wie folgt anpassen/ersetzen:

 .func i2c_delay_T2 ; delay 5.0 microsec with 8 Mhz crystal
i2c_delay_T2:        ; 4 cycles
 rjmp 1f      ; 2   "
1: rjmp 2f      ; 2   "
2: rjmp 3f      ; 2   "
3: rjmp 4f      ; 2   "
4: rjmp 5f      ; 2   "
5:  rjmp 6f      ; 2   "
6: rjmp 7f      ; 2   "
7: rjmp 8f      ; 2   "
8: rjmp 9f      ; 2   "
9: rjmp 10f     ; 2   "
10:  rjmp 11f     ; 2   "
11: rjmp 12f     ; 2   "
12: rjmp 13f     ; 2   "
13: rjmp 14f     ; 2   "
14: rjmp 15f     ; 2   "
15:  rjmp 16f     ; 2   "
16: nop          ; 1   "
 ret          ; 3   "
 .endfunc     ; total 40 cyles = 5.0 microsec with 8 Mhz crystal

Gruss

Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.