I2C will nicht

OP #4095797
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
Angehängte Dateien:
Gast #4095826
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.