I2C, es tut sich nichts an den Leitungen

Gast #793799
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 :)
Angehängte Dateien:
Gast #793962
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)?
Gast #794490
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
Gast #796751
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
Angehängte Dateien:
Gast #797393
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
Angehängte Dateien:
Gast #797406
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.
(Firma: DC3AX) #801590
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
Gast #801677
Lesenswert?

Peter Fleury konnte mir helfen:
1
Hallo Marcel,
2

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

7
 .func i2c_delay_T2 ; delay 5.0 microsec with 8 Mhz crystal
8
i2c_delay_T2:        ; 4 cycles
9
 rjmp 1f      ; 2   "
10
1: rjmp 2f      ; 2   "
11
2: rjmp 3f      ; 2   "
12
3: rjmp 4f      ; 2   "
13
4: rjmp 5f      ; 2   "
14
5:  rjmp 6f      ; 2   "
15
6: rjmp 7f      ; 2   "
16
7: rjmp 8f      ; 2   "
17
8: rjmp 9f      ; 2   "
18
9: rjmp 10f     ; 2   "
19
10:  rjmp 11f     ; 2   "
20
11: rjmp 12f     ; 2   "
21
12: rjmp 13f     ; 2   "
22
13: rjmp 14f     ; 2   "
23
14: rjmp 15f     ; 2   "
24
15:  rjmp 16f     ; 2   "
25
16: nop          ; 1   "
26
 ret          ; 3   "
27
 .endfunc     ; total 40 cyles = 5.0 microsec with 8 Mhz crystal
28

29
Gruss
30

31
Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren