NM7010B - Wiznet

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Igen, ez az alapja. De a hálózaton legyen egy HUB és annak a szabad portján lógjon egy hálókártya és egy WireShark.


Vagy Wifi és Wireshark.
Szépen hallgatható, hogy ki mit beszél az éterben....


De a Wiznetes modulra HUB-ra szavaznék...
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

WireShark van, a time server kezelést annak segítségével csináltam meg. HUB nincs, egy routerrel kell megelégednem.

Az arduino-s kód a nyelv ismerete hiányában nem sokat jelent, ezért az egy feladatért meg nem fogom megtanulni. Szóval, veszett fejsze nyele szindróma, de azért megpróbálom.
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

Jut eszembe: ha maradok a hagyományos webszervernél, hogyan tudok "kívülről" hozzáférni a kütyühöz?

Pl. munkahelyről akarok az otthon üzemelő webszerverrel kommunikálni. Gondolom, hiába írom be a böngészőbe a munkahelyen a modul ip-jét, max. hibát kapok.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Routerben IPForward részt nézd meg.

A DynDNS.org oldalon lesz saját neved/címed. (illetve amit a Router támogat).
Avatar
zb83
Biztosítékgyilkos
Hozzászólások: 69
Csatlakozott: 2008. október 24. péntek, 6:00

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

Sziasztok,
Esténként én is próbálgatom a wiznet modult.TCP/IP kapcsolat az, ami érdekel és szerver módban használom a modult. Van egy két dolog, ami nem tiszta jelenleg írással olvasással vagyis küldéssel, fogadással kapcsolatban.
Csak gyorsan összefoglalva amit tudok a küldésről, fogadásról. Eddig csak fogadással próbálkoztam.
Adat küldés:
1. Kiolvasom TX Free Size regisztert, ez megmondja, hogy mennyi adatot tudok küldeni egyszerre az adott beállítások mellett adott socket-en.
2.Kiolvasom a TX Read Pointert, ami megmutatja, hogy melyik címtől kezdődően kell feltöltenem a TX memóriát a küldendő adattal. Bár az adatlap itt nem emeli ki, de valószínüsítem, hogy ez a regiszter is csak relatív címet tartalmaz. (még nem próbálkoztam küldéssel, csak fogadással, ezért nem tudom)
3. Feltöltöm a TX memóriát az adatommal a TX read pointer által mutatott címtől
4. Beírom TX Write pointerbe az adatom hosszával megnövelt TX read pointer értéket
5. Kiadom a send parancsot és elvileg ennyi.

Fogadás(megszakítás használata nélkül):
1. figyelem az RX received size regiszter tartalmát. Ha nagyobb mint 0 akkor adat érkezett
2.kiolvasom RX read pointert, ami megmutatja, melyik címtől kezdődően olvasható ki az adat. ez egy relatív cím.
3.kiolvasom az adatot..
4.hozzáadom rx read pointerhez a fogadott adat hosszát
5.kiadom a RECV parancsot, ezzel nullázódik a RX received size regiszter és lezárul a fogadás

Első kérdésem az lenne, hogy jó-e amit leírtam?
Második, hogy próbáltam adatot küldeni PC-ről a megának, majd soros porton vissza. PC-ről telnettel csatlakoztam. ha a telnetben csatlakozás után leütök egy billentyűt, sajnos nem a neki megfelelő ASCII érték jelenik meg a túloldalt. tudtok erre esetleg javasolni valamit?
köszi!
Zoli
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ha esetleg közölted volna, hogy mit vársz, és mit kapsz helyette, többet tudnánk!
Így esetleg lehet, hogy Key kódot kapsz bővebben keresrá a GETATKBD-re:
http://avrhelp.mcselec.com/index.html
Vagy valami hasonló gond lehet?
8)
Avatar
zb83
Biztosítékgyilkos
Hozzászólások: 69
Csatlakozott: 2008. október 24. péntek, 6:00

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

Sziasztok,

Az olvasás már működik frankón a wiznet modulról. Most jutottam el odáig, hogy válaszolni is jó lenne. Úgy kezdem az adatküldést, hogy kiolvasom a TX write pointert, hogy aztán meghatározhassam az offset-et majd a fizikai címet. Viszont olyan gondom akadt, hogy minden reset után egy véletlenszerű számot kapok vissza a tx write pointer értékeként. Ez bizonyára nem normális...

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

Call Wiz5100_readvalue(w5100_s0_tx_wr0)
Tx_wr = Value
Shift Tx_wr , Left , 8
Call Wiz5100_readvalue(w5100_s0_tx_wr1)
Tx_wr = Tx_wr + Value
Print #1 , "Tx_wr: " ; Hex(tx_wr)
A Wiz5100_readvalue rutin biztosan jó, mert a beérkező adatot is ezzel dolgozom fel, az pedig megfelelően működik, már megabájtokat dolgoztam fel vele gond nélkül.
Mi lehet a gond szerintetek?
Avatar
zb83
Biztosítékgyilkos
Hozzászólások: 69
Csatlakozott: 2008. október 24. péntek, 6:00

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

Sziasztok,
Tudnátok segíteni a fenti kérdésben? Egyszerűen nem értem, hogy miért kapok 0xAC8B, 0x7EC6 meg ezekhez hasonló értékeket, amikor a kapcsolat létrejötte után először olvasom ki a w5100_s0_tx_wr0/1 regisztert. Írni meg nem tudom, hiába írok be bármit, ha újból kiolvasom, az eredeti értéket kapom vissza.
Úgy gondolom, reset után a tx_wr regiszternek is 0-át kéne tartalmaznia úgy, ahogy az RX_RD regiszterben is 0 a kezdeti érték. Vagy tévedek?
A kód idevágó része:

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

'------------------------------TCP/IP TX const and variables---------------------
Const S0_tx_mask = &H07FF
Const S0_tx_base = &H4000
Dim Tx_size As Word
Dim Tx_sizel As Byte At Tx_size Overlay
Dim Tx_sizeh As Byte At Tx_size + 1 Overlay
Dim Tx_offset As Word
Dim Tx_wr As Word
Dim Tx_wrl As Byte At Tx_wr Overlay
Dim Tx_wrh As Byte At Tx_wr + 1 Overlay
Dim Write_start_address As Word
'--------------------------------------------------------------------------

Call Wiz5100_init
Call Wiz5100_writevalue(w5100_s0_mr , Sn_mr_tcp)            'TCP mode
Call Wiz5100_writevalue(w5100_s0_port0 , &H04)              'SET port-1212
Call Wiz5100_writevalue(w5100_s0_port1 , &HBC)              'SET port-1212
Call Wiz5100_writevalue(w5100_s0_cr , Sn_cr_listen)         'Listen!

Do
Call Wait_for_client
Call Wiz5100_readvalue(w5100_s0_sr)                         'Get Socket status
Loop Until Value = Sock_established

Call Wiz5100_readvalue(w5100_s0_dipr0)
Client_ip_1 = Value
Call Wiz5100_readvalue(w5100_s0_dipr1)
Client_ip_2 = Value
Call Wiz5100_readvalue(w5100_s0_dipr2)
Client_ip_3 = Value
Call Wiz5100_readvalue(w5100_s0_dipr3)
Client_ip_4 = Value

Print #1 , "Client connected: " ; Client_ip_1 ; "." ; Client_ip_2 ; "." ; Client_ip_3 ; "." ; Client_ip_4;
Call Transmit_data(55)

Do
Call Wiz5100_readvalue(w5100_s0_rx_rsr0)
Rx_size = Value
Shift Rx_size , Left , 8
Call Wiz5100_readvalue(w5100_s0_rx_rsr1)
Rx_size = Rx_size + Value
If Rx_size > 0 Then
   Waitms 50
   Call Receive_data
End If
Waitms 800
Loop
End

Sub Transmit_data(byval Dat As Byte)
Call Wiz5100_readvalue(&H424)
Tx_wr = Value
Shift Tx_wr , Left , 8
Call Wiz5100_readvalue(&H425)
Tx_wr = Tx_wr + Value
Tx_offset = S0_tx_mask And Tx_wr
Write_start_address = Tx_offset + S0_tx_base
Call Wiz5100_writevalue(write_start_address , Dat)
Tx_wr = Tx_wr + 1

Call Wiz5100_writevalue(&H424 , Tx_wrh)
Call Wiz5100_writevalue(&H425 , Tx_wrl)

Call Wiz5100_writevalue(w5100_s0_cr , &H20)

End Sub

Sub Wiz5100_init
Call Wiz5100_reset                                          'Hardware reset
'Register reset
Call Wiz5100_writevalue(w5100_mr , &H080)

Call Wiz5100_writevalue(&H1b , &H55)

'Set gateway IP address
Call Wiz5100_writevalue(w5100_gar0 , 192)
Call Wiz5100_writevalue(w5100_gar1 , 168)
Call Wiz5100_writevalue(w5100_gar2 , 1)
Call Wiz5100_writevalue(w5100_gar3 , 1)

'Set Subnet mask
Call Wiz5100_writevalue(w5100_subr0 , 255)
Call Wiz5100_writevalue(w5100_subr1 , 255)
Call Wiz5100_writevalue(w5100_subr2 , 255)
Call Wiz5100_writevalue(w5100_subr3 , 0)

'Set MAC
Call Wiz5100_writevalue(w5100_shar0 , &H00)
Call Wiz5100_writevalue(w5100_shar1 , &H10)
Call Wiz5100_writevalue(w5100_shar2 , &H20)
Call Wiz5100_writevalue(w5100_shar3 , &H30)
Call Wiz5100_writevalue(w5100_shar4 , &H40)
Call Wiz5100_writevalue(w5100_shar5 , &H50)


'Set own IP address
Call Wiz5100_writevalue(w5100_sipr0 , 192)
Call Wiz5100_writevalue(w5100_sipr1 , 168)
Call Wiz5100_writevalue(w5100_sipr2 , 1)
Call Wiz5100_writevalue(w5100_sipr3 , 73)
End Sub



Sub Wiz5100_readvalue(reg)
Adres = Reg
Reset Wiz5100_cs
Spiout Wiz5100_opcode_read , 1
Spiout Adresh , 1
Spiout Adresl , 1
Spiin Value , 1
Set Wiz5100_cs
End Sub

Sub Wiz5100_writevalue(reg , Value )
Adres = Reg
Reset Wiz5100_cs
Spiout Wiz5100_opcode_write , 1
Spiout Adresh , 1
Spiout Adresl , 1
Spiout Value , 1
Set Wiz5100_cs
End Sub
Nagyon köszönöm előre is a válaszokat!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

A legelső amit tisztázni kellene, hogy folyamatosan L szinten van e a Wiz5100_cs lába a 4 Bytes kiküldése alatt?
Mert a Bascom ezt szokta elrontani, és automatikusan szétkapcsol minden Byte végénél!
Avatar
zb83
Biztosítékgyilkos
Hozzászólások: 69
Csatlakozott: 2008. október 24. péntek, 6:00

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

kapu48 írta:A legelső amit tisztázni kellene, hogy folyamatosan L szinten van e a Wiz5100_cs lába a 4 Bytes kiküldése alatt?
Mert a Bascom ezt szokta elrontani, és automatikusan szétkapcsol minden Byte végénél!
Igen.

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

Sub Wiz5100_writevalue(reg , Value ) 
Adres = Reg 
Reset Wiz5100_cs 
Spiout Wiz5100_opcode_write , 1 
Spiout Adresh , 1 
Spiout Adresl , 1 
Spiout Value , 1 
Set Wiz5100_cs 
End Sub
A wiznet-et író (Sub Wiz5100_writevalue) és olvasó (Sub Wiz5100_readvalue) rutinok biztosan jók, mert a kliens által küldött adatot ki tudom olvasni.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Te írtad: „Írni meg nem tudom, hiába írok be bármit, ha újból kiolvasom, az eredeti értéket kapom vissza.”
????

A Parancs és Cím értékek biztosan jók?
Ha ideraknád az Wiz5100 adatlap linkjét, lehet hogy többet tudnánk belőle!

Azt látom, hogy a programban jó a Cs. De a CONFIG SPI sórt nem látom?
:?:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Valamit nem igazán értek!

Ha már Overlay-al definiáltad a változókat:

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

Dim Tx_wr As Word 
 Dim Tx_wrl As Byte At Tx_wr Overlay 
 Dim Tx_wrh As Byte At Tx_wr + 1 Overlay

'Miért így adsz neki értéket?:
Call Wiz5100_readvalue(&H424) 
 Tx_wr = Value 
 Shift Tx_wr , Left , 8 
 Call Wiz5100_readvalue(&H425) 
 Tx_wr = Tx_wr + Value

'Hiszen pont az 1*űsités lenne a lényege!
'Valahogy így:
Call Wiz5100_readvalue(&H424) 
 Tx_wrh = Value 
Call Wiz5100_readvalue(&H425) 
 Tx_wrl = Value
Igaz nem ez volt a kérdésed! De arra ilyen kevés infóból nem lehet felelni!
Mivel pont a lényeges részeket nem látjuk a programodból!
Avatar
pepe
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2008. szeptember 6. szombat, 6:00

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

Sziasztok!
Csináltam én is egy webszervert WIZ812-vel.
Még fejlesztés alatt, de a file csere-bere oldalra föltettem web.zip néven.
A lényeg:
Atmega 64 + 32k ram (0-7fff) + wiz812 (8000-ffff) + soros port + SD kártya + 4 db. relé + 2 db. hőmérő.
A WIZ812 XRAM memóriába ágyazva. (Szerintem így gyorsabb az SPI-nél.)
Az elképzelés egy dinamikus weblap, amit PC-n megírok, SD kártyára másolom, bedugom a webszerverbe, bekapcsolom és működik. Szerintem ez minden magamfajta pákaszerető ember álma. Na itt még nem tartok.
Amit elértem:
Dinamikus weblap PC-n írva (Java). A HTML oldalak és a képek a programkódban. 2 sec. frissítéssel. Képátvitel. A reléket gombokkal lehet kapcsolgatni. Jelszavas belépés. Ajax-os frissítés, igy csak pár bájt a frissítés (a.dat a feltöltött anyagban).
Nyílván az elképzelés illúzió, mert a portokat kezelni kell, de megoldás lehet a már említett Ajax. Írni egy olyan programot, ami lekezeli a WIZ812 + SD ramot. Ez lenne a webszerver, ami az SD kártyáról venné a weblap anyagát. Az atmelben lévő programunknak ami a portokat kezeli csak egy plusz feladata lenne, az a.dat fájl létrehozása ami az aktuális weblap adatait tartalmazza. A föltöltött anyag működik, bár az adatkapcsolatban van néha egy kapcsolat helyreállítás csomag. Nem tudom mi okozza. Most ezt próbálom kitalálni.
A folytatás:
Nem szeretnék Bascom-os DOS-t használni, de a PC-n való weblapírás megköveteli a FAT használatát. Mivel a webszerver csak olvas az SD kártyáról szerintem kompromisszumokkal meg lehet írni az SD kártya olvasót. Pl. ilyen kompromisszum lehet, hogy nincsenek alkönyvtárak, a fájlok nevei számok lennének ... (így könyebb lenne a keresés).
A másik megoldás ha saját fájlrendszert készítek, és pl. egy TFTP szerver segítségével töltöm fel a weblap adatait. Az igazi kihívás egy bootloaderbe TFTP szerver, amivel a programot is és a weblapot is tudom módosítani. No ez lenne az igazi.
A feltett fájlok külalakjáért elnézést kérek, de nem publikálásra készültek. Van bennük szemét is, de okulni szerintem lehet belőle. Kiindulásként tudom ajánlani az interneten található wiz810mj_30.bas programot. Én sokat tanultam belőle.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Köszönjük a projekt közkincsé tételét!

Tényleg sokat lehet belőle tanulni.

Sajnos a Flash már 90%-ban foglalt így a tovább fejlesztéshez nagyobb Mega fog kelleni!

Szerinted kb. menyivel gyorsabb a betöltés SDRAM-ról mint az MMC-ről?
(Úgy értem ez érzékelhető különbség? A képek megjelenítésekor.)
:D
Avatar
pepe
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2008. szeptember 6. szombat, 6:00

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

Sziasztok!

Mivel a html oldal adatai, köztük a képek is a flash-en vannak, ezért foglalt a flash 90%-ban. A képeket azért tettem föl, hogy nézzem, jól működik e az adatok darabolása. Ha kiveszed a képeket, mindjárt nyersz 40k a flesh-en a fejlesztésre.

Azt hiszem félreértettél. Én Statikus ramról (SRAM) beszélek, amit XRAM-ként tettem az atmegához, úgy ahogy a WIZ812-t is. A SDRAM-ot az XMEGA tudja kezelni. Ezek hozzáférésideje 60ns. Ezeket frissíteni kell bizonyos időnként. Ilyet még nem használtam.
A SRAM-nak amit használtam 8 bites adatbusza van, és az atmega a külső memóriát két óraciklus alatt olvassa, így 8x gyorsabb bármilyen soros perifériánál. Nem próbáltam SPI buszon vezérelni a WIZ812-t, így nincs tapasztalatom.
Az SD kártya és az MMC kártya között sincs sok különbség. A mai kártyák bőven tudják a 8Mbit/sec. A 16MHz-en működő kontroller órajelét használja az SPI periféria /2/4/8/16/32/64/128 osztásban, így a legnagyobb órajel 8Mhz.

A képek megjelenítésénél a gyenge láncszem a hálózat. Gondolj bele, ha a ping-re a válaszidő 10ms alatt van, akkor azt mondod, jó a háló. 10 ms alatt az atmega 80 kbájtnyi adatot olvas be.(itt szigorúan csak olvasásról beszélek.) Mindazonáltal fájlszervernek nem ajánlom az atmegás webszervert. Arra ott van a PC. Ezek a fejlesztések kis fogyasztásuk és olcsóságuk miatt életképesek pl. felügyelet eszközökbe, klímavezérlésre, otthoni "szórakozásra".

Ha már irkálok, lenne egy kérdésem. Foglalkoznék egy kicsit az XMEGA kontrollerrel. Van benne 4 csatornás DMA 4 SPI interfész. Néztem, az újabb Bascom-ok kezdik támogatni. A gondom, hogy nem lehet ISP-n keresztül programozni, csak JTAG-ot és PDI-t támogatják. Van e valami kész megoldás a programozásukra, mint a jól bevált STK500 az ATMEGA-ra?
Válasz küldése