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!
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...
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...
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
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
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?
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
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
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 :)
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
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
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.
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.