Fórum témák
» Több friss téma |
További érdekesség: A memory-memory copy sem működik.
Egyik helyről a másikra, 8byte-os méretben mindkét oldal együtt inkrementálva stb. Ugyan azt csinálja. Single transfer semmi burst. A hozzászólás módosítva: Jan 29, 2017
Ez a kód nálam tökéletesen működik (átmásolja a konstans teszt "szemetet" a cél memória területre).
Most nézem, hogy az utolsó sorban sima egyenlőségjel van nálad "vagy" nélkül! A hozzászólás módosítva: Jan 29, 2017
Ezt nézd mekkora barom vagyok!
Feltűnt.
Egy karakteren elúszott egy délutánom. Fáradt vagyok na. Most már jónak kell lennie. Köszönöm a segítséget!
Ezért használom én az SPL könyvtárat inicializálásra és a regisztereket csak időkritikus helyen piszkálom (bár ott is írok rá inkább inline függvényeket, hogy olvashatóbb maradjon a kód).
Nincs ezzel semmi gond, nem szoktam ekkorákat hibázni, de most 4 hónap alatt letoltam 1000 munkaórát, így egy kicsit másképp fog az agyam, ezt nem tudom egy hét alatt kipihenni.
Egyébként meg oly mindegy mit használ az ember, user-code-ban is simán el tudom így rontani, minden külső segítség nélkül teljesen egyedül! Kijavítottam a sajátot, rögtön csinálja amit kell. Ezt szeretem ebben a szakmában, a gép sosem hülye, csak aki piszkálja.
Ahogy az angol mondja ez PEBKAC volt. // Problem exists between keyboard and chair.
Amikor nem akarjuk, hogy az operátor értse mikor szidjuk, mi a wetware-re szoktunk hivatkozni.
Hali okosabbak!
Megint bénázom. Illetve tegnap még ment. van egy változóm: double hanyados; hanyados = 700.25; Ezt letárolja, ahogy kell. hanyados = 700.25 / 3; Ebből egy szép hosszú kétszáz akármekkora eredmény lesz, sok tizedessel. Frankó Ezek után: hanyados = 4/3; Itt az eredmény EGY ahelyett hogy 1.33 lenne Majd jön a véső, az eredeti egyenlet: hanyados = 60 000 000 / 76800; Ennek 781.25-nek kellene lennie. Közben csak 725. Keil, optimalizáció NULLA, lebegőpontos egység használva. Nos?
De ezt így integer mateknak veszi ám!
hanyados = 4.0/3; hanyados = 60 000 000.0 / 76800;
Oké, de tegnap meg nem vette annak. Ez a bajom.
A 60 000 000 az egy Clocks.APB2Freq nevű változó, a 76800 meg a USART baud-rate számolás. És tegnap este szépen kijött az eredeti formulával a 781.25. USARTDIV = (Clocks.APB2Freq MHz / (8* (2-OVER8) * BaudRate)); Ami csak és kizárólag egész számokat ad, mégis lebegőpontosként tolta az eredményt. Hol lehet kényszeríteni hogy kellenek a tizedek?
Ott a példám az előző hozzászólásban!
Ha minden változód egész, akkor tisztán egész matematikát fog használni és csak a legvégén konvertálja át lebegőpontosba. Tehát vagy lebegő-pontosítod az egyik egészt vagy typecast-olod a változóid. A hozzászólás módosítva: Jan 30, 2017
Láttam persze. Az ok, de a kérdés az, hogy létezik olyan típusmódosító ami azt mondja a fordítónak hogy ehhez a matekhoz nem nyúlsz? Vagy a Baudrate-et tegyem át float-ra?
USARTDIV = ((float)Clocks.APB2Freq MHz / (8.0 * (2.0-(float)OVER8) * (float)BaudRate));
Ugyan nem muszáj mindet, de így egyértelműbb mit akarsz. Ha pedig számít a sebesség, akkor megtartod az integer matekot egész az osztásig: USARTDIV = ((float)Clocks.APB2Freq MHz / (8 * (2-OVER8) * (uint32_t)BaudRate)); A hozzászólás módosítva: Jan 30, 2017
A Clocks.APB2Freq elé betettem hogy (double), mert az utána következő művelet ahol a 781.25 öt szét kell szednem egész és tört részre (külön műveletet kell velük végeznem) mindenképpen double típust kér, ami egyébként hosszas keresésnek hála
Ha jól tudom a Cortex-M4-ben single precision a lebegőpontos egység, azaz a double már nem hardveresen gyorsított.
Igen. De a math.h modf függvénye csak double-el dolgozik. Persze még faragom, de most már legalább a 781.25 az 781.25.
Másfelől ez csak az inicializációs rész és arról szól a történet hogy ne kelljen előre számolt táblázattal bajlódnom, hanem meghívom az USART init-et, beírom neki hogy hanyas USART, mennyi a BaudRate, meg hogy "PA9", "PA10". Vagy éppen amit akarok (ha hülyeséget írok akkor hisztizik természetesen, aztán jónapot. Egyébként kerülöm a double-t.
Nézz rá a modff és modfl függvényekre.
Ha nem akarsz futás közben BAUDRATE-et állítgatni, én a fordítóval számoltatnám ki az osztási arányt. Ha egész számos osztásnál (ami alapban mindig lefelé kerekít) a kerekítést jól akarod megoldani, akkor először az osztandóhoz hozzá kell adni az osztó felét és úgy elvégezni az osztást: c = a / b helyett c = (a + (b >> 1)) / b legyen.
pl: 35 / 6 = 5.83 -> lefelé kerekítve 5 (35 + 3) / 6 = 6.33 -> lefelé kerekítve ez már 6, ami közelebb van kívánatos hányadoshoz. Mindenesetre erre használni a lebegőpontos számítást, szerintem az ágyúval verébre esete (még akkor is, ha az M4-nek ez nem akkora probléma).
Számoltatom vele olykor olykor, mert ha visszaveszem a frekit a felére, újra kell számolnom mindent.
Szeretek kiskapukat hagyni.
Ha nem akarod egészben használni a HAL függvényeit, akkor legalább lopd ki belőle a BRR beállítást.
Aztán egy ilyen sor és be is van állítva a sebesség:
A hozzászólás módosítva: Jan 30, 2017
Csatoltam a szkóp legújabb változatát, breadboard alatt hellyel közzel megy.
A zajszint meglehetősen jó, elég szépen számol. Zajt fülhallgatóval mértem, amikor az LCD-t frissíti, akkor csinál zajt, viszont olyankor nem is mér semmit. Megpróbálom összelapátolni prototípus PCB-n, ha meg működőképesnek bizonyul, csináltatok NYÁK-ot is belőle.
AC módot szándékosan hagytad ki? Analóg jelek vizsgálatánál nagyon hasznos.
Érdemes lenne készítened külön hardveres triggert is egy komparátor meg egy olyan programozható műveleti erősítő segítségével (ha jól emlékszem az általad használt uC-ben nincs DAC, de könnyen csinálhatsz egyet egy PWM kimenet és egy hagyományos műv. erősítővel készített alul-áteresztő sallen-key szűrővel). A műveleti erősítőid kimenetét mindenképp szűrném legalább egy sima RC szűrővel (sallen-key jobb), hogy leszedjem a nagy frekvenciás zajokat (különben aliasing hibád lesz).
Külső triggert én is javaslom, legalább kipróbálás erejéig. Én viszont nem pwm-mel állítanám elő a feszültséget, hanem valamilyen külső DAC-al, hogy kevesebb legyen a zaj amit a készülék termel. Csak a Hestore-n nézegettem a kínálatot. A belinkelt a legolcsóbb kb. 500 Ft, talán meg is tenné ide. Ennek csak be kell írni amikor változás van, utána elvan csendben statikus állapotban. MCP4726A0T-E/CH
Köszi,
1. A triggerről: még csak elvileg működik -> nem próbáltam ki Felfutó él mérése: 10% ugrást - a körkörösen mintavételez folyamatosan - a watchdogot beállítom az utolsó mintavétel -1% és utolsó mintavétel +10%-ra - ha a +10%-nál jelez az analóg watchdog, akkor megvan a trigger - ha kisebb irányba megy át, akkor átállítom a watchdog limiteket (ereszkedő jel esete) Magyarul interruptosan oldanám meg a triggert analóg watchdoggal. Nem próbáltam ki, ez az elképzelés. 2. Kimenetszűrés az erősítőkön: ennek utána fogok nézni, köszi
1, Biztos voltam benne, hogy a normál triggert vmi hasonló módon oldod majd meg. A külső trigger viszont nagyon gyakran hasznos, mert hozzá tudod kötni vmilyen az analóg jelektől független forráshoz is (pl. digitális kimenet felfutó/lefutó éle, vmilyen órajel, stb.).
2, Ez fontos, mert különben nagyon kellemetlen meglepetések érhetnek. A letörési frekvenciát pedig kb. a mintavételezési frekvenciád feléhez esetleg negyedéhez válaszd. 3, Nem írtál az AC csatolásról. Az is nagyon hasznos dolog, szerintem ne hagyd ki. A hozzászólás módosítva: Feb 4, 2017
1. az ábrán van egy EXT_TRG jel, ami egy pinre van kötve egy 1k-s ellenálláson keresztül. Ezt szánnám külső trigger csatlakozásnak.
2. jó hogy mondod, mert a letörési frekvenciát kissé feljebb tettem volna. Kipróbálom felesbe, negyedesbe is. 3. AC csatolás: arra gondolsz, hogy tegyek be egy leválasztó kondenzátort AC méréshez? Igazából elég nehéz dolgom van, mert utoljára rendes oszcilloszkópot 20 éve egyetemi laborban láttam. Van némi hiányosság a témában, ennek ellenére élvezem a tanulást. Legutóbb pofára is estem, mert a négyszögjelem túllőtt, utána jöttem rá, hogy ez így normális, az összes szkóp ezt csinálja, ehhez kell a hangolható kapacitás (kompenzáció).
Igen, arra gondoltam. Ez akkor jó, amikor egy DC ofszet jelre ültetett kisértékű jelet akarsz megvizsgálni.
Külső triggert lehet úgy is mint, ahogy írtad, csak akkor sokkal kevésbé flexibilis, mert a 3V3-as TTL-hez vagy akkor kötve. Az a kis kondi be van építve a szondákba, behangolásához készíthetsz egy négyszögjel kimenetet PWM-el (gyári szkópokon is úgy szokták).
Az erősítő szűrése stabilizált a kimeneten. A négyszögjel még 10x-es erősítésnél sem kezd túllőni.
500 kHz-n szűrök: 10 nF + 33 ohm Nem volt otthon 1 nF-os kapacitásom, azért lett a szűrő ilyen. Kipróbáltam 22 kohm-mal és 22 pF-dal is, de a 20 k valami hihetetlen zajt vitt a rendszerbe. 1 nF-es + 330 ohm-mal azért még ki fogom próbálni. |
Bejelentkezés
Hirdetés |