Forum: Mikrocontroller und Digitale Elektronik Atmega PORTL asm (fleury lib)


von Tom S. (tom86)


Lesenswert?

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)

von spess53 (Gast)


Lesenswert?

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

von Tom S. (tom86)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Ich verstehe ehrlich nicht, wozu man das fleury-Monstrum braucht um ein 
simples LCD anzusteuern


MfG Spess

von Tom S. (tom86)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

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

von Tom S. (tom86)


Lesenswert?

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 :-/

von Tom S. (tom86)


Lesenswert?

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!

von Peter D. (peda)


Lesenswert?

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

von Tom S. (tom86)


Lesenswert?

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
Noch kein Account? Hier anmelden.