PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nochmal I2C PCF8574P



Cruser12
18.06.2010, 15:08
Hallo,

Nochmal mein Problem zu dem IC. Habe die Digital Erweiterung aus dem Asuro Wiki gebaut. Habe nun ein Problem mit dem ablauf...
Ich habe es so verstanden dass man so mit dem Prgramm anfängt
#define Portadresse 0x41
InitI2C();
StartI2C(); <--Was muss hier für ein Parameter rein, wenn ich die Pins auslesen will???

ReadI2C(); <---Benötigt man hier einen Parameter?
StopI2C();

Laut dem Datenblatt und dieser .pdf Datei www.g-heinrichs.de/attiny/I2C_Grundlagen_Attiny.pdf ist doch die Leseadresse 0x41, oder?

auch wenn ich z.B. das prog von marvin im asuro wik "ifür die aktuelle asuro bibliothek" "maken" will, bringt er einen fehler: "I2C_WRITE"
Den Befehl will er nicht kennen...

Habe es auch mal mit der i2cmaster lib versucht, aber da werden auch fehlermeldungen gebracht...?!


Cruser12

Cruser12
19.06.2010, 15:27
ich poste mal ein prog für eine Write funktion

normal müssten doch die letzten drei Pins 5V rausbringen und der Rest 0V. Wenn ich jedoch mit dem DMM nachmesse sind da immer 5V.
Kann BITTE ENDLICH jmd. helfen?
danke



#include "i2c.h"
#include "asuro.h"

#define Dev8574 0x40

int main(void)
{
Init();
InitI2C();

while(1)
{
StartI2C(Dev8574);
WriteI2C(0b00000111);
StopI2C();
StatusLED(GREEN);
}
return 0;
}

Jaecko
19.06.2010, 17:21
Ich kenn jetzt die i2c.c und i2c.h nicht. Wird da irgendwo die Busfrequenz
vorgegeben? Die fehlt mir hier.

Hier:
http://www.mikrocontroller.net/mc-project/Pages/Projekte/ICs/Port%20Expander/Portexpander%20Beispiel.zip
gibts nen Beispielcode für den PCF8574.

Wie sieht die Hardware aus? Sind die Pullups für SCL und SDA vorhanden?

damaltor
19.06.2010, 19:57
Die Busfrequenz ist in dieser Library auf 100 khz festgelegt.

deine befehle kennt er nicht, weil groß- und kleinschreibung in C wichtig ist.

beschäftige dich mal mit der dokumentation von peter fleurys i2c-library, siehe dazu: http://jump.to/fleury
dort siehst du, wie du auf einen i2c-baustein schreibend und lesend zugreifen kannst. auch beispielprogramme solltest du dort finden.

Cruser12
20.06.2010, 11:00
danke das mal jmd. was schreibt :)
@Jaecko: Ich hab Pullups mit 4,7K. müsste eigtl. reichen

@damaltor: was meinst du damit, dass er meine befehle nicht kennt?
im asuro wiki steht doch, dass man die i2c.c und i2c.h nehmen kann
was für eine lib bräuchte man dann?

Wie gesagt, ich wollte das prog von marvin aus dem asuro wiki compilieren, hat aber dann diesen error gebracht:
make: *** No rule to make target `test.hex', needed by `all'. Stop.

Noch ne Frage:
in dieser lib steht was von NAK und ACK. Was ist der Unterschied?

Cruser12

damaltor
20.06.2010, 11:03
die fehlermeldung "no rule to make.." bedeutet, dass im eine datei, das makefile, felt oder dass du den aufruf falsc gestaltet hast. du solltest nur "make test" tippen, nicht "make test.hex".

Cruser12
20.06.2010, 12:14
ok, der error ist weg! habe anstatt i2cmaster.s, i2cmaster.c eingetippt. da kann der ja lang suchen.

Jetzt gibt es aber einen neuen error...

avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function 'main':
test.c:18: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:19: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=../../lib/asuro.lst ../../lib/asuro.c -o asuro.o
avr-gcc -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o i2cmaster.s --output test.elf -Wl,-Map=test.map,--cref -L../../lib -lm -lasuro
avr-gcc: i2cmaster.s: No such file or directory
make: *** [test.elf] Error 1

was heißt das?

Cruser12
20.06.2010, 12:16
ich hab die i2cmaster.s in die lib reinkopiert..
oder ist das falsch?

Cruser12
20.06.2010, 12:33
hab gerade in der doku von der i2cmaster lib gelesen, dass man das .S groß schreibt :)
jetzt mach ich mich da mal ran...

Cruser12
20.06.2010, 17:09
perfekt:)
Das erste Programm steht. Werde mir morgen ein kleines Lauflicht basteln und noch ein paar taster dranhängen.

ich hab gelesen, dass man write und read nie gleichzeitig nutzen kann...
reicht es wenn ich dazwischen eine stop funktion einfüge, oder funktioniert dass nicht?

noch was: wenn ich den interrupt benutzen will, wo muss ich den anschließen??

Danke

Cruser12
23.06.2010, 21:09
hab nämlich gelesen, dass man den interrupt braucht wenn man z.B. einen Schalter an einen I/O Pin anschließt.

wie müsste man das denn machen? erst alle pins einlesen? ...und dann????
das wäre hier die frage...

Cruser12