UKHAS Wiki

UK High Altitude Society

User Tools

Site Tools


code:i2c_eeprom

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
code:i2c_eeprom [2008/12/04 04:44] laurencebcode:i2c_eeprom [2009/03/20 04:50] (current) laurenceb
Line 18: Line 18:
  u16 timeout=1;  u16 timeout=1;
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //send start  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //send start
- while (!(TWCR & (1<<TWINT)) && timeout);+ while (!(TWCR & (1<<TWINT)) && timeout)
  timeout++; //wait for a start to be transmitted  timeout++; //wait for a start to be transmitted
  if(!timeout)  if(!timeout)
Line 31: Line 31:
  u16 timeout=1;  u16 timeout=1;
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
- while (!(TWCR & (1<<TWSTO)) && timeout);//wait for stop to be sent+ while (!(TWCR & (1<<TWSTO)) && timeout) //wait for stop to be sent
  timeout++;  timeout++;
  if(!timeout)  if(!timeout)
Line 42: Line 42:
  TWDR = c; //load the data  TWDR = c; //load the data
  TWCR = (1<<TWINT)|(1<<TWEN);  TWCR = (1<<TWINT)|(1<<TWEN);
- while (!(TWCR & (1<<TWINT)) && timeout);//wait for it to be sent+ while (!(TWCR & (1<<TWINT)) && timeout) //wait for it to be sent
  timeout++;  timeout++;
  if(!timeout)  if(!timeout)
Line 113: Line 113:
 u32 findtop() //Find the address of record number where we enter painted eeprom u32 findtop() //Find the address of record number where we enter painted eeprom
 { {
- u32 top=12*((u32)(((u32)1<<16)/12)); //half way through rounded down to nearest 12 + u32 top=12*((u32)1<<13); //half way through rounded down to 12 
- u08 n+ u08 n,endcond=TRUE; 
- u08 endcond=TRUE; //used to solve the problem of running with n=0 + u16 place=1<<13;
- u16 place=5461;+
  for(n=14;endcond;) //start by probing half way through - place is in records  for(n=14;endcond;) //start by probing half way through - place is in records
  {  {
Line 123: Line 122:
  n--; //need to decr here to get 1 byte resolution  n--; //need to decr here to get 1 byte resolution
  else  else
- endcond=FALSE; //terminate the loop after completion+ endcond=FALSE; //terminate the loop after completion //need to decr here to get 1 byte resolution
  i2cstart(); //read the slave  i2cstart(); //read the slave
  i2cwrite(SLA_R);  i2cwrite(SLA_R);
  if(i2cread(_NAK_)==MAGIC_NUMBER) //see if its painted  if(i2cread(_NAK_)==MAGIC_NUMBER) //see if its painted
- place&=~(1<<n); //set or clear the nth bit in the place holder + place&=~(1<<n); //clear the nth bit in the place holder 
- else + if(n) 
- place|=(1<<n);+ place|=(1<<(n-1)); //set the next bit
  i2cstop();  i2cstop();
  if(place>10922)  if(place>10922)
Line 135: Line 134:
  top = 12*( (u32)place ); //place is in units of 12  top = 12*( (u32)place ); //place is in units of 12
  }  }
 + set_address(&top);
 + i2cstart();
 + i2cwrite(SLA_R);
 + if(i2cread(_NAK_)!=MAGIC_NUMBER) //check the location to make sure its blank
 + place++;
 + top = 12*( (u32)place );
  return top;  return top;
 } }
code/i2c_eeprom.1228365888.txt.gz · Last modified: 2008/12/04 04:44 by laurenceb

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki