AVR-DOS
Koszonom!
Ami tervek miatt van:
- ATMega128@14.7456MHz (5V) és mellette 3.3V-ról a SD kártya.
időnként (1-3 naponta) SD kártya hibával leáll a rendszer. Minden SD művele előtt SD inicilaizálás, Filerendszer inicializálás.
A M128 SW SPIről jár, a HW alapú nem tetszett neki (bizonytalan volt). Lehet, hogy a nagy sebesség miatt a sok ellenállás kapacitásként is kezdett viselkedni...
Most épp a hibakereséséi fázis van. Gyári megoldás során a következőket találtam:
- SD újrainicializálás, majd ha nem megy, akkor restart ATMega.
- SD-t áramtalanítja egy FET segítségével ilyen esetben.
Ami tervek miatt van:
- ATMega128@14.7456MHz (5V) és mellette 3.3V-ról a SD kártya.
időnként (1-3 naponta) SD kártya hibával leáll a rendszer. Minden SD művele előtt SD inicilaizálás, Filerendszer inicializálás.
A M128 SW SPIről jár, a HW alapú nem tetszett neki (bizonytalan volt). Lehet, hogy a nagy sebesség miatt a sok ellenállás kapacitásként is kezdett viselkedni...
Most épp a hibakereséséi fázis van. Gyári megoldás során a következőket találtam:
- SD újrainicializálás, majd ha nem megy, akkor restart ATMega.
- SD-t áramtalanítja egy FET segítségével ilyen esetben.
Ismerkedek mostanában én is az AVR-DOS-al, és egy 64MB-os SD kártya a tesztalanyom. Szépen működik rajta minden, minden OK!
Az enc28j60-as ethernet chippel szeretném összekötni+ATmega128, de itt elakadtam.
Az SD hardveres SPI beállítással jól működik,de az enc chip mellette nem megy, hiába van megadva másik /CS láb megadva az AVR-nél
Tehát az eredeti Config_MMC.BAS állományom ez:
Vagyis ugyan az SD-nél nem használom a szokványos PortB.0-át a chip selet-re, hanem azt az enc-re kötöttem.
A BEN féle kódból alkalmazva
Enc28j60_cs Alias Portb.0
Config Enc28j60_cs = Output
...
ez a beállítás jó volt az enc-re, de SD-vel összekötve már nem.
Hol kavarodtam el????
Egy kis segítség jó lenne...
Melyiknél milyen beállítást használjak, vagy melyik lábra kössem a /CS kivezetést az AVR-re?
Üdv: Higgins
Az enc28j60-as ethernet chippel szeretném összekötni+ATmega128, de itt elakadtam.
Az SD hardveres SPI beállítással jól működik,de az enc chip mellette nem megy, hiába van megadva másik /CS láb megadva az AVR-nél
Tehát az eredeti Config_MMC.BAS állományom ez:
Kód: Egész kijelölése
Const Cmmc_soft = 0
#if Cmmc_soft = 0
' --------- Start of Section for HW-SPI ----------------------------------------
' define Chip-Select Pin
Config Pinb.4 = Output ' define here Pin for CS of MMC/SD Card
Mmc_cs Alias Portb.4
Set Mmc_cs
' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
Config Pinb.4 = Output ' define here Pin of SPI SS
Spi_ss Alias Portb.4
Set Spi_ss ' Set SPI-SS to Output and High por Proper work of
' SPI as Master
' HW-SPI is configured to highest Speed
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
' Spsr = 1 ' Double speed on ATMega128
Spiinit ' Init SPI
' --------- End of Section for HW-SPI ------------------------------------------
#else ' Config here SPI pins, if not using HW SPI
A BEN féle kódból alkalmazva
Enc28j60_cs Alias Portb.0
Config Enc28j60_cs = Output
...
ez a beállítás jó volt az enc-re, de SD-vel összekötve már nem.
Hol kavarodtam el????
Egy kis segítség jó lenne...
Melyiknél milyen beállítást használjak, vagy melyik lábra kössem a /CS kivezetést az AVR-re?
Üdv: Higgins
Az eredeti Tuxgraphics-os kapcsolást csináltam meg, ahol az ENC chip reset lába simán fel van húzva egy 10k-s ellenállás a +3,3V-os tápra, a /Cs láb is egy 10k-s -al a tápra van felhúzva. Szóval minden ugyanúgy van csak ATmega 168 helyett Atmega 128L-es van helyette, így aze gész megy +3,3V-ról és az SD-nél se kellet bűvészkedni szintillesztéssel.
HA jól tudom több SPi eszköz is használható és épp azzal az eszközzel fog ill. tud beszélgetni az AVR, amelyiknél engedélyezve van.
Akkor próbálkozok egy sw-s SPI beállítással, aztán megnézem külön külön, hogy megy-e az ENC meg az SD, aztán meg összehegesztem a kettőt.
De akkor elvileg mennie kellene...
Esetleg az eredeti kapcsolást te hogyan módosítanád Róbert, hogy jó legyen?
Üdv: Higgins
HA jól tudom több SPi eszköz is használható és épp azzal az eszközzel fog ill. tud beszélgetni az AVR, amelyiknél engedélyezve van.
Akkor próbálkozok egy sw-s SPI beállítással, aztán megnézem külön külön, hogy megy-e az ENC meg az SD, aztán meg összehegesztem a kettőt.
De akkor elvileg mennie kellene...
Esetleg az eredeti kapcsolást te hogyan módosítanád Róbert, hogy jó legyen?
Üdv: Higgins
Igen, az AVR SPI ChipSelecttel válassza ki a chipet.
Nálam is gond van:)
1, M168 OK, M32 valamiért nem megy:(
2, A RESET megoldása a ENC chipnek silicon rev függő!
A jó kód:
3, A ben féle leírás elején is van valami a SPI buszról....
Nálam is gond van:)
1, M168 OK, M32 valamiért nem megy:(
2, A RESET megoldása a ENC chipnek silicon rev függő!
A jó kód:
Kód: Egész kijelölése
Enc28j60_cs = 0
'reset ENC28J60
X = Enc28j60_soft_reset
Spiout X , 1
Enc28j60_cs = 1
'Do
'Call Enc28j60readcontrolregbyte(estat)
'X = Enc28j60_data.estat_clkrdy
'Loop Until X = 1
Waitms 1000
Régen akartam már molyolni kicsit az SD kártya használatával, és most rá is szántam az időt. Mega32 a proci, és a Bascom AVR-DOS-át használom mert azt szeretném ha a loggolt adat simán olvasható lenne PC-n. És azt kell mondjam hogy működik. Elsőre SW SPI-vel próbáltam, úgy is megy, de ma kipróbáltam HW SPI-vel is, és így is megy. Holnap megméregetem hogy melyik milyen gyors, mekkora a különbség. Most még a soros porttal bíbelődöm, az a szokott módon eldobál néha karaktereket, de még nem nagyon feküdtem rá a dologra. Mindenesetre csak azért írtam, hogy azért ilyen is van, hogy elsőre működik ez a dolog. SD kártya foglalatot az első kísérletekhez floppy kábel csatlakozóból csináltam, de ma vettem a Chipcadban rendes kártyafoglalatot és csináltam hozzá gyorsan egy kis nyákot. A mikrokontroller az egyszerűség kedvéért 3.3V-ról megy a kártyával együtt, és MAX3232 van a PC felé. A MAX232 valahogy nem volt stabil 3.3V-on. 3 SD kártyával játszottam eddig, egy 32M, egy 128M és egy 1G SD-vel, érdekes módon a 128M nem működik rendesen, de az máshol is csinált már furcsa dolgokat, nem is szenvedek vele.
Persze, ezért is írtam hogy 3232 van benne.
Végeztem pár mérést a sebességet illetően, és egyértelmű hogy az SW SPI sokkal lassabb, nem is az írás hanem a megnyitás/lezáráskor. HW SPI-vel 50 byte írása így nézett ki : 10ms megnyitás - 0.3ms írás - 47ms lezárás Ugyanez SW SPI-vel : 41ms megnyitás - 0.3ms írás - 80 ms lezárás. Érdekes hogy az írási sebességben nincs különbség. 100 byte kiírása 0.42 ms volt mindkét megoldással, a nyitás-zárás idő maradt. Szóval maradok a HW SPI mellett, és az is kiderült hogy ha pl. GPS loggerként akarom használni akkor a soronkénti nyitás-írás-zárás szóba sem jöhet.
Végeztem pár mérést a sebességet illetően, és egyértelmű hogy az SW SPI sokkal lassabb, nem is az írás hanem a megnyitás/lezáráskor. HW SPI-vel 50 byte írása így nézett ki : 10ms megnyitás - 0.3ms írás - 47ms lezárás Ugyanez SW SPI-vel : 41ms megnyitás - 0.3ms írás - 80 ms lezárás. Érdekes hogy az írási sebességben nincs különbség. 100 byte kiírása 0.42 ms volt mindkét megoldással, a nyitás-zárás idő maradt. Szóval maradok a HW SPI mellett, és az is kiderült hogy ha pl. GPS loggerként akarom használni akkor a soronkénti nyitás-írás-zárás szóba sem jöhet.