Forum: Mikrocontroller und Digitale Elektronik Software I2C am Tiny13


von GrinzPrinz (Gast)


Lesenswert?

Moin, ich nochmal...

Versuche mich gerade an der Implementierung eines I2C Busses. Dazu habe 
ich einen Tiny13 und ein 24C32 genommen, die alle richtig verbunden, 
auch Pull-Ups am Bus, usw. Habe mir zusätzlich zwei LEDs mt 
Vorwiderständen an SDA/SCL angeschlossen, um die Zustände mit verfolgen 
zu kömmen. Nun konnte ich also mitverfolgen, dass auf der SDA Leitung 
10100000 korekt übertragen wird, davor die Startbedingung. Nun erzeuge 
ich einen 9. Takt, also SDA und SCL liegen auf High und ich erwarte eig, 
dass der 24C32 nun die SDA Leitung auf GND zieht, als ACK. Nur tut er 
dies nicht und ich weiß nicht warum :(

Vielleicht weiß jemand woran das liegen kann?

Lg GrinzPrinz

von Benedikt K. (benedikt)


Lesenswert?

GrinzPrinz wrote:

> Vielleicht weiß jemand woran das liegen kann?

Ja, entweder an einem Hardware oder Softwarfehler von dir.

von GrinzPrinz (Gast)


Lesenswert?

Also hardwaremäßig könnens ja bloß die EEPROMs sein, die defekt sind, 
den Rest habe ich überprüft...und da habe ich 6 Stück ausprobiert, also 
gehe ich einfach davon aus, dass es daran auch nicht liegen 
kann...versuch mal eben ein kleines video von den LEDs zu drehen, damit 
man sehen kann, was auf dem Bus passiert...

von Benedikt K. (benedikt)


Lesenswert?

Poste doch mal die Software...

von GrinzPrinz (Gast)


Lesenswert?

Hier schonmal das Video

http://www.info03.de/share/i2c.mpg (ca 4 MB)

die linke (grüne LED) = SDA
die rechte (gelbe LED) = SCL

Programm code kommt gleich...

von GrinzPrinz (Gast)


Lesenswert?

Hier meine Software:
1
; PB0 = ISP(MOSI)
2
; PB1 = ISP(MISO)
3
; PB2 = ISP(SCK)
4
; PB3 = SCL
5
; PB4 = SDA
6
; PB5 = ISP(Reset)
7
.include "tn13def.inc"
8
.def    temp = r18
9
.equ    SDA = PB4
10
.equ    SCL = PB3
11
.ORG     0x00
12
    ldi temp, RAMEND
13
    out SPL, temp
14
    ldi temp, 0xFF
15
    out DDRB, temp
16
    sbi PORTB, SDA
17
start:  sbi PORTB, SCL
18
    rcall delay
19
    cbi PORTB, SDA
20
    rcall delay
21
    cbi PORTB, SCL
22
    rcall delay
23
    sbi PORTB, SDA  ;1
24
    rcall delay
25
    sbi PORTB, SCL
26
    rcall delay
27
    cbi PORTB, SCL
28
    rcall delay
29
    cbi PORTB, SDA ;0
30
    rcall delay
31
    sbi PORTB, SCL
32
    rcall delay
33
    cbi PORTB, SCL
34
    rcall delay    
35
    sbi PORTB, SDA ;1
36
    rcall delay
37
    sbi PORTB, SCL
38
    rcall delay
39
    cbi PORTB, SCL
40
    rcall delay    
41
    cbi PORTB, SDA ;0
42
    rcall delay
43
    sbi PORTB, SCL
44
    rcall delay
45
    cbi PORTB, SCL  ;0  
46
    rcall delay
47
    sbi PORTB, SCL
48
    rcall delay
49
    cbi PORTB, SCL  ;0  
50
        rcall delay
51
    sbi PORTB, SCL
52
    rcall delay
53
    cbi PORTB, SCL  ;0
54
    rcall delay
55
    sbi PORTB, SCL
56
    rcall delay
57
    cbi PORTB, SCL  ;0
58
    rcall delay
59
    sbi PORTB, SCL
60
    rcall delay
61
    cbi PORTB, SCL
62
    rcall delay    
63
        sbi PORTB, SDA
64
    rcall delay
65
    sbi PORTB, SCL  
66
end:  rjmp end
67
68
delay:    ldi  R17, $12
69
WGLOOP0:  ldi  R18, $BC
70
WGLOOP1:  ldi  R19, $C4
71
WGLOOP2:  dec  R19
72
          brne WGLOOP2
73
          dec  R18
74
          brne WGLOOP1
75
          dec  R17
76
          brne WGLOOP0
77
      nop
78
          nop
79
      ret

von Benedikt K. (benedikt)


Lesenswert?

Kein Wunder, du setzt die Pins auf Ausgang. I2C wird per Open Collector 
angesteuert !

von GrinzPrinz (Gast)


Lesenswert?

hab auch noch keinen "Eingang" für den Bus, wollte erstmal sehen, ob ich 
überhaupt ein ACK vom EEPROM bekomme und das müsste sich doch schon 
dadurchzeigen, dass die SDA LED ausgeht, oder?

von Benedikt K. (benedikt)


Lesenswert?

Wie denn ? du legst SDA an 5V, wie soll das EEPROM die Leitung dann auf 
Low ziehen ?

von GrinzPrinz (Gast)


Lesenswert?

hier der bisschen unübersichtlich auf die schnelle gebastelter 
schaltplan:

http://www.info03.de/share/tiny13.pdf

Hab das Anschlussbeispiel aus einem Buch "AVR Mikrocontrollerpraxis". 
Wie müsste ich das denn machen, damits funktioniert?

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.