Forum: Projekte & Code LTC1257 Low Level Routinen


von OldBug (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Hier mal eine recht "Portable" Lösung zum kommunizieren mit dem
LTC1257.

Einfach in "Configuration section" die Entsprechenden Ports/Pins bei
den #defines eintragen, ltc1257.h im eigenen Projekt inkludieren, Ports
initialisieren, ltc1257_ll_init() aufrufen und schon kanns losgehen.
Nach dem Aufruf von ltc1257_ll_init() könnt ihr mit
ltc1257_ll_write(datenbits) den LTC dazu veranlassen, die entsprechende
Spannung auszugeben. "datenbits" müssen in den Bits [16..5]
(left-justified) übergeben werden.

Viel Spaß damit...
Gruß,
Patrick...

P.S.: Vielen Dank an mmerten für's draufschauen und die Idee, aus nem
right-justified uint einen left-justified zu machen!

von OldBug (Gast)


Angehängte Dateien:

Lesenswert?

Eieiei, und schon nen "Major-Bug" gefunden :-)

Hab zwei #defines vergessen, "LEV_HIGH" und "LEV_LOW".
Der Vollständigkeit halber noch mal im Anhang.

Gruß,
Patrick...

von OldBug (Gast)


Angehängte Dateien:

Lesenswert?

Hm, war wohl doch schon etwas Spät letzte Nacht...

Hier eine Funktionsfähige Version...

Gruß,
Patrick...

von OldBug (Gast)


Angehängte Dateien:

Lesenswert?

Noch eine Korrektur...

von Markus Sommavilla (Gast)


Lesenswert?

Hi,

was meinst du mit  "Set the BITx makros" und wie mach ich das?
Bin Anfänger in C.

Danke

von OldBug (Gast)


Lesenswert?

Hi Markus!

Also:
#define DACOUT    P1OUT
#define DACIN    P1IN

P1OUT und P1IN müssen an Deinen Port angepasst werden.

#define DACCLK(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~BIT0)...
#define DACDATA(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~BIT1)...
#define DACLOAD(LEVEL)  DACOUT = (LEVEL) ? (DACIN & ~BIT2)...

Hier muss für jeden Eintrag von BIT0 bis BIT2 das Richtige Makro für
die Entsprechenden Port-Pins eingesetzt werden.
Schreib doch mal, wie Du den LTC1257 an Deinen (welchen?) Prozessor
anschliesst, dann mache ich ein Beispiel dazu.

P.S.: Für LATCHTIMING sollte ein Wert von 0x01 oder 0x02 völlig
ausreichend sein...

von Markus Sommavilla (Gast)


Lesenswert?

Hi,

danke für deine Antwort.

Ich benutze für die Ansteuerung des LTC1257 den ATmega8 mit den Pins,
26 (LOAD, PortC3), 27 (DIN, PortC4), 28 (CLK, PortC5).
(mein Ziel wäre es eine Sägezahnspannung zu erzeugen, 0-5V, 2s
Anstiegszeit)

Ein Beispiel wäre echt hilfreich,
vielen Dank schon mal

von OldBug (Gast)


Lesenswert?

Schau mal ins Wiki:

http://www.mikrocontroller.net/wiki/LTC1257

Den Spannungsbereich musst Du allerdings selber festlegen, und um die
Anstiegszeit anzupassen, solltest Du Dich etwas mit Timern
beschäftigen, das war mir für ein Beispiel jetzt zu viel arbeit g

von Markus (Gast)


Lesenswert?

das schaut gut aus, danke

von OldBug (Gast)


Lesenswert?

Wäre schön mal zu hören, wie das mit "echter" Hardware Funktioniert.
Hab das alles nämlich nur Stur nach Datenblättern und Simulator
Programmiert.
Vielleicht machst Du ja auch mal nen Screenshot vom Oszilloskop?

von markus (Gast)


Lesenswert?

Hallo Oldbug,

Hab jetzt dein LTC1257 Programm mit "echter HW" probiert,
funktioniert aber noch nicht ganz so wie's soll. Ausdruck hab leider
keinen, aber ich  versuchs zu beschreiben.

Schaut aus wie eine -e Fkt., am anfang fällt sie langsam zum schluß
steiler -> sprung wieder auf max wert, langsamer abfall, steiler
abfall..

Habs mit einem ATmega8 mit 1Mhz probiert

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Ich verwende den ATmega8 mit internen 4MHz, die ltc1257.h funktioniert
bei einmaliger Wandlung bestens, auch bei mehrmaliger Wandlung wenn ich
eine Sägezahnspannung mit großer  Schrittweite (1/10) ausgebe.
ABER: Wenn die Schrittweite verfeinert wird (1/4096) erhalte ich immer
noch eine Sägezahnspannung, aber mit relativ vielen einzelnen Punkten
die abweichen.

Zusätzliche Pull up Wdst., sowie eine Veränderung der Latchtime oder
Frequenz haben keine Verbesserung gebracht.
Nur eine Verringerung der Schrittzahl bringt Besserung.

Hat jemand vielleicht eine Idee woran das liegen könnte?

Gruß
Markus

von beta-frank (Gast)


Lesenswert?

@Markus,

der DAC-Wert muß je nach ltc1257.h-Version links oder rechts-justified
sein. Vielleicht liegt da der Hase im Pfeffer?

Gruß Frank

von Martin Parr (Gast)


Lesenswert?

Hallo,

>#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))

Welchen Unterschied macht es eigentlich ob ich auf der rechten Seite 
DACIN oder DACOUT verwende. Bisher las ich Portausgänge auch über z.B. 
PORTC:
z.B.
1
PORTC = PORTC | (1<<DATA)

Was wäre der  Unterschied zu :
1
PORTC = PINC | (1<<DATA)

so wird es ja hier verwendet , oder?

Noch eine kleine Frage zu diesem Tutorial/Code:
>DACOUT = (LEVEL) ? (DACIN & ~_BV(PC4)):(DACIN | _BV(PC4))
Wenn Level=0 ist (also ein 0-Bit übertragen werden soll),  dann wird 
doch der zweite Block also
1
(DACIN | _BV(PC4))
 ausgeführt, also das Bit GESETZT? Ist dies so korrekt ?
danke :)

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Lupin (Gast)


Lesenswert?

Wofür benutzt ihr den LTC1257 denn? Kann mir gerade gar keine Verwendung 
für einen so langsamen DAC vorstellen.

von Martin Parr (Gast)


Lesenswert?

Ich verwende ihn dazu, viele DAC-Ausgänge (Minimum 4) in DaisyChain mit 
nur 3 Pins anzusteuern.

bis denne

von Andi B. (andi23528)


Lesenswert?

Hallo,

kann mir mal bitte einer genau erklären wie ich den von Old Bug 
gepostete
Code verwenden kann.
Ich bin noch Anfänger und kann im Moment noch leider nichts damit 
anfangen.

Ich benutze einen MC9S12XDP512MAL und möchte über den LTC1257 Spannungen 
von 5V bis zu 1mV ausgeben.

http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC9S12XDP512V2.pdf

Wie genau muss ich denn vorgehen bzw. was muss ich im Code von Old Bug 
verändern, um ihn verwenden zu können?


Könnte mir da bitte jemand ein wenig helfen?
Danke schon mal

Grüße

Andi

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei die Sourcen von OldBug auf einen LTC1661 umgebaut.

Gruß Andreas

von Thorsten (Gast)


Lesenswert?

Hi an alle,
wenn ich ganz schnell mit ltc1257_ll_write(); einen Wert auf den LTC1257 
ausgebe, so kann ich mit meinem Messgerät immer eine Spannung von ca. 1 
Volt messen. Mir hat es den Anschein, dass der LTC1257 kurzzeitig auf 
die vollen 2,048Volt regelt bevor er den eingestellten Wert ausgibt.
Das Problem zeigt sich, wenn ich eine LED Dimmen möchte. Diese Leuchtet 
immer hell auf, auch wenn keine Spannung ausgegeben werden sollte.

Vielleicht kennt jemand das Problem
Gruß Thorsten

von Bitwurbler (Gast)


Lesenswert?

Hmm... Wieviel Bit schickst du ihm? 16? Wenn ich das richtig sehe 
braucht er aber nur 12, das heißt du mußt die Bits mitzählen und dann 
entsprechend /Load schalten. Liegt die vielleicht auf nem falschen Port? 
Und bist auch sicher das es die volle Spg ist? Ich könnte mir vorstellen 
das er das Bitmuster einfach um vier weiterschiebt und dadurch entsteht 
dann die 16-fache Spg.

von Ich (Gast)


Lesenswert?

Mal was anderes: Wie linear istn der 1257 in der Praxis? Ich habe mit 
nem MCP4922 jetzt nicht die besten Erfahrungen gemacht, um nen Netzteil 
0..15V vernünftig zu steuern geht's grad noch so. Im unteren Bereich 
liegt er unterhalb der Nennspannung, im mittleren passt' so la la und im 
oberen liegt er oberhalb der Nennspannung. Ich dachte zuerst der Fehler 
läge bei mir, Dave Jones hat aber genau die gleiche Unlinearität in 
seinem Selbstbau-AVR Netzteil festgestellt.
Der LTC1257 ist recht teuer und bietet nur einen Ausgangsspannung an.
Würde mich freuen wenn jemand was dazu schreiben würde.

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.