Sida 1 av 1
Någon som har en I2C BitBang rutin i C ?
Postat: 4 december 2010, 21:52:39
av lizerdboy
Tjena.
Har letat ett tag efter någon vettig I2C BitBang rutin för att läsa av ett 24Cxx Eeprom minne med.
ska konvertera till STM32
Någon som har en rutin liggande ??
Hittar några, men ingen med vettiga kommentarer, eller rättare sagt några kommentarer alls.
Re: Någon som har en I2C BitBang rutin i C ?
Postat: 4 december 2010, 22:06:35
av sneaky
Har inte läst dem själv men finns säkert något som passar:
http://www.microchipc.com/sourcecode/#i2c
Re: Någon som har en I2C BitBang rutin i C ?
Postat: 4 december 2010, 22:08:28
av ds77
Varför inte använda hårdvaru I2C? Bara en undran..
Re: Någon som har en I2C BitBang rutin i C ?
Postat: 5 december 2010, 07:13:17
av lizerdboy
ds77: HEHE jo då jag vet att det finns sådana i STM32 absolut. Dock så delar dessa pinnar som har I2C med många andra funktioner, vilka är viktigare för min design.
detta har resulterat i att man får köra BitBang tekniken då dessa inte kräver varken snabbhet eller att jag åtkomst ofta i min lösning.
sneaky: Tack, ska kolla länken
Re: Någon som har en I2C BitBang rutin i C ?
Postat: 10 december 2010, 00:14:04
av RoPa
Följande finns i bifogade filer, jag kör de i en 16F690 då den inte har I2C master funktion utan bara slave. Hoppas de kan användas.
Multimaster är inte infört utan CLK drivs både låg och hög (även om koden delvis har multimaster infört, kollar dock inte alltid att bussen är fri) råkade nämligen glömma pullup på CLK och orkade inte modda kortet, lättare att ända koden.
Kolla dealy så det blir rätt buss hastighet, har för mig att jag slöat ned den.
//////////////////////////////////////////////////
// //
// Routines for I2C serial master communication //
// //
//////////////////////////////////////////////////
// Data = RB4
// Clk = RB6
void i2c_delay(unsigned char); // Delays t number of micro seconds //
unsigned char i2c_init(void); // Configure port and check for bus high //
unsigned char i2c_start(void); // Asserts a start conditionon on the bus //
unsigned char i2c_ack(void) ; // Sends a ACK symbol //
unsigned char i2c_nack(void); // Sends a NACK symbol //
unsigned char i2c_stop(void); // Sends a STOP symbol //
unsigned char i2c_putb(unsigned char); // Sends a byte onto the i2c buss //
unsigned char i2c_getb(void); // Receives a byte from the i2c buss (does NOT ack !!!) //
//////////////////////////////////////////////////
// //
// Routines for I2C EEprom 24LC64 access //
// //
//////////////////////////////////////////////////
unsigned char i2c_mem_readab(unsigned int); // Read a byte from an adressed memory location //
unsigned char i2c_mem_readb(void); // Read a byte from the next adress location //
unsigned char i2c_mem_writeab(unsigned int , unsigned char); // Write to an adressed memory location a byte //
unsigned char i2c_mem_readap(unsigned int , unsigned char * , unsigned int); // Read from a memory location to a base adress a page of size n bytes //
unsigned char i2c_mem_writeap(unsigned int , unsigned char * , unsigned int); // Write to a memory location from a base adress a page of size n bytes //
// Note: page size can be up to 20h byte but no more !!! //
Re: Någon som har en I2C BitBang rutin i C ?
Postat: 10 december 2010, 08:42:37
av lizerdboy
Tackar
RoPa:
Var lite lat och fråga först. Men jag skapade en egen efter I2C specen, det gick förvånansvärt snabbt att lösa, svåraste var att få in rätt timing mellan skriv kommandon.
Slängde ihop så jag kunde se vad som hände på pinnarna, då var det inga problem
