REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Slave Receiver



I²C-Bus-Dokumentation



Slave-Receiver






Aufgabenstellung




Unser Projekt sollte darin bestehen, einen I²C-Bus Slave-Receiver als XILINX-Schaltung zu realisieren. Hr. Prof. Guggenberg hatte jedoch bald die Idee, daß es praktisch wäre, einen Slave-Receiver als Software-Programm für den Mikroprozessor zu erstellen. So wurde unsere Aufgabe in zwei Teile unterteilt, zuerst die softwaremäßige und anschließend die hardwaremäßige Realisierung des I²C-Bus-Bausteins.



Projektablauf


Anfänglich mußten wir uns in die Grundlagen des I²C-Bus einarbeiten. Während dieser Zeit wurden auch einige andere Aufgaben, wie die Fertigstellung unseres Vorjahresprojekts oder die Programmierung einiger WSI-Chips für das Heinrich-Clausen-µP-Board, erledigt. Anschließend entstanden erste Programmteile, z.B. die Erkennung der Startbedingung, Adress­erkennung, usw. Am Ende des ersten Semesters war ein Programm entstanden, bei dem eine I²C-Bus Übertragung software­mäßig möglich war (hierfür wurde ein "Software-Master" programmiert). Dieses Programm war jedoch nicht zu verwenden, da es die I²C-Bus Spezifikationen nicht einhielt. Der größte Teil des zweiten Semesters wurde dafür verwendet, das Programm so umzuarbeiten, daß ein "Hardware-Master" damit kommunizieren konnte (Einhaltung der Spezifikationen!). Somit entstand ein komplett überarbeitetes Programm, daß bis jetzt ohne Fehler funktioniert und bereits von anderen Klassen verwendet wird. Christian Steinbrecher kümmerte sich ebenfalls um eine 19"-Konstruktion, auf der ein fix verdrahteter I²C-Bus aufgebaut wurde. Ein Teil besteht aus einem Hardware-Master-Transmitter und einem Software-Salve-Receiver, der andere aus einem Hardware-Master-Receiver und einem Software-Slave-Transmitter, also zwei Specon- und zwei Heinrich-Clausen-Boards. Zusätzlich wurde ein Hardware-Slave-IC montiert. Das zweite Problem, die XILINX-Schaltung, wurde anhand eines Zustandsdiagramms (nach mehrmaligem Drängen von Hrn. Prof. Guggenberg) gelöst. Dort wurden die Zustände an der SCL- bzw. SDA-Leitung eingetragen und benötigte Signale hinzugefügt. So entstand eine Schaltung die mit VIEWLOGIC gezeichnet wurde und nun nur noch in das Programm XACT übernommen werden muß, sodaß ein XILINX-Baustein der 3000er Serie programmiert werden kann. Dies ist unsere letzte Aufgabe, somit wird unser Projekt wahrscheinlich rechtzeitig und erfolgreich abgeschlossen werden.

Nähere Informationen zu den einzelnen Projekttagen sind dem Projekttagebuch zu entnehmen.


Prinzipielle Überlegungen (Flussdiagramm)



Impulsdiagramme + Spezifikationen


Timing-Spezifikationen


Parameter

Symbol

min.

Max.

Einheit


SCL Taktfrequenz

SCL-clockfrequency



fSCL




100


kHz

Zeit in der Bus frei bis wieder Übertragung starten kann

Bus free time

tBUF

4,7

-

µs

Haltezeit nach Startbedingung (Zeit bis erster Takt generiert wird)

Start condition hold time

tHD;STA

4,0

-

µs

LOW-Periode des Taktes

SCL-LOW period


tLOW

4,7

-

µs

HIGH-Periode des Taktes

SCL-HIGH period


tHIGH

4,0

-

µs

Zeitdifferenz zwischen SCL->HIGH u. Startbed.

(bei Repeated Start -Bedingung)

Start condition set-up time

tSU:STA



µs

Haltezeit der gültigen Daten nach SCL-Impuls

(für C-Bus kompatible Master

Data hold time

tHD:DAT

0

5

-

-

µs

µs)

Vorhaltezeit der gütigen Daten vor SCL-Impuls

Data set-up time


tSU:DAT

250

-

ns

Anstiegszeit (SDA und SCL-Flanken)

Rise time


tR

-

1

µs

Abfallszeit (SDA und SCL-Flanken)

Fall time


tF

-

300

ns

Zeitdifferenz zwischen SCL->HIGH u. Stopbed.

Stop condition set-up time


tSU:STO



µs




START-Bedingung


Kurze Erklärung


START: Clock - Leitung HIGH Datenleitung wechselt von HIGH auf LOW

START Bedingung wird immer vom Master generiert.


An den Bus angeschlossenen ICs (gewisse Geräte) können die START Bedingung leicht erkennen, weil sie das richtige Interface besitzen.

Mikrocomputer ohne ein solches Interface müssen die Datenleitung zwei mal pro Periode abtasten, um den Übergang zu erkennen.


Spezifikationen


tBUF min 4,7µs . BUS FREE TIME Zeit , die der Bus frei sein muß, bevor wieder eine

Übertragung gestartet werden kann


tHD;STA min 4,0µs . START CONDITION HOLD TIME Haltezeit nach Startbedingung (Zeit bis

erster Takt generiert wird)



LOW und HIGH Zustände - Mastertakt


Kurze allgemeine Erklärung


[i]

Der Takt beim I²C-Bus hat eine minimale LOW-Periode von 4,7µs und eine minimale HIGH-Periode von 4µs. In diesem Mode kann ein Master einen Takt mit einer Frequenz von bis zu fmax=100kHz erzeugen.

Alle an den Bus angeschlossenen Geräte müssen aber in der Lage sein, diese Frequenz zu verarbeiten - gegebenenfalls muß der Takt synchronisiert werden d.h. der Master wird in einen WAIT STATE gebracht. Dadurch wird die LOW-Periode ausgedehnt. Daraus ergibt sich natürlich eine Verminderung der Frequenz.


Spezifikationen


tLOW min 4,7µs . SCL-LOW period LOW-Periode des Taktes

tHIGH min 4,0µs . SCL-HIGH period HIGH-Periode des Taktes


Zeitspezifikationen bei Datentransfer


Allgemein

Daten dürfen nur während der LOW-Periode des Taktes geändert werden (ausgenommen START- und STOP-Bedingungen).


Spezifikationen


tLOW min 4,7µs . SCL-LOW period LOW-Periode des Taktes

tHIGH min 4,0µs . SCL-HIGH period HIGH-Periode des Taktes


tHD;DAT 0µs . DATA HOLD TIME Haltezeit der gültigen Daten nach einer

(negativen) SCL-Flanke

( 5µs . DATA HOLD TIME Haltezeit der gültigen Daten nach einer

(negativen) SCL-Flanke für C kompatible Master )

tSU;DAT min 250ns . DATA SET-UP TIME Vorhaltezeit der gültigen Daten vor einer

(positiven) SCL-Flanke



STOP Bedingung


Kurze Erklärung


STOP: Clock - Leitung HIGH Datenleitung wechselt von LOW auf HIGH


STOP Bedingung wird immer vom Master generiert.


Auch hier gilt: An den Bus angeschlossenen ICs können die STOP Bedingung leicht erkennen, weil sie das richtige Interface besitzen. Mikrocomputer ohne ein solches Interface müssen die Datenleitung zwei mal pro Periode abtasten, um den Übergang zu erkennen.


Spezifikationen

tSU;STO min 4,7µs . STOP CONDITION SET-UP TIME Zeitdifferenz zwischen positiver Flanke

SCL und der STOP-Bedingung

RISE- und FALL - TIME


Spezifikationen




tR max. 1µs . RISE TIME Anstiegszeiten für SDA- und SCL-Flanken


tF max. 300ns . FALL TIME Abfallzeiten für SDA- und SCL-Flanken



Repeated start


Spezifikationen




tSU;STA min. 4,7µs . SCL HIGH Zeitdifferenz zwischen der (positiven) Flanke des

Taktes und der Startbedingung (Repeated Start

Bedingung !)





Programm:


;############### I2C Slave ###################


;### Christoph Auer,Christian Steinbrecher ###

;############### 5HNA 1997/98 ################




;############## Zuweisungen ##################



hauptpr code 8100h

unter code 8200h

charout code 3000h

binout       code 301eh

binbit code 3018h

charin code 302ah

cursor equ 59h

home         equ 48h

erase equ 4Ah

esc          equ 1Bh

left         equ 44h

down         equ 42h

auer   equ 10000000b ;Adresse des Slave-Receivers

enter equ 3003h

dat          bit 01b

sda          bit p1.7 ;Port für die softwaresimulierte SDA-Leitung

scl          bit p1.6 ; -'- SCL-Leitung



;############# Startbedingung ################



org    hauptpr


haupt: jnb scl,haupt ;SCL=HIGH


X1:          jnb sda,haupt ;SDA=HIGH


anf:         jnb scl,haupt ;SCL immer noch HIGH

jb sda,anf ;SDA HIGH->LOW Übergang

mov R1,#00h ;R1 'leeren'

mov R2,#00h ;R2 'leeren'

mov R3,#8h ;R3 für 8 Durchläufe setzen (1byte)



;############## Adressabfrage ################



X2:          setb scl ;SCL freigeben


X3:          jnb scl,x3 ;positive Clockflanke zur Datenübernahme


X4:          mov c,sda ;Daten übernehmen

nop ;minimale HIGH-Zeit=4µs

clr scl ;Clock auf LOW ziehen ('Master bremsen')

mov A,R2 ;gesicherten Akku laden

rlc A ;Daten (Carry-Bit) bitweise (MSBLSB) in den

;Akku schreiben (rotieren)

mov R2,A ;Akku (Daten) sichern

djnz r3, x2 ;8x wiederholen (8bit=1byte)


X5:          mov R4,#auer ;lädt eigene Adresse in R4

mov A,R2 ;gesicherten Akku laden

subb A,R4 ;vergleicht die angelegten Daten=Adresse mit der

;eigenen Adresse

jnz haupt ;bei Übereinstimmung weiter, wenn nicht warten auf neue

;Startbedingung


;############### Acknowledge #################



ack:         clr sda ;Daten auf LOW ziehen

setb scl ;Takt freigeben

ack11: jnb scl,ack11 ;warten bis Clock auf HIGH (Acknowledge Bit: Daten=LOW

;während SCL-HIGH-Phase)

ack12: jb scl,ack12 ;halten der Datenleitung auf LOW bis Clockleitung LOW

setb sda ;Datenleitung freigeben



;############### Datenempfang ################



empfang: mov R3,#8h ;R3 für 8 Durchläufe setzen (1byte)

mov R1,#0h ;R1 'leeren'

mov R4,#2h ;Stopbedingung 2x abtasten


X6:          setb scl ;SCL freigeben


X7:          jnb scl,x7 ;postive Taktflanke (SCL LOW->HIGH) zur Datenübernahme


X8:          mov c,sda ;Daten übernehmen

jb sda,x98 ;wenn sda=HIGH, dann sicher keine Stop-Bed.


x99:         jnb scl,x98 ;scl=HIGH

jb sda,haupt ;sda:low->high

djnz R4,x99 ;2x abtasten


x98:         clr scl ;Clock auf LOW ziehen ('Master bremsen')

mov A,R1 ;gesicherten Akku laden

rlc A ;Daten (Carry-Bit) bitweise (MSBLSB) in den Akku

;schreiben (rotieren)

mov R1,A ;Akku (Daten) sichern

djnz R3,X6 ;8x wiederholen (1byte)

mov A,R1 ;gesicherten Akku laden

call charout ;Ausgabe am Bildschirm



;############### Acknowledge #################



ack2: clr sda ;Daten auf LOW ziehen

setb scl ;Takt freigeben

ack21: jnb scl,ack21 ;warten bis Clock auf HIGH (Acknowledge Bit: Daten=LOW

;während SCL-HIGH-Phase)

ack22: jb scl,ack22 ;halten der Datenleitung auf LOW bis Clockleitung LOW

setb sda ;Datenleitung freigeben

jmp empfang ;Sprung zur Empfangsroutine=Warten auf neue Daten




end

TIMING-DIAGRAMM:











Programm





Zeit/Befehl

SDA


SCL










;############# Startbedingung ################






















org

hauptpr



















haupt:

jnb

scl,haupt



2µs















X1:

jnb

sda,haupt



2µs















anf:

jnb

scl,haupt



2µs






jb

sda,anf



2µs






mov

R1,#00h



1µs






mov

R2,#00h



1µs






mov

R3,#8h



1µs























;############## Adressabfrage ################






















X2:

setb

scl



1µs















X3:

jnb

scl,x3



2µs















X4:

mov

c,sda



1µs






nop




1µs






clr

scl



1µs






mov

A,R2



1µs






rlc

A



1µs
















mov

R2,A



1µs






djnz

r3, x2



2µs















X5:

mov

R4,#auer



1µs






mov

A,R2



1µs






subb

A,R4



1µs
















jnz

haupt



2µs





















;############### Acknowledge ################






















ack:

clr

sda



1µs






setb

scl



1µs





ack11:

jnb

scl,ack11



2µs















ack12:

jb

scl,ack12



2µs






setb

sda



1µs























;############### Datenempfang ###############






















empfang:

mov

R3,#8h



1µs






mov

R1,#0h



1µs






mov

R4,#2h



1µs















X6:

setb

scl



1µs















X7:

jnb

scl,x7



2µs















X8:

mov

c,sda



1µs






jb

sda,x98



2µs















x99:

jnb

scl,x98



2µs






jb

sda,haupt



2µs






djnz

R4,x99



2µs















x98:

clr

scl



1µs






mov

A,R1



1µs






rlc

A



1µs
















mov

R1,A



1µs






djnz

R3,X6



2µs






mov

A,R1



1µs






call

charout



1,x ms





















;############### Acknowledge ################






















ack2:

clr

sda



1µs






setb

scl



1µs







ack21:

jnb

scl,ack21



2µs















ack22:

jb

scl,ack22



2µs






setb

sda



1µs






jmp

empfang



2µs































end











Zustandsdiagramm (f. XILINX-Schaltung)


Blockschaltbild





Gray-Code-Counter (9 negative Flanken)

Dieser Zähler ist kein richtiger Gray-Code-Zähler, weil sich vom 9. Auf den 1.Zustand 2Bits ändern. Dies ist jedoch unerheblich, da bei diesem Übergang nicht der wichtige Zustand 8 erreicht werden kann (hier wird das Schieberegister ausgelesen und das ACK "gesendet").



QN+1

QN


D

C

B

A

D

C

B

A





















































































A















C


D













B





A










X


X

X


C


D



X

X


X

X






B


A=/B*/C*/D+C*D








A










X


X

X


C


D



X

X


X

X






B


B=A*/B*/C+B*/D




A










X


X

X


C


D



X

X


X

X






B


C=/B*D




A










X


X

X


C


D



X

X


X

X






B


D=/A*B+/A*/B*D



komplette Schaltung (Viewlogic)







[i] So nicht im Datenblatt spezifiziert, TL,TH sollte sich aber bei anderem fmax derart ändern









Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen







Neu artikel