atmega mit nicht spi anschluss

Gast #1447416
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.