Cypress Wireless USB modul (CYWM6935)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Robert-

Hozzászólás Szerző: Robert- »

Ha jól emlékszem nem. Az SPI buszt és a procit ha kellőképp lelassitod, akkor csipogóval/hangszóróvakl meghallgatható a jel. esetleg PC hangkártya is jó a hangrögzitővel meg jelalakot is lehet figyelni...
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

És az nPd, nReset, lábaknak milyen állapotba kell állítani?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Nálam tesztprogrem:

Kód: Egész kijelölése

$crystal = 14745600                                         'Sebesseg
$regfile = "M48def.dat"                                     'Chip
$baud = 9600
'Cypress
   Dim O As Byte
   Dim M As Byte
   Dim Ut As Byte
   Dim Cim(2) As Byte
   Dim A As Byte
   Dim Adat As Byte
   Dim Hx As String * 2


   Config Portb.2 = Output                                  'SS

   Config Portb.3 = Output                                  '24-kék- Data out MOSI
   Config Pinb.4 = Input                                    '25- szürke- Data input MISO
   Config Portb.5 = Output                                  '26-rózsa- SPI CLK
   Config Portb.0 = Output                                  '27-zöld- rf /reseet
   Config Portd.7 = Output                                  '28-sárga- rf /powedown
   Config Pind.3 = Input                                    ' 4-lila- IRQ

   Irq Alias Pind.3
   Be Alias Pinb.4
   Clk Alias Portb.5
   Rfreset Alias Portb.0
   Rfpwr Alias Portd.7
   Cs Alias Portb.2                                         '23-fehér- /Chip select

'   Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = None , Clock = Portb.5
   Config Spi = Hard , Master = Yes , Polarity = Low , Clockrate = 64 , Noss = 1

Enable Interrupts
Enable Int1
do
   Print "Cypress modul teszt..."
   Reset Rfreset
   Set Rfreset
   Set Rfpwr
   Spiinit
   Set Cs
   Input "Olvas <0>  Ir <1> ?" , Ut
   Input " hexa parancs  :" , Hx
   Cim(1) = Hexval(hx)
   If Ut = 0 Then
      Reset Cs
      Spiout Cim(1) , 1
      Spiin A , 1
      Set Cs
      Print Hex(cim(1)) ; " cimen adat=" ; A ; " " ; Hex(a)
   End If
   If Ut = 1 Then
      Input "Adat? " , Cim(2)
      Cim(1) = Cim(1) + 128
      Reset Cs
      Spiout Cim(1) , 2
      Set Cs
      Print Cim(1) ; " cimre írt adat=" ; Cim(2)
     End If
loop
[/code]
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

Köszi!
Ebben a kódban, van valami jelentőssége annak, hogy a modul egyes lábait melyik uC lábra kötöm? Persze gondosan átírva a programban, meg leszámítva az IRQ-t ami int lábra kell hogy menjen!
Robert-

Hozzászólás Szerző: Robert- »

A hardveres módot tessék használni. Itt a MOSI/MISO/SCK számít. Az INT nem használt igazán, a /Reset és a /PD lábak csak úgy vannak, tetsőlegesek, ugyanúgy mint a CS.

Én ha lehet, a HW alapú SPI-t használom...
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

Kipróbáltam a teszt progit amit küldtél (HW SPI-vel)!
Regiszterek kiolvasásánál a következő eredményt kapom:
H00 regiszter: H07
H01 regiszter: H00
H02 regiszter: H4A
H03 regiszter: H00
H04 regiszter: H00
H05 regiszter: H01
H06 regiszter: H03

Ezek az értékek a bekapcsolás után vannak! Ezután megpróbáltam írni őket (05ös és 06os regiszterrel próbálkoztam), de mindig az előbb leírt eredményt kaptam vissza függetlenül attól, hogy mit írtam bele! Ezek szerint az SPI busz rendesen kommunikál a modullal, de akkor miért nem tudom írni a regisztereket???
Avatar
donko
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2006. augusztus 11. péntek, 6:00

Hozzászólás Szerző: donko »

Bocsi hogy belepofázok, de nekem így müxik (igaz vagy csak az adás, vagy csak a vétel, ha váltok akkor még van valami probléma):


'Atmega128 + Cypress USB olvasas program

'PB7 Nss_port
'PB4 IRQ
'PB6 Npd_port
'PB5 Reset
'PB2 MOSI
'PB3 MISO
'PB1 CLK

$regfile = "m128def.dat" 'regiszterfájl definíció
$crystal = 11059200

$baud = 9600

$lib "glcdKS108.lbx"
$include "font8x8.font"

Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2

Config Spi = Hard , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16
Spiinit

Dim Azonosito As Byte
Dim Ch As Byte
Dim Datain(10) As Byte
Dim Utasitas As Byte
Dim Numdatain As Byte
Dim Be_adat As Byte
Dim Slave_cim As Byte
Dim Master_cim As Byte
Dim Sajat_cim As Byte

Declare Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)
Declare Function Rspi(byval Aaddr As Byte) As Byte
Declare Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)
Declare Sub Rx_init(byval Csatorna As Byte)
Declare Sub Tx_init(byval Csatorna As Byte)
Declare Sub Rf_vetel()

Config Portb.7 = Output
Config Portb.4 = Input
Config Portb.6 = Output
Config Portb.5 = Output
Config Portb.2 = Output
Config Portb.1 = Output
Config Portb.3 = Input
Config Porte.0 = Input
Config Porte.1 = Output

Nss_port Alias Portb.7
Irq_port Alias Portb.4
Irq_pin Alias Pinb.4
Npd_port Alias Portb.6
Mosi Alias Portb.2
Miso Alias Portb.3
Clk Alias Portb.1
Nreset Alias Portb.5

Reset Npd_port
Set Nss_port
Mosi = 0
Miso = 1
Clk = 0
Nreset = 1
Irq_port = 0

'===============================================================================

Set Npd_port
Waitus 5000

'====================== inicializalas ==========================================

Azonosito = 12
Utasitas = 15
Sajat_cim = 0

Setfont Font8x8

Cls

Do

Call Rf_vetel

Lcdat 1 , 1 , "Csat" , 0
Lcdat 2 , 8 , Azonosito , 0
Lcdat 1 , 40 , "Be1" , 0
Lcdat 2 , 44 , Slave_cim , 0
Lcdat 1 , 72 , "Be2" , 0
Lcdat 2 , 80 , Master_cim , 0
Lcdat 1 , 104 , "Be3" , 0
Lcdat 2 , 108 , Be_adat , 0

Waitms 25
'Call Rf_kuldes(sajat_cim , Azonosito , Utasitas)

Waitms 100

Loop

Sub Wspi(byval Aaddr As Byte , Byval Vaalue As Byte)

Dim W(2) As Byte

W(1) = Aaddr
W(2) = Vaalue

W(1) = W(1) Or &B10000000
Reset Nss_port

Spiout W(1) , 2

Set Nss_port

End Sub

Function Rspi(byval Aaddr As Byte) As Byte

Dim R(2) As Byte
R(1) = Aaddr
R(2) = &B00000000

Reset Nss_port

Spiout R(1) , 2

Rspi = Spdr

Set Nss_port

End Function

Sub Rf_kuldes(master_cim As Byte , Slave_cim As Byte , Adat As Byte)

Dim O As Byte
Dim Dataout(5) As Byte

Dataout(1) = 64
Dataout(2) = 65
Dataout(3) = Master_cim
Dataout(4) = Slave_cim
Dataout(5) = Adat

'While Irq_pin = 0
'Wend

Call Tx_init(40)

For O = 1 To 5
Ch = Rspi(&H1d)
Call Wspi(&H0d , &B00000001)
Call Wspi(&H03 , &B01000000)
Call Wspi(&H0f , Dataout(o))
Do
Loop Until Irq_pin = 1
Call Wspi(&H0d , &B00000010)
Do
Loop Until Irq_pin = 1
Call Wspi(&H03 , &H00)
Waitms 25
Next O

Dataout(1) = 0
Dataout(2) = 0
Dataout(3) = 0
Dataout(4) = 0
Dataout(5) = 0

End Sub


Sub Rf_vetel()

Dim I As Byte
Dim K As Byte
Dim F As Byte
Dim J As Byte

Be_adat = 0
Slave_cim = 0
Master_cim = 0

Call Rx_init(40)

Numdatain = 1
Do
If Irq_pin = 1 Then
Datain(numdatain) = Rspi(&H09)
Incr Numdatain
End If
Loop Until Numdatain = 6

For I = 1 To 5
If Datain(i) = 65 Then
If I = 1 Then
K = 4
F = 3
J = 2
End If
If I = 2 Then
K = 5
F = 4
J = 3
End If
If I = 3 Then
K = 1
F = 5
J = 4
End If
If I = 4 Then
K = 2
F = 1
J = 5
End If
If I = 5 Then
K = 3
F = 2
J = 1
End If

Be_adat = Datain(k)
Slave_cim = Datain(f)
Master_cim = Datain(j)
End If
Next I

End Sub

Sub Tx_init(csatorna As Byte)

Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B11111111)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H23 , &B00000111)
Call Wspi(&H21 , Csatorna)

End Sub

Sub Rx_init(csatorna As Byte)

Call Wspi(&H06 , &B00001011)
Call Wspi(&H10 , &B00000000)
Call Wspi(&H24 , &B01000000)
Call Wspi(&H1c , &H01)
Ch = Rspi(&H1d)
Call Wspi(&H21 , Csatorna)
Call Wspi(&H03 , &B10000000)
Waitus 250
Call Wspi(&H07 , &B00000001)

End Sub

End
Robert-

Hozzászólás Szerző: Robert- »

A SPI buszon az írás és az olvasás külön lábakon megy.
A modulban nem minden regiszter írható át! Ezt az adatlapja a chipnek valahol a vége felé írja is.

A regiszteríráshoz a MOSI láb+SCK+CS kell......
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

De az olvasáshoz is kellenek ugyan ezek a lábak! Vagyis ha az olvasás működik akkor az írásnak is kellene! Vagy nem??? Az írásnál kipróbált regiszterek az adatlap alapján írhatóak!
Avatar
donko
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2006. augusztus 11. péntek, 6:00

Hozzászólás Szerző: donko »

Amit én nem teljesen értek, hogy nekem a hard SPI config-nál ha benne volt a NOSS akkor semmilyen procin nem működött. A Robi mintaprogijában pedig úgylátom benne van és ő neki műxik is. A BASCOM 1.11.8.3-as verziót használom és próbáltam MEGA8, MEGA16 és MEGA128 procikon.
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

Úgy látszik működik az SPI busz, csak az volt a baj ezzel az Irás/olvasás dologgal, hogy ha beírtam egy számot valamelyik regiszterbe, akkor azt utána nem tudta egyből kiolvasni! Viszont egy másik iró/olvasó ciklus után, már a beírt adatot adta vissza a regiszter... Érdekes :roll:
Robert-

Hozzászólás Szerző: Robert- »

Lehet nem vártad ki a beírás idejét? eléggé gyors ám a SPI busz....

A NoSS azt jelenti, hogy TE kezeled a SS (SlaveSelect lábat). Szóval nem igazán befolyásolhat....
De meglesem M48/88/168/8 chipekkel is. Az M48/88/168 esetén egy-két dolog érdekes...
Pl. a I2C szoftveres emuláció, ha HW lábakon van M48/88/168 esetén hibázik. A HWes libraryt használva teljesen jó.

Illetve meglesem a fellelhető Bascomok alatt is (1.11.7.4, 7.5, 7.9, 8.1, 8.3/8.3R2).
Ez hétvégén tud bekövetkezni...
Avatar
pkedvessy
Tranzisztorgyógyász
Hozzászólások: 198
Csatlakozott: 2006. január 1. vasárnap, 7:00

Hozzászólás Szerző: pkedvessy »

Nem hinném hogy nem vártam ki a beírás idejét, mert 2mp várakozás volt beírva az olvasás elé...
De végre működik a cucc! Gőzöm sincs hogy mitől... :lol:
Avatar
Visko
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2006. november 24. péntek, 7:00

Hozzászólás Szerző: Visko »

Hali!

Elsőnek szeretném megköszönni Robert munkáját (forráskód+5V->3.3V "kapcsolási rajz" - ez utóbbi megspórolt nekem egy figyelmetlenségből leégetést :D ). A forráskód kiváló volt tesztelni, hogy rendben van-e a hardverem (M48 + CYWUSB6935). Működnek :)
Másodsorban kíváncsi lennék, hogy ti hogy használjátok a SERDES_CTL regisztert (0x06), mert nekem nem tiszta, hogyha byte-serial módban vagyok, akkor DIO/DIOVAL-t kéne használnom (amit nem is tudok, mert a boardra nincs kivezetve ez a két pin), viszont a gyári default értéke a regiszternek 0x03, vagyis ki van kapcsolva a SERDES használata. Be kéne kapcsolni?
Más: tresholdoknak egymás komplementereinek kell lenniük (high és low)? Ha nem, akkor melyik a domináns?

A válaszokat előre is köszi:
Visko

UI: assemblyben kell írnom a programot, mert házi lesz, ennek ellenére nagyon hasznos ez az egész site, gratulálok!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Én nem piszkálom. A téma elején valahol van egy Olasz/Angol Bascom minta belinkelve. Abban lépésenként szépen minden benne van:).
Az ASM az kitolásból van?
Hülye tipp: Bascomban megír, a HEX/Bint meg disassemlálni (vagy hogy írják...)?
Válasz küldése