- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 1 von 1

Thema: MCP41HVx

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174

    MCP41HVx

    Anzeige

    E-Bike
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken DSC_0662.jpg   DSC_0663.jpg  
    Angehängte Dateien Angehängte Dateien
    Geändert von avr_racer (04.02.2016 um 19:03 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen