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   715 / 840
(#) rolandgw válasza fecus hozzászólására (») Jan 12, 2016 /
 
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
(#) Kovidivi válasza fecus hozzászólására (») Jan 12, 2016 /
 
Ez a pár sor nem véletlenül egy fájlban van, amit a főprogramból include-olsz be?
(#) Droot válasza fecus hozzászólására (») Jan 12, 2016 /
 
Legegyszerűbb lenne a project optionsba beírni. A kis fogaskerék ikon. Akkor nem is kell a defone-okkal szórakozni.
(#) csabeszq válasza Droot hozzászólására (») Jan 13, 2016 /
 
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.
(#) fecus válasza csabeszq hozzászólására (») Jan 13, 2016 /
 
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...
(#) killbill válasza fecus hozzászólására (») Jan 13, 2016 /
 
sprintf(), vsprintf(), snprintf(), vsnprintf()
(#) holex válasza fecus hozzászólására (») Jan 13, 2016 /
 
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.
(#) rolandgw válasza fecus hozzászólására (») Jan 13, 2016 /
 
É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
(#) Robika hozzászólása Jan 14, 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.
(#) Kovidivi válasza Robika hozzászólására (») Jan 14, 2016 /
 
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ű.
(#) Robika válasza Kovidivi hozzászólására (») Jan 14, 2016 /
 
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!
(#) zombee válasza Robika hozzászólására (») Jan 14, 2016 /
 
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...
(#) Robika válasza zombee hozzászólására (») Jan 14, 2016 /
 
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?
(#) csatti2 válasza Robika hozzászólására (») Jan 15, 2016 /
 
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
(#) Robika válasza csatti2 hozzászólására (») 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?

osc.png
    
(#) zombee válasza Robika hozzászólására (») Jan 15, 2016 /
 
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!
(#) csatti2 válasza Robika hozzászólására (») Jan 15, 2016 /
 
Nem fordítva rajzoltad be a lábakat? Ez pont ellentétes az adatlappal (és a saját kristályaimmal is).
(#) p5efv hozzászólása Jan 16, 2016 /
 
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.
(#) rolandgw válasza p5efv hozzászólására (») Jan 16, 2016 /
 
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)
(#) p5efv válasza rolandgw hozzászólására (») Jan 16, 2016 /
 
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.
(#) rolandgw válasza p5efv hozzászólására (») Jan 16, 2016 /
 
Így van,mert azonos regiszterben van az engedélyezés és a flag, így a visszaírás törlésnek felel meg.
(#) tothjanos hozzászólása Jan 16, 2016 /
 
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.
(#) Dudus válasza tothjanos hozzászólására (») Jan 16, 2016 /
 
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.
(#) tothjanos válasza Dudus hozzászólására (») Jan 17, 2016 /
 
é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
(#) zombee válasza tothjanos hozzászólására (») Jan 17, 2016 /
 
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.
(#) Massawa válasza tothjanos hozzászólására (») Jan 17, 2016 /
 
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
(#) pont válasza tothjanos hozzászólására (») 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.
(#) Massawa válasza pont hozzászólására (») Jan 17, 2016 /
 
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).
(#) tothjanos válasza Massawa hozzászólására (») Jan 17, 2016 /
 
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
(#) Massawa válasza tothjanos hozzászólására (») Jan 17, 2016 /
 
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.
Következő: »»   715 / 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