PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DAC Ansteuerung AT-Mega 16 Code-Beispiel gesucht (Assembler)



relaxer
11.07.2006, 21:17
Hi Leute,

könnt ihr mir ein Beispiel Program zu schicken,
ich habe nämlich keinen Schimmer wie ich mit einem AT-Mega 16 einen 12Bit-DAC (DAC7611) professionell ansteuere.


Datenblätter

AT-Mega16
http://pdf1.alldatasheet.com/datasheet-pdf/view/78532/ATMEL/ATmega16.html

12-DAC 7611:
http://pdf1.alldatasheet.com/datasheet-pdf/view/56629/BURR-BROWN/DAC7611.html


Vielen Dank!

chouifi
20.07.2006, 14:40
Hallo,
ich habe auch dies Problem.....wer kann uns helfen..?
Majid

relaxer
27.07.2006, 19:54
Hab mittlerweile das Problem gelöst.
Primitiv, aber es funktioniert mit jedem DAC (8Bit, 10 Bit...)

Wäre aber schneller gegangen, wenn sich jemand bereit erklärt hätte uns zu helfen.

:-((((( bin zu tiefst entäuscht!!!!!!


Funktionsweise:
8Bit-DAC bedeutet soviel, dass wenn ich dem Baustein seriell 8 Nullen (0b00000000 bzw. 0x00) zu schicke, am Ausgang 0V anliegt.
Sende ich dem DAC-Baustein 8 Einsen (0b11111111 bzw. 0xFF), so liegt am Ausgang die "Versorgungsspannung" z.B. 5V an.

8-bit: 2 hoch 8 = 256 (12Bit in 4096)

Ein 8-bit DAC kann somit die Spannung von 5V in 256 Teilen zerlegen bzw. darstellen.
5V / 256 = 0.020V -> 20mV Schritte (0b00000001 = 20mV am Ausgang)

Überlegung:
Ich muss also dem DAC Baustein irgendwie die einzelnen Bits "1" oder "0" zuschicken und dass 12 mal für 12Bit.... schaut euch einfach den Quellcode an

Pin Beschreibung:
SDI = Datenleitung, was hier anliegt "1" oder "0" wird mit jedem Takt in das Shift Register geschoben
CLK = Taktleitung um die SDI Zustände in das Shift Register zu schieben
CS = Liegt dieser Pin auf High, funktioniert der Takt-Pin CLK nicht, damit können mehere DACs geziehlt angesprochen werden
LD = Load; Läd die im Shiftregister enthaltene Info (bits) in das DAC Register das die Ausgangsspannung definiert
CLR = Setzt das DAC Register auf Null



;Funktionsweise:
;---------------------------------------------------------------------------------
;- CLR auf High (Festverdrahtung)
;- Loadpin (LD) auf Low setzten, DAC Ausgang „aus“
;- CS auf Low um den DAC-Chip auszuwählen
;- Bits im Register (temp/temp2) mit 0 oder 1 vergleichen und je nachdem SDI setzten.
;- CLK an/aus für SDI Übernahme
;- Bits im Register (temp/temp2) schieben um das nächste Bit mit 1 oder 0 zu vergleichen und auszugeben
;- Loadpin (LD) auf High, für die Darstellung der Bits am Ausgang als Spannung (Volt)



;DAC Steuerleitungen
;---------------------------------------------------------------------------------
.equ SCL = PC0 ;Clock-Pin
.equ SDI = PC1 ;Daten-Pin
.equ LOAD = PC2 ;Daten ins DAC-Register laden
.equ CS = PC3 ;Chip-Select DAC1/2 -Auswahl (aktive Low)

;Register
;---------------------------------------------------------------------------------
.def temp = r16
.def temp2 = r17
.def zaehler = r18


DAC1_out_12Bit:
;---------------------------------------------------------------------------------
ldi temp2, 0b00001111 ; R16 + R17 => 12 Bit
ldi temp, 0b11111111 ; R17 => 8Bit

cbi PortC, Loadpin ;deaktiviere Übernahme der Daten aus dem DAC Register
cbi PortC, CS

mov R1, R16 ;kopiert den Inhalt von R16 in R1


;Schleife1
;---------------------------------------------------------------------------------
ldi R18, 0x04 ;Oberes Nibble des Registers R16 0b00001111
loop_4Bit:
sbrc R9, 3 ;Überspringe wenn bit 3 Null "0" ist
sbi PortC, SDI ;“1“ an SDI

sbrs R9, 3 ;Überspringe wenn bit 3 Eins "1" ist
cbi PortC, SDI ;“0“ an SDI

; SCL Takten
sbi PortC, SCL ;”1” an SCL
cbi PortC, SCL ;”0” an SCL

lsl R1 ;Inhalt des Registers R1 um 1 Stelle nach links schieben

dec zaehler ;Zählregister 0x04 - 1
brne loop_4Bit ;Springe wenn nicht „0“


;Schleife2 das gleiche noch mal, nur mit temp2
;---------------------------------------------------------------------------------
mov R1, temp2

ldi zaehler, 0x08
loop_8Bit:
sbrc R9, 7
sbi PortC, SDI

sbrs R9, 7
cbi PortC, SDI

sbi PortC, SCL
cbi PortC, SCL

lsl R9

dec zaehler
brne loop_8Bit
;---------------------------------------------------------------------------------
cbi PortC, Load ;Daten die ins Shiftregister getaktet wurden,
sbi PortC, Load ; in das DAC-Register übernehmen

ret


Es gibt bestimmt eine bessere Lösung, aber bis dahin ;-)


Viel Spass!

chouifi
08.08.2006, 12:58
danke,
es war sehr hilfreich.
bis dann
majid