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...
Hm, war wohl doch schon etwas Spät letzte Nacht... Hier eine Funktionsfähige Version... Gruß, Patrick...
Hi, was meinst du mit "Set the BITx makros" und wie mach ich das? Bin Anfänger in C. Danke
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
@Markus, der DAC-Wert muß je nach ltc1257.h-Version links oder rechts-justified sein. Vielleicht liegt da der Hase im Pfeffer? Gruß Frank
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 :)
Wofür benutzt ihr den LTC1257 denn? Kann mir gerade gar keine Verwendung für einen so langsamen DAC vorstellen.
Ich verwende ihn dazu, viele DAC-Ausgänge (Minimum 4) in DaisyChain mit nur 3 Pins anzusteuern. bis denne
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.
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.