mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90CAN!28 / LTC1257, Ausgabe von ADC Werten über den DAC


Autor: Mike G. (Firma: ixwyc) (balu1980)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.