Forum: Mikrocontroller und Digitale Elektronik At91sam7 (Twi) mit max1239


von Basti (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade mit einem Max1239 via At91sam7 zu kommunizieren.
Leider bekomme ich keine Daten.
Ich kann mir nicht erklären, warum der hier nicht so will wie ich es
gerne hätte. Hat da jemand evtl. eine Idee?
--------------------------------------------------------------
void startbit(void)
{
  SCL_SET_LOW;
  SDA_SET_HIGH;
  delay_us(Time_Twi);
  SCL_SET_HIGH;
  delay_us(Time_Twi);
  SDA_SET_LOW;
  delay_us(Time_Twi);
}

void stopbit(void)
{
  SCL_SET_LOW;
  SDA_SET_LOW;
  delay_us(Time_Twi);
  SCL_SET_HIGH;
  while(!SCl_IS_HIGH);
  delay_us(Time_Twi);
  SDA_SET_HIGH;
  delay_us(Time_Twi);
}

void Twi_Read_Byte(unsigned char* byte) {
  unsigned char i;

  SCL_SET_LOW;
  SDA_SET_HIGH;
  delay_us(Time_Twi);
  for (i=0;i<8;i++)
  {
    *byte<<=1;
    SCL_SET_HIGH;
    delay_us(Time_Twi);
    if((Twi_PIO->PIO_PDSR & SDA_MASK)==1) {
    *byte |= 0x01;
    }
    else {
    *byte &= ~(0x01);       //0xFF;
    }
    SCL_SET_LOW;

  }
  //9th cycle
  SCL_SET_LOW;
  SDA_SET_HIGH;
  delay_us(Time_Twi);
  SCL_SET_HIGH;
  while(!SCl_IS_HIGH);
  delay_us(Time_Twi);
}

void ADC_MAX1239_init(void)
{
  startbit();  // device address & write mode
  Twi_Send_Byte(0b10100010);                   // write Register
  Twi_Send_Byte(0b00010111);                   // write Register
  stopbit();                             // stop i2c
}

#define Adr_MAX1239  0b01101010

// MAX1239
void I2C_ADC_MAX1239(void)
{

unsigned int Data_Array_Messwert[11];

unsigned char   hig,low = 0;//
unsigned char i;


// I2C  MAX1239 - 12Bit ADC
 startbit();
 for ( i=0; i<=10;i++)
 {
  low  = Twi_Read_Byte();
  low &= ~((1 << 7) | (1<<6)| (1<<5)| (1<<4) );
  hig  = Twi_Read_Byte();
  Data_Array_Messwert[i] = ((low << 8)| hig);
  Data_Array_Messwert[i] = Data_Array_Messwert[i]*1.221001221;

 }
 stopbit();

}

Gruß

von Basti (Gast)


Lesenswert?

und????????

von basti (Gast)


Lesenswert?

Der Kompiler zeigt den Fehler :
"Multiple markers at this line
  - 'byte' undeclared (first use in this function)
  - each undeclared identifier is reported only once for each function 
it appears in" bei:

low  = Twi_Read_Byte();

von JMP (Gast)


Lesenswert?

Das wird daran liegen, dass Twi_Read_Byte() als void implementiert ist 
und damit keinen Wert zurückgibt.

Versuchs mal so: Twi_Read_Byte(&low);
und
Twi_Read_Byte(&hig);

von basti (Gast)


Lesenswert?

Danke  JMP. Aber trozdem geht nicht

von Martin Thomas (Gast)


Lesenswert?

In der AT91LIB (kostenlos von atmel.com) ist brauchbarer Code für I2C 
inkl. Beispiel enthalten. Ist allerdings für das integrierte Hardware 
TWI der AT91-controller und somit an bestimmte Pins gebunden. Falls 
diese Pins verfügbar sind, ist der Nachbau eines Software-TWI 
überflüssig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.