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   716 / 840
(#) zombee válasza tothjanos hozzászólására (») Jan 17, 2016 /
 
Kijelzőt úgy szoktam programozólábra tenni, hogy programozás közben ne terhelje. Vagy a közös katód/anód vezérlő tranzisztorok mennek oda(min. 10k ellenállással), vagy a szegmensek, de úgy hogy a közös anód/katód meghajtótranzisztora a programozás alatt (magasimpedanciás állapot!) biztosan ne kapjon jelet. Nagyáramú fogyasztó (pl. 12A-es RGB LED-sor) esetén úgy jártam el hogy a programozás idejére lekapcsoltam a LED-ek főtáp bemenetét, így nem változott az áramköröm 115kHz-es rádióadóvá. Ugyanis amíg a LED-ek kb. 100Hz-es PWM-et kapnak, a programozó ennél 1000x gyorsabban ketyeg.
(#) zombee válasza Massawa hozzászólására (») Jan 17, 2016 /
 
A JTAG az sajnos nem teljes értékű port, vagy az egyik, vagy a másik(lásd: JTAGEN fuse bit).
De legalább az a 4 láb dedikált programozóláb lesz, és nincs speciális(pl. I2C, UART) portfunkciójuk.
Nagyobbaknál ADC, de abból van még másik 4.
A hozzászólás módosítva: Jan 17, 2016
(#) tothjanos válasza zombee hozzászólására (») Jan 17, 2016 /
 
A kijelzőt pontosabban ilyenre gondoltam:vBővebben: Link
Ez egy TFT kijelző.
Hogy szokták azt megoldani,hogy a kijelző fényerejét állítsam AVR-ből?
Elvileg 3.3V-os táp kell neki, és a led háttérvilágítás 2.7V-os (30mA). Az AVR(Atmega328p)-em 5V-os.
Csinálok közéjük egy 5V-3.3V-os stabilizátort (AMS1117).

Viszont ezt a LED háttérvilágítását hogy? PWM-el esetleg 5V-al? vagy 5V és egy soros ellenállás (50-100 ohm) és PWM? n-fet?
(#) Dudus válasza tothjanos hozzászólására (») Jan 17, 2016 /
 
En pwm-mel csinalnam.
(#) Massawa válasza zombee hozzászólására (») Jan 17, 2016 /
 
Chiptöl függöen az ISP vagy a JTAGot használom, eddig soha semmi gond nem volt velük ( ha már ment), pedig igen gyakran van a JTAG lábakon más felhasználás is ( valami más is oda van kötve).
(#) zombee válasza Massawa hozzászólására (») Jan 17, 2016 /
 
Persze, lehet rákötni mást is, de a JTAGEN nevű fusebit értékétől függően vagy programozóláb, vagy használható port. A kettő együtt soha nem megy.
(#) csabeszq hozzászólása Jan 18, 2016 /
 
Lenne egy kérdésem szervó ügyben.

Lehet az ebay-en shieldeket kapni. Ezek tüskékből állnak és egy nano-ra (Atmega328P) fel lehet pakolni vagy 20 szervót.

Ez tényleg csak ennyiből áll, hogy az AVR +5V tápjára felkötök 20 szervót és berakok valami komolyabb +5V-os tápot neki?

Mégiscsak motorokról van szó, azért érdekelne, hogy egy 2A-s +5V-os tápra rányomok 20 szervót, ami ugyanazt a feszültséget használja mint a mikrovezérlő, akkor ez menni fog-e?
A hozzászólás módosítva: Jan 18, 2016
(#) RoliNyh válasza csabeszq hozzászólására (») Jan 18, 2016 /
 
Ekkora teljesítményben mindenképp érdemes külön tápot adni a szervóknak szerintem...
(#) csabeszq válasza RoliNyh hozzászólására (») Jan 18, 2016 /
 
A gond az, hogy össze vannak drótozva, de látom olyan termék is van, ahol nincs összedrótozva, hanem külön szervó és MCU táp van.
(#) Massawa válasza csabeszq hozzászólására (») Jan 18, 2016 /
 
Akkor a táp meghalt.
Szervonként ( még a mini szervoknál is) min 1A-t kell számolni, és nagyon kemény tápot (eredetileg akkukra lettek tervezve).
A hozzászólás módosítva: Jan 18, 2016
(#) tothjanos hozzászólása Jan 18, 2016 /
 
Sziasztok!
Adott a következő IC: SN75176 (RS485 protokoll)
Ha AVR-re kötöm, akkor a /RE és a DE lábakat összekötöm és ez egyből mehet egy AVR lábra, vagy ide is kell valami felhúzó vagy lehúzó ellenállás? Olvastam valahol valami ilyesmit,és ezért kérdezem inkább.

Köszönöm
(#) zombee válasza tothjanos hozzászólására (») Jan 18, 2016 /
 
Érdemes egy lehúzót tenni oda(mondjuk 1k). Ökölszabály, hogy amikor az AVR RESET-ben van, az erősítős kimeneteket is inaktiválni kell. Az R kimenetre (AVR-en bemenet) egy felhúzót(~10k) érdemes, mert amikor küldesz, akkor az nagyimpedanciára vált és a TTL szintű UART inaktív állapotban mindig logikai magas.
(#) tothjanos válasza zombee hozzászólására (») Jan 18, 2016 /
 
Köszönöm szépen!
(#) Tetye hozzászólása Jan 18, 2016 /
 
Van egy elmebeteg kérdésem
Valaki próbálkozott már olyannal hogy AVR-t programozzon AVR-el, egy flash vagy eprom tartalmából?
Szeretnék megvalósítani egy olyan dolgot hogy AtMega2560 és Wiznet W5100 eth-val épített panel, olyat tudjon, hogy az AtMega egy webszerver amin van egy "upload" menüpont. Abban ki lehet majd tallózni egy HEX file-t amit gombnyomásra feltölt a PC a szerverre ami pedig tárolja egy RAM vagy Eeprom IC-ben. Ha a letárolás megvolt, az AtMega újraindulna, és akár egy Mega238 segítségével vagy magától bootloader-en keresztül felégetné a flash-ébe azt a HEX file-t.
Tulajdonképpen a terv az hogy weben keresztül tudjak rajta "firmware"-t frissíteni.
Még elméleti síkon próbálkozom csak, olyat már találtam hogy SD kártyáról kerül felégetésre egy Arduino segedelmével, de azt még nem tudom hogy a "feltöltés"-t hogy lehetne megcsinálni. Bár SPI-n MP3-at is le lehet játszani ami több mega szóval talán az is működne hogy SD kártyára kerüljön a HEX fájl a weben keresztül. Onnan már csak az SD-t kéne lecserélni vagy egy másik AVR-re vagy valami egyéb memória IC-re. Azon is gondolkodtam hogy maradna az Arduino-s bootloader, és megpróbálni soros porton feltölteni a HEX-et valahonnan. Ezekben a témákban még nem vagyok túl fejlett, így tapasztaltabb kollégák javaslatait/ötleteit szívesen venném.
Leginkább a Bascom nyelvet részesítem előnyben, de úgy ahogy az Arduinóval is elboldogulok.
Köszi a válaszokat előre is!
(#) csabeszq válasza Massawa hozzászólására (») Jan 19, 2016 /
 
Ezt jó, hogy mondod. 20 szervót rá lehet kötni, de vezérelni csak 2-t fogok egyszerre.
(#) csatti2 válasza Tetye hozzászólására (») Jan 19, 2016 /
 
Természetesen megvalósítható. Viszont nem annyira egyszerű. A gond, hogy az ATMega nem egy erőgép és egy flashnyi adat folyamatos küldése és feldolgozása (pl. SD kártyára írása vagy külső flash IC-re mentése) nem biztos, hogy megy. Én egy hasonló funkciót (képek letöltése webszerverről, majd átkonvertálása és SD-re mentése) ATXMega-val odottam meg DMA-val és külső SRAM-ba mentéssel (aminek videomemória volt az elsődleges feladata persze). Így már elég gyors volt, hogy a külső webszerver ne akarja megszakítani a kapcsolatot a "lassú" ügyféllel. Ebből is látszik, hogy a hagyományos feltöltés valószínűleg nem fog menni, ezért valamilyen kliens oldali scripttel kell majd megoldani az adatok adagolt küldését és akkor nem probléma ha csak egyszerre mondjuk 256 byte-ot tudunk feldolgozni és van idő azt kimenteni is.

Második probléma, SD vagy külső flash + bootloader. Extra AVR használata csak a frissítéshez elég feleslegesnek tűnik, inkább kell keresni egy jó vagy már majdnem jó bootloader-t amit erre a célra írtak és azt kell testreszabni. Az SD kártyának értelemszerűen komoly előnyei vannak egy flash IC-hez képest (olcsón óriási tárhely) és egy nagy hátránya, hogy a programban implementálni kell egy fájlrendszer kezelést is (főleg a bootloader oldalon gond, ahol jóval kisebb a rendelkezésre álló hely) az SD kártya SPI-os kezelésén felül (FatFS elég jó cucc). A flash IC-t viszont könnyebb kezelni és tárolhatod az adataidat rajta előre fixált címeken (könnyű implementálni a bootloader-ben is), az ára pedig 2Mbites kivitelben jóval olcsóbb mint az SD kártya és a foglalat.

Elérkeztünk a harmadik ponthoz, Bascom. Gyanítom, hogy nem úszod meg C kód írása nélkül ezt a projektet.
(#) Tetye válasza csatti2 hozzászólására (») Jan 19, 2016 /
 
Hát most nagyon lelomboztál, C valahogy sosem ment hiába próbálkoztam vele már többször is. De akkor lehet hogy nézek valami kínai DSP-s panelt egy linuxal.
Xmegát még sosem használtam, azért gondoltam a mega2560 mert az van itthon és tudok vele próbálkozni.
De azt hiszem így inkább lemondok a kis tervemről.
köszi az infót.
(#) Massawa válasza csabeszq hozzászólására (») Jan 19, 2016 /
 
Az mindegy. A szervok akkor is éhesek ha állnak. Ezt egyesek ugy küszöbölik ki, hogy az állo szervokba megszüntetik a tápot.
Sima szabály továbbra is, ahány szervo van egy procira akasztva annyi Amper kell a tápbol. Én 8 mini szervot kezelek egy procival (azokat sem egyszerre) mégis kellett a 12V/6A táp. A 3 A-s egyszerüen összeomlott.
(#) atideath hozzászólása Jan 19, 2016 /
 
Sziasztok

Szenvedek egy kicsit itt a char és a String átalakításokkal. Szeretnék EEPROM-ból kinyerni adatokat és azt egy String-be menteni de folyamatosan kifagy a program ha oda jutok. Biztos én rontok el valamit remélem valaki tud segíteni.

  1. String apiKey = "MAS281CIP7V";
  2. void readFromEEPROM(){
  3.   String readKey="";
  4.   for (int i=96; i<128;i++){
  5.     readKey+=char(EEPROM.read(i));
  6.   }
  7.   apiKey=readKey;
  8. }


Itt az utóbbinál hal meg amikor az apiKey-t szeretném felülírni a readKey-el. Valaki tud esetleg segíteni?
(#) csabeszq válasza Massawa hozzászólására (») Jan 19, 2016 /
 
Ezt kipróbálom. Mármint, hogy a kívánt pozíció elérése után megszüntetem a servo jelet (konstans földre rakom) az 50 Hz impulzusok helyett.

Értelemszerűen ha 50 Hz-en kiadsz 1.5ms HI + 18.5 ms LO jel mellett, akkor a szervo elfordul és beáll. A hangján hallani is, hogy mozog valamennyire. De utána ha megszünteted a PWM jelet szerintem kikapcsol.

Legalábbis erre emlékszem.
(#) killbill válasza atideath hozzászólására (») Jan 19, 2016 /
 
Ez milyen nyelven van?
(#) Massawa válasza csabeszq hozzászólására (») Jan 19, 2016 /
 
Az nem jo. Nem a szervo jelét kell megszüntetned hanem a tápot. Ha nem lesz jel a szervo meghülyül..
(#) zombee válasza atideath hozzászólására (») Jan 20, 2016 /
 
Gondolom ez C++ lehet, először Java-ra gondoltam de ott new operátort használunk.

A programmal az a baj (ami egyébként Java esetén nem fordulhatna elő), hogy a függvény végén a pointert másolod át, majd kilépsz. Az AVR ekkor pontosan azt csinálja a readKey-el (pontosabban a pointerével), mint minden stack-en definiált változóval: törli. De nem csak a pointert veszi ki a stack-ből, hanem a tartalmát is felszabadítja a heap-en. Innentől az apiKey egy érvénytelen memóriaterületre fog mutatni, amit ha használni kezdesz, különös dolgok történhetnek. De történik más is: a függvény végén az apiKey pointert lényegében eldobod, a tartalma(általa elfoglalt terület) viszont ottmarad a heap-en, foglalva azt.

Megoldás: rendes másolófüggvényt alkalmazol, és nem a pointert másolod. Java esetén e két hiba teljesen jó működést eredményezne, mert a pointer átmásolásával a területet "forgalomban tartod", míg az eldobott régi pointer által jelölt területet a garbage collector felszabadítja. Igaz, nem túl optimális, de ettől még működik.
A hozzászólás módosítva: Jan 20, 2016
(#) atideath válasza zombee hozzászólására (») Jan 20, 2016 /
 
Megtaláltam a hibát. Egyébként C++ nyelv. A probléma azzal volt hogy amikor karakterenként pakolja át a dolgokat String-be nincs a végén lezáró karakter. Még kellett hozzá egy "0x00" és így működik megfelelően.
(#) csabeszq válasza Massawa hozzászólására (») Jan 20, 2016 /
 
Ezt szeretném kipróbálni. A dokumentáció azt írja, hogy ha nincs jel, akkor nem csinál semmit a modell servo (SG90).

Ezt fogom kielemezni fogyasztás szempontjából is, jelenleg még nem volt rá elég időm.

Azt egyébként nem hiszem el, hogy meghülyülne attól, ha folyamatosan nyomom a RESET gombot az Arduinon, ezért nincs PWM output. Én a konstans 0-t a normális bemenetek közé sorolnám.
(#) Massawa válasza csabeszq hozzászólására (») Jan 20, 2016 /
 
Ha akarod videon is be tudom mutatni. De nyugodtan probálkozz, a szervo karjára ha bármilyen erö hat, akkor az automatikusan és állandoan igazgatja az állást, hogyan lehet ezt áram nélkül megoldani azt még Einsteins sem tudná, csak egyes e-okosok irkálnak ilyemit a világhálon.
Ha nincs PWM output akkor a bemeneti differenciál erösitö azt sem tudja mit tegyen, a szervonak kell a stabil helyzetállapot és az orajel ( mindkettö a bemeneti jelben van.)
(#) csabeszq válasza Massawa hozzászólására (») Jan 20, 2016 /
 
Nem volt időm tegnap bemérni, a héten valamikor megcsinálom.
(#) AxaGame válasza Massawa hozzászólására (») Jan 20, 2016 /
 
Bocsi, nem szeretnék belemélyedni nagyon, de azt gondolom, kicsit másként értitek egymást.

Tapasztalatom szerint a modellezésben használt szervók karját el lehet forgatni, ha nincs pwm jel, amely a pozíciót adja. A táp folyamatosan rajta maradhat. (Sőt, én biztosan nem is venném le, hiszen ez digitális cucc, ahol lehetnek problémák az állandó ki/be kapcsolgatással.)
A "differencia" képzés csak akkor indul el, ha jön egy vezérlő impulzus a bemenetre. Fontos, hogy a pwm jelet, amit a proci előállít stabil legyen, mert különben hibajel keletkezik a szervóban és apró tüskékkel próbál majd "beállni" a helyes pozícióba.

Massawa teljesen jól javasolja, hogy ne tervezd alul a tápot, mert azért ezek a kis motorok is "harapnak", de csak ha van amper.
(#) Massawa válasza AxaGame hozzászólására (») Jan 20, 2016 /
 
Részben igen részben nem, de az állapot nem stabil, ha nincs PWM jel. Nekem is van >50 szervom, van amelyik PWM nélkül elfordithato, de egy idö után elkezd rángatni. Szerintem ez az állapot nincs kezelve, igy szolgálhat meglepetésekkel, ezért jobb kerülni.
Én már kénytelen voltam letesztelni, a modelljeimben a szervok mind hibátlanul müködtek az asztali berendezéseimben (én is sporolni akartam a tápon) meg kitapasztaltam minden csapdát. Ma már ott tartok, hogy 7 darab 12V/5A kezel közel 45 beépitett szervot, és még jön néhány).
(#) csabeszq válasza Massawa hozzászólására (») Jan 20, 2016 /
 
Kicsit megdobja a költségeket, azért érdeklődtem.

PCA9685 - 16 csatornás servo driver ~1000 Ft

Ha még külön tápkapcsolgatás is van, akkor
2xI2C IO expander ~ 1400 Ft
16x IRF9Z34 FET ~ 2000 Ft

Szóval több, mint négyszerezi a költséget, ezért érdemes mélyebben belemászni.

Az is kérdéses, hogy az általam használt servo motor hogyan működik. Nem univerzálisat szeretnék, arra legyen jó, amilyen szervókat használok.
A hozzászólás módosítva: Jan 20, 2016
Következő: »»   716 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.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