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
Köszi, ez jó ötlet, legközelebb így csinálom, de sajnos már kész a NYÁK, úgyhogy ez már így maradt. De megfogadom a tanácsot.
Kapcsold ki a CKDIV8-at (1),mert 1 Mhz-en megy:Bővebben: Link
Felesleges a ket megszakitas. A legelejen a foprogram felprogramozza az A/D-t. Aztan amikor a timer megszakitas bejon, akkor az kiolvassa az A/D erteket, elteszi valahova es ujbol elinditja a konverziot. A foprogram meg kiertekeli a valtozobol a mert adatot. Ettol persze 20ms-ot "kesik" a meres, de pont senkit nem erdekel, mert nyomogombot mersz vele. Az elso eredmeny ervenytelen lesz, ezt el kell dobni.
Azt is megteheted, hogy a timer megszakitas nem piszkalja az A/D-t egyaltalan, csak jelzi a foprogramnak, hogy ismet eltelt 20ms az eletunkbol. A foprogram meg majd beolvassa az A/D-t, ujrainditja a merest es feldolgozza a mert adatot. Ez nem idokritikus dolog, 1-2ms lotyoges (jitter) boven belefer. De meg 10 is.
Rendben, köszi. Az első eredmény miért lesz érvénytelen?
Mert azelott olvasod ki az A/D-t, hogy elinditanad. Elobb olvasod, aztan inditod. Mindig 20ms mulva olvasod ki az elozo inditas (meres) eredmenyet. Ezert van 20ms keses, ami egy nyomogombnal nem szamit, viszont nem kell kulon varni a konverziora. Ha az inicializalasnal inditasz egy konverziot akkor a timer ISR mar ervenyes adatot fog kiolvasni az A/D-bol, ha az inditas es a timer ISR kozott eltelt egy konverzionyi ido. Az nem tudom, hogy mennyi lehet, gondolom par us.
Megoldódott!
For ciklusokkal szimuláltam az órát és itt is hibázott -> tényleg a brakeup() volt rossz (lehet nekem sem kéne mások könyvtárait, programjait felhasználni). Az eredeti kód:
Jelenlegi:
A hibát okozó különbség, hogy az eredeti addig bontja amíg van karakter illetve nem 0 a szám, ez éjfélkor ugye 0, így fel sem bontja, hanem kiírja az előzőt, és a sok 0 még néhány hasonló hibát okoz a késői/korai órákban. Mindenkinek köszönöm a segítséget! Iván
Egy "érdekes" kérdésem van. A nixie-s órám kijelzőjének, éjszakára leveszem a feszültségét, hogy ne vakítson annyira. A nixie működési elve miatt egy szint alatt nem csak a fényerő, hanem az olvashatóság is csökken, elmosódik. A kijelzés nem multiplexelt.
Arra gondoltam, hogy mit szólna a szemünk ahhoz, ha este a 100ms-os frissítési ciklus során pl. 5 ms-ra kikapcsolnám a kijelzést? A frissítés túl lassú, hogy a szem ne vegye észre, de a kikapcsolt idő meg túl gyors lenne hogy észrevegye. Jól gondolom?
Sziasztok, Attiny2313, Atmega328, Bascom. Szeretném UART-on összekötni a két AVR-t. Ugyanazon az órajelen kell járniuk ahhoz, hogy működjön a kommunikáció, vagy elég a kiválasztott adatátviteli sebességhez tartozó kvarc (14,7456 MHz) amivel a hiba 0%? És ez a kvarc lehet mindegyik AVR-hez külön-külön? Gondolom az adatátviteli sebességnek kötelezően egyformának kell lennie.
Bascom: Megszakításos UART kezelés, ha van bejövő adat, akkor egy értékadás lenne majd csak. Kérdésem az lenne ezzel kapcsolatban, hogy ilyenkor a bejövő puffer automatikusan törlődik? Vagy valamelyik regisztert nullázni kell pl? +1: 2313-asnál, hardveres PWM-et használnék, timer0-n és timer1-en is. Int0 és Int1 megszakítást tudom közben használni? Van-e köze a timer-nek a két megszakítható lábhoz?
Az UART-os kommunikaciohoz az kell, hogy a ket UART ugyanarra a baudrate-re es ugyanolyan formatumra (pl: 9600 buad, 8 bit, 1 stop, nincs paritas) legyen programozva. Az mindegy, hogy ezt hogyan ered el. A hibaszazalek nem kell 0% legyen, de azert 3-nal tobb mar nem egeszseges.
Az interrupt es a timer egymastol fuggetlen, tudod hasznalni az INT0, INT1 megszakitast.
Sikerült, újraélesztést követően úgy mőködik, ahogy a másik. Valószínűleg a konfigurációs bitekkel volt a gond. Köszi
Mi a különbség a brown-out reset és a power-on reset között? Már egy órája nézegetem a neten a dolgokat, de nem bírok rájönni.
A brown-out-nak hiszterézise van,hogy kiszűrje a tüskéket,valamint a feszültség szintje magasabb. A brown-out biztosítja,hogy hibás működés ne következzen be a VCC egy szint alá esése miatt,ahol ez már nem garantált.
Köszi!
Na már csak egy gondom van: nem tudom bekapcsolni a brown-out-ot.
parancsra azt írja, hogy
Na most ha erre y-t nyomok, akkor lefagy, ha n-et, akkor kilép... hfuse-t és lfuse-t be tudtam állítani de erre hibát dob. Miért?
Sziasztok!
MAX6675-öt próbálok feléleszteni az alábbi kód alapján. Az IC SO lába az AVR MISO-ba megy egy 470 Ohm-os ellenálláson és az IC CLK lába az AVR CLK lábába szintén 470 Ohm-on keresztül. A CS a PB0-n van. Az AVR ISP mkII-t lehúztam a tesztig hogy ne zavarja. Az IC Vcc és GND között egy 100nF-os kondi van, a T+ és T- "open", nincs rajta szenzor, de rárakott szenzorral is próbáltam. A fogadott adatot UARTon a gépemnek küldi el, ami akár hogy próbálom csupa nulla. Többféle SPI órajelet is kipróbáltam 4,3MHz alatt, az adatlap ezt ajánlja max órajelnek. Szoftveres SPI-vel sem működött. Próbáltam saját lassú órajelet előállítani, 50, 25 és 5ms-ig tartó alacsony és magas szintekkel próbálkoztam, az SO lábra egy BS170-et és egy LED-et kötöttem, bizonytalanul működött, a LED néha villgotott néha nem, néha csak egy ideig. Erre a kérésre írom be ide is a problémámat. Lent található a forráskód.
spi_readwrite függvényből kivenném a 20ms késleltetést, felesleges.
UART túloldalán milyen adatokat vársz? Mert ha karaktereket, akkor előtte át kéne alakítani a számot. Le tudod tesztelni fix számokkal? A chip olvasása közben nem küldözgetnék adatokat... inkább így:
ui.: mi az AVR típusa? A hozzászólás módosítva: Szept 29, 2014
Még a 470 Ohm ellenállásokat is kiszedném, és a CS lábat tápra húznám 10k-val.
Én hiányolom az elejéröl a: #define F_CPU xxxxxxx // kristály freki
Így a fordító általában 1000000Hz-re állítja. A sima karakter kiíratás mükxik?
Tetszik a megoldás!
Amit viszont megjegyeznék, és nem vagy az elsö akinél ilyen esztetikus hibát látok, az a 2. Láb bekötése. Jo lenne, ha ilyesmire vigyáznátok. A csatlakozások csak az alkatrészen kivül lehetnek. Csak azért szolok mert itt a HE-n fordul ez leginkább elö, pedig nem szép és nem is felel meg az irott vagy iratlan szabályoknak.. Állitsuk meg mielött még elterjedne! Kösz! A hozzászólás módosítva: Szept 29, 2014
Az avr atmega8 8mhz-en. Leteszteltem az uartot fix számokkal, jól működik. Win7-en a Realterm-ben be lehet állítani hogy milyen formában jelenjen meg. A 20ms-os időzítés egy kísérletemből maradt benn. Az uart küldést próbáltam a chip kiolvasáson kívül is, vagyis először így próbáltam. A 470ohm-os ellenállások nélkül sem megy, kísérletképp raktam be hátha így tudom programozni miközben az ic be van kötve, mert dugogatós próbapanelon is összeraktam, mert már a céláramkörben sem működött. A cs lábat felhúzni holnap kipróbálom.
A biztonság kedvéért a kapcsolási rajzodból az idevágó részletet megmutatod? Tényleg már csak hardveres hibára tudok gondolni, vagyis szeretném kizárni. A define cpu f-et az avr studio megoldja, a project settings-ben ahol a procit kiválasztod oda beírhatod. Ha definiálom a forráskódban ki is írja hogy kétszer lett definiálva.
Igazad van! Igénytelen megoldás.
Mentségem - ha annak jó -, hogy saját célra készült a rajz, csak mikor felmerült a kérdés, akkor gyorsan bemásoltam, hátha sikerül ötletet adni.
Tudom, hogy gyakran sietünk, gyakran kell valamit gyorsan rajzolni, de a mai programok már olyan jók és gyorsak, hogy pillanatok alatt rendbe lehet rakni a rajzot még kizárólag saját céljainkra is. Szemet gyönyörködtet egy szép elrendezésü rajz, még akkor is hacsak a kapucsengö vázlatát tartalmazza. Ne feledjük, hogy itt mindenki ért egy kicsit az ilyen rajzokhoz, igy jo lenne igényesebbnek lenni, sokaknak az ilyen forumok töltik be az iskola szerepét!
Itt a teljes rajz, igazából semmi extra.
Ha van a kódban egy olyqn feltétel, ami sosem teljesül, pl if (0){...}, azt lefordítja az avr-gcc kikapcsolt optimalizáció mellett?
És még egy kérdés: milyen optimalizációt érdemes használni? Az alapbeállítás O1. Azt gondoltam, hogy érdemes kikapcsolni... Ugyanakkor felül a sárga részben azt írják, hogy O0 kerülendő.
EZt már olvastam, de nincs benne, hogy melyik mit jelent. Meg amúgy is inkább a tapasztalatok érdekelnek.
Üdv!
Eddig arduino platformon programoztam, többnyire ATmega328-at. Szeretném elhagyni az Arduino platformot és belekezdeni a "normális" AVR programozásba. Jelenleg van egy Arduino Mega 2560 fejlesztőpanelom, ezt lehetne használni programozóként AtmelStudioval, vagy muszáj beszereznem egy AVR programozót? |
Bejelentkezés
Hirdetés |