Forum: Mikrocontroller und Digitale Elektronik atmega mit nicht spi anschluss


von strom (Gast)


Angehängte Dateien:

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

von Gast (Gast)


Lesenswert?

Was funktioniert nicht?

von strom (Gast)


Lesenswert?

Na am Ausgang von pc0 kommt kein clock und bei pc1 kommt garnix und bei 
pc2 kommt nur hight..

und damit kommt der Dac nicht im laufen.

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.