I2C-Bus und DS1631

Gast #570228
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren