Forum: Compiler & IDEs Frage zur SPI-Kommunikation mit code


von Frank S. (mcufan)


Lesenswert?

Hallo,
ich möchte die Datenübertragung mit SPI von AT90usb1287 zum DA-Wandler 
(AD5666) realisieren. Jedoch wurden keine Takte auf SCLK-PIN (PB1) im 
MCU erzeugt.
 Und an den Ausgänge von AD5666 wurden auch keine Signale erzeugt 
(komisch~~~). Jemand weiß wieso? Im Voraus herzlichen Dank.


void SPI_Init()
{
  DDRB|=0x06; // SCLK und MOSI as output
DDRC|=_BV(PC3); //SYNC , PC3 as output
  SPCR=0x55;   /*SPI enable ,MSB first,Master select, SPI transfer 
format
  with CPHA=1 and CPOL=0, fosc/16=1M hz */
}

void AD5666(uint daword,uchar com,uchar chan) //chan is Channel number, 
com is   command in input register content
{
  uchar temp1,temp2,temp3;
  uint daword1;

  DDRC|=_BV(PC2); //LDAC
  PORTC|=_BV(PC2); //high LDAC, not update

  PORTC&=~_BV(PC3); //AD5666 select, --->low SYNC

  SPSR=0;   //clear stateregister
  SPDR=com;
  while(!(SPSR&(1<<SPIF)));

  temp1=(uchar)(daword>>12);
  temp1=temp1+(chan<<4);
  SPSR=0;
  SPDR=temp1;
  while(!(SPSR&(1<<SPIF)));

  SPSR=0;
  daword1=(daword<<4);
  temp2=(uchar)(daword1>>8);
  SPDR=temp2;
  while(!(SPSR&(1<<SPIF)));

  SPSR=0;
  daword&=0x000F; //transmit low 4 bits
  temp3=(uchar)(daword<<4);
  SPDR=temp3;
  while(!(SPSR&(1<<SPIF)));

  SPSR=0;
  PORTC|=_BV(PC3); //ad5666 not selected, high SYNC

  PORTC&=~_BV(PC2); //low LDAC, asynchronous LDAC update mode
  _delay_ms(0.01); //LDAC pulse width low, 10ns
  PORTC|=_BV(PC2);
}

void main()
{
  uint ddata;
     SPI_Init();
while (1)
  {
    ddata=65535;
AD5666(ddata,0x03,0); //channel 0
}
}

von holger (Gast)


Lesenswert?

> Und an den Ausgänge von AD5666 wurden auch keine Signale erzeugt
>(komisch~~~).

Setz SS mal auf Ausgang.

von Frank S. (mcufan)


Lesenswert?

holger wrote:
>> Und an den Ausgänge von AD5666 wurden auch keine Signale erzeugt
>>(komisch~~~).
>
> Setz SS mal auf Ausgang.


 SS (PB0) ist frei (keinen Anschluss). Trotzdem geht es denn doch?

von Frank S. (mcufan)


Lesenswert?

holger wrote:
>> Und an den Ausgänge von AD5666 wurden auch keine Signale erzeugt
>>(komisch~~~).
>
> Setz SS mal auf Ausgang.

SS wurde auf Ausgang gesetzt. Bei DA-Wandler gab  es noch kein 
Ausgangssignal. Wieso?

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.