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
Én fotózom, több-kevesebb (de már egyre több) sikerrel. Vasalással kezdtem, de nagy volt a "selejtarány", egész egyszerűen nem tudtam átvasalni úgy, hogy a hozzávezetések fele ne maradjon a műnyomón.
Sokszor összefolytak az érintkezők, a TQFP-32 már nem is ment, TSSOP-ról meg álnodni sem mertem. A fotózásnál másra kell ügyelni, nem olcsó a lakk, de legalább az esetek többségében jól sikerül. A marató nátrium-perszulfát, melegítve hamar leviszi(kb. 20-30 perc).
Sziasztok!
Aki már ismer, tudja, hogy nem vagyok profi és sajnos az alapok hiányoznak... Csak egy "esztétikai hibát" szeretnék kijavítani a sagítségetekkel, mert a program tökéletesen lefut, de dobja rá a Warning-ot. A kód részlet a következő:
../main.c:468: warning: passing argument 1 of 'eeprom_write_byte' from incompatible pointer type ../main.c:562: warning: passing argument 1 of 'eeprom_read_byte' from incompatible pointer type ... Build succeeded with 4 Warnings... (1 írás, 3 olvasás van, azért 4 warning van összesen...) Előre is köszi!
Szia!
A warning oka hogy a függvények vélhetően unsigned int-et várnak nem pedig uint16_t típusú változó pointerét.
Nem tudtam már időben módosítani.
uint8_t-t várnak a függvények, mert BYTE-ról van szó. eeprom.h-ból egy részlet:
Nos. Nezelodtem es eleg szegenyes a kinalat a tobbcsatornas illesztobol, igy en arra jutottam, hogy SN74LVC1T45 lenne neked a megfelelo. Ez csak egycsatornas, megfelelo tobbcsatornasat nem talaltam.
Nos van fejlemény az ügyben, ma méregettem párat és kicsikét elvette a kedvemet.
Először a 4 csatornát kötöttem át hidakkal. Ekkor működött, ahogy a nagykönyvben meg van írva. Egyenként kezdtem kiszedni/visszatenni a hidakat hogy melyik csatornánál cseszekszik és melyiknél nem. A MISO és a RESET esetében úgy néz ki hogy nem kell híd, a másik kettőnél igen. A MISO-n nem csodálkozom a RESET-nél tapasztaltak és a pár perce újra-elolvasott adatlap talán megoldja az összes rejtélyt. RESET lábat a TXB0108 folyamatosan lehúzza, és ezen nem sokat javít az sem ha 10kOhm felhúzót kap. Utóbbi esetben kb. 1.6V, ami még mindig RESET-nek számít, hát persze hogy ettől még működik a programozás! A pontot az i-re az adatlap adta, ráadásul a LEGELSŐ sor: 1.2 V to 3.6 V on A Port and 1.65 to 5.5 V on B Port (VCCA <= VCCB) Egy FET, 2 ellenállás: igen, ezt ismerem, és van pár BSS139-em is. Az a bajom ezzel hogy egyrészt ott van az a felhúzó ellenállás, a másik hogy pár tized voltos GATE fesz esetén is képes 20-30mA-t átvinni? Mert ugye a GATE fesz az feszültségesésként jön át(H1 felhúz, L1 = 3.3V-Vg), a másik hogy az a dióda sem tetszik, biztos van valami nyitófeszültsége is(H1 lehúz, L1=Vd). 1.2-1.6V-os rendszernél is működne?>
A dioda meg nem nagy gond, ugy kell bekotni, hogy csak akkor nyisson ki, ha szukseges, azaz a katod legyen a nagyobb feszultsegu oldalon. A nehany tized voltos gate feszultseg csak akkor fordulhat elo, ha magas szintet szeretnel, ekkor pedig a felhuzoellenallasok a meghatarozoak, nem a fet, az aramot is az ellenallasok szolgaltatjak. De ha van a fiokban FET, akkor probald ki, semmibe sem kerul. Alacsony feszultsegu rendszernel akkor mukodik a dolog, hogyha a FET ki tud nyitni, magyarul olyat celszeru valaszani, amelyek nyitofeszultsege 0.7V korul van.
Egy ideig én is ilyet kerestem mint a SN74LVC1T45, de végül rájöttem hogy ebből 5 darab is kell, na meg ez egyirányú és kapcsolgatni sem árt amivel át kell írni a LUFA programot. Lényegében nem sokkal jobb
mint a 74HC126-os, azóta megnéztem és tud 2V-os tápfeszt is. Az IC egyben adja is a 4 kimenő csatornát. A FET-es megoldásnál nagyon gáz ha 10kOhm húz fel, ennél még a MAX3002 6kOhm csatornaellenállása is jobb, főleg ha azt is nézzük hogy elegendő sebességnél már csak a FET-ek dolgoznak 50-70 Ohm ellenállással. Lehet hogy én vagyok béna, de úgy látom hogy amikor a magasabb oldal húz fel, akkor a 3.3V-Vgs szint eléréséig nem az ellenállás, hanem maga a FET húz fel hiszen a DRAIN-t húzzuk fel, a SOURCE követi.
Köszönöm, az bejött, unsigned int-re átírtam.
Jött közbe egy másik:
../main.c:59: warning: built-in function 'log' declared as non-function Mi baja van ezzel? Van valami ilyen parancs és nem szeretné ezt, vagy mi a baja? Köszi az előbbi segítséget is!
A log egy beépített függvény neve, ne használd itt.
Köszi!
Végre: Build succeeded with 0 Warnings...
Közben megvolt a mai mérés. TXB0108 - 2.5V-os VL fesz fölött használhatatlan, alatta tökéletes 1MHz-en is.
Szóval marad a MAX3002, GTL2003, és a FET-es híd. A MAX-hoz még új áramkört sem kell készíteni...
Amikor a SASOK szárnyalnak, a verebek hiába csivitelnek. Bocs, hogy kérdeztem, megpróbálom eltüntetni valahogy. Remélem ez menni fog. Minden jót.
Ebben igazad van, csak kompromisszumos megoldas van a szamodra, bar az irany atkapcsolasa azert nem olyan nagy problema. De szerintem nezd meg, mit hasznalnak a JTAG ICE MK2-ben a szintillesztesre.
A FET-es megoldasnal jol latod, a kozbenso szinteknel a FET is megy, nem csak az ellenallas.
Fél évig az AVR általi átkapcsolósdit tartottam a legjobb ötletnek, a LUFA program módosításával.
Valóban nem nagy cucc mert az ISPTarget.c és XPROGTarget.c - be kellett volna szúrni pár sort. A baj az, hogy minden LUFA verziónál meg kell csinálni, és tegyük fel hogy kijön egy új de én nem foglalkozom vele, vagy valami régebbit is kipróbálnék esetleg mást is módosítani kell, szóval macera. Például a driver-mód váltáshoz a leírótáblát(Descriptors.c) kétszerezni kell, nem csak egy számot átírni. Akkor még a korrekt szintillesztés fogalmát nem nagyon alkalmaztam. Az STK500 NPN-tranzisztor+1kOhm felhúzóellenállásos verziója fogott meg, és tudtam hogy ez távol áll a korrekt meghajtástól. Ennél valamivel jobb az én 100Ohm-os leválasztásom, ez már meg tud hajtani egy LED-es programozólábat. Akkor az foglalkoztatott hogy a buffer IC vegye át a terhelést az AVR-től(pl. LED-es programozóláb). Most pedig az illesztő IC-k gondolata fogott meg nagyon, remélve hogy tisztességes áramot(~20mA) le tud adni, de a TXB0108 most nagyon elcsúszott. Nem az áram(mert dinamikusan biztos lead 20mA-t), hanem a max. 2.5V-os VL szint miatt, persze a gyári 3.6V is édeskevés mert 1.2V-5.0V között kellene. Még a MAX3002-ben bízom valamennyire, de a FET-es vagy GTL2003-as(ez is hasonló mint FET-es) megoldás felé kacsintgatok. Meg is álmodtam egy FET-es kapcsolópárt ami a RESET-et figyeli és az XCK-t kapcsolja. Egy gyári AVRISP-mkII-t már láttam belülről, a szintillesztő IC-ket is megtaláltam(3 vagy 4 darab). Ezeket még nem sikerült beazonosítani, de az egyetlen ismerős cucc az ATMega128 volt, a többi mind idegen. Gyanúsan sok a tranzisztor benne, és egyelőre nem értem a funkciójukat. Talán épp az XCK-t kapcsolják át.
Lehet sőt biztosan nagyon egyszerű erre a válasz de megkattanok nem tudom..
Szóval van egy szimpla megszakításom, jelen esetben egy szimpla soros portos kommunikáció, kapok egy stringet az stringet beledobom egy tömbbe a megszakításon belül, de a főprogramomban mintha nem is történt volna értékadás.... A tömbböm üres. Miért? És hogy tudom ezt kijátszani.. a változót tuti globálisan deklaráltam szóval feladom... ötlet?
Működik a megszakításod? Engedélyezted a megszakításokat globálisan és a soros kommunikációhoz tartozót külön is?
A megszakítás tökéletesen működik, szépen beeugrik megszakításon belül az értékátadás is tökéletesen működik folyamatosan tesztelem a komplett PORTA-ra kiteszem a kapott értéket és megy minden de például a soros adatfolyam végén belövöm hogy start=1, majd a főprogramom ugye egy végtelen ciklus és ellenőrzi, hogy a start==1? és ha igen akkor be kellene ugrania de hiába a start értéke ténylegesen egy a megszakításon belül (a PORTA-ra kitéve mutatja hogy 1) mire a megszakítás lefut már 0, és direkt úgy is deklaráltam hogy extern int start=0; az egész program legelején, szóval nem tudom, de rohadt bosszantó...
bezzeg ha nem változót használok, hanem mondjuk azt mondom hogy PORTA=1, azt látja a főprogram... megszkítást így triggereltem:
nah megvan csak fentebb kellett volna olvasnom.... volatile a kulcsszó... :S
Sziasztok!
Nekem is van egy apró gondom uart-nál. Valamiért nme hajlandó normálisan olvasni és mindig csak egy a képen látható karakter íródik ki a kijelzőre. Ez lenne az olvasó rutin. Nem tudom miért csak ennyit ír bármire.
Sziasztok!
Egy amatőr kérdéssel fordulok hozzátok. Ha van már egy felprogramozott AVR (esetemben Atmega8), abból hogyan tudom kiolvasni a programot?
Abban az ablakban amiben programozod (write gombot nyomsz), ott tudod visszaolvasni is (read gomb).
Köszönöm! Igazság szerint mostanában szeretnék nekikezdeni az AVR-ezésnek, és van egy Atmega8-am egy LED lámpában. Ez lesz a kísérleti alany, de nem szeretném ha elveszne a programom.
Nos, mielőtt meglepődnél, ha nem megy a visszaolvasás, akkor jó ha tudod, hogy van lehetőség egy AVR-t úgy felprogramozni, hogy többet ne lehessen visszaolvasni a programot belőle.
Ezek jol automatizalhato feladatok, javaslom melyedj el a Perl nyelvben es a perl regularis kifejezesekben(Perl Regugal Expression avagy regexp).
A jtag ice mkii-ben MAX4712,MAX3379,MAX3391,MAX3392 illetve SP720 van, lehet neked is ezeket kene hasznalnod.
Az elso problema amit latok, hogy a 0 lezarot nem az i+1, hanem az i pozicioba kene rakni.
köszi, próbálkozom!
5V-os rendszer esetén igen - és persze nem lezárt chip esetén...
Sziasztok!
Rendeletem egy ilyet http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=390369630154#ht_...wt_952 és az lenne a kérdésem hogy ehhez jó e az avrstudio 4? Tiny 45-öt szeretnék programozni vele és azt írják jó lesz hozzá. Ugye ezzel ha már megvan az avrstudio tudok programozni? |
Bejelentkezés
Hirdetés |