Forum: Mikrocontroller und Digitale Elektronik I2C will nicht


von Benjamin M. (berkutta)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich bin noch relativ neu auf dem Gebiet Protokolle. Mein derzeitiges 
Projekt ist das ansprechen einer DS1307 mit einem Atmega8. Ich habe mich 
dafür im Datasheet der Uhr und vom Atmega eingelesen. Zudem habe ich 
einige Informationen vom Netz bezogen. Ich scheitere jedoch schon 
bereits am normalen ansprechen eines Registers der Uhr. Mein erstes 
"Ziel" ist das Sekundenregister (00h) auf 0x0F zu stellen (Reiner Test 
um das ganze zu testen). Jedoch sehe ich per DSO nicht wirklich das was 
ich "möchte". Weder die Ansprache der Adresse, noch die beiden 
Schreibvorgänge der Daten.

Mein Code sieht wie folgt aus:
1
#define F_CPU 16000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
int main(void)
7
{
8
  //Make Start Condition on I2C Bus  
9
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
10
    
11
  while (!(TWCR & (1<<TWINT)));
12
  
13
  //Set Device Adress
14
  TWDR = 0b11010000;
15
    
16
  TWCR = (1<<TWINT) | (1<<TWEN);
17
    
18
  while (!(TWCR & (1<<TWINT)));
19
    
20
  //Set Register  
21
  TWDR = 0x00;
22
    
23
  TWCR = (1<<TWINT) | (1<<TWEN);
24
    
25
  while (!(TWCR & (1<<TWINT)));
26
  
27
  //Set Register Value
28
  TWDR = 0xFF;
29
  
30
  TWCR = (1<<TWINT) | (1<<TWEN);
31
  
32
  while (!(TWCR & (1<<TWINT)));
33
  
34
  //Send Stop Condition
35
  TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);      
36
37
    while(1)
38
    {
39
    
40
    }
41
}

Der Spickel auf dem DSO in der mitte beinhaltet keinen richtigen Clock 
wie er für I2C sein sollte. Sind nur 2 kurze Low Flanken. CH1 ist SCL, 
CH2 SDA.

Ich würde mich auf den ein oder anderen Input freuen.

Benjamin

von Peter X. (peter_x)


Lesenswert?

Benjamin M. schrieb:
> Der Spickel

Lustiges Wort :-)

Never mind...

von Tim (Gast)


Lesenswert?

>Mein Code sieht wie folgt aus:

Und wo setzt du TWBR?

>Der Spickel auf dem DSO in der mitte beinhaltet keinen richtigen Clock
>wie er für I2C sein sollte. Sind nur 2 kurze Low Flanken. CH1 ist SCL,
>CH2 SDA.

Bei TWBR=0x00 kommt da grob gepeilt 1MHz raus. bei 20ms/Div siehst du
da logischerweise nix.

Also Baudrate mit TWBR runter und dann auf die LO-Flanke Triggern.

Hat du leds am µC? Dann schalte doch nach jedem schritt eine ein.
Dann weist du wo es hängt.

von Benjamin M. (berkutta)


Lesenswert?

Super, Danke. Macht nun effektiv das was er soll :)

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.