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
GrinzPrinz wrote:
> Vielleicht weiß jemand woran das liegen kann?
Ja, entweder an einem Hardware oder Softwarfehler von dir.
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...
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...
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 |
Kein Wunder, du setzt die Pins auf Ausgang. I2C wird per Open Collector angesteuert !
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?
Wie denn ? du legst SDA an 5V, wie soll das EEPROM die Leitung dann auf Low ziehen ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.