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 :)
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)?
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
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
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.
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
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?
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
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.
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
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
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.