PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerproblem mit i2c und Peter Fleury



hansbausn
17.11.2005, 17:24
Hallo,

habe ein kleines aber für mich doch sehr schweres Problem. Und zwar
möchte ich mit einem ATmega 32 über i2c-Bus mit einem
Chipkartenlesegerät
http://www.horter.de/i2c/i2c-chipkartenleser/chipkarten_1.html auf eine
Chipkarte http://www.horter.de/shop/index.html schreiben und lesen.
Dazu verwende ich die i2c-Libery von Peter Fleury. Leider klappt das
nicht so ganz wie ich möchte.
Habe bei dem Programm in der i2cmaster.h #define Dev24C02 0xA2 auf
0xA0 und in der twimaster.c
/* define CPU frequency in Mhz here if not defined in Makefile */
#ifndef F_CPU
#define F_CPU 4000000UL
#endif

/* I2C clock in Hz */
#define SCL_CLOCK 100000L

angepaßt.

Jetzt steht dort, dass die CPU frequenz in Mhz angegeben werden soll.
Entspricht das meiner Oszillatorfrequen? Die Frequenz soll in Mhz
angegeben werden. Wenn ich aber mal die Nullen zähle, so ist das doch
in Herz angegeben. was bedeutet "UL" hinter den Ziffern?
Was bedeutet das L hinter SCL_clockangabe ? Dort bin ich mir auch nicht
sicher, welche Frequenz ich angeben soll. Aus dem Datenblatt der
Speicherkarte konnte ich keine Frequenz entnehmen.

Muß nicht noch irgendwo eine Angabe gemacht werden, dass SCL und SDA
auf Port C liegen?
Des weieteren habe ich 4,8k Ohm Wiederstände als Pull-Up verwendet.


Beim Compilieren werden mir keine Fehler angezeigt.
Nach dem Übertragen gehen sofort alle LED´s an und melden halt, dass
mein device nicht bereit ist. Weiter komme ich nicht.
Hat jemand eine Ahnung, wo mein Fehler bzw. meine Fehler liegen? Habe
schon alles möglich ausprobiert, komme alleine allerdings nicht
weiter.

Danke Euch jetzt schon herzlich für die geleistet Hilfe

mfg

Hans

Pascal
18.11.2005, 10:34
des is wohl ein Schreibfehler, da gibt man die Frequenz in Hertz an, das ist di Frequenz, mit der der AVR getaktet ist, also entweder der Takt des Quarzes oder des internen Taktgebers

UL bedeutet ultra long, oder so ähnlich, L long, braucht man, glaube ich, um so große Zahlen verwenden zu können



Dort bin ich mir auch nicht
sicher, welche Frequenz ich angeben soll. Aus dem Datenblatt der
Speicherkarte konnte ich keine Frequenz entnehmen.

dann probiers erstmal mit einer relativ kleinen und steiger die dann nach und nach, bis es für deine Verhältnisse ausreicht

die Pins des TWI-Moduls sind beim ATMega32 vorgegeben, müssen, also nicht eingestellt werden, da sie sowieso nicht veränderbar sind, wenn man das hardware-TWI verwendet

bluebrother
18.11.2005, 12:33
UL bedeutet ultra long, oder so ähnlich, L long, braucht man, glaube ich, um so große Zahlen verwenden zu können

unsigned long. Länger als long wäre "long long".

hansbausn
18.11.2005, 13:54
hm, wofür sol das denn gut sein. mit #define wird doch nur der wert vom präpozessor ersetzt. welcher typ es ist, wird doch in der deklaration der variablen festgelegt.
jedenfalls liegt mein problem aber noch ganz woanders. blos wo?

gruß

hans

SprinterSB
19.11.2005, 19:27
Mit F_CPU und _CLOCK werden hostseitig Berechnungen ausgeführt, um TWI-ini-Werte zu bekommen. Ohne L resp. UL würde die Berechnung nur mit 16 bit ausgeführt und nicht das korrekte Ergebnis liefern.

Die I²C-Adresse deiner Chipkarte findest du in der doc zu deiner Chipkarte. Ist das wirklich ein 24C02???

Funktioniert dein Code mit einem 24C02?

hansbausn
20.11.2005, 17:26
Hallo,

mittlerweile funktioniert alles mit der i2c-Karte. Du hast recht, die Adresse lautet nicht so, sonder 0xA0. Dev24C02 0xA2 kommt vom Erschöpfer dieses Programmes nämlich Peter Fleurry.


gruß