Hallo Bastler,
im Anhang die Ansteuerung eines MCP41HVx-Potis. Warum dieses ?? Vorteil ist, es kann mit +-18V oder 0 - 36V an den Potipins betrieben werden und ist damit recht gut geeignet um zum Beispiel als Feedback bei einem LM2596ADJ zu dienen. nen ganz kleinen Hacken gibts... leider nur in SSOP14 erhältlich. Aber auch hier gibs schon Lösungen im Netz in dem man sich Adapterplatinen kauft. Fürn schmalen Taler gibs da 12 Stück für unter 5€. Ruhige Hand vorrausgesetzt..  
 
Auch hier habe ich versucht darauf zu achten, dass die Plattform nicht nur an einen µC gebunden ist.
Als erstes wieder den "ausgeblendeten" Kopf in die Init kopieren und an eigene Bedürfnisse anpassen. 
!!!!  MCP_xyz2 brauch nicht genutzt zu werden falls alles an einen Port passt. 
Sonst anpassen in 
   MCP41HVX_wlat
   MCP41HVX_shdn_off
   MCP41HVX_shdn_on.
Achsooo auf einen ReadCommand hab ich verzichtet da die Rückmeldung, wenn alles korrekt übersand worden ist, immer ein $FF zurück kommt siehe Datenblatt TABLE 7-2. Dachte mir das man vllt damit die aktuelle Wiperstellung auslesen kann aber irgendwie war ich da auf dem Holzweg.
http://pdf1.alldatasheet.com/datashe...MCP41HVX1.html
	Code:
	/*
;*********************MCP41HVX
.equ	MCP41_ddr	= ddrb
.equ	MCP41_port	= portb
.equ	MCP41_pin	= pinb
.equ	MCP41_ddr2	= ddrd
.equ	MCP41_port2	= portd
.equ	MCP41_pin2	= pind
.equ	CS1			= 0		;0 = Chip aktiv			; 1 = Chip deaktiviert
.equ	MOSI		= 3		; Master out (TX) 
.equ	MISO		= 4		; Master in  (RX)
.equ	SCK			= 5		; Taktgenerierung
	
.equ	WLAT		= 6		;0 = übernahme aktiv	; 1 = ****
.equ	SHDN		= 7		;0 = shdn aktiviert 	; 1 = shdn deaktiviert
;Commands
.equ	incwip		= 4		;(8bits)
.equ	decwip		= 8		;(8bits)
.equ	writeD		= 0		;(16bits)
.equ	readD		= 12	;(16bits)
.equ	CMD_Wiper	= 00
.equ	CMD_TCON	= 04
;.equ	RESERVED	= 01-03
;.equ	RESERVED	= 05-15
*/
;*********************PortInit für MCP41HVX
MCP41HVX_Init:
		in			temp0,MCP41_ddr2
		ori			temp0,(1<<WLAT|1<<SHDN)
		out			MCP41_ddr2,temp0						;Konfig DDR
		in			temp0,MCP41_port2
		ori			temp0,(0<<WLAT|1<<SHDN)					;Konfig WLAT = 0 = Ständige Datenübernahme
		out			MCP41_port2,temp0						;Konfig SHDN = 1 = CHIP an
		in			temp0,MCP41_ddr
		ori			temp0,(1<<CS1|1<<MOSI|0<<MISO|1<<SCK)	;Konfig DDR
		out			MCP41_ddr,temp0
		in			temp0,MCP41_port						;CS 	= 1 nicht angewählt
		ori			temp0,(1<<CS1|0<<MOSI|1<<MISO|1<<SCK)	;MOSI	= 0 Pegel egal
		out			MCP41_port,temp0						;MISO	= 1	Pullup aktiv da Eingang 
		clr			xl
		rcall		MCP41_wip_change
		ret
;****************CHANGE WIPE with inc/dec(8Bit) or with 16Bit*****************
;Wiper + 
MCP41_incwip:
		rcall		MCP41HVX_cs_off			;chip abwählen
		ldi			xl,incwip				;incWert laden +
		ldi			cnt,$08					;Counter auf 8 setzen
		rcall		send_Data_MCP41			;Byte senden
		rcall		MCP41HVX_cs_on			;chip anwählen
		ret
;Wiper -
MCP41_decwip:
		rcall		MCP41HVX_cs_off			;chip abwählen
		ldi			xl,decwip				;decWert laden -
		ldi			cnt,$08					;Counter 8 setzen
		rcall		send_Data_MCP41			;BYte senden
		rcall		MCP41HVX_cs_on			;chip anwählen 
		ret
;16Bit Word, XH = Adress XL = Data
MCP41_wip_change:
		rcall		MCP41HVX_cs_off			;chip anwählen
		ldi			xh,CMD_Wiper			;WiperCMD laden ($00) da nur ein Poti 
		ldi			cnt,$10					;Counter mit 16($10)
		rcall		send_Data_MCP41_16		;Word senden
		rcall		MCP41HVX_cs_on			;chip anwählen
		ret
;******************DATA_SEND*************************
;Send-8bit
Send_Data_MCP41:		
		sbrc		xl,7				;Bit 7 = 1?
		sbi			MCP41_port,MOSI
		sbrs		xl,7				;Bit 7 = 0?
		cbi			MCP41_port,MOSI
		rcall		MCP41HVX_SCK		;clocken
		lsl			xl					;links shiften <<<<<
		dec			cnt					;-1
		brne		Send_Data_MCP41		;jmp Label
		ret					
;SEND-16bit
Send_Data_MCP41_16:		
		sbrc		xh,7				;Bit 7 = 1 ?
		sbi			MCP41_port,MOSI
		sbrs		xh,7				;Bit 7 = 0 ?
		cbi			MCP41_port,MOSI
		rcall		MCP41HVX_SCK		;clocken
		lsl			xl					;links shiften <<<<<
		rol			xh					;links rotieren
		dec			cnt					; 16x -1
		cpi			cnt,$00
		brne		Send_Data_MCP41_16	;jmp Label
		ret
;*************************MCP41_UProgs
;MODE 1,1 = SCK = 1 u CS = 1 = Startbedingungen
;MODE 0,0 = SCK = 0 u CS = 1 = Startbedingungen
MCP41HVX_SCK: ;Clock generieren
		cbi			MCP41_port,SCK
		nop
		nop
		nop
		sbi			MCP41_port,SCK
		ret
MCP41HVX_wlat: ;Wlat ist zuständig um idealerweise im Nulldurchgang neuen Potiwert zu laden externe Schaltung zur ZeroCrossDetection notwendig
		cbi			MCP41_port2,wlat		;off
		nop
		nop
		nop
		nop
		sbi			MCP41_port2,wlat		;on
		ret
MCP41HVX_shdn_off: ;SHDN wird mit 1 deaktiviert
		sbi			MCP41_port2,shdn		;off
		ret
MCP41HVX_shdn_on:  ;SHDN wird mit 0 aktiviert
		cbi			MCP41_port2,shdn		;on
		ret
;MODE 1,1
MCP41HVX_cs_off:	;ChipSelect = 0 = Chip select
		cbi			MCP41_port,CS1
		ret
MCP41HVX_cs_on:		;ChipSelect = 1 = Chip not select
		sbi			MCP41_port,CS1
		ret
 
						
					
Lesezeichen