I2C mit Atmega8 zu PCF8574P Portexpander

#2970772
Lesenswert?

Hallo an alle, ich habe folgendes Problem:
Um mich in die I2C-Materie einzuarbeiten habe ich einen Testaufbau mit 
einem Atmega8L-8PU (angeschlossen über USB-programmer an den PC) und dem 
PCF8574P Portexpander aufgebaut.
An den Portexpander sind nur Dioden angeschlossen, also nur ein/aus.

Das (Haupt-)Programm sieht folgendermaßen aus:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <D:\Projekt\_AVR\_Bibliotheken\delay.h>
4
#include <D:\Projekt\_AVR\I2C_25122012\original Example\i2cmaster.h>
5

6

7
#ifndef F_CPU
8
#define F_CPU 16000000
9
#endif
10

11
#define ADDR 0x20            //Adresse vom I/O Portexpander PCF8574P
12

13

14

15
void I2C_write(uint8_t DATA);
16

17
void long_delay(uint16_t ms)        //Warteschleifenfunktion
18
{  for(; ms>0; ms--) _delay_ms(1);
19
}
20

21

22
int main(void)
23
{  cli();
24
    i2c_init();
25
    sei();                 // now enable interrupt
26
  
27
  uint8_t i=0,DATA=0;
28
while(1)                            
29
  {  
30
      DATA=i;
31
      if((DATA|i)>=127)
32
      i=0;
33
      i++;
34
      I2C_write(DATA);
35
      long_delay(100);      //Verzögerung bis die Nächste Zahl geladen wird.      
36

37
  }
38
}
39

40

41
void I2C_write(uint8_t DATA)
42
{  
43
    i2c_start(ADDR+I2C_WRITE);
44
    i2c_write(DATA);  
45
    i2c_stop();  
46
}



Ich hoffe das haut jetzt mit der Formatierung hin ^^
Beim Programm dabei sind noch die "i2cmaster.h" und "twimaster.c".
Das ganze habe ich von hier:
http://www.jtronics.de/avr-projekte/library-i2c-twi-master.html
Wenn gewünscht häng ich die Dateien nochmal dran!

Und bitte nicht böse sein dass ich das nicht selber geschrieben habe, 
ich hab das ganze auf softwarebasis funktionierend, bis unser Lehrer mir 
sagte dass das Blödsinn ist, und das beim Atmega sowieso mit der 
Hardware geht -.-
Naja, wie auch immer, Problem ist, dass so wie das Programm ist nichts 
passiert.

Ich hab SCL und SDA oszillographiert, aber die bleiben die ganze Zeit 
auf 5V.
Die Frage ist jetzt ob ich einen blöden Fehler gemacht habe, oder ob 
irgendwas anderes sein kann!

Ich würde mich über Antworten sehr freuen,

Viele Grüße und noch einen schönen Feiertag,

Groebar



PS:
Frequenz der CPU ist auf 1000000 eingestellt, und ich arbeite mit dem 
AVRStudio4!

Auszug aus dem twimaster.c:
1
/* I2C clock in Hz */
2
#define SCL_CLOCK  1000    //400000 vorher
3

4

5
/*************************************************************************
6
Initialisierung I2C-BUS-Interface, nur einmal!
7
*************************************************************************/
8
void i2c_init(void)
9
{
10
  /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
11
  
12
  TWSR = 1;                         /* no prescaler */
13
  TWBR=125;
14
}
#2971315
Lesenswert?

@ i2c:
Pullups sind da, ich geh vom µC auf eine Extraplatine mit dem 
Portexpander, und dort sind die Pullupwiderstände verdrahtet. 
(Durchgemessen)
Danke ^^

@Hans Peter:

Mist, vielen vielen Dank, so ein Datenblatt zu lesen ist schon ziemlich 
schwer ^^ und dann auch noch 0100 umzuwandeln ^^

Wie gesagt, versuch ich morgen noch, aaber müsste dann auf der 
BusLeitung nicht trotzdem etwas passieren?
Diese ist wie gesagt unberührt auf High gewesen...

Danke und gute nacht,

Michael

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