Ratlos TWI ATMEGA48

Gast #1654547
Lesenswert?
• ▲
▼
Hallo,

ich versuche den TWI-Bus des ATMEGA48 zu programmieren. Wenn ich die 
Startcondition sende (Master) reagiert der Slave nicht. Mit einem Oszi 
habe ich mal die SDA- sowie die SCL-Leitung gemessen. An der SCL-Leitung 
liegt ein "Rechtecksignal" an, kann sich das jemand erklären? Vielleicht 
hat jemand von euch einen Tipp.

Hier sind mal die Quelltexte (Master) :
1
interface_Initialize:
2

3
push  Value
4

5
lds    Value, PortCDirection          ; Directionregister PortC lesen
6
sbr    Value, 0x04                ; PortC2 (Pin25) als Ausgang freigeben
7
sbr    Value, 0x08                ; PortC3 (Pin26) als Ausgang freigeben
8
sts    PortCDirection, Value
9

10
ldi    Value, 0x80                ; Bitrate einstellen
11
sts    twiBitrate, Value  
12

13
lds    Value, twiCtrl              ; Two Wire - Controlregister lesen
14
sbr    Value, 0x01                ; Interrupt freigeben
15
sbr    Value, 0x04                ; Interface freigeben
16
sbr    Value, 0x40                ; Acknowledge freigeben
17
sbr    Value, 0x80                ; Interrupt zurück setzen
18
sts    twiCtrl, Value
19

20
pop    Value
21
ret
22

23
interface_Transmit:
24

25
sbrc  Status, 0x03              ; Senden schon aktiv?
26
ret                        ; Ja, also springe zurück
27

28
interface_Transmit_Start:
29

30
cli                        ; Interrupts global sperren
31

32
push  Value
33
push  Timeout
34

35
lds    Value, PortC              ; PortC lesen
36
sbr    Value, ledTransmit            ; PortC3 (Pin26) setzen
37
sts    PortC, Value
38

39
lds    Value, twiCtrl              ; Two Wire - Controlregister lesen
40
cbr    Value, 0x01                ; Interrupt sperren
41
cbr    Value, 0x10                ; Stopcondition zurück setzen
42
sbr    Value, 0x20                ; Startcondition setzen
43
sbr    Value, 0x80                ; Interrupt zurück setzen
44
sts    twiCtrl, Value
45

46
sbr    Status, 0x08
47

48
interface_Transmit_return:
49

50
pop    Timeout
51
pop    Value
52

53
sei                        ; Interrupts global freigeben
54

55
ret

Und der Quelltext vom Slave :
1
interface_Initialize:
2

3
push  Value
4

5
lds    Value, PortCDirection          ; Directionregister PortC lesen
6
sbr    Value, 0x04                ; PortC2 (Pin25) als Ausgang freigeben
7
sbr    Value, 0x08                ; PortC3 (Pin26) als Ausgang freigeben
8
sts    PortCDirection, Value
9

10
ldi    Value, 0x80                ; Bitrate einstellen
11
sts    twiBitrate, Value  
12

13
lds    Value, twiCtrl              ; Two Wire - Controlregister lesen
14
sbr    Value, 0x01                ; Interrupt freigeben
15
sbr    Value, 0x04                ; Interface freigeben
16
sbr    Value, 0x40                ; Acknowledge freigeben
17
sts    twiCtrl, Value
18

19
ldi    Slave, 0x20                ; eigene Slaveadresse
20
sts    twiAddress, Slave
21

22
pop    Value
23
ret
24

25
interface_Receive:
26

27
cli
28

29
push  Value
30

31
lds    Value, PortC              ; PortC lesen
32
sbr    Value, ledReceive            ; PortC2 (Pin25) setzen
33
sts    PortC, Value
34

35
lds    Value, twiCtrl              ; Two Wire - Controlregister lesen
36
sbr    Value, 0x80                ; Interrupt zurück setzen
37
sts    twiCtrl, Value
38

39
pop    Value
40
reti


lg Torsten

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.