Guten Abend,
ich habe folgendes Problem. Ich will mit meinem ATMEGA8 einen PCF8574
Port Expander ansprechen. Die Adresse ist auf 0x40 eingestellt. Zudem
verwende ich die lib von Peter Fleury. Angeschlossen ist soweit alles
korrekt (Pins über 4,7k an +5V als Pullup), habe soweit alle Spannungen
durchgemessen. Der Controller bleibt nun einfach bei dieser Zeile hängen
1 | while(!(TWCR & (1<<TWINT)));
|
nachdem die Start-Bedingung mit
1 | TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
gesendet wurde. Mit einem Oszilloskop habe ich schon nachgesehen, ob
überhaupt etwas auf den Pins passier, leider bleiben diese komplett tot.
Daher bleibt wohl auch das Programm hier stehen. Taktrate ist auch
angepasst im Header und mein C Programm sieht wie folgt aus:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <util/delay.h>
|
4 | #include "i2cmaster.h"
|
5 |
|
6 | #define PCF8574_ADDR 0x40
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | sei(); // Enable Interrupts
|
11 |
|
12 | i2c_init(); // I2C initialisieren
|
13 | _delay_ms(500);
|
14 |
|
15 | i2c_start(PCF8574_ADDR | I2C_WRITE);
|
16 | i2c_write(0xFF);
|
17 | i2c_stop();
|
18 |
|
19 | while(1)
|
20 | ;
|
21 |
|
22 | return 0;
|
23 | }
|
Durch LED ansteuern habe ich auch bereits getestet, dass das Programm
wirklich bei oben genannter Stelle hängen bleibt. Zudem ist noch meine
Frage, ob ich über sei() überhaupt die Interrupts global aktivieren muss
für die TWI Kommunikation? Habe I2C bisher nur mit einem Cortex M3
verwendet.
MfG
H0rBie