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
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.