Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Ez lenne amit az ESP32 timerBegin() varna.
Roviden:
Ez pedig az az altalad hasznalt valtozat . Roviden:
Megrovidebben: rossz a framework/library. A hozzászólás módosítva: Aug 20, 2024
Köszönöm kedves Cua és Bakman!
Végső elkeseredésemben kábelemet bent hagytam a munkahelyemen, így holnap tudom feltölteni, de szoftveresen ellenőrizve hibaüzenet nélküli a végeredmény:
enable nincs benne... Természetesen lábon lőttem magam, mert nekem lineáris frekvenciagenerátor kellene, de innen talán könnyebb lesz... Még egyszer köszönöm! Jó éjt; Tambi A hozzászólás módosítva: Aug 20, 2024
Köszönöm mindenkinek, ez működik 100-150 kHz-ig, de 4-5% kitöltésremegéssel. Feltöltöm ide, talán haszznát veszi valaki:
A hozzászólás módosítva: Aug 22, 2024
Esetleg egy másik megszakítás beleszólhat?
Köszönöm, kedves Lazsi!
Nincs tudomásom másik megszakításról, de a "tudomásom" nem jelent semmit (vagy csak nagyon keveset...). Megtörve bár, de fogyva nem felteszem életem fő művét, melyet sokak segítségével (de főleg Asch útmutatása alapján) hoztam össze Nano-ra. Stabil, nem leng, nagyon jól működik. A frekvenciát és a frekvenciasávokat 1-1 db forgójeladó TEKERÉSÉVEL lehet állítani, mert a nyomógombokat utálom... Szomorúság benne, hogy 100 kHz fölött az OCR1A egyre durvább frekvenciaváltozást okoz lépésenként. Végülis az eredeti célt; a 100 Hz-től (50)60 kHz-ig terjedő, sávváltás nélküli átfogást, valamint némi kis hatványozással a frekvencia (fordulatszám) emberibb szabályozását sikerült elérni. A TM1637; 6 karakteres 7 szegmens LED kijelző nem megméri a frekvenciát csupán azt jelzi, hogy mennyinek kellene lenni, így némi kis eltérés (max. 1-2%) tapasztalható. Fogyaszt vagy 30 mA-t, cserébe akárhonnan, akármilyen fényviszonyok mellett is jól látható (még hátulról is; tükörből...)
De büszke lennék magamra, ha egyszer az életben tőlem is kérdezne valaki... Derűs napot kíván; Tambi.
Kedves Lazsi!
Ismét elővettem az AD9833-t, hogy 100kHz és 1MHz között is elfogadható lépésekkel lehessen szabályozni a frekvenciát.
Jól működne, ha az impulzusszélesség stabil lenne... Mitől lehet és mit lehet tenni? ("Természetesen" dugdosós panelen van összerakva...) Köszönettel; Tambi. A hozzászólás módosítva: Aug 26, 2024
Megmondom őszintén, én csak AVR-ekkel (értsd: saját készítésű áramkörben lévő "üres" proci és nem ARDUINO, amiben van egy "betöltő-rutin") foglalkoztam, és ASM-ben programoztam őket.
Amikor időzítés-kritikus programot írtam, ott mindig nagyon kellett figyelni a megszakításokra, hogy mikor jöhet és mikor nem jöhet be egy másik - ezért gondoltam erre nálad is. Nem tudom, hogy pl. a kijelzőre író rutin használ-e megszakítást... De én a főhurokba lehetőség szerint semmit sem tennék... A kijelző tartalmát csak akkor íratnám ki, amikor az megváltozik. Amikor megváltozik, az ugye valamilyen emberi beavatkozás következménye, tehát aközben nem gond, ha változik az impulzus-szélesség (persze jó lenne, ha akkor sem, de az még "elnézhető"). Nem ismerem (még nem használtam) az AD9833-at, ha annak a kimenete "lötyög", akkor vagy abban van a probléma (vélhetően nem...), vagy ilyen változó vezérlést kap. Nem tudhatom azt sem, hogy miként reagál arra, ha menet közben új beállítást kap. Ha ugyanazt kapja, de megkapja (másodpercenként 3-szor?), az is újnak számít? Nem tudom, hogy a map() függvénynek hány paraméter kell... A 35. sorban 5-öt, a 45. sorban 6-ot kap. Én a főhurokból mindent kiszerveznék a változás kezelőjéhez. (Esetleg amikor bármilyen beállítás-változtatás történik, leállítanám a generálást, és a kijelzés végeztével kapcsolnám vissza. De kb. itt értem az ötleteim végére... Remélem kapsz hozzáértőbb választ is!
Előszőr állapítsd meg, hogy a jitter a program vagy az áramkör miatt van. A setup végére tegyél be 1db gen.ApplySignal(SQUARE_WAVE,REG0,frequency); hívást, a loop() pedig legyen üres. Ez után a AD ezt a frekit fogja generálni. Ha így is van jitter, akkor azt az áramkörödben kell keresni, ha nincs, akkor pedig a programban.
Köszönöm kedves Fórumtársak!
Minimalizálva:
Az eredmény kb 5 óra múlva lesz látható: https://youtu.be/8zwMYINne6o Sajnos a jitter a régi... (Az új Qwon-nak jobb a szinkronja, mint a régi Rigol-nak. ) Három db AD9833-al próbáltam, az eredmény ugyanaz, bár nyilván azonos szériából valók... A szinusz 0,6 Vcs-cs, és stabil, nincs jitter. Köszönettel; Tambi A hozzászólás módosítva: Aug 26, 2024
Nem ismerem az IC-t, de itt van egy érdekes rész, valószínűleg az adatlapból idéz az illető: Bővebben: Link.
Idézet: „it may be worth using a integer multiple MCLK to avoid phase tuncation errors which do have an impact on jitter.”
Kedves Fórumtársak!
Ismét ti tudtok segíteni... ESP32 újabb kiadású szoftverével kínlódok. Az első kód nagyszerűen működik, még 40 MHz is kijön belőle, bár inkább szinusznak mérem, de stabil... 1 Hz-től 10 MHz-ig elfogadható négyszöghullám. Ráadásul a teljes kód mind a két sorát értem...
Ezt az alábbiak szerint forgó jeladóval kiegészítve csak a fejlécbe beírt frekvencia hajlandó megjelenni a GPIO2-n. A jeladót szkóppal nézve működik, a megszakítás is, mert a serial.print által kiírt frekvenciaérték is úgy változatható, ahogy kell, és ezt meg is jeleníti, de a kimeneten mégsem változik a frekvencia. Az összes általam ismert adattípussal kipróbáltam a változókat, de mostanra kifogytam az ötletekből. Szerintetek mit lehet itt tenni?
Köszönettel derűs estét kíván; Tambi A hozzászólás módosítva: Szept 1, 2024
Csak tippelek, lehet a 99 vagy 101 frekvencia nem jó a ledcAttach()-nak. Én megpróbálnám megnézni nagyobb léptékkel ( f+=50; ) vagy szorozni/osztani kettővel, hogy azzal megy-e.
A másik, hogy a ledcAttach() visszatérési értékét is kiírni. Ha sikeres TRUE ha sikertelen akkor FALSE értéket ad vissza. A hozzászólás módosítva: Szept 2, 2024
Köszönöm kedves Dc001!
Az alapfrekvenciát megváltoztattam 182 Hz-re, az f++ -t f=f+10-re, a serial.print(f) gyönyörűen jelzi a 10-es lépésenkénti változást, de a kimenet marad a stabil 182 Hz, nem változik f-el együtt. A ledcAttach(PIN, f, D); áthelyezhető a setup-ból a loop-ba? Hogyan kell a ledcAttach()-t kiíratni? A Serial.print(" ledcAttach: "); Serial.println(ledcAttach); -ra nagyon hosszú hibalistát küldött: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino: In function 'void loop()': C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:15: error: no matching function for call to 'println(bool (&)(uint8_t, uint32_t, uint8_t))' 33 | Serial.println(ledcAttach); In file included from C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Stream.h:26, from C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Arduino.h:193, from C:\Users\APA\AppData\Local\Temp\arduino\sketches\0EBA565169E8B35385C1FC4A6CDA5573\sketch\GENERATOR_LEDC_ENC_min.ino.cpp:1: C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:102:10: note: candidate: 'size_t Print::println(char)' (near match) 102 | size_t println(char); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:102:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'char' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:103:10: note: candidate: 'size_t Print::println(unsigned char, int)' (near match) 103 | size_t println(unsigned char, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:103:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'unsigned char' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:104:10: note: candidate: 'size_t Print::println(int, int)' (near match) 104 | size_t println(int, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:104:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:105:10: note: candidate: 'size_t Print::println(unsigned int, int)' (near match) 105 | size_t println(unsigned int, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:105:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'unsigned int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:106:10: note: candidate: 'size_t Print::println(long int, int)' (near match) 106 | size_t println(long, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:106:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:107:10: note: candidate: 'size_t Print::println(long unsigned int, int)' (near match) 107 | size_t println(unsigned long, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:107:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long unsigned int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:108:10: note: candidate: 'size_t Print::println(long long int, int)' (near match) 108 | size_t println(long long, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:108:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long long int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:109:10: note: candidate: 'size_t Print::println(long long unsigned int, int)' (near match) 109 | size_t println(unsigned long long, int = DEC); | ^~~~~~~ C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:109:10: note: conversion of argument 1 would be ill-formed: C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long long unsigned int' [-fpermissive] 33 | Serial.println(ledcAttach); | ^~~~~~~~~~ | | | bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)} exit status 1 Compilation error: no matching function for call to 'println(bool (&)(uint8_t, uint32_t, uint8_t))' Mindig olyasmibe fogok, ami meghaladja.... Köszönettel; Tambi
Külön méreg, hogy x10 mérőfejjel még a 10 MHz is stabil, semmi jitter, fel és lefutása 4 nsec körül van!!! Vagyis nagyszerű lenne, ha működne...
Én továbbra is azt tanácsolom, hogy a frekvencia változtatását ne tedd meg minden egyes ciklusban...
Amikor megváltozik a bemenet miatt, akkor (és csak akkor egyszer) küldd ki és írasd ki! Nem gondolom, hogy ez lenne a hiba oka (bár ki tudja?), de a későbbiekben jobban jársz vele... Tesztként azt próbálnám meg, hogy f++ helyett f = 150 f-- helyett f = 50 Így persze csak ezt a két értéket tudod kiválasztani! De támpont lehet a további hibakereséshez: - Csak az egyiket állítja be - Beállítja, de egyből vissza is áll alap f-ra * - Beállítja az egyiket, de egyből beállítja a másikat is, így vissza is áll az alap f-ra * - Egyiket sem állítja be * Ezt úgy tudnád észlelni, ha a szkópon olyan lassú eltérítést állítasz be, amin még észrevehetőek az egyes periódusok hossza közötti különbség, de minél több van belőlük. Pl. ha az alapfrekvenciát leviszed a 10-edére vagy 50-edére és az eltérítést a másodperc tartományba, akkor amint elindul az eltérítés, egyből elforgatod a jeladót. Vagy a szkópot indított üzemmódban a kiküldött adatról szinkronizálod. (Emiatt is előnyösebb, ha nem a főhurokban folyamatosan ismételve küldi ki az értéket, hanem csak egyszer, amikor eltekerted a jeladót...) Vagy a jeladóról, hiszen az indítja az egész folyamatot. Pl. f = 10, f++ -> f= 15, f-- -> f = 5 f = 2, f++ -> f = 3, f-- -> f = 1 A hozzászólás módosítva: Szept 2, 2024
Sziasztok!
Atmega128-nál (vagy bármelyiknél) milyen messze lehet az órajel kristálya az XTAL kivehetésektől? Sajnos erre a ChatGPT is csak bullshitet tudott mondani, bármi konkrét nélkül. Az a helyzet, hogy 3 quartzot akarok rátenni, és jumperrel kiválasztani melyikről menjen. Persze a kivehetések egyik fele mindig fixen összekötve. Teliföld nincs A hozzászólás módosítva: Szept 2, 2024
Próbáld igy:
Láttam én már olyan NYÁK-ot is, ahol kb. 30 mm hosszú vezetősávokkal volt bekötve a kvarc.
El tudom képzelni, hogy a lehetséges (és üzembiztos) távolság függ a frekvenciától is...
12-16-20MHz vagy 32768Hz-65536Hz-1MHz?
20Mhz-nél 15méteres a hullámhossz !
Néhány cm nem okoz problémát.
És a párhuzamosan futó vezetékek kapacitása?
Nem veszed figyelembe !
De ha az élet figyelembe veszi, akkor megint lesz amomália. Lehet inkabb oszcillátorokat fogok használni. Es igen: 16 18.32 es 20MHz
Egyébként te milyen távol tervezted (volna) a kvarcokat?
A vezetékek kapacitása elhangolhatja a frekvenciát (időkritikus alkalmazásnál gond lehet) vagy instabillá teheti a teljes működést.
Kedves Fórumtársak!
Azzal szeretném megköszönni a tőletek kapott sok segítséget, hogy idebiggyesztem a generátor végleges kódját.
1 Hz-től 10 MHz-ig, 6 dekádikus sávban képes 50%-os négyszög jelet generálni 2 db Hestore ROT-1AB forgó jeladóval lineárisan szabályozva a frekvenciát sávonként 100 egyenlő lépésben. A fel- és lefutás 4-5 nsec, és stabil a frekvencia; majdnem jitter mentes... Az e = 0 sáv szervomotorok tesztelésére szolgál, ahol a sávátfogás 100 Hz-től 60 kHz-ig terjed. A nemvárt trükk az, hogy a setup-ban is, és a loop-ban is be kell állítani a ledcSetup-ot. Szintén fontos, hogy az Arduino Ide Board esp32 by Espressif Systems régebbi (nekem 2.0.9) legyen, mert a jelenlegi 3.0.4 "nem ismeri" a ledcSetup-ot, ledcAttachPin-t, stb. Köszönettel; Tambi A hozzászólás módosítva: Szept 11, 2024
Bocsánat, ez a végleges kód, ami 40 MHz-ig megy
Sziasztok!
Kertült hozzám kettő processzor kártya. Az egyik tökéletesen működik, a másikat széthackelték. A bootloader mindekttőben ép maradt, U-Boot megy alatta, illetve Linux kernelt futtat saját firmwerrel. Meg szeretném menteni a hackelt kártyát is, és valahogy a teljes kernelt cakkli-pakkli átdobni a működő kártyáról a hibás kártyára. A flash tartalmat SD kártyára bin fájlokba kimentettem, ezek megtvannak. Partícionáltam egy másik SD kártyát és rámásoltam az uImaget (bin kiterjesztésben) a 2. partícióra (onnan várja) illetve a rootfs-t az eslő partícióra kicsomagolva a BIN-ből. Viszont mikor kiadom a run sdboot parancsot (miután az u-bootot beállítottam) akkor mindig kernel panic-kal megáll és hiányolja az init fájlt. Valaki tud esetleg ebben segíteni, hogy mi is lehet ez az init fájl, és hol találom? Valahol olvastam, hogy ez összefüggésben lehet a busybox-szal, mert az fut alatta. A hozzászólás módosítva: Szept 14, 2024
Szerintem erre a kérdésre nem az AVR mikrokontroller topikban találod meg a választ.
Azért tettem fel itt a kérdést, mert végül is egy AVR32-n fut, ez egy beágyazott linux AT32AP7001 kontrolleren. Ez kimaradt az előző hozzászólásomból.
A hozzászólás módosítva: Szept 14, 2024
Miért nem direkt szektor copy-t csináltál az sdkártyára?
|
Bejelentkezés
Hirdetés |