- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: I²C bus testen.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.12.2005
    Ort
    Chemnitz
    Alter
    35
    Beiträge
    87

    I²C bus testen.

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo und Guten Morgen,
    ich habe vor heute den I²C-bus auf meinem Mega32 µController zu implementieren. Habe aber im Augenblick das Problem, dass ich keinen hier habe. Das Programm soll aber morgen dann laufen... Findet sich vllt jemand, der/die es heute für mich testen könnte und mir anschliessend sagt ob ich das so lassen kann? Wäre wirklich unheimlich freundlich. Programm kommt in den nächsten Stunden. Für Tips zur implementierung von I²C bin ich auch immer dankbar... Ich will eigentlich nur einen Ultraschallentfernungsmesser SRF10 damit steuern und auslesen. Hat das schon einmal jemand gemacht und ist bereit mir sein Programm zu zeigen?

    Grüße dark_flash01
    Signatur:
    Bild hier  

    Sowas find ich absolut faszinierend!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    11.12.2005
    Ort
    Chemnitz
    Alter
    35
    Beiträge
    87
    Soo ich denk ich hab das Programm fertig^^.
    Könnte das funktionieren oder hab ich was grundlegendes verpeilt?!?

    Code:
    #include <avr/twi.h>
    #include <avr/delay.h>
    #define MESSUNG 0x51
    #define SRF10_1	0xE0
    #define AUSGABE 0xFF
    
    void i2c_start(void)
    {
    	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);			//Sende START Bedingung
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    }
    
    void i2c_stop(void)
    {
    	TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);			//STOP signal (kann jederzeit benutzt werden)
    }
    
    int i2c_read(int adresse,int anweisung)
    {
    	i2c_start();
    	TWDR = adresse;										//Byte in Daten-Register schreiben + LESEN
    	TWCR = (1<<TWINT)|(1<<TWEN);						//Starte Übertragung
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    
    	TWDR = anweisung;									//Byte in Daten-Register schreiben
    	TWCR = (1<<TWINT)|(1<<TWEN);						//Starte Übertragung
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    		
    	TWCR = (1<<TWINT)|(1<<TWEN);						//Byte von Slave empfangen
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    	int byte = TWDR;
    	i2c_stop();
    	return byte;
    }
    
    void i2c_send(int adresse,int anweisung)
    {
    	i2c_start();
    	TWDR = adresse + 1;									//Byte in Daten-Register schreiben + SCHREIBEN
    	TWCR = (1<<TWINT)|(1<<TWEN);						//Starte Übertragung
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    
    	TWDR = anweisung;									//Byte in Daten-Register schreiben
    	TWCR = (1<<TWINT)|(1<<TWEN);						//Starte Übertragung
    	while(!(TWCR&(1<<TWINT)))							//Warte bis Übertragung beendet ist
    		;
    	i2c_stop();
    }
    
    
    void main(void)
    {
    	int value;
    	initLcdUart();
    	rprintf("init done!");
    	while(1)
    	{
    		i2c_send(SRF10_1,MESSUNG);
    		delay_ms(100);
    		value = i2c_read(SRF10_1;AUSGABE);
    		rprintf("value: %i", value);
    		delay_ms(500);
    	}
    }
    Signatur:
    Bild hier  

    Sowas find ich absolut faszinierend!

Berechtigungen

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

Labornetzteil AliExpress