Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   84 / 176
(#) csabeszq válasza csatti2 hozzászólására (») Jan 27, 2017 /
 
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
(#) csabeszq válasza csabeszq hozzászólására (») 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.
(#) csatti2 válasza csabeszq hozzászólására (») Jan 27, 2017 /
 
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.
(#) benjami válasza csabeszq hozzászólására (») Jan 27, 2017 /
 
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.
(#) csabeszq válasza csatti2 hozzászólására (») Jan 27, 2017 /
 
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
(#) csatti2 válasza csabeszq hozzászólására (») 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.
(#) csabeszq válasza csatti2 hozzászólására (») Jan 27, 2017 /
 
É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.
(#) Suncorgo válasza kapu48 hozzászólására (») Jan 28, 2017 /
 
Í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

  1. HAL_FLASH_Unlock();
  2. HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,0xFFF0,0x41);
  3. HAL_FLASH_Lock();


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

kép.JPG
    
(#) Suncorgo válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
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

kép2.JPG
    
(#) Suncorgo válasza kapu48 hozzászólására (») 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.
(#) Suncorgo hozzászólása Jan 29, 2017 /
 
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.
(#) csatti2 válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
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.
(#) kapu48 válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
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
(#) Suncorgo válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
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.
(#) Suncorgo válasza kapu48 hozzászólására (») Jan 29, 2017 /
 
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
(#) Suncorgo hozzászólása 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)?
(#) Suncorgo válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
Közben leltem rá megoldást:

  1. uint32_t ftou(float n)
  2. {
  3.    return (uint32_t)(*(uint32_t*)&n);
  4. }
  5.  
  6. float utof(uint32_t n)
  7. {
  8.    return (float)(*(float*)&n);
  9. }
(#) Suncorgo hozzászólása Jan 29, 2017 /
 
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?
(#) csatti2 válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
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:
  1. .consts 0x08010000:
  2.         {
  3.         } > ROM

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).
  1. #define CONSTS                             __attribute__((section(".consts")))

Ezután azokhoz a konstansokhoz, amiket ide akarsz menteni add hozzá a CONSTS-t.
Példa.:
  1. static const uint8_t CONSTS CODE_CLEAR[SEVSEG_DIGITNUM]         = { SEV_CLR, SEV_CLR, SEV_CLR, SEV_CLR };


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.
(#) cpt.zoltan.simon hozzászólása Jan 29, 2017 /
 
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.
(#) csatti2 válasza cpt.zoltan.simon hozzászólására (») Jan 29, 2017 /
 
Melyik mikrokontrollert használod?
(#) cpt.zoltan.simon válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
STM32F429(Discovery)
(#) csatti2 válasza cpt.zoltan.simon hozzászólására (») Jan 29, 2017 /
 
Ha bemásolod a DMA inicializálásod, több esélyünk van...
(#) cpt.zoltan.simon válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
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.
(#) csatti2 válasza cpt.zoltan.simon hozzászólására (») Jan 29, 2017 /
 
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.
(#) cpt.zoltan.simon válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
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.
(#) Suncorgo válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
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.
(#) csatti2 válasza cpt.zoltan.simon hozzászólására (») Jan 29, 2017 /
 
És nem felejtetted el engedélyezni a DMA2 perifériát sem, ugye? RCC->AHB1ENR 22-es bit?
(#) cpt.zoltan.simon hozzászólása Jan 29, 2017 /
 
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.
(#) csatti2 válasza Suncorgo hozzászólására (») Jan 29, 2017 /
 
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.
Következő: »»   84 / 176
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem