|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mucek.g Novinec
Pridružen/-a: Tor Feb 2014 21:25 Prispevkov: 6
|
Objavljeno: Tor Mar 18, 2014 8:23 pm Naslov sporočila: MCP41HV31 digitalni potenciometer |
|
|
Lep pozdrav!
Jure je na svojem blogu objavil članek o tem digitalnem potenciometru in navdušil tudi mene ... Spodaj koda za igranje, sam sem uporabil HW SPI, komentirana je tudi koda za SW SPI ...
Me pa zanima (Jure?), ali si poskušal tudi z direktnim vpisom vrednosti v sam register čipa? Sem se nekaj trudil, a brez uspeha. (če zadevo večem/manjšam, brez problema pridem do želene vrednosti, ne gre pa mi direktni vpis).
Lp, g
Koda: |
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1 Spiinit
'Config Spi = Soft , Din = Pinb.5 , Dout = Portc.2 , Clock = Portb.7 , Ss = None
Cs Alias Portb.4
Wlat Alias Portb.3
Shdn Alias Portb.2
Config Cs = Output
Config Wlat = Output
Config Shdn = Output
Cs = 1 'non active state
Wlat = 1
Shdn = 1
Dim Incr_comm As Byte
Dim Decr_comm As Byte
Dim Read_comm As Byte
Dim Write_comm As Byte
'commands
Decr_comm = &B00000111 'increment command
Incr_comm = &B00001011 'decrement command
Read_comm = &B00001111 'read command
Write_comm = &B00000011 'write command
Dim Resistance As Byte : Resistance = 0
Dim Wiper As Word
'SPI test
Waitms 100
Spiinit
Waitms 100
'read data from MCP41HV31 to see how the resistance is set
Cs = 0
Spiout Read_comm , 1
Spiin Resistance , 1
Gosub Calculate
Cs = 1
'============================================
'Set_resistance
Main_resistor:
Do
Print "Wiper:" ; Wiper ; " "
If T1 = 0 Then Gosub Up_sub
If T2 = 0 Then Gosub Down_sub
waitms 500
Loop
Calculate:
Wiper = Resistance * 190
Wiper = Wiper + 280
Return
'subroutines
'-------------------------------------------------------------
Up_sub:
Set Led_close
Waitms 50
Cs = 0 'active
Waitms 100
Incr Resistance
Spiout Incr_comm , 1
Spiout Read_comm , 1 'command to read set resistance
Spiin Resistance , 1 'read set resistance
Gosub Calculate
Wlat = 0 'set to write to SPI register
Cs = 1
Reset Led_close 'not active
Return
'-------------------------------------------------------------
Down_sub:
Set Led_open
Waitms 50
Cs = 0
Waitms 100
Decr Resistance
Spiout Decr_comm , 1
Spiout Read_comm , 1 'command to read set resistance
Spiin Resistance , 1 'read set resistance
Gosub Calculate
Wlat = 0 'set to write to SPI register
Cs = 1 'not active
Reset Led_open
Return
|
|
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Sre Mar 19, 2014 9:54 am Naslov sporočila: |
|
|
Digitalni POT res lepo dela, Gregatu je manjkala ena subrutina, ki jo najdete v mojem blogu in se imenuje Test_sub.
V tej subrutini pišemo vrednost upornosti v potenciometer.
Lp
Jure |
|
Nazaj na vrh |
|
|
mucek.g Novinec
Pridružen/-a: Tor Feb 2014 21:25 Prispevkov: 6
|
Objavljeno: Sre Mar 19, 2014 8:03 pm Naslov sporočila: |
|
|
Dodatno je bil problem še, da mi pri uporabi HW SPI prejemanje ni delovalo (torej - lahko sem poslal ukaz, nisem pa mogel prejeti odgovora). Ko sem zadevo nastavil na SW SPI, je zadeva zaživela ... Zadeva je sigurno povezana s kupom nastavitev HW SPI, s čimer pa se žal nisem imel časa (in volje) ubadati, ko je zadeva zaživela
Jure, hvala za pomoč!
Lp, g |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|