atmega mit nicht spi anschluss

Gast #1447416
Lesenswert?

Hallo Leute,

ich habe einen atmega 32 und möchte den mit dem dac(ltc1257)
anschliessen..so was ähnliches war mal hier bei Forum :

Beitrag "LTC1257 Low Level Routinen"

der Code ist auch am Anhang:

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#include "ltc1257.h"

int sawtooth = 0;        //0 enspricht 2.043V, 4095 entspricht 0V
inline void ioinit(void);


void timer (void) {


  TCCR0 = _BV(CS01) | _BV(CS00);  //clock 250 khz
  TCNT0 = 225;
  TIMSK = _BV(TOIE0);
  sei ();

}

int main(void)
{
  DDRD  = 0xff;               // alle Pins an Port D als Ausgang

  ioinit();            //
  ltc1257_ll_write(sawtooth);    // Sägezahn
  timer();            //
  return 0;
}


inline void
ioinit(void)
{
  /* IO setup: */
  DDRC = (1 << PC2) | (1 << PC1) | (1 << PC0);  /* LTC1257 pins (output) 
*/

  /* Low-level init of DAC: */
  ltc1257_ll_init();
}

dazu ist das head-datei:

#define DACOUT    PORTC
#define DACIN    PINC

/*
 * Port configuration:
 *
 * Port pin  LTC1257
 * --------------------
 * PC3    LOAD
 * PC4    DATA
 * PC5    CLK
 *
 */

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

#define LEV_LOW 0
#define LEV_HIGH 1

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

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

extern inline void
ltc1257_ll_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 left-justified.
 */

extern inline void
ltc1257_ll_write(unsigned int data)
{
  volatile unsigned int bitctr = 0;

  for(bitctr = 0; bitctr < 0x0C; bitctr++)
  {
    DACDATA(data & 0x8000);    /* output MSB (bits [15..4]!)  */
    data = 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    */
}

der Code habe ich auf die obere genante seite gefunden leider kompiliert 
nur bei mir und mit dem dac ist nicht funktionsfähig...
Mein ziel ist halt eine lineare Spanung nach den Codwerte zu geben..

Könnte mir jemenden in diesem Fall helfen...?

MfG
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren