Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   830 / 830
(#) vorosj hozzászólása Jún 20, 2022 / 1
 
Ismeritek ezt az Arduino szimulátort? Próbálgattam, tetszik.
https://wokwi.com/
(#) cua válasza vorosj hozzászólására (») Jún 20, 2022 /
 
Ez jopofa, eleg jo dolgokat lehet osszerakni es tesztelni vele.
(#) Tambi hozzászólása Júl 8, 2022 /
 
Kedves Fórumtársak!

A feladat olyan négyszögjelgenerátor készítése, melynek frekvenciaátfogása egyetlen potival 100 Hz-től 50 kHz-ig terjed, az elforgatás szögével lineárisan változik a frekvencia, és nem lehet benne kapcsolós sávváltás!

A mellékelt 3 sor Arduino (szinte) tudja ezt, viszont a "tone" üzemmódjából adódóan a jel frekvenciája "csak majdnem" stabil... és ez a "majdnem" roppant idegesít...

Három hete szinte éjt-nappallá téve kutatom a netet, de nem találtam olyan néhány sort, melyet szerény képességeimmel fel tudnék fogni, és még a feladatra is alkalmas.

Nem kell, hogy PWM, meg LCD, meg csili-vili stb, csak adjon stabil négyszöget.

Ebben kérem szépen a segítségeteket.

Köszönettel; Tambi.
A hozzászólás módosítva: Júl 8, 2022
(#) kendre256 válasza Tambi hozzászólására (») Júl 8, 2022 /
 
A potméter legalább helikális? Még azzal együtt is eléggé "Mission impossible" a probléma...
Ha a tartományt csak 100 Hz-es pontossággal szeretnéd felosztani, a pl. 5V-os referenciádat 1 mV-os pontossággal kellene felosztani. A "sima" potenciométeren ez kb. 0,05 fokos "lépésnek" felel meg, de egy 10 fordulatú helipotnál is 0,7 fokos az eltérés. Hogyan fogod ezt beállítani? A referenciádnak van zaja, a potméternek van beállási pontatlansága, van zaja, nem csoda ha nem lesz stabil. Mellesleg milyen stabilitást szeretnél?
Van valami, ami kijelzi, hogy mekkora a frekvencia, vagy csak a potméter a "kijelző"?
Ha van kijelző, akkor én a potméter helyett két nyomógombot használnék. Fel-le, hosszan nyomva nagyobb lépésekkel, vagy gyorsabban lépegetve állítanám be a frekvenciát.
(#) pipi válasza Tambi hozzászólására (») Júl 8, 2022 / 1
 
A potit ki kell hagyni, helyette enkóderrel tekergesd a frekit. Ekkora átfogást analóg módon nem lehet
(#) Tambi válasza kendre256 hozzászólására (») Júl 8, 2022 /
 
Köszönöm kedves Kendre!

A valódi feladat cnc step/dir ac-szervomotor kísérleti, beépítés előtti (próba)mozgatása. A motor 1000 step/fordulat üzemmódban működik, így a megadott 100Hz-50kHz között 0,1 - 50 ford/sec sebességgel lesz járatható. Valójában teljesen mindegy, hogy 0,1 vagy 0,3, illetve 47 vagy 51 ford/sec-el fog járni, nincs jelentősége. Viszont kell tudni nagyon lassan, és "teljes gázon" is járatni anélkül, hogy bármilyen (át)kapcsolót alkalmaznánk, mivel az egy "rántást" generálna a motor illetve a mozgás üzemében. A beállítás pontatlansága kisebb gond, mintha 100Hz-től 50 kHz-ig 3600 fokot kellene tekerni a potin.

Az Arduino-hoz rengeteg "felhasználókímélő", magamfajta laikusoknak íródott kész könyvtár van, bizonyára létezik olyan is, mely nem a tone-al hanem Timer-el oldja meg a feladatot anélkül, hogy belekeverné "a keresztannya térgyekalácsát" is... én eddig nem találtam, azért fordultam hozzátok.

Előre is köszönöm!
(#) Tambi válasza pipi hozzászólására (») Júl 8, 2022 /
 
Köszönöm, kedves Pipi!

Muszáj neki így működni... Legvégső esetben marad a tone, de ez csak a "nincs jobb" kategória...
(#) kapu48 válasza Tambi hozzászólására (») Júl 8, 2022 /
 
Próbáld meg az analóg mérés okozta zajt ki szűrni átlagolással.
Valahogy így:
  1. #include <Tone.h>
  2.  
  3. Tone tone1;
  4.  
  5.  #define ANALOG_TM  32  //  Analóg Tömb Méret meg adása
  6.  uint16_t AnalogM[ANALOG_TM];  //  Analóg Mérések tömbje
  7.  
  8. // Nagyság szerinti sorba rendezés
  9. void buborek_rendezes(uint16_t tomb[])
  10. {
  11.     uint16_t i, j, temp;
  12.     for (i = ANALOG_TM - 1; i >= 1; --i)
  13.     {
  14.         for (j = 0; j < i; ++j)
  15.         {
  16.             if (tomb[j] > tomb[j+1])
  17.             {
  18.                 temp = tomb[j];
  19.                 tomb[j] = tomb[j+1];
  20.                 tomb[j+1] = temp;
  21.             }
  22.         }
  23.     }
  24. }
  25.  
  26.  
  27. void setup() {
  28.   tone1.begin(13);
  29. }
  30. void loop() {
  31.   // Analóg mérések az átlagoláshoz
  32.   for (uint8_t i = 0; i < ANALOG_TM; i++){  
  33.     AnalogM[i] = analogRead(A0);
  34.   }
  35.   // Rendezés
  36.   buborek_rendezes(AnalogM);
  37.   // Átlag számítás, a legnagyobb és leg kisebb értékek elhagyásával
  38.   uint32_t atlag = 0;
  39.   for (uint8_t i = 1; i < (ANALOG_TM-1); i++){  
  40.     atlag +=AnalogM[i];
  41.   }
  42.   uint16_t  adc =  atlag / (ANALOG_TM-2);
  43.   uint16_t f = (50 * adc) + 100;
  44.   tone1.play(f);
  45. }


Bár a tone hang frekvenciák előállítására készült a felső határa elvileg 20KHz lehet!
(#) pipi válasza Tambi hozzászólására (») Júl 8, 2022 /
 
Miért lenne bármilyen rángás... Szoftverből olyan gyorsulást/lassulást csinálsz amilyet akarsz, a bemenő kezelőszerv ebből a szempontból lényegtelen. Ha mindenépp poti akkor, mint írták átlagolj, dobd el az alsó biteket, akkor a mért érték kevésbé ugrál. Vagy tegyál két potit, mint a tákonon is van, egy durva és egy finom beállítást, ha mindkettőt "kevesebb" biten digitalizálod (pl csak 256), sokkal pontosabb lesz a végeredmény
(#) lazsi válasza Tambi hozzászólására (») Júl 11, 2022 / 1
 
Amennyiben ekkora átfogásra van szükség, talán egyszerűbb lenne sima keveréssel megoldani uC helyett...
Kell egy 1MHz-es fix (kvarc-)oszcillátor és egy feszültségvezérelt / potival szabályozható változtatható frekvenciájú 1.0001 - 1.05 MHz között. A két jelet keverni és átküldeni egy 100-200 kHz-es aluláteresztő szűrőn.
A hozzászólás módosítva: Júl 11, 2022
(#) Tambi válasza lazsi hozzászólására (») Júl 12, 2022 /
 
Kedves Barátaim!

Köszönöm szépen mindenkinek a segítséget; hamar kiderült, hogy analóg vagyok egy digitális világban...

Marad az 555 10n - 1k + 10k +1M, kimenetről visszacsatolva.

Egyébként az AVR jeleit Rigol DS1054-el nézve meglepő módon a fentebb említett tone(13,f) függvény alkalmazása volt a legkevésbé instabilabb.

Köszönöm még egyszer mindenkinek!
(#) cua hozzászólása Aug 2, 2022 /
 
Egy kis orom-bodotta (legalabbis nekem) a mai naprol:
Olvastam mar ilyen-olyan kinlodasos, nem mukodos panaszokat es blogokat atmel mcu es Apple silicon talalkozasarol, ezert mar elore belenyugodtam, hogy az uj M1Pro chip-es macbook-om nem lesz alkalmas (egyelore) erre, majd marad a regi linux laptop hobby-ra, bar ruhellek ket geppel babralni.
Aztan miutan bealllitottam ma mindent az uj szerzemenyen, gondoltam belecsapok a lecsoba, jojjon a CLion es a PlatformIO (amugy Pycharm-ot es WebStorm-ot hasznalok foallasban).
Telepites (csont nelkul), teszt es voila. Semmi fennakadas, ment mint az agybavizeles.
Erre persze verszemet kaptam, felraktam az avra es avrdude parost kulon is, lassuk mire megyek az attiny10 eseteben az assembler-el es a regota hasznalt Makefile-os munkamenettel: sima ugy, semmi fennakadas.
Azt kell mondjam elegedett vagyok, ez nagyon kellemes meglepetes volt.
(#) mrobi hozzászólása Aug 7, 2022 /
 
Sziasztok!

Egy kis segítség kellene. Egy AVR-be kellene egy .bin kiterjesztésű fájlt beégetni. Milyen égető szoftver kell hozzá? Hardver egy USBasp lenne.
(#) pont válasza mrobi hozzászólására (») Aug 7, 2022 /
 
Pl. BASCOM
(#) dB_Thunder hozzászólása Aug 9, 2022 /
 
Sziasztok!

Atmega162-ben van valamilyen program, gondolom bootloaderrel.
Van e olyan megoldás amivel HARDVERESEN le lehetne tiltani a proci újra programozási lehetőségét???

Válaszokat előre is köszönöm!
(#) vargham válasza dB_Thunder hozzászólására (») Aug 9, 2022 /
 
Levágod az ISP lábakat.
(#) dB_Thunder válasza vargham hozzászólására (») Aug 9, 2022 /
 
"Előtte" egy fdti232 usb-uart van. Nem tudom, hogy az áramkor többi része használja e ezeket a misi-mosi lábakat ezért nem vagdosnék vakon !
Ezt bootloader dolgot sem értem, hogy lép be a proci programozási módba? ISP-n programoztam már, az világos, Arduinót is, de ott meg nem érdekelt eddig még, hogy mi megy végbe, és hogyan
Az lenne az lényeg, hogy usb kábelen keresztül véletlen se lehessen firmware-t frissíteni!
A hozzászólás módosítva: Aug 9, 2022
(#) vargham válasza dB_Thunder hozzászólására (») Aug 9, 2022 /
 
Idézet:
„nem érdekelt eddig még, hogy mi megy végbe, és hogyan”

Érdemes lenne utánanézned az AVR eszközök programozásának.
Tisztázni kellene pár dolgot.
Hogyan lehet programozni az eszközt? USB-n keresztül? Ezt szeretnéd megakadályozni? A legegyszerűbb törölni a bootloadert. Ha ez nem lehetséges, és nem kell másra az UART, akkor vágd el.
A hozzászólás módosítva: Aug 9, 2022
(#) tufatofu válasza dB_Thunder hozzászólására (») Aug 9, 2022 /
 
Én nem szoktam Arduinot "elpocsékolni" fix céláramkörben, hanem beleírom a programot egy chipbe, és azt használom fel. Lehet neked is megoldás ez.
(#) dB_Thunder válasza tufatofu hozzászólására (») Aug 9, 2022 /
 
Ahhh..
Ez egy kész áramköz, nem Arduino!! Nem én csináltam, nem én programoztam, viszont szeretném hogyha más (én) se tudjon firmware-t frissíteni usb-n keresztül, a gyári hozzá járó szoftverével sem!
Ha kell beleírom a frissítést az ISP porton keresztül.


vargham!
Az UART kell, azon keresztül beszélget a PC-vel
Idézet:
„Érdemes lenne utánanézned az AVR eszközök programozásának.”

Ha van erre megoldás akkor igen! Van ajánlásod ehhez?? Valami érthető észosztás..
Nem tudom hogy ki lehet úgy venni a bootloadert, hogy a normálisan működjön tovább. Jó esetben **.hex ami elérhető...
Azt nem tudom, hogy fizikálisan hogy lépteti a bootloader a uC-t programozás módba....
(#) Auf válasza dB_Thunder hozzászólására (») Aug 9, 2022 /
 
Szia!

Nos,a hw módosítás akár nagyon nyakatekert megoldás is lehet. Sok idő, energia. És nem is biztos, hogy szép lesz.
Tudom, hogy ez volt a kérdésed, de talán van gyorsabb megoldás.


A bootloader megoldása sokféle lehet. Talán nincs semmi extra benne. Ha ebből indulunk ki, akkor, első körben megnézném, hogy a BOOTRST (bootloader reset vector bit 233. oldalon) átállítás megoldja e a bootloader megkerülését.
A chip már nem a boot címen indulna reset után, így el sem indul a bootloader programja.
(#) dB_Thunder válasza Auf hozzászólására (») Aug 10, 2022 /
 
Ez a bit olvasható, írható akkor is ha le van zárva a program kiolvasás ellen?
(#) vargham válasza dB_Thunder hozzászólására (») Aug 10, 2022 /
 
Ha elérhető a hex, akkor egyszerű: ISP-n tedd fel. Ezzel törlöd a bootloadert.
(#) Auf válasza dB_Thunder hozzászólására (») Csü, 12:36 /
 
Ha a Lock bit byte -ban be van kapcsolva a védelem, akkor nem írhatóak a Fuse byte -ok.
Idézet:
„The status of the Fuse bits is not affected by Chip Erase. Note that the Fuse bits are locked if
Lock bit1 (LB1) is programmed. Program the Fuse bits before programming the Lock bits.”


Első lépésben kiolvasod a Fuse és lock biteket.

Ha pótolhatatlan vagy nagyon drága az eszköz, akkor az egész próbálkozás előtt, érdemes lehet kiszedni a chip-et és egy új, üressel próbálkozni. Így lesz egy visszaállítási lehetőséged.

A bootrst bitet application reset -re állítod.
Következő lépésben jöhet a teljes törlés(ha nem új chip-el csinálod). Mert csak teljes törléssel lehet visszaállítani a lock -ot.
Utána, ahogy vargham is írta, a hex birtokában feltöltöd a firmware-t, majd beállítod a Fuse biteket.

Remélhetőleg fog működni.
Következő: »»   830 / 830
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