Moin, ich versuche das mit dem ADC Wandler eingelesen Signal vom AT90CAN128 über den DAC LTC1257 auszugeben. Angeschlossen ist der LTC 1257 wie folgt: PC0 LOAD PC1 CLK PC2 DATA zum ansteuern verwende ich die bereits existierende und in dem Thread Beitrag "LTC1257 Low Level Routinen" behandelte Header Datei. Folgend auf meine Ports abgeändert: //---------------------------------------------------------------------- ----------- // Digital Analog Wandler Initialisieren #define DACOUT PORTC #define DACIN PINC /* * Port Konfiguration LTC1257 * * PC0 LOAD * PC1 CLK * PC2 DATA * */ #define DACLOAD(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC0)):(DACIN | _BV(PC0)) #define DACCLK(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC1)):(DACIN | _BV(PC1)) #define DACDATA(LEVEL) DACOUT = (LEVEL) ? (DACIN & ~_BV(PC2)):(DACIN | _BV(PC2)) #define LATCHTIMING 0x01 /* spend some time to the latch */ #define LEV_LOW 0 #define LEV_HIGH 1 inline void DAC_init(void); inline void DAC_send(unsigned int); /* * Low level initialisation routine for LTC1257. */ inline void DAC_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 masked (0x800 masks the data's MSB) */ //---------------------------------------------------------------------- ----------- // Wert an Digital Analog Wandler uebertragen inline void DAC_send(unsigned int data) { volatile unsigned char bitctr = 0; for(bitctr = 0; bitctr < 0x0C; bitctr++) { DACDATA(data & 0x800); /* output MSB (bits [11..0]!) */ 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 */ } Wie muß ich die eingelesenen Daten des ADC an den DAC geben. Eingelesen werden die Werte mit dem Teilungsfaktor 128, gewählt durch Berechnung. Danach habe ich mit der itoa Funktion daraus Dezimalwerte erzeugt. Diese Wasndlung scheint einwandfrei zu Funktionieren. Ich hoffe mir kann jemand helfen. Gruß Mike
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.