Hallo Leute, ich find die Lösung einfach nicht, auch wenns höchstwahrscheinlich absoluter Kindergarten ist... Normal bin ich bei C zuhausen, will aber bei nem Atmega1280 die i2c lib von peter fleury einsetzen. ich hab nun die definitionen von SDA SCL auf die entsprechenden werte mit PORTL geändert cbi SDA_DDR,SDA ;release SDA sbi SDA_DDR,SDA ;force SDA low Alle Befehle dieser Art funktionieren nicht mehr: number must be positive and less than 32 Was ändert sich denn bei diesen hohen ports für die cbi/sbi anweisungen? Vielen Dank! (hab leider weder was über google, noch im avr tutorial gefunden)
HI
>Was ändert sich denn bei diesen hohen ports für die cbi/sbi anweisungen?
Nichts. Sie funktionieren nur nicht. Du musst über ein Register gehen.
lds Register,SDA_DDR
sbr Register, 1<<SDA
sts SDA_DDR,Register
MfG Spesss
Vielen Dank erstmal! Ok, mit meinem lim->0 asm wissen scheitere ich grad am Umbau der library, die ports kann ich leider auch nicht verlegen. cbi (search+replace zu clrbi6) hab ich über ein define so geändert: #define clrbi6(X,Y) lds r18,X \ cbr r18, 1<<Y \ sts X,r18 clrbi6(SDA_DDR,SDA) === #define setbi6(X,Y) lds r18,X \ sbr r18, 1<<Y \ sts X,r18 setbi6(SCL_DDR,SCL) allerdings spricht er nun überall "garbage at end of line", wo die Anweisung zum Einsatz kommt. jetzt hab noch: sbis SCL_IN,SCL ;wait SCL high sbic SDA_IN,SDA ;if SDA is high da steig ich leider noch nicht ganz durch wie ich das umdefinieren könnte.. :/ Danke nochmal für euere Hilfe
Hi Ich verstehe ehrlich nicht, wozu man das fleury-Monstrum braucht um ein simples LCD anzusteuern MfG Spess
Das problem ist: Ich habs versucht selbst zu machen, es klappt aber nicht so wirklich. Manchmal gibts das erwartete Ergebnis, manchmal einfach auch nicht. Angesteuert wird ein Netzteil mit PMBus (i2c kompatibel) Nun wollte ich das ganze mit einer externen Library probieren, um Fehler bei mir auszuschließen. Grüße
Hi Sieh dir mal diese AppNote an: http://www.atmel.com/dyn/resources/prod_documents/doc2550.pdf http://www.atmel.com/dyn/resources/prod_documents/AVR001.zip MfG Spess
Tom Schmidt schrieb: > allerdings spricht er nun überall "garbage at end of line", wo die > Anweisung zum Einsatz kommt. Da hatter recht, jede Assembleranweisung muß in eine extra Zeile. Warum muß es denn Assembler sein? SW-I2C geht doch prima in C. Peter
Wie gesagt, in C hab ichs schon versucht, allerdings klappts nicht so wirklich, deshalb wollte ichs mal mit was probieren, was schon viele erfolgreich einsetzen. Danke für die Macros, ich versuch das grade hinzubringen. Anscheinend mag mein assembler statt .ENDMACRO nur .ENDM und will eine parameterliste bei der macro definition. Da grüble ich aber im moment noch zwischen "constant value required" (wenn ich die parameternamen ohne \ im code schreibe und "number must be positive and less than 64", wenn ich einen \ davor setze :-/
Ich habs jetzt noch mal ganz anders gemacht. r18 hab ich jetzt einfach mal fest für diese art von operationen innerhalb des codes reserviert. === .MACRO SETB p0,p1 lds r18,\p0 sbr r18, 1<<\p1 sts \p0,r18 .ENDM .MACRO CLRB p0,p1 lds r18,\p0 cbr r18, 1<<\p1 sts \p0,r18 .ENDM SETB SCL_DDR,SCL ;force SCL low CLRB SDA_DDR,SDA ;release SDA === das compiliert nun soweit, ich hoffe es geht auch... Könnte mir noch jemand helfen ein makro für folgende zu schreiben? (sbis) SKBS SCL_IN, SCL ;loop until SCL is high (allow slave to stretch SCL) (sbic) SKBC SDA_IN,SDA ;if SDA is high Eigentlich hätte das ne leichte Geschichte werden sollen das Netzteil über den pmbus auszulesen... :-/ Danke!
Tom Schmidt schrieb: > r18 hab ich jetzt einfach > mal fest für diese art von operationen innerhalb des codes reserviert. Wenn Dein Compiler damit einverstanden ist? Hier mal I2C in C: Beitrag "Re: C->Asm (TWI) Fehlersuche" Peter
Danke Peter, ich hab jetzt nochmal alles aufgebaut mit deinem Code. Nachdem ich das delay/2 nun auf 80us gesetzt habe, funktioniert das ganze soweit zuverlässig. das sind zwar nur noch ~25khz, spezifiziert ist das ganze mit 400... aber was solls... reicht mir und ich bedanke mich nochmal ganz herzlich!
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.