- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: ERLEDIGT!!! --- kleines TWI problem - ich seh den Fehler

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263

    ERLEDIGT!!! --- kleines TWI problem - ich seh den Fehler

    Anzeige

    Powerstation Test
    Hallo,

    habe hier ein kleines I2c-Problem, wahrscheinlich nur ein kleiner Fehler den ich übersehe, wäre nett wenn jemand mal drüberherschauen könnte, zuerst mal mein Code:

    die twi.c :
    Code:
    char twi_wait(void) {
    	while (!(TWCR & (1<<TWINT)));
    	uart_putc(TWSR & 0xF8);
    	return (TWSR & 0xF8);
    }
    void twi_start(void) {
    	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    }
    void twi_stop(void) {
    	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
    }
    char twi_send_byte(char wert, char addr) {
    	char status,error=0;
    	twi_start();
    	status=twi_wait();
    
    	if((status==0x08) || (status==0x10)) {
    		TWDR = (addr & 0xFE);
    		TWCR = (1<<TWINT) | (1<<TWEN);
    		status=twi_wait();
    		if((status==0x18) || (status==0x20)) {
    			TWDR=wert;
    			TWCR = (1<<TWINT) | (1<<TWEN);
    			status=twi_wait();
    			if((status==0x28) || (status==0x30)) { 
    				error=0; 
    			} else { 
    				error=status;
    				error=0x30;
    			}
    		} else {
    			error=status;
    			error=0x31;
    		}
    		twi_stop();
    	} else {
    		TWCR=0b10000100;
    		error=status;
    		error=0x32;
    	}
    	return error;
    }
    das Hauptprogramm sieht folgendermaßen aus:

    ausschnitt aus der main.c :
    Code:
    ...
    Twcr = &B00000100
    Twsr = 0
    Twbr = 72  
    sei()
    tmp=twi_send_byte(wert, 0x40)
    ...
    Das Problem ist nun, das ich die adresse schicke, und der status dann weder 0x2noch 0x30 ist, also in der Variablen error steht der wert 0x31.

    Ansteuern möchte ich damit einen PCF8574. also ich möchte einige Status-LEDs, die an ihm angeschlossen sind an oder aus machen.

    Sieht jemand grade den Fehler?

    MFG!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    wenn der Wert 0x31 ist, dann kommt der Fehler ja schon bei der Abfrage von 0x18 oder 0x20, dann hat sich der Slave nicht gemeldet.

    Lasse mal die Zeile mit der Zuweisung error = 0x31 weg, dann siehst Du welcher Status wirklich in TWSR war.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Jep, genau das meinte ich, der Slave meldet sich nicht.

    Zur Verdrahtung: Die Pins A0,A1 und A2 liegen alle an GND.

    das 0x31 ist momentan nur zum debuggen drin, ich glaube ursprünglich stand 0x00 drin.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Dann passts ja, oder ?

    Hast Du die Pullups in der Leitung ?

    Welchen PCF hast Du, den mit Adresse 0x40 oder den 0x70 ?

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    60
    Beiträge
    1.305
    Blog-Einträge
    1
    Zitat Zitat von linux_80
    Dann passts ja, oder ?

    Hast Du die Pullups in der Leitung ?

    Welchen PCF hast Du, den mit Adresse 0x40 oder den 0x70 ?
    Er meint die Typen PCF8574AP und PCF8574P

    Datenblatt des PCF8574 Fig.9 auf Seite 8
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Pullups hab ich, ich habe den PCF8574P, also mit der adresse 0x40

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Hier nochmal das gesamte Program, ich sehe den Fehler einfach nicht...


    Er sendet das Startsignal, danach sendet er die adresse und fliiegt raus, der Status ist dann 0x00

    Das gleiche Problem habe ich auch mit einem PCF8591, der am Bus hängt....
    Angehängte Dateien Angehängte Dateien

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    hat sich erledigt....

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Könntest Du uns wissen lassen an was es gelegen hat !?
    Wir wollen ja schliesslich wissen was wir mit unserer Antwort angerichtet haben

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2004
    Beiträge
    263
    Klar, entschuldige

    Das Problem war einfach nur, das ich manchmal I2C und manchmal den A/D Wandler des Mega8 brauchen. Und die beiden Sachen liegen ja auf den gleichen Pins (PC4 und PC5) Für die A/D Wandlung waren noch kapazitäten an den Pins, an die ich einfach nicht mehr gedacht habe. Wenn man nun das I2C benutzen wollte, waren also an dem Bus zwei Kondensatoren. Die haben mir das Signal dann total verfälscht. Daran hatte ich anfangs nicht mehr gedacht und habe erst den Fehler in der Software gesucht

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen