www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software I2C am Tiny13


Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin, ich nochmal...

Versuche mich gerade an der Implementierung eines I2C Busses. Dazu habe 
ich einen Tiny13 und ein 24C32 genommen, die alle richtig verbunden, 
auch Pull-Ups am Bus, usw. Habe mir zusätzlich zwei LEDs mt 
Vorwiderständen an SDA/SCL angeschlossen, um die Zustände mit verfolgen 
zu kömmen. Nun konnte ich also mitverfolgen, dass auf der SDA Leitung 
10100000 korekt übertragen wird, davor die Startbedingung. Nun erzeuge 
ich einen 9. Takt, also SDA und SCL liegen auf High und ich erwarte eig, 
dass der 24C32 nun die SDA Leitung auf GND zieht, als ACK. Nur tut er 
dies nicht und ich weiß nicht warum :(

Vielleicht weiß jemand woran das liegen kann?

Lg GrinzPrinz

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GrinzPrinz wrote:

> Vielleicht weiß jemand woran das liegen kann?

Ja, entweder an einem Hardware oder Softwarfehler von dir.

Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also hardwaremäßig könnens ja bloß die EEPROMs sein, die defekt sind, 
den Rest habe ich überprüft...und da habe ich 6 Stück ausprobiert, also 
gehe ich einfach davon aus, dass es daran auch nicht liegen 
kann...versuch mal eben ein kleines video von den LEDs zu drehen, damit 
man sehen kann, was auf dem Bus passiert...

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal die Software...

Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier schonmal das Video

http://www.info03.de/share/i2c.mpg (ca 4 MB)

die linke (grüne LED) = SDA
die rechte (gelbe LED) = SCL

Programm code kommt gleich...

Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier meine Software:
; PB0 = ISP(MOSI)
; PB1 = ISP(MISO)
; PB2 = ISP(SCK)
; PB3 = SCL
; PB4 = SDA
; PB5 = ISP(Reset)
.include "tn13def.inc"
.def    temp = r18
.equ    SDA = PB4
.equ    SCL = PB3
.ORG     0x00
    ldi temp, RAMEND
    out SPL, temp
    ldi temp, 0xFF
    out DDRB, temp
    sbi PORTB, SDA
start:  sbi PORTB, SCL
    rcall delay
    cbi PORTB, SDA
    rcall delay
    cbi PORTB, SCL
    rcall delay
    sbi PORTB, SDA  ;1
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL
    rcall delay
    cbi PORTB, SDA ;0
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL
    rcall delay    
    sbi PORTB, SDA ;1
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL
    rcall delay    
    cbi PORTB, SDA ;0
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL  ;0  
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL  ;0  
        rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL  ;0
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL  ;0
    rcall delay
    sbi PORTB, SCL
    rcall delay
    cbi PORTB, SCL
    rcall delay    
        sbi PORTB, SDA
    rcall delay
    sbi PORTB, SCL  
end:  rjmp end

delay:    ldi  R17, $12
WGLOOP0:  ldi  R18, $BC
WGLOOP1:  ldi  R19, $C4
WGLOOP2:  dec  R19
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
      nop
          nop
      ret

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Wunder, du setzt die Pins auf Ausgang. I2C wird per Open Collector 
angesteuert !

Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab auch noch keinen "Eingang" für den Bus, wollte erstmal sehen, ob ich 
überhaupt ein ACK vom EEPROM bekomme und das müsste sich doch schon 
dadurchzeigen, dass die SDA LED ausgeht, oder?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie denn ? du legst SDA an 5V, wie soll das EEPROM die Leitung dann auf 
Low ziehen ?

Autor: GrinzPrinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier der bisschen unübersichtlich auf die schnelle gebastelter 
schaltplan:

http://www.info03.de/share/tiny13.pdf

Hab das Anschlussbeispiel aus einem Buch "AVR Mikrocontrollerpraxis". 
Wie müsste ich das denn machen, damits funktioniert?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.