Forum: Compiler & IDEs DAC Steuerung mittels SPI


von Marco Lehmann (Gast)


Lesenswert?

Hallo,

ich habe meinen 8535 mit einem TLC5620 (4x8bit DAC, serieller transfer) 
verbunden und habe folgendes Problem: mit codevision compiler kompiliert 
funktioniert der Transfer, die selbe Routine mit avr-gcc funktioniert 
nicht. codevision hat eine eingebaute spi funktion (hardware), diese 
habe ich dann in avr-gcc nachgebildet. Leider funktionierts aber nicht, 
ich hoffe, irgendjemand findet vielleicht den Fehler.


#define SPI_MASTER_SETUP() 
outp(BV(SPIE)|BV(SPE)|BV(MSTR)|BV(SPR0)),SPCR);

void SPI_send(uint8_t data)  {
      outp(data,SPDR);
      loop_until_bit_is_set(SPSR,7);
      inp(SPDR);
}

void send_dac(uint8_t dac, uint8_t val)
{
      sbi(PORTB,PB4); //load_dac=1;
      if (dac>3) dac=3;
      SPI_send(dac*2); // send first dac selector
      delay_us(4);
      SPI_send(val); // give the dac the needed value;
      cbi(PORTB,PB4); //load_dac=0;
      delay_us(8);
      sbi(PORTB,PB4); //load_dac=1;
}

load_dac ist der PB4, der die Aktualisierung beim DAC erzeugt (LOAD), 
der DAC läuft im Load controlled mode (LDAC=low), LOAD muss nach senden 
der Daten kurz (mind. 250 ns) auf low gehen.

sei() folgt dann im Hauptprogramm


Marco Lehmann

von Marco Lehmann (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mal das datasheet des TLC5620 angehängt, falls jemand mal 
reinsehen möchte. Ich werde heute nochmal den codevision avr 
installieren und mir mal den assembler output der funktionierenden 
Version ansehen. Vielleicht habe ich was übersehen.

ach ja, delay_us macht nichts anderes, als nops auszuführen (je 2 pro us 
bei 7,... MHz Takt)

von André B. (andrebiedermann)


Lesenswert?

Hat jemand ein Beispielcode zur Ansteuerung des TLC5620 in Codevision
für mich? Bin relativ neu dabei.

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.