Forum: Mikrocontroller und Digitale Elektronik I2C, Mega16


von Dirk (Gast)


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

von Marcus (Gast)


Lesenswert?

Keine Ahnung, wie Codevision das macht. Wenn allerdings
der interne I2C genutzt werden soll (was ich stark vermute),
dann geht das nur mit PD0 = SCL und PD1 = SDA.

Gruß, Marcus

von Marcus (Gast)


Lesenswert?

Sorry, ist natürlich PC0 = SCL und PC1 = SDA.
Ich hatte beim Mega64 geschaut ...

Gruß, Marcus

von Dirk (Gast)


Lesenswert?

Vielen Dank!

Aber ich habe es irgendwie anders in Erinnerung. Hat das jemand mal mit
Codevision gemacht?

Dirk

von Dirk (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


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

von Peter (Gast)


Lesenswert?

Ich mache das mit CodeVision, das geht ohne Problem. Ich steuere damit
8574 als auch einen Mega32 mit Slave I2C Funktion an.

Peter

von Dirk (Gast)


Lesenswert?

Hallo Peter,
nimmst du den TWI, der fest mit zwei Pins verbunden ist, oder einfach
I2C, und wählst die Pins selbst?

Danke

Dirk

von Nolan (Gast)


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.

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.