mikrocontroller.net

Forum: Projekte & Code LTC1257 Low Level Routinen


Autor: OldBug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: OldBug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Autor: OldBug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hm, war wohl doch schon etwas Spät letzte Nacht...

Hier eine Funktionsfähige Version...

Gruß,
Patrick...

Autor: OldBug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Korrektur...

Autor: Markus Sommavilla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Danke

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Markus Sommavilla (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das schaut gut aus, danke

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: beta-frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Parr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
PORTC = PORTC | (1<<DATA)

Was wäre der  Unterschied zu :
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
(DACIN | _BV(PC4))
 ausgeführt, also das Bit GESETZT? Ist dies so korrekt ?
danke :)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Lupin (Gast)
Datum:

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

Autor: Martin Parr (Gast)
Datum:

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

bis denne

Autor: Andi B. (andi23528)
Datum:

Bewertung
0 lesenswert
nicht 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/do...

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

Autor: Andreas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

anbei die Sourcen von OldBug auf einen LTC1661 umgebaut.

Gruß Andreas

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bitwurbler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.