Arduino UNO-ról WizNetshield ATMEGA128-ra

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 180
Csatlakozott: 2012. január 22. vasárnap, 7:00

Arduino UNO-ról WizNetshield ATMEGA128-ra

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

Sziasztok!

Az aktuális fejlesztés kapcsán kinőttem az Arduino-UNO panelt. Áttértem az Atmega 128 panelra. A WizNetShield panel fizikailag rádugható, csak más portok vannak a lábakon. Az Ethernet feltétet nem használom. Ezen felül mindent meg tudtam oldani a portok átkonfigurálásával, de egy érdekes hibába futottam.

A WizNetShield-en van egy kiépített SD kártya olvasó. Ezt AVR-DOS-val remekül tudtam használni. Ehhez az SD kártya kezeléshez talált AVR-DOS konfig fájlokat a TAVIR Forumokon talált tanácsok alapján átkonfiguráltam (pl csak 1 file handler legyen, stb.) így futott az UNO panel 328p processzorán is.
Nade...
Váltottam Mega128-ra. Itt másként vannak a portok a panel kivezetéseken leosztva. Mivel SW és nem HW használom az SD kártyát, ezért a portokat átkonfigurálhattam az ATMEGA128 panelnek megfelelően. Látszólag jól is működik. De csak látszólag. A hibajelenség a következő:
1 lefut jól az SD használat inicializálás
2 Megpróbálok megnyitni egy adott nevű fájlt. Ha nincs létrehozom
3 beleírok a fájlba 108 byte információ fejrész adatot, majd lezárom
4 az első mérési ciklus végén ismét megnyitom a fájlt, hogy beleírjam az adatokat (kb 90 byte adat)
Itt a megnyitás parancs után kapok 227-es hibakódot
Const Cperrdrivereadcommand = 227 ' Error response Byte at Read Command

Az SD kártyán pedig rajta van a fájl és benne van az elsőként beírt 108 byte fejléc sor.

Az SD kártya korábban is, most is FAT32 és 4096 sector méretre van formázva. A kárty 2G méretű.

Ha valaki találkozott hasonlóval kérem adjon tanácsot. Ha segít a kód majd azt is felteszem.

Köszönöm,
Ákos
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tipp:
- inicializáld újra a kártyát ill az SPI-t megnyitás előtt
- SW esetben a #ChipSelect és a tényleges írás közt min 1 msec szüntet tarts!
- kiírás lezárása _előtt_ add ki (ha #1 volt a megnyitás):
flush #1
Close #1
- File nyitás/létrehozás egyszerűen :
open "filename.ext" for append as #1
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 180
Csatlakozott: 2012. január 22. vasárnap, 7:00

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

Szia Róbert!

Már megírtam a válaszom arról, hogy köszönöm az ötleteket, de nem segített egyik sem, amikor eszembe jutott valami és utána néztem

Sajnos megint az emberi tényező volt a gond. A gép mindig azt csinálja amire utasítod és nem azt, amire gondolsz.

A MEGA panelre való átkonfiguráláskor változott, hogy melyik portra kerülnek a konfig szerint az SD funkciók. Az konfigban meghatározott egyik port egy olyan port lett, amire egyébként egy teszt LED-em is rá volt konfigurálva. Ezt már rég nem használom, de a kódból nem vettem ki. És benne maradt, hogy mérési ciklus indításakor ezt a LED-et (port-ot) bekapcsolom, majd ciklus végén ki. Ez pont a Mmc_portsck portja volt.

Szóval köszönöm az ötleteket. Két tanulság is van, amit akár az Arduino tanfolyamra is ajánlok:
1-A kódot mindig tartsd tisztán. Amit nem használsz, azt vedd ki belőle.
2-A gép azt csinálja amit parancsba kap és nem azt, amire a programozó gondol.

Jó a tanfolyam!

Ákos
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Valamelyik leckében benne is van:
"A program nem a kívánságaidat, hanem az utasításaidat hajtja végre (c) Murphy"
Válasz küldése