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
Szia!
http://www.hobbielektronika.hu/cikkek/winavr_telepitese_es_hasznalata.html Szerintem segíteni fog.
Sziasztok!
Egy olyan kapcsolást szeretnék létrehozni hogy az AVR-em olvassa a memóriakártyáról az adatot és megjeleníti egy alfanumeratikus kijelzőn.(csak szöveget) Ezt hogy tudom létrehozni mert nemigazán találtam ilyet. De van 3310-es kijezőm is. valaki tudna benne segíteni hogy merre nézzek körül?
Hali!
AVRStudio 4.14-et használok, asm-ben programozok. Fordítás után dob egy ilyen hibaüzenetet hogy : warning: .cseg .db misalignment - padding zero byte miért csinálja? Tudom, hogy mi az oka.De hogy lehet kiküszöbölni? A programmemóriában(code segment) hoztam létre egy adatbázist a .db direktívával. Ha ezeket kiszedem nincs hiba, vagy ha az adatmemóriában(data segment), akkor sincs hiba, csak akkor nekem kelle manuálisan léptetni a számlálót, meg kiszámolni, hogy hogy és mint, így viszont:
Megadja a táblázat elejét és elég a következő elemre hivatkoznom. Üdv Kiborg
Az idézőjelek között 16 karakter van, miért kell utána a nulla?
szerk.: Szerintem a nulla nem kell, azt kitörölve nincs warning...
Mert az LCD több soros és így jelzem, hogy adott sornak vége.(tudom lehetne úgy is, hogy 16ig számolom a karaktereket, de így elsőre egyszerűbbnek tünt) Meg másrészt van olyan is, ahol nem 16 karaktert íratok ki.
Jelzőbyte Másrészt, ha 1 re cserélem, akkor is reklamál ugyanazzal az üzenettel.
Persze, hogy reklamál, mivel a code segment-be csak páros számú bájtot írhatsz be.
Ha tudod, mi az oka, akkor ki is tudod küszöbölni: Írsz utána még egy bájtot...
Igen, köszi
Közben már én is rájöttem Csak már nem lehet módosítanom az előző hozzászólást. If the DB directive is given in a Code Segment and the expressionlist contains more than one expression, the expressions are packed so that two bytes are placed in each program memory word. If the expressionlist contains an odd number of expressions, the last expression will be placed in a program memory word of its own, even if the next line in the assemby code contains a DB directive. The unused half of the program word is set to zero. A warning is given, in order to notify the user that an extra zero byte is added to the .DB statement. Magyarul 2 bájtosan van tárolva és a figyelmeztetés azért van, hogy ő automatikusan feltöltötte az utolsó helyet 0-val. Mi mindenre képes a súgó Annyira triviális volt a megoldás, hogy nem esett le elsőre.
Sziasztok!
Most ismerked az AVR-el. Bővebben: Link Ezt a programot próbáltam ki igaz Atmega168-on, de működik nem is ezzel van a gondom. A készítő nem fűzött hozzá túl részletes leírást és én a következő sorokat nem értem pontosan, hogy miért, mihez, honnan az érték.
Valamint:
Szia!
A TCCR0B és a TIMSK egy egy regiszter(annak hívják?) ami tárolja, hogy az adott periféria hogyan működjön. Ezek az időzítőkre vonatkoznak. Ha megnézed az adatlapot, látni fogod, hogy a TCCR0B-ben van CS02,CS01 és CS00 bit, ami az órajelforrását/előosztást állítja be. A TIMSK meg interrupt engedélyezés talán. A többi meg adódik a C nyelvből. Konrétan melyik értékre vagy még kíváncsi,mert az alsó kódrészletben legalább 7 változót számoltam meg. Üdv Kiborg
Akkor viszont újfent egy kérdés:
Miért kell oda a kétszeres szorzó a tábla neve elé? Kiborg
Megnéztem az adatlapot és megtaláltam az időzítés leírását csak nem tiszta teljesen.
A kétszeres szorzás nem más mint balra léptetés 1 helyiértékkel. Miért kell ez? Mert az adatok 16 biten tárolódnak. A Z-be beolvasott címet el kell balra egyel tolni és a legkisebb helyiértékü biten lévő 1 vagy 0 jelzi, hogy a 16 bit alsó vagy felső 8 bitjét akarod - e beolvasni. Kb. fogd úgy fel, hogy a cím az 1-15 -ig biteken van és a 0. bit a cím alsó és felső 8 bitjét címzi.
" Idézet: " „The program memory is organized in 16 bit words while the Z pointer is a byte address. Thus, the least significant bit of the Z pointer selects either low byte (ZLSB = 0) or high byte (ZLSB = 1).”
Őszintén szólva nem sokat értek abból amit írtál. Főleg azt nem, hogy honnan látod benne a 2x szorzást.
Bocs, de abszolút kezdő vagyok.
Ez egy 8051-es mikrokontroller. A WinAVR nem fog segíteni rajta. Az AT89s52 egy atmel termék, de nem AVR. Ha szigorúan nézzük, akkor ez a topik sem neked való sajna.
Hacsak nem kiadott feladat, akkor szerintem használj inkább AVR-eket.
@kiborg ( bocsánat, neked akartam írni! Ezt a katyvaszt! Elnézést mindenkitől!)
Akkor nehéz dolgunk van Nézd meg ezt az oldalt... Láthatod, hogy amit a Z regiszterrel megcímzel az nem egyetlen bájt hanem egy szó ( 16 bit ), te innen olvasol be egy 8 bites regiszterbe. Hogyan lehet ezt megtenni? Úgy hogy a címet elmozgatod 1 helyiértékkel balra, így a 0. bit felszabadul. Ezzel a legkisebb helyiértékű, 0. bittel ki tudod választani, hogy az 1-15 -ös helyiértékkel megcímzett memóriaterületen lévő 16 bit hosszú szónak az alsó vagy a felső 8 bitjét olvasod be a memóriából egy regiszterbe. Az a baj, hogy nem tudom máshogy elmagyarázni....próbáld ki, úgy talán szemléletesebb.
Szia!
Dudus azt nekem szánta mondd el, hogy mi a nem tiszta és ha tudunk segítünk, csak tedd fel a kérdésed. Dudus köszi a magyarázatot. Már értem. Kiborg Dudus te is kevered már a kérdezőket blackdog teljesen mást nem ért.
Igen. Elsőre nehéz felfogni, de minden kezdet nehéz. És, ha 13 évesen annó megtanultam Commoder64-en programozni akkor ez is menni fog. Igaz eltelt egy kis idő.
AvrStudio 5-t használok. Egyenlőre azzal is bírkózóm mert jó lenne, ha látnám debug közben a változók/regiszterek értékének módosulásait és ezek hatását. Keresgéltem a neten ennél egyszerűbb kódot RGB led-re, de nem találtam csak jóval komplexebbeket.
Bakker
Hát ezért nem értettem, hogy hol lát nálam Z regiszter-t. Szeretném sorról sorra pontosan megérteni annak a kódnak a működését. És elnézést, de én kevertem össze a hozzászólásokat. Rosszra válaszoltam!
Szia!
A második rész akkor hajtódik végre, amikor a számlálód túlcsordul, azaz eléri a 255-t és átvált 0-ba. Ez generál egy megszakítást. Csökkenti TimerCounter értékét és ellenőrzi, hogy TimerCounter értéke egyenlő-e nullával, ha igen, akkor a színekhez tartozó számlálót alaphelyzetbe hozza és a kimeneteket beállítja. HA NEM egyenlő 0-val, akkor a színekhez tartozó értéket is csökkenti és ha az adott színhez tartozó számláló eléri a 0-t, akkor azt a színt lekapcsolja. Kb ennyi. Remélem érthető. Üdv Kiborg Jut eszembe, milyen AVR-t is használsz és milyen programozóval ?
Atmega168.
STK500 programozóm van, de nem azt használom, hanem AVR-Duino panelen tesztelgetek. Jut eszeme: Ha én ebből kész nyákot készítek akkor mi a gyakorlat az IC felprogramozásánál? Tüskékkel vezessem ki a programozó lábakat és úgy töltsem fel a szoftvert vagy jó az is, ha próba panelen felprogramozom és csak beültetem a végleges helyére?
Szia!
Ezt csak debug-wire-val lehet debugolni, STK500 nem alkalmas debugra,csak programletöltésre. Sorry a hírért,de ez van. Én JTAG-on dolgozom, és jelenleg Mega16-ot nyúzok. Üdv kiborg
Én szoftveres debug-ra gondolok. Futtatni a programot és figyelni a változók/portok értékének a módosulását. Ezt nem találom az AvrStudio-ban.
Nos ahogyan olvasgatok meg amit mondtatok és kisérletezés alapján kezdem felfogni. Már csak a lényeget nem értem:
A PINB3-4-5 honnan tudja, hogy az ő értékük az R_ G_ B_ duty?
Szia!
Ők onnan tudják, hogy amikor if(TimerCounter==0) feltétel teljesül, akkor 1-re állítja a kimenetet ÉS feltölti az R,G,B_duty változókat !!! Amikor a változó R,G,B duty eléri a 0-t, akkor billenti 0-ba a kimenetet. Érthető ? Ja, mostmár értem a kérdésed ! Nézd meg ezt a rész az EREDETI programban:
Az utolsó 3 sor vonatkozik a portra.B port 0,1,2 bitje a kimenet. ja jut eszembe, ha nem sorozatgyártást csinálsz(vagy később biztos nem akarod fejleszteni), bőven jó, ha próbapanelen felprogizod és utána meg beülteted.
Én 10 pines szalagkábel csatlakozót szoktam tenni minden nyákomra. Az atmel a 6 pines ISP csatakozót kívánja de facto atmel szabványra emelni, de én nem használom, mivel többszörös az ára a 6 pines csatinak, mint a 10-nek.
Sziasztok az AVR AREF lábát szabad terhelni? Éppen kapóra jönne nekem a 2,56V referencia. Csak néhány tized mA - ról volna szó.
Szerintem a szimulátorra gondolsz, az be van építve. De az AVR Studio szimulátora a timereket rosszul kezeli.
Én nem használok szimulátort, úgy debuggolok hogy a kód futását állítom meg(beteszek egy while(1) ; -et). Előtte pedig valami fondosabb(akár 1-bites) értéket megjelenítek egyszerű esetben a portlábakon, ha meg már van valami féligkész rendszerem USART-al vagy LCD-vel akkor azon...
Fejemet rá, hogy nem szabad. De az adatlap hátha említi. Amúgy, hogyha nem akarod használni ADC -re, akkor talán nagy gond nem lehet, ha tényleg nano Amperekről van szó.
Ha terhelhető lenne akkor nem kellene rá kondi. Persze egy próbát megér, hátha mégis adja.
Ha van valami olcsó műverősítőd akkor én arra kötném ezt a 2.56V-ot(impedanciaillesztésnek hívják).
Ja, és van rá egy söröm hogy az a 2.56V sem pont annyi amennyinek most én itt leírom. |
Bejelentkezés
Hirdetés |