LTC1257
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Der LTC1257 ist ein 12 Bit DA-Wandler mit serieller Ansteuerung.
Beispielprogramm
Ich möchte hier mal ein kleines Beispiel zur Verwendung der LTC1257-C-Routinen beisteuern. Das Programm erzeugt mit Hilfe des LTC1257 einen Sägezahn über dessen gesamten Ausgangsspannungsbereich in 4096 Schritten (= 12bit). Der LTC1257 wird dabei mit der maximal möglichen Geschwindigkeit angesteuert. Verwendet wird ein ATMega8 und ein LTC1257, der an den Pins PC3, PC4 und PC5 des ATMega8 angeschlossen ist.
- Hardware Konfiguration in der ltc1257.h:
/*
* Port, where LTC1257 is connected to:
* PORTC/PINC
*/
#define DACOUT PORTC
#define DACIN PINC
/*
* Port configuration:
*
* Port pin LTC1257
* --------------------
* PC3 LOAD
* PC4 DATA
* PC5 CLK
*
*/
#define DACCLK(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC5)):(DACIN | _BV(PC5))
#define DACDATA(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC4)):(DACIN | _BV(PC4))
#define DACLOAD(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC3)):(DACIN | _BV(PC3))
#define LATCHTIMING 0x01 /* spend some time to the latch */
- Hauptprogramm:
#include <avr/io.h>
#include "ltc1257.h"
/* Prototypes: */
int main(void);
inline void ioinit(void);
int
main(void)
{
unsigned int sawtooth = 0;
ioinit();
while(1)
{
/* Sawtooth-function: */
if (sawtooth++ == 4095)
sawtooth = 0;
/* Write actual value to DAC: */
ltc1257_ll_write(sawtooth);
}
/* NEVEREACHED */
return 0;
}
inline void
ioinit(void)
{
/* IO setup: */
DDRC = (1 << PC3) | (1 << PC4) | (1 << PC5); /* LTC1257 pins (output) */
/* Low-level init of DAC: */
ltc1257_ll_init();
}
Das gesamte Beispiel gibts zum Download!