Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: I2C-Bus EEPROM 24C04 Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von volker - 9.10.2006 15:54)
 Als Antwort auf Re: I2C-Bus EEPROM 24C04 von Dietmar - 5.10.2006 21:25
> Hallo Volker!
>
> Die Assemblerroutinen in "om_i2c.bas" sind fest an die Portbelegung PORT[5] und PORT[6] gebunden. Die verwendeten Ports lassen sich also nicht so einfach ändern. Aber der Sourcecode der Assemblerroutinen liegt dem ZIP-Archiv bei. Bei Bedarf kannst Du ihn anpassen, mittels AS05 neu übersetzen und mit INLASM.EXE in die Tabellenform bringen.
>
> Ich habe in den nächsten Tagen ohnehin vor, ein Softwaremodul zu veröffentlichen, das die Open-Micro und Open-Midi um Extended Ports erweitert. Bei der Gelegenheit werde ich wahrscheinlich auch die Assemblerroutinen an den in neuen OCBASIC-Versionen integrierten 6808-Assembler anpassen. Dann man man die Ports leichter ändern. Allerdings lassen sich dann die neuen I²C-Routinen nicht mehr in CCBASIC nutzen.
>
> Viele Grüße
> Dietmar




Hallo Dietmar,
danke für die schnelle Antwort. Ich habe jetzt die I2CREAD.ASM und die I2CWRITE.ASM neu kompiliert und mit INLASM.exe die Tabellen geschrieben, mit denen ich die OM_I2C.BAS geändert habe. Leider brachte dies nicht den gewünschten Erfolg.

Ich habe von Assambler null Ahnung darum meine Frage:
Was muss denn in den ASM-Files geändert werden um Port 3 und 4 oder Port 9 und 10 benutzen zu können?

SCL   equ 4          ;PTA4 = PORT[5]
dies auf  2 setzen (Port 3)

SDA   equ 5          ;PTA5 = PORT[6]
dies auf  3 setzen (Port 4)

PORT  equ $00        ;PORTA
PORTA stimmt zumindest für Port 3 und 4

DDR   equ PORT+4     ;DDRA
was ist hiermit?

  org $fd00          ;dieser Code ist positionsunabhaengig

i2c_write:
  bsr Pop            ;Eintrag vom Rechenstack in den Akkumulator holen
                     ;das Pop ist noetig, damit Stack aufgeraeumt bleibt
  ldx #$08
i2c_write_1
  lsla               ;1 ein Bit in das Carryflag schieben
  bcc i2c_write_2    ;3
  bclr SDA,DDR       ;4 SDA auf Eingang & high
  bra i2c_write_3    ;3
i2c_write_2
  bclr SDA,PORT      ;4
  bset SDA,DDR       ;4 SDA auf Ausgang & low
i2c_write_3
  bset SCL,PORT      ;4
  brn *+2            ;3 \
  brn *+2            ;3  \ Thigh = 13 TZ = 4.0625 æs
  brn *+2            ;3  /
  bclr SCL,PORT      ;4 /
  decx               ;1 Tlow = 19, 20 oder 13 TZ
  bne i2c_write_1    ;3

  bclr SDA,DDR       ;4 SDA auf Eingang & high
  clra               ;1
  bset SCL,PORT      ;4
  brn *+2            ;3
  brset SDA,PORT,i2c_write_4 ;5 ACK lesen
  deca               ;1
i2c_write_4
  bclr SCL,PORT      ;4

;  bra Push           ;ACK auf Stack

Push                 ;Wert auf dem Stack speichern
  clrx
  swi

Pop                  ;Wert vom Stack lesen (ist ein RealPop)
  ldx #1
  swi


Gruß
Volker

 Antwort schreiben

Bisherige Antworten:

Re: I2C-Bus EEPROM 24C04 (von Dietmar - 9.10.2006 20:29)
    Re: I2C-Bus EEPROM 24C04 (von volker - 10.10.2006 16:00)