AT90CAN!28 / LTC1257, Ausgabe von ADC Werten über den DAC

OP (Firma: ixwyc) #947868
Lesenswert?
• ▲
▼
Moin,

ich versuche das mit dem ADC Wandler eingelesen Signal vom AT90CAN128
über den DAC LTC1257 auszugeben. Angeschlossen ist der LTC 1257 wie
folgt:

PC0    LOAD
PC1    CLK
PC2    DATA

zum ansteuern verwende ich die bereits existierende und in dem Thread

Beitrag "LTC1257 Low Level Routinen"

behandelte Header Datei. Folgend auf meine Ports abgeändert:

//---------------------------------------------------------------------- 
-----------
// Digital Analog Wandler Initialisieren

#define DACOUT    PORTC
#define DACIN    PINC

/*
 * Port Konfiguration LTC1257
 *
 * PC0    LOAD
 * PC1    CLK
 * PC2    DATA
 *
 */

#define DACLOAD(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~_BV(PC0)):(DACIN | 
_BV(PC0))
#define DACCLK(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~_BV(PC1)):(DACIN | 
_BV(PC1))
#define DACDATA(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~_BV(PC2)):(DACIN | 
_BV(PC2))

#define LATCHTIMING  0x01        /* spend some time to the latch  */

#define LEV_LOW    0
#define LEV_HIGH  1

inline void DAC_init(void);
inline void DAC_send(unsigned int);

/*
 * Low level initialisation routine for LTC1257.
 */

inline void DAC_init(void)
{
  /* Initial port/pin state */
  DACCLK(LEV_LOW);        /* clock pin low -> idle  */
  DACLOAD(LEV_HIGH);        /* load pin high -> idle  */
}

/*
 * Low level write routine for LTC1257.
 * Awaits data in unsigned integer format
 * 12 bits masked (0x800 masks the data's MSB)
 */


//---------------------------------------------------------------------- 
-----------
// Wert an Digital Analog Wandler uebertragen

inline void DAC_send(unsigned int data)
{
  volatile unsigned char bitctr = 0;

  for(bitctr = 0; bitctr < 0x0C; bitctr++)
  {
    DACDATA(data & 0x800);      /* output MSB (bits [11..0]!)    */
    data <<= 1;        /* shift next bit to MSB    */
    DACCLK(LEV_HIGH);      /* rising edge -> load bit    */
    DACCLK(LEV_LOW);      /* -> await rising edge      */
  }

  DACCLK(LEV_LOW);        /* clock pin low -> idle    */
  DACLOAD(LEV_LOW);        /* load pulled low -> output    */

  for (bitctr = 0; bitctr < LATCHTIMING; bitctr++)
    ;

  DACLOAD(LEV_HIGH);        /* load pulled high -> idle    */
}


Wie muß ich die eingelesenen Daten des ADC an den DAC geben.

Eingelesen werden die Werte mit dem Teilungsfaktor 128, gewählt durch
Berechnung. Danach habe ich mit der itoa Funktion daraus Dezimalwerte 
erzeugt. Diese Wasndlung scheint einwandfrei zu Funktionieren.

Ich hoffe mir kann jemand helfen.

Gruß Mike

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.