Mikrocontroller und Digitale Elektronik
›
Thread
I2C-Bus und DS1631
C
CJ
Gast
28.05.2007 16:55
#570228
Hallo,
ich habe eine ATmega8 und will damit über I2C einen Temperatursensor
DS1631 ansteuern.
Hat damit irgendwer schon etwas gemacht, evtl. fertiger Assembler Code?
Ich habe ein Problem beim Auslesen der Temperatur über I2C. Ich weiß
nicht genau, ob ich beim I2C das ACK-Bit beim Lesen selbst setzen muss,
oder ob mir dass der ATmega8 selbstständig macht (ich verwende die
integrierte TWI-Schnittstelle des ATmega)!
Initialisiert dürfte ich ich alles korrekt haben. Der Ablauf hängt aber
in Schleife "read4"
1 ;Temperatur einlesen
2 read_temp_ds1631:
3 ldi tmp1, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
4 out TWCR, tmp1
5 read1: in tmp1, TWCR
6 sbrs tmp1, TWINT
7 rjmp read1
8
9 ldi tmp1, 0x91 ;HW-adresse
10 out TWDR, tmp1
11 ldi tmp1, (1<<TWINT) | (1<<TWEN)
12 out TWCR, tmp1
13 read2: in tmp1, TWCR
14 sbrs tmp1, TWINT
15 rjmp read2
16
17 ldi tmp1, 0xAA ;Befehl zum Lesen der Temp
18 out TWDR, tmp1
19 ldi tmp1, (1<<TWINT) | (1<<TWEN)
20 out TWCR, tmp1
21 read3: in tmp1, TWCR
22 sbrs tmp1, TWINT
23 rjmp read3
24
25 ldi tmp1, (1<<TWINT) | (1<<TWEN)
26 out TWCR, tmp1
27 read4: in tmp1, TWCR
28 sbrs tmp1, TWINT
29 rjmp read4
30
31 in TH, TWDR ;TH Daten auslesen
32
33 ldi tmp1, (1<<TWINT) | (1<<TWEN)
34 out TWCR, tmp1
35 read5: in tmp1, TWCR
36 sbrs tmp1, TWINT
37 rjmp read5
38
39 in TL, TWDR ;TL Daten auslesen
40
41 ldi tmp1, (1<<TWINT) | (1<<TWEA) | (1<<TWEN)
42 out TWCR, tmp1
43 read6: in tmp1, TWCR
44 sbrs tmp1, TWINT
45 rjmp read6
46
47 ldi tmp1, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
48 out TWCR, tmp1
49
50 ret
Vielen Dank für eure Hilfe!
H
horst
Gast
28.05.2007 17:11
#570240
hallo CJ,
vielleicht hilft dir diese fuer den DS1631 angepasste
Routine (von Joerg Wunsch) aus der avrgcc-doc,
deinen Fehler zu finden.
horst.
H
horst
Gast
28.05.2007 17:11
#570241
anhang hat wieder mal nicht geklappt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren