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
Már próbálkoztam, de csak egy kérdőjelet kapok végeredménynek.
Hello!
Ha ilyet akarsz...
...akkor időzítő interruptot kell használnod, vagy az _delay_ms() helyére a kijelzőrutint kell tenned. Ez utóbbi egyszerűbb:
Ha 7 szegmenses kijelzőt használsz, akkor a multiplexáláshoz mindenképp érdemes időzítő interruptot használni. Ekkor te csak egy (volatile) változót írogatsz át, amit az interrupt dekódol és kiküld a kijelzőre. 7 szegmenses kijelzőnél pedig - szerintem - alap a shift regiszter(pl. 74HC595) és az SPI használata. Nekem sem sikerült legelsőre(kb. 2 éve volt), de hamar összehoztam egy működő kijelzőrutin-sort. Én az SPI átvitelhez is interruptot használok, természetesen. Ha már magyarázok, bemásolom az általam megírt és használt kijelző-rutinokat:
Itt simán lehet ugyanúgy számolni, mint egész számoknál.
Közben rájöttem, hogy mi volt a gond. A projekt beállításoknál szúrtam el egy dolgot, már jó a lebegőpontos kijelzés.
Sziasztok!
Tegnap edisonnal megtaláltuk a hibát. Hátha valaki ugyanebbe a helyzetbe kerül elárulom mi volt a galiba. A Bascom belső programozója hiába írja azt hogy támogatja az USBasp-t mégsem programozta fel rendesen. Miután megpróbáltam a khazama égetővel programozni az AVR-t egyből működött. Jó sokat szívtam vele . Újjabb kérdés. Akarok motorra csinálni egy kis kijelzőt. Az akksi figyelés megvan, a hőmérséklet mérés megvan, sebességi fokozat kijelzés megvan, már csak egy kicsike problémám van. Amikor LCD-re akarom kiíratni a sebességet és a fordulatot akkor maga a szám folyamatosan villog (holott most csak egy konstans értéket iratok ki ami nem változik). Minden más meg normálisan működik, magyarul nem villog. Valakinek valami ötlet?
Ha WinAVR-el fordítod, akkor a Makefile-ba állítsd be a float típust a printf() menüpont alatt, és máris nem ír kérdőjelet.
Termeszetesen villogni is fog, mert nem mindig ugyan azt irod ki: eloszor letorlod a teruletet, majd utana kiirod a szamokat, aztan megint letorlod, es megint kiirod a szamokat.
Hello
Én úgy ugrottam neki, hogy irtam az amper és a volt kijelzésre egy void fesz() és egy void amper() -t és a főprogramban ezt hivtam meg. Viszon így nem értem el vele a kívánt sikert, ha az Ampert írtam előre, akkor csak azt jelezte, ha az feszt, akkor azt, és nem volt semmiféle váltogatás. Olyasmit szeretnék összehozni, mint amit az első programban írtál, de sajnos nem nagyon értem. A 7 szegmensű kijelzőt nem multiplexeléssel írtam meg, hanem egy kijelző vezérlő ic vel.
Nem tudom hol irod ki a szamokat, de nekem ugy tunik, hogy minden alkalommal letorlod a szamot (space-ekkel felul irod), majd elkepzelesem szerint (mert ezt a reszet nem osztottad meg velunk) valahol ujra kiirod. Namost ha kozben varakozol, akkor egy kis ideig ugye semmi fem lesz a kijelzon, majd megint lesz valami es igy tovabb, tehat villogni fog.
A legjobb modszer erre en szerintem ha nem irod felu space-ekkel a helyet, hanem kiirod a szamot es az a rutin biztositja, hogy a szam elott vagy utani resz torlodjon ahogy szukseges... C-ben printf-el eleg egyszeru megcsinalni ezt, Bascom-ban nem tudom, nem ismerem -- lehet manualisan kell kiszamolnod a kiirando szam hosszat.
Sziasztok!
Vasaroltam egy Atmega16-ot, elkeszitettem hozza a panelt es hala Istennek mukodik minden tokeletesen. Kerdesem leene hogy miert van kuldom az Avcc es az Agnd? Kossem ra simman a vcc-re es a gnd-re?
Simán rákötheted. Azért van külön, mert az az analóg rész, az ADC tápfesze. Ezt lehetne szűrni is, hogy minél stabilabb legyen, ne ingadozzon, mert akkor ez befolyásolja az ADC mérési eredményét. Az adatlapban ha jól tudom van is példa a szűrésre.
Az AGND az szerintem mehet simán a GND-re még analóg mérésnél is, egyedül az AVCC-t kell szűrni.
Egyébként, ha nem végzel analóg mérést, sima portlábként használod a PORTA oldalt, akkor összekötheted az AVCC-t a VCC-vel. Az adatlapban megadott értékek viszont hibásak, mert a szűrésnél nagyobb tekercs(minimum 47uH) és nagyobb kondi(minimum 10uF) aminél a zavarás már elhanyagolgató volt. Ha valaki profi akar lenni, vegyen/igényeljen 12-16 bites I2C felóletű ADC konvertert(sok ilyen Microchip és Texas termék van), kösse rá egy I2C izolátorra(pl. ADUM1250) és akkor semmilyen zavar nem fog belemenni...
Sikerült megoldani a problémát két for ciklussal
Mennyire nagy tekercset tehetek, akar 100 uH?
Kondibol lehet 100 uF?
Ha nagyobb az nem probléma, lehet 100uH tekercs és 100µF kondi is, kondinál a polaritásra ügyelj.
Különböző nézőpontok vannak arra, hogy az un. analóg föld és analóg tápot hogyan kell elválasztani a digitálistól. Egy azonban biztos: Ha adott egy IC-d, amin van analóg és digitális föld is, akkor azt mindenképpen közvetlenül kell összekötni a lehető legrövidebb úton.
Ami az analóg tápot illeti (jelen esetben ugye AVCC), ott ízlések és pofonok, hogy ki hogyan jár el.
"Egy azonban biztos: Ha adott egy IC-d, amin van analóg és digitális föld is, akkor azt mindenképpen közvetlenül kell összekötni a lehető legrövidebb úton."
Ha ez igaz lenne, akkor nem csinálnának neki két kivezetést, hanem rögtön a tokon belül összekötné a gyártó. Az ilyen összekötésből tud kialakulni jó kis digitális zavar az analóg bemeneten. Szerintem az analóg földet a mérendő analóg feszültség földpontjára kell kötni. Ha elég kicsi a mérendő jel, vagy nagyon pontosan kell mérni, akkor teljesen különálló vezetékkel. Hasonló az eset, mint az erősítők esetén, ahol a kisjelű és a nagyjelű földeket csillagpontosan kell összekötni, hogy a nagyjelű rész áramai ne okozzanak visszahatást, zavart a kisjelű áramkörökben. Én jártam már úgy, hogy egy áramkör digitális részének áramimpulzusaiból eredő zavart csak úgy tudtam megszüntetni a hangfrekvenciás fokozatokban, hogy több méterre "vissza" kellett vezetnem az analóg GND-t. Olyan megoldást is használtunk, hogy egy panelen külön volt az analóg és a digitális GND vezetékelve, és egyetlen ponton voltak összekötve, a panelen lévő stabilizátorokhoz közel. Itt viszont relatíve nagy analóg jelek voltak (2V effektív).
Azert az eros tulzas, hogy tokon belul ossze lenne kotve, mert akkor nem lennenek olyan IC-k sem, amelyeknek tobb VCC es GND laba van.
De a tobbiben igazad van, csak azzal egeszitenem ki, hogy a kulonvalasztaskor arra kell ugyelni, hogy a GND-k es AGND kozott nem lehet nagy feszultseg kulonbseg. .(Adatlap irja a maximumot, emlekeim szerint 0.5V koruli ertek.)
A digitális zavarból eredő eltérések millivoltos nagyságrendűek, természetesen. De ez már be tud zavarni...
Én jártam már úgy - igaz, itt digitális bemenetekkel - hogy a belső 47kOhm felhúzó ellenállást használtam egy 3 méteres vezetéken, hogy a másik végén lévő nyomógombot érzékelje. Ez még működött volna, ha a nyomógomb mellett nincs egy LED-sor amit szintén az AVR(egy tranzisztoron keresztül) vezérelt. Ahogy a LED kivillant, a nyomógombos vezetéken vissza is rúgott rendesen. Úgy, hogy lenyomást is érzékelt, ami az alkalmazott rendszerben nagyon nem volt kívánatos, lényegében: meghülyült! Itt már biztosan kellett egy -2.5V-os impulzus, anélkül nem érzékelte volna. Visszatérve: a tápforráshoz nagyon közel külön kell ágaztatni a digitális és analóg földet+tápfeszt, HA valóban analóg méréshez kell. Egyébként egy IC-nek(mindegy hogy analóg vagy sem) azért van több föld és táp lába, mert így az IC áramfelvétele egyenletesebben oszlik el. A lábakat és a szilíciumlapkát összekötő aranyhuzal nagyon vékony...
Sziasztok
Megerősítést szeretnék kérni. AvrStudio4 progival , avrtavir-es STK500 programozóval, atmega88 chipet használva, be szeretném állítani a kódvédelmet, magyarán h más ne tudjon kiolvasni semmi t a chipből. A LOCKBiteknél a BLB0 és BLB1 biztosítékot LPMand SPM prohibited in ... -ra állítva még kiolvasható minden nem ? az LB -t is át kéne állítanom, akkor viszont ha frissülne a programom akkor én se férek hozzá a chiphez többet. <- Ezt jól sejtem, vagy nem ?>
Most így hirtelen az Analog devices oldalát tudom linkelni, ahol ők ezt javasolják: Bővebben: Link
Az ő iránymutatásaik a termékeikkel kapcsolatban rendszerint helytállóak a véleményem szerint. Bővebb kifejtést itt lehet tőlül találni: Bővebben: Link Illetve egy nem Analog devices oldal, de egy érdekes szemlélet, ami kellőképpen indokolva lett szerintem: Bővebben: Link
A BLB0 és a BLB1 fuseok csak az SPM és LPM utasításokat tiltják meg. Amit te szeretnél az a LB állítása. Ekkor nem lehet kiolvasni a kódod. Ha ezeket beállítod, akkor az Erase Device parancs után megint tudod írni az AVR-t. Ekkor a lockbitek nullázódnak, illetve ez a parancs kitörli a programmemóriát.
Aggódni nem kell, a lockbitekkel nem tudod magad kizárni a programozásból.
Köszönöm sikolymester
Megnyugodtam , attól féltem hogy kizárom magam. Még a kezdetek kezdetén volt rá példa, aztán nem akarok visszaeső chipkizáró lenni További szép napot! Zoli
Illetve bocsánat még egy kérdésem lenne.
Egy ATTINY26 os chipre is van egy programom , az viszont .rom kiterjesztésű, és a studio-val nem tudom felprogramozni . A flash fájlnál kell gondolom kiválasztani , alapból ugye nem is tudom , mert vagy .hex, vagy .a90 kiterjesztésű lehet, de a minden fájllal ráerőszakolom és a program gombra a folyamatjelzőnél ezt kapom : Getting isp parameter.. SD=0x0c .. OK The specified file is not a valid Intel HEX file Erre valami tipp valakinek? Ezt is jólenne felprogramoznom valahogy. Programozó még mindig stk500, és egyenlőre az AVR Studio van programként. Zoli
Az elvileg egy codevision fordító által generált program. Mivel más szabványt használ, mint az AVRStudio, így közvetlenül nem is fogja tudni az felprogramozni. Így hirtelen azt javaslom, hogy töltsd le a Chipblaster programot, ami a codevision különálló flashelő programja. Ez ugyan kódkorlátos, de van egy olyan érzésem, hogy az attiny26-nak a maximálisan lehetséges kódja is belül esik ezen. A program működik a járatos programozókkal, így az stk500(klónokkal) is.
Ebben mondjuk a fuse bit jelölés kicsit félreérthetően van azt hiszem, így javaslom, hogy szedd le a pipát a "Program Fuse Bit(s)" résznél. Illetve a Program/Flash parancsot add ki, miután betöltötted a .rom filet. Így tuti nem fogod átprogramozni a disable reset láb fuse-t pl. .
Szia
kipróbáltam ugy hogy adtam tápot, és ugy hogy csak a programozóról kapott, ez a hibaüzenetem ami csatolva van. Úgyfest ehhez lett kitalálva mert a project fájlom is megvan, azt betöltve, tulajdonságainál a rom és eep fájlt kiválasztva , program all fülnél a fuse biteket (elővigyázatosság miatt) kipipálva, majd a program/flash gombra kattintva jött elő ez a hiba. A settingsnél az ATMEL stk500 lett kiválasztva COM port stimmel. Már azzal is játszottam hogy a rendszertulajdonságokban a programozó baud rate-jét átállítottam 9600ról más értékre de ugyanaz.. Valami tipp?
Úgyfest probléma orvosolva van , mert a chipblasterrel betöltöm, és újra elmentem a fájlokat .hex -be és így már a studioval is tudom programozni . Örülés van
Zoli
Egy gyors kérdés.
Van két jelem: 0...12V Amplitúdó, 164Hz frekvencia 0..5V Ampli, 1130 Hz Meg tudom ezt mérni valahogy Atmega8-al? Ha igen akkor hogyan? Köszönöm előre is!
Természetesen az a kérdés, hogy mennyire pontosan vagy rá kíváncsi. Shannon törvény ugye 2x mintavételi frekvenciát jelent. De ha szeretnél is valamit kezdeni a mintavételezett jeleddel, akkor minél nagyobb a mintavételezés frekvenciája, annál jobb.
Jobb híján megnézed az adatlapot, hogy a nyers számok mit mondanak az ADC mintavételi sebességéről. Ha az egy nagyságrenddel meghaladja a mintavételezni kívánt jeled, akkor a válasz az az, hogy meg lehet mérni. Azt, hogy pedig hogyan teheted ezt meg: Beállítod az ADC modult, majd meghatározott időközök között, pl egy timerra illesztett interrupt segítségével mintavételezed a jeleket egy tömbbe. És máris megmérted a jeleket. A 12V-os feszültségű jelet természetesen egy feszültségosztóval szintilleszted.
Nem igazan az aranyhuzal a szuk korlat, mert abbol legfeljebb egy nagyobb padre tobbet bondolnanak, hanem a femezesi retegeken(ami mar nem aranybol van ugye) kialakitott vezetekezesen nagy a vesztesseg. Azert is rakjak kulon oldalakra a tapkivezeteseket, hogy a femezesi retegen a bekotestol szamitott maximalis tavolsagot csokkenteni lehessen.
Konkrétan nekem nem is a frekvencia lenne a lényeges hanem az amplitúdó. Mennyire kell pontos? Ez a motoromon a sebesség és a fordulatszám. Ebből kellene meghatároznom. Végülis a Hz az mindig ugyanannyi.
|
Bejelentkezés
Hirdetés |