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







Zitieren

Lesezeichen