Fórum témák
» Több friss téma |
Lecseréltem a trimmert 33k-ra és a nagy kapacitásokat 100nF-re, de a zajszint maradt ugyanott.
Ami érdekes, hogy nem az a legjobb, ha a 33k-s ellenállások ezrelékre megegyeznek. Nem középre kerül ilyenkor a nulla, hanem alá, tehát van az ADC-nek skálázási hibája is. A hozzászólás módosítva: Jan 27, 2017
Végülis nem annyira drága, legutoljára még 8000 körül volt, de most már 5000-ért megkapni. Megy lefelé az ára.
Csodák nincsenek. A vezetékeid antennaként funkcionálnak, a fejlesztőkártyád analóg betápja gyanítom, hogy simán össze lett kötve a digitális táppal, illetve te is ugyanazt a tápot használod.
Az offszet nem biztos, hogy skálázási hiba. Simán lehet a műveleti erősítő saját hibája (Vos) + tápfesz különbség + ellenállás különbség + zavarok. Kérdéses még, hogy a műveleti erősítőd kimenete stabil-e (erre mondjuk csak egy rendes szkóp adhat választ ). Korábban beraktam egy képet olyan feszreferenciáról, ami jól viseli a kapacitív terheléseket, lehet érdemes lenne átépítened olyanra.
Nem azt írtam, hogy szerezz be te is egy ilyet, hanem azt, hogy érdemes lenne megnézned a megvalósítását, akár hardver, akár szoftveres oldalról (amúgy szerintem többe kerül egy ilyesmit megépíteni, mint 5000-ért megvenni).
Egy stm32f4x chippel való megvalósításon egyébként én is gondolkodom. Az tudna egy csatornán kb. 7 megasampling/sec-et, több csatornán meg ennek a harmadát.
Kicsit elment a kérdés a pontosság irányába.
Engem az 1% sem zavar, legfeljebb ejnye-bejnye szinten. Arra tervezem, hogy analóg kapcsolásokat nézzek vele. A hozzászólás módosítva: Jan 27, 2017
Fontos, hogy amennyire lehet zaj mentes legyen különben nem tudod majd, hogy a vizsgált áramkörrel van-e baj vagy pedig a szkópod rendetlenkedik megint.
Én azért sem bajlódtam saját szkóp építéssel mert néha még az is előfordul, hogy a 100MHz-es szkópom (1Gsample/s) sem elég a jelek vizsgálatára. Mire lenne jó számomra egy ennek töredékét tudó eszköz? Félre ne érts, eszem ágában sincs lebeszélni erről a projektről, csak fel akarom hívni a figyelmedet, hogy már ilyen sebességű analóg jeleknél sem lehet egy "összedobom hobbi módszerekkel" analóg frontend-et készíteni, ha elfogadható végeredményt szeretnél kapni.
Értem, elvileg szerettem is volna 100MHz körüli oszcilloszkópot, sőt akár 100eFt-ig elmenne, ha tényleg normális.
A jel zaj viszonynál viszont sokkal fontosabb az, hogy kézreálljon, használat után meg berakom a fiókba. A lakásban nem szeretném kerülgetni. A másik probléma, hogy ha nem áll kézre, nem fogom használni, porosodni fog a dobozban. Legyen olyan, mint a logikai jelanalizátor, amikor gond van, előhúzom, utána vissza a helyére.
Így próbáltam de nem jártam sikerrel.
- először állítottam be szabad helyet, a Keil beállításaiba. A flash végén 16byte-ot. - próbáltam uc szoftverből írni
sajnos HAL_FLASH_ERROR_PROG hibát dob vissza. Áttanulmányozom amit küldtél. A legjobb a HAL driver használata lenne, hiszen itt van készen. Csak használni kellene tudni
Javítom... Működik. Akkor dob hibát vissza ha nem FF-re írok. Vagyis az adott félszó nem üres. Már csak törölnöm és olvasnom kellene ugyan ilyen könnyedséggel tudni.
A hozzászólás módosítva: Jan 29, 2017
Egyenlőre nem sikerült éltre keltenem a drivert. A gond hogy én HAL drivert használok az STM32CubeMx jóvoltából, ez a driver pedig Standard Periph libhez van.
Közben találtam példát a nucleo boardhoz, alaposan áttanulmányoztam. Egy dolog nem tiszta. A flash regiszterek alapján, a legkisebb írható adat egy félszó, vagyis 16 bit, ha egy címre már írtam, oda nem írhatok újra mert hibát dob. A legkisebb törölhető adat pedig egy lap(page) vagyis ahhoz hogy frissítsek egy értéket, újra kell írnom mindig 1K-t vagyis egy lapot? Érdekes hogy az Stlink utilityvel pedig akár 8 bites adatot is lehet írni, frissíteni.
Szerintem az is 1k-t ír és egyszerűen visszaírja a többi adatot, amit nem változtattál meg. A flash eepromként használata inkább szükség megoldás, ha csak ritkán kell adatokat megváltoztatni. Egy külső eeprom IC filléres tétel és nagyságrenddel (10x, 100x) többször írható, ráadásul kisebb szegmensekben, mint a belső flash.
Ez miért gond? Az EEPROM-okat is laponként lehet írni.
Ha HALt használsz, akkor megtalálod a kész rutinokat a: stm32f1xx_hal_flash_ex.c -ben
Adatot nagyon ritkán kell megváltoztatni, pontosabban, egyszer be kell állítani a paramétereket és onnantól nem kell többet hozzá nyúlni. Emiatt most extra alkatrészt nem akarok beültetni, főleg hogy az IO vonalak is ki vannak számolva az alkalmazásomban.
Gondnak nem gond, csak próbálom megérteni a működést. Ha egy beállítás változik akkor mindent törölni kell és újraírni. Emiatt persze nem kell extra SRAM-ot sem felszabadítani, mert minden beállítás ott van. Csak olvasni és visszaírni.
A hozzászólás módosítva: Jan 29, 2017
A FLASHbe csak egészeket lehet írni. Hogyan szoktatok pl egy FLOAT típust menteni (egésszé alakítani) ill. visszaolvasni (egészet vissza FLOAT-ba)?
Közben leltem rá megoldást:
Ha konstansként tárolok egy beállítást. Akkor a fordító auto címezi a flashre és odaírja. Így nem kellene SRAMot használni. Ezzel az a baj hogy ha változik a program, pl új verzió, miatt, nő a mérete,akkor arrébb címezi a flashben a uc-ben futó program után. Nem lehet beadni a fordítónak hogy a konstansokat honnan kezdje tárolni hogy mindig ugyan azon a címen kezdődjenek?
De lehet. Létre kell hozni egy szekciót a linker scriptben (.ld fájl). Keresd meg a SECTIONS részt. Ezután a .data szekció elé szúrd be ezt:
A címet arra állítsd, amire akarod csak férjen bele a flash tartományba. Ezután add hozzá a programodhoz ezt (vmi olyan helyre, amire mindig hivatkozol, pl. ahol a konstansaid lesznek).
Ezután azokhoz a konstansokhoz, amiket ide akarsz menteni add hozzá a CONSTS-t. Példa.:
Természetesen, amikor új programot töltesz fel, ezt a területet is felülírja majd (ha változott a konstansok értéke). A konstansok címe viszont nem szokott megváltozni, csak ha újakat szúrsz be eléjük/közéjük.
Hi!
Nagy általánosságban meg tudnátok mondani mit lehet elrontani az USART1TX kontra DMA2Stream7 témában? Ott tartok, hogy DMA nélkül tökéletesen működik. Aztán: Periféria cím az USART1->DR Memória cím: Az adott string eleje. 8 bites MSIZE,PSIZE, inkrementálva csak a MEM van. Adatirány MEM->PER (DMADIR 1), flow controller a DMA CHESEL az 4 mert adatlap szerint az az USART1TX USART1 transmitter engedélyezve, és a DMAT bit is az USART1->CR3-ban. Amikor pedig a stream-et engedélyezném, akkor a DMA2_STREAM7->CR regisztere teljesen törlődik, csak az EN bit (0. helyiérték) marad 1.
Melyik mikrokontrollert használod?
STM32F429(Discovery)
Ha bemásolod a DMA inicializálásod, több esélyünk van...
Igen, igen, bocsánat, agyalok közben.
DebugMonitor inicializlál, teljesen rendben van. PutString pedig a pStringPointer-ről küldené az adatokat. A képen nem látszik a 'P' mint preiféria módja teljesen jól működik, szépen kiír mindent a puttynak. A problémás 'D' mint DMA rész a fejtörős.
Első lépésként mielőtt bármit is írsz, a CR regiszter EN bitjét tedd 0-ba, addig ugyanis read only egy csomó másik regiszter, illetve a CR regiszter többi bitje is.
Debug szerint tudtam írni a regisztereket, mert a DMA2 engedélyezés után nulla az összes. Ettől függetlenül beírtam a kódba. Kiderül menni fog -e. Annyit még hozzátennék, hogy a DMA2 szerint semilyen tranzakció nem zajlott(Status flag-ek), a nagyon lassú USART TX LED se villan fel, stb.
Szóval olyan mintha a DMA nem szólna hozzá az USART1-hez.
Köszönöm, közben rájöttem én is hogy ha változik az értékük, akkor új flash programozáskor visszaíródik alapra. Így marad az SRAM használata is. És új flash feltöltésekor az elmentett beállítások megmaradnak ha a debugger beállításai is úgy vannak beállítva.
És nem felejtetted el engedélyezni a DMA2 perifériát sem, ugye? RCC->AHB1ENR 22-es bit?
Az megtörtént a 40-es sorban. Nélküle a DMA2 regisztereit nem is tudnám írni, egyáltalán.
Most félretettem kicsit, és kipóbálom a DMA2-t egy memory memory copy-val.
Azt is megcsinálhatod, hogy úgy konfigurálod a linker scriptet mintha kisebb lenne a uC flashe. Ekkor biztosan nem tehet már kódot a flash végére. Ezután definiálsz egy structot a konstansaiddal. Létrehozol egy ilyen típusú pointert, majd a kívánt területre mutatsz vele.
|
Bejelentkezés
Hirdetés |