-
        

Ergebnis 1 bis 4 von 4

Thema: I2C Clock Stretching mit Fleury lib

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    30
    Beiträge
    82

    I2C Clock Stretching mit Fleury lib

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    laut I2C Spezifikation kann man den clock beliebig lange ausdehnen.
    Leider ist mir nicht ganz klar, wie ich meinen Mega32 mit 16MHz auf bspw. 1kHz bringe
    Ich nutze hierbei die bekannte I2C - C Library von Peter Fleury.
    Ich tippe mal auf:
    Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module i2cmaster.S to your target when using the software I2C implementation !
    Aber in was ich das abändern soll steht nicht in der Doku

    Vielen Dank!

    pod32

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich les das so:
    Wenn du die I2C-SOFTWARE- variante verwendest, sollst du anpassen:
    1 Die Port-Definitions (also welche Pins du nimmst)
    2 und (eventuell) in der Delay-Routine die Verzögerungs-Routine (wenn die die Geschwindigkeit verändern willst.

    Da musst du dir die Routine angucken, und dann den gewünschten Schleifenzähler a) ausrechnen und b) reinschreiben

    Mit Clock-Stretching hat das eigentlich aber nix tu tun
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    @pod32,
    Die Clock stretched eig. nur der Slave, wenn ihm der Master zu schnell ist.
    Das geht dann aber auch nur, wenn der Master das einplant damit gestretched werden kann.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    30
    Beiträge
    82
    Zitat Zitat von PicNick
    Ich les das so:
    Wenn du die I2C-SOFTWARE- variante verwendest, sollst du anpassen:
    ...
    Woher erkenne ich welche Variante die Bibliothek nimmt?

    Mein aktueller Sourcecode (Versuch einen TMP175 Sensor über I2C auszulesen):

    Code:
    #include <stdlib.h> 
    #include <avr/io.h>
    #include <string.h>
    #include "lcd.h"
    #include "rn-control.h"
    #include "i2cmaster.h"
    
    
    /** Some DEFINES here...*/
    #define Tmp001  0x48
    
    /*### Hauptschleife ###*/
    int main(){
    	/* Initialisierungen */
    	waitms(1000);
    	lcd_init(LCD_DISP_ON);
    	lcd_clrscr();//!< loescht das Display
    	lcd_puts("initializing i2c...\n");
    	i2c_init();
    	unsigned char ret1,ret2;
    	/* String auf Display anzeigen */
    	i2c_start_wait(Tmp001+I2C_WRITE);
    	i2c_write(0xB0);
    	lcd_puts("done\n");	i2c_rep_start(Tmp001+I2C_READ);
    	ret1 = i2c_readAck();
    	lcd_puts((const char*)&ret1);
    	ret2 = i2c_readNak();
    	lcd_puts("hurray\n");
    	//lcd_puts(&ret1);
    	if(ret1)
    		lcd_puts("hurray ;\n");
    	for(;;){//ever
    		waitms(500);
    	}
    	return 0;
    }
    Möchte gerne statt den 100kHz nur 1kHz als Takt nehmen.
    Auf dem Oszi bekomme ich unschöne Taktimpulse...

Berechtigungen

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