I2C, Mega16

Gast #215758
Lesenswert?

Hallo,

ich habe schon bei verschiedenen AVR's den I2C zum laufen bekommen,
benutze AVRCodeVision, also eigentlich alles kein Problem. Nun habe ich
eine Platine geätzt und möchte für SDA PORTA.2 und für SCL PORTA.3
benutzen.

Ich habe also folgendes geschrieben/generiert:

// I2C Bus functions
#asm
   .equ __i2c_port=0x1b
   .equ __sda_bit=2
   .equ __scl_bit=3
#endasm
#include <i2c.h>

Danach kommt natürlich noch i2c_init() usw. Wenn ich mit dem Skope an
diesen beiden Pins messe, sehe ich auch die Daten flitzen, jedoch
funktioniert meine angeschlossene PCF8583 Uhr nicht. Also habe ich an
die beiden Leitungen ein Testboard angeklemmt, auf dem ein I/O-Expander
(PCF8574) sitzt. Dieser funktioniert 100%, kenne ich aus anderen
Projekten. Aber auch ihn kann ich nicht ansteuern, nicht mal, wenn ich
die ganze Software rausschmeiße und nur den I2C zum laufen bekommen
will. Kann man etwa nicht alle beliebigen Pins des Mega16 für I2C
benutzen??

Wäre sehr dankbar für eine Antwort!

Gruß

Dirk
Gast #215763
Lesenswert?

"ach kommt, so doof ist die frage doch nun auch nicht... :-("


Wie kommst Du darauf, daß alle hier Codevision nehmen ?

Ich benutze WINAVR.
Und den I2C-Kram schreibe ich mir selber, dann weiß ich wie er
funktioniert und kann auch Fehler suchen.


Wenns aber schonmal lief, dann tippe ich auf zu hohe Quarzfrequenz.
Die alten PCF-Dinger nehmen das mit den <=100kHz sehr genau.


Peter
Gast #215766
Lesenswert?

Hallo Dirk,

ich habe mit einem Mega8 schon auf verschiedenen Ports den I2C Bus
betrieben. Funktionierte mit den CodeVision Compiler immer. Probleme
kamen, wenn ich keine PullUps an den Signalleitungen hatte.

@Peter:
Ich versuche gerade mit einem Mega8 als Master mehrere Tiny2313 als
Slave über den I2C Bus anzusteuern. Du scheinst soetwas schon gemacht
zu haben. Bei mir klappt es nicht, bzw. ich weiss nicht wie ich den
Tiny mit CodeVision Funktionen als Slave betreiben kann. Du schreibst
etwas von SLAVE I2C Funktionen, sind das eigenen Funktionen von dir
oder fertige wie etwa i2c_read()? Ich finde in den headdern nicht
passendes dazu.

Danke
Nolan.

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