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
Mi működik ? Mivel mindkét lib-re azt írtad,hogy nem.Szerintem nem ez a target c.
A hozzászólás módosítva: Jan 12, 2016
Ez a pár sor nem véletlenül egy fájlban van, amit a főprogramból include-olsz be?
Legegyszerűbb lenne a project optionsba beírni. A kis fogaskerék ikon. Akkor nem is kell a defone-okkal szórakozni.
Finoman erre célozgattam.
Én mindig kívülre rakom az órajelet, megszokásból és rendszerint újrahasznosítható kódot írok. Van egy csomó lib (NeoPixel, UART,...), ahol számít az órajel és nem óhajtom egyesével mindegyikre beállítani. Kevésbé finoman megfogalmazva: rossz gyakorlat az órajelet a C fájlba kódolni. Ha headerbe kódolod, az sem túl jó, de jobb, mintha C-be raknád. A jó gyakorlat az, ha modulárisan programozol, újrafelhasználható módon. Az órajelet kívül definiálod és a moduljaid (UART/TWI/PWM/...) automatikusan számítanak mindent az órajel függvényében. Azaz beállítod, hogy az UART 9600-on megy, vagy 100kHz-s PWM-et adsz ki, a modulod meg kiszámolja F_CPU segítségével a beírandó értéket. Ezután a kódod menni fog Atmega328P és Attiny85 alatt egyaránt, függetlenül attól, hogy milyen órajel alatt futnak.
Köszönöm. Úgy tűnik ez lesz a "profi" megoldás.
killbill: a Droot, csabeszq, rolandgw által leírt módszertől. Kovidivi: Nem. Main.c rolandgw: Mindegy, az első javaslatod volt a jó. Eztán így teszek. Más: Az LCD meghajtáshoz visszatértem a Fleury féle lib-hez. Már csak egy kis rutint kell írni, ami float számot megjelenít. De hátha lesz a Neten...
sprintf(), vsprintf(), snprintf(), vsnprintf()
Nem teljesen ide tartozik, de azért leírom: Fleury-féle LCD könyvtárba érdemes valami timeoutot berakni a busy flag beolvasáshoz, mert ha pl. tönkremegy az LCD, megszakad a vezeték, stb, akkor lefagy a program, mert végtelen ciklusba kerül, örökké várni fogja, hogy visszajelezzen az LCD.
Én ezt használom LCD-hez,kiegészítve egy pár függvénnyel.
A hozzászólás módosítva: Jan 13, 2016
Sziasztok!
Szeretnék akkumulátor feszültséget mérni AVR-el(nem a sajátját), de közös GND-vel. Arra gondoltam,hogy egy feszültségosztóval és egy 5V1-es Zener diódával csak rákötöm az analog inputra és beolvasom,hogy mennyit mér. Ez eddig rendben is van,de ha az AVR VCC-je megszűnik,akkor az analoginput védődiódáján(a belső védő diódára gondolok) áram fog folyni és onnan fogja táplálni az AVR-t és nem ez a cél. Ezt hogy tudom megoldani? Esetleg egy nagy (100kOhmos) ellenállást tennék sorosan az analog inputra? Ilyenkor nem fog nagyon zajos lenni a bemenet? Nem annyira fontos a jel.
Mikor megszűnik a tápfesz rakd resetbe az AVR-t. Vagy használj 1.1V-os referenciát, ekkor a bemenő feszültség sem lesz 1.1V-nál nagyobb, erről pedig nem megy az AVR. Minek kellene a zener, ha akkuról van szó? A feszültségosztó legyen több 10-100kohm értékű.
Az akkumulátor aminek a feszültségét szeretném mérni, az 12-14 voltos, így a feszültségosztó kell, bár így tényleg nem szükséges a zener.
Köszönöm a tippet!
Lehet még egy REED relét rakni az akksi oldalra. Egyrészt megszűnik az általad leírt problématáplálás a mérőbemenetről), másrészt az akksit sem fogja szívni az osztó amikor az AVR éppen RESET-ben van. Ja és gondolom nem mérsz minden pillanatban feszt, a REED pedig elég gyors ha éppen mérhetnéke támad...
Ez kifejezetten jó ötlet, Köszi köszi köszi!
Annyit valaki tud segíteni ebben,hogy ennél a kristálynál hogy vannak a lábak? http://www.hestore.hu/prod_10028680.html Adatlap: http://www.hestore.hu/files/smx12.pdf Adatlap szerint, a bal alsó és a jobb felső között van a kvarc, a másik kettő föld(gondolom én). A tervező program szerint,ha ezt a pattern-t lerakom,akkor az első láb a bal alsó és ott is a pötty. Van egy példány itt nálam,ezt multiméterrel vagy valamivel kitudom mérni?
Analóg bemenetet sose védj zener-el. Nagy a szivárgó árama, ráadásul nem lineáris, a letörési feszültséghez közeledve egyre nő és így csúnyán meghamisítja a mérést. Schottky diódát szokás analóg védelemre használni. 5V-os (digitális) bemenetekhez egyébként inkább 4V7-est illik használni zenerből is.
A kristály valószínűleg a B kivitel lesz. Az R szerintem a reel (tekercs) kivitelre utal, az adatlap szerint a B a preferált típus. Az A csak két lábú, a C-nél pedig összekötötték párban a lábakat. Multiméterrel megpróbálhatod összecsengetni a lábakat és akkor biztos lehetsz a dolgodban. Az ilyen tokoknál előfordul, hogy a nem használt lábakat hozzákötik a házhoz, megpróbálhatod így is kicsengetni. Figyelj oda, hogy az ábrákon a footprint felülnézetben, viszont az alkatrész rajza a lábakkal és lábszámokkal alulnézetben látszik. A hozzászólás módosítva: Jan 15, 2016
Köszi szépen!
Megnéztem, 4 lába van,ez a B kivitel. Az egyik sarka le van vágva. Ez alulnézetből a bal alsó vagy a jobb felső,attól függ hogy forgatom. E jelölt pin(vágott sarku) és a vele szemben lévő pin között az ellenállása 0.04Ohm. A másik átlósan szemben lévő pin között meg nagyon nagy az ellenállása (>2Ohm). Csatolok egy képet,ezen látszik. Jól gondolom,hogy a kis ellenállású pin az közösített pin(Ezt hova szokták kötni? GND-re?), ahol a 2 pin nagy ellenállású az a kristály 2 lába?
A "4-lábú" SMD kristálynál a kristály lábai átlósan szembe vannak. A másik kettő, nem használt lábat pedig összekötik(föld). Ezt multiméterrel ki is tudod mérni. A kis pöttynek nem lesz jelentősége(kivéve ha négyzet alakú a kristály), mert 180 fokban elfordítva is ugyanazt kapod. Az én kristályaimon pötty nincs(vagy nem látom), csak felirat. Ekkor az a szabály hogy ha olvasó irányba fordítot a kristályt, a bal alsó és jobb felső lábak a kristály lábai, a másik kettő a föld. Ha ez egy rádiós cucc, a földeket össze kell kötni a rádió IC földjével is!
Nem fordítva rajzoltad be a lábakat? Ez pont ellentétes az adatlappal (és a saját kristályaimmal is).
Sziasztok!
atmega162 esetén az a gondom, hogy ha az ACI flag aktív és analóg komparátor interruptot engedélyezem (SBI 0x08,3), akkor az avr szimulátor szerint az engedélyezéssel egyidejűleg törlődik az ACI flag és nem hajtja végre a szükséges interruptot (globális interrupt engedélyezve van). Ez csak a szimulátor hülyesége lehet vagy a valóságban is így van? Adatlapban nem találtam erre utalást.
Flag kétféleképpen törlődhet : automatikusan az interrupt során vagy manuálisan 1-be írással. Ha Step-et csinálsz,akkor a Debug/Options /Tools/Tool settings/Mask interrupts while debugging= false beállítás kell, vagy breakpoint a megszakításba és Run. (Studio 6/7)
Köszi!
Közben rájöttem, hogy én rontottam el, mert nem szabad SBI-vel engedélyezni az interruptot, mivel ez "read-modify-write" utasítás azaz beolvassa a regiszter értékét módosítja az ACIE bitet majd visszaírja, de ezzel törli is az ACI flag-et.
Így van,mert azonos regiszterben van az engedélyezés és a flag, így a visszaírás törlésnek felel meg.
Tisztelt fórumtársak!
Az AVR IC-ket miért szokták PCB-n kívül programozni? Elvileg az ICSP-nek nem az a lényege,hogy "üresen" a nyákba forrasztják és az ICSP-n keresztül felprogramozzák? ITT SMD-re és DIPre gondolok,mert egy másik fórumtémában láttam külön SOIC tokozási AVR programozására "foglalatot" és nem értettem.
Mert a gyártás során már nem vacakolnak ezzel, a felprogramozott kontrollert ültetik be. Valamint, különösen kis lábszámú eszköznél lehet, hogy elhasználták a portokat másra és nem "maradt" a programozásra meg az ISP vagy a JTAG.
értem, köszi. Viszont, azokra a lábakra amin van a MISO/MOSI/SCK és a RESET AVR esetén, ott lehetnek más elektronikai dolgok is bekötve, mert a RESET láb "alacsony" állapot esetén az összes bemenet magas impendanciájú lesz és ilyenkor hallgat a programozóra, valójában működhetne úgy is,hogy azokat a lábakat is elhasználod más célra, nem?
Mondjuk, ezt nem tudom,hogy a gyakorlatban hogy csinálják
A válasz igen is meg nem is.
Először is, a RESET az lehet portláb is a legtöbb AVR-en, pontosabban 40 láb alatt mindegyiken. Én eddig csak kapunyitó távirányítókban találkoztam vele, de nem jellemző a használata. A programozólábaknál, ha szeretnéd az ISP-t használni akkor pár dolgot be kell tartani. Először is, kisimpedanciás kimenetű(<10k) érzékelő, ill. fel/lehúzó ellenállás egyiken sem lehet. De nyomógomb nem para ha programozás közben nem nyomkodod. Ha a programozólábak -valamit- meghajtanak(pl. LED) akkor egyrészt az a szabály hogy 5-10kOhm-nál ne legyen kisebb a bemenő ellenállása, mert egyes programozók kimenete eleve ellenállásos(pl. a gyári STK500 1kOhm-os). A MISO-n lehet nagyobb teher, mert az "kifelé" hajt programozáskor. Azonban számítanod kell arra, hogy ezek a cuccok ki-be kapcsolgatnak majd, nagyáramú cuccot pedig az így keletkező zavarjelek miatt eleve nem szabad bekötni amikor programozol. Sorozatgyártásnál a DIP tokos IC-ket mindig előre programozzák, sokkal egyszerűbb az IC-t pakolgatni mint a kész terméket. Jobb helyeken az SMD IC-ket is előre programozzák, és úgy megy a beültetőgépbe.
Az attol függ mire szolgál a berendezés. Ha egy nagysorozatu szerkezet ahol aligha várhato el, hogy a müködési ideje alatt változtatni kelljen a programon ott az történik amit zombee kolléga irt, azaz elöre programozott chipeket forrasztanak be
Azoknál a berendezéseknél, ahol viszont elvárják, hogy a élete folyamán tökéletesitsenek, javitsanak vagy változtassanak a szoftwaren ott ki kell alakitani erre a lehetöséget. Ilyen esetekben mindig ott van a programozo port valamilyen formában. ( pl ha a berendezés egy másikkal - PC, egyébb intelligens szerkezet - dolgozik össze, ott sajnos mindig elöfordul, hogy valami valahol változik és ahhoz illeszkedni kell. Már az is elöfordult, hogy gyártás alatt változtak a feltételek és igények igy a berendezés csak elkészülte után kapta meg az akkor aktuális FW verziot. Ez néha jol is jön mert a programozo padon kiderülhetnek más hibák is. A programozo portok (ISP, JTAG stb) szinte teljesértékü portok igy normális üzemmodban gond nélkül használhatok, csak biztositani kell a programozás lehetöségét ( pl nem lehet ott kapcsolo, vagy alacsony impedanciás áramkör) A hozzászólás módosítva: Jan 17, 2016
Programozzák így is úgy is, de ahol nem kell naponta újraírni a programot, minek terveznének bele még egy ICSP csatlakozót is, egyrészt helyet foglal, másrészt bonyolítja a nyáktervet, ha dobozba kerül akkor biztosítani kell a hozzáférhetőséget. Sokkal egyszerűbb/olcsóbb kikapni a foglalatból és írás után vissza.
Ha már ki kell nyitni a dobozt és kivenni a chipet, akkor már sokkal egyszerübb és biztonságosabb egy csatin keresztül on-board programozni ( van a ISP meg a JTAGtol egyszerübb modszer is.) Eddig nem igen találkoztam olyan megoldással, ahol az AVR-t kellett volna kivenni. Ha belegondolsz egy soklábu foglalat drágább mint maga az AVR, igy csak nagyon kevesen engedhetik meg maguknak, hogy foglalatba rakják a procit ( kivéve talán a DIL kivitelt).
Köszönöm szépen ezt a rengeteg információt.
Nekem azért lesz szükségem ICSP-re,mert a programot a kész hardware-n kell megírnom. Akkor arra ügyeljek,hogy az SCP,MISO,MOSI és RESET-re ne tegyek semmit, legalábbis valami kapcsolóval. Szerettem volna a nyákra forrasztani egy kijelzőt, ami használja a MISO-MOSI-t,de akkor teszek oda egy kapcsolót és akkor nem lesz gond a programozással. Nagyon sokat segítettetek
Ha olyasmit teszel a portokra, amit változtatni tudsz, akkor nincs nagy gond, legfeljebb annyi, hogy amikor programozod az AVR-t megfelelö állásba kell azokat helyezni. ( A höskorban amikor kapcsolokkal programoztuk a procikat, az egyik ilyen gépen 16 kapcsoló volt, amiket egy adott kombinácioba kellett állitani, és igy lépett a szerkezet a programozo modusba. Manapság gyakran használját a tuláram programozást, amikor a proci egy vezetéken elöbb programozo modusba áll majd azon az egy vezetéken viszik be a kodot és olvassák vissza).
A kijelzöt elvben odateheted ( nálam gond nélkül megy), mert az késöbb kap informáciot, igy az- ha nem terheli nagyon a portot - programozást nem akadályozza. |
Bejelentkezés
Hirdetés |