mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega mit nicht spi anschluss


Autor: strom (Gast)
Datum:
Angehängte Dateien:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was funktioniert nicht?

Autor: strom (Gast)
Datum:

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

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.