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
Nincs mit. Egy optimalizaciot elfelejtettem, amit meg megcsinaltam: Az LcdGotoXY-t atirtam, hogy csak egy uint8_t parametert kapjon. Az also 5 bit az oszlopok szama, a felso 3 bit a sorok szama.
Esetleg probald meg IAR-rel is leforditani, bar szerintem a tobb mint 20%-os meretcsokkenes nem realis.
Sziasztok!
A véleményeteket szeretném kikérni! Szerintetek jól lenne ez így összerakva? Egy Atmega128 és egy Quectel M10 GSM modulról lenne szó. Nem terveztem még soha ilyet, és az sem biztos, hogy így lesz megvalósítva. (Különösen ha leszavazzátok.) Köszönöm előre is a segítséget!
Szia!
Ami feltűnt: Mintha nemsokkal visszább mondták volna, hogy a mega128-nál a programozó lábak nem MISO-MOSI lábakon vannak... Ennek nézz utána. Ahogy látom, a modullal UART-on kommunikál. Érdemes lenne betenni valami "baud kvarcot", hogy a kommunikáció hibamentes legyen. AVR oldalra. Hogy a modulnak kell-e külső órajel nem tudom, kép alapján úgy tűnik, hogy nem. Ennyi az észrevételem.
Nagyon szépen köszönöm! Egy hiba megelőzve.
9600-zal szeretném a kommunikációt, és a lehető legegyszerűbben, a legkevesebb alkatrészből. A modulnak nem kell külső órajel. A többi azért jó?
Nem látok benne fatális hibát... De ha már kivezetted az összes portot, akkor érdemes lenne bekötni az ADC-hez szükséges portlábakat, hátha analóg mennyiséget is akarsz későbbiekben távküldeni... Ebben is, meg a megfelelő értékű kvarc kiválasztásában segít az adatlap.
Esetleg még az AVR táplábaira közvetlenül tegyél 100nF-os kondit.
Köszönöm szépen! Megyek adatlapot tanulmányozni.
Sziasztok!
Új vagyok a témában, remélem tudtok segíteni. Lenne pár nyákom , mindegyiken AVR kontroller, SDA , SCL lábak közösítve, magyarán létrehoztam egy buszt az összes IC között. 1 fő vezérlő lenne aminek a feladata adatokat küldeni a többinek. PL az első kérdés már adódik is : miközben a slavek progiját írom akkor mindegyiknek más címet állítok be és ha a master arra a címre küldi ki az adatot, akkor ugyan felfigyel az összes többi eszköz de nem is érdekli őket az adat mert nem egyezik a cím a rájuk programozottal? Ezután ilyen visszajelzések (ACK) jelek nem bolonditják meg a többi eszközt? Magyarán a master simán fogadja és ha úgy adódik akkor küldi a következő adatot akár másik címre is. Lehet bonyolult a kérdés, de azért a programozó tudásom nem a nullához közelít, és AVR STUDIO -ban is van már gyakorlatom, csak ezzel a TWI ( vagy I2C ) dologgal nem foglalkoztam még. Ja és nézzétek el légyszi hogy nem olvastam vissza 353 oldalt Köszi bárkinek aki elkezd velem kommunikálni erről.
Köszi nektek. Pont ezt a magyarnyelvű doksit olvastam én is csak saját felfogásomban támadtak kételyek de ez tényleg szépen leírja a dolgokat. Ha jól értem:
A slave eszközökben csak be kell állítani a TWI regisztereket ilyen slave módra és az interruptot engedélyezni kell nekik, és akármikor programfutás közben a Master elkezdi az adatokat ráadni a TWI buszra (megjelenik a START jel) akkor mindegyik eszköz felfigyel , beugrik ebbe az interrupt rutinba és ha a következő bájt egyezik az ő beállított címével akkor ad egy ack jelet és fogadja a további adatot , amivel az interrupt rutinon belül kezdhetek valamit. Ilyenkor a többi várja az újabb interrupt flaget...gondolom?! Ezeket az általános cím kódokat is lehet programozni vagy ezek be vannak égetve a hardweres TWI -ba? Magyarán ha tényleg pl egy kikapcs parancsot akarok mindnek küldeni akkor elég címnek ezeket az általános címeket beállítani és akkor mindegyik eszköz figyelni fog?
Mindegyik csak a sajat cimere reagal. Helyes mukodes eseten ha egy I2Cs eszkoz tehat olyan adatot eszlel a buszon mely nem neki lett cimezve, akkor azt tovabb mar nem is figyeli.
Amennyiben mindegyik eszkoznek szeretnel uzenetet kuldeni, akkor amennyiben emlekeim nem csalnak a 00 -as cimzest kell alkalmazni, ami az un. broadcast message. Ezt mindegyik I2C eszkoz olvasni fogja.
Ha jol latom, akkor gsm modul 4V-rol megy, mig az atmega128 3 Voltrol. Nos, ezzel gond lesz, hiszen az AVR uC-k rendszerint csak VCC+0,5 V jeleket birnak el. Persze van a labukon egy vedelmi dioda, de mivel a gsm modult nem ellenallasokkal kototed ossze az AVR-rel, a dioda marha gyorsan elfustolhet, majd utana az AVR is.
Tovabba nem biztos hogy az AVR 3V-os jelet a gsm modul logikai igaznak ertelmezi. Amit javaslok az az, hogy egy taprol uzemeljenek, vagy maskulonben hasznalj szintillesztot. Nezz korul pl texas instrumentsnel, vagy maximnal.
Szia krcko !
Igazad van ! A kiolvasott hibák számát és kódját jeleníti meg a uC ebben az üzemmódban. Próbaképp okoztam egy hibát (lehúztam a beszívott levegő hőmérséklet szenzort). Szépen jelezte is, hogy 1 hiba van, kódja:20B1E. Ha lesz még kedved/időd, kérlek nézd meg hogyan kell belépni az élőadat lekérdező funkcióba ! Köszönök mindent ! Üdv.: Laci.
Each digital I/O of the module operates in a 2.8V logic level inside the module. The voltage
level of those digital interfaces connected to the module should match the electrical characteristics of the module listed in Table 3. Otherwise, a level shifter circuit must be inserted between the host and the module. A GSM modul UART Feszültségszintjei: V(Inpot low) 0.0-0.67V V(input high) 1.7-2.8+0.3V V(output low) 0.0-0.34V V(ouput high) 2.0-2.8V Vagy ezt a szintet kell beállítani, vagy szintillesztést kell alkalmazni. A GSM modul kifelé max. 2.8V-ot fog adni.
Ezért gondoltam, hogy a 3V és a 4V jó választás lesz, mivel a GSM modulnak annyi az optimális, gyárilag előirányzott.
3.4V-4.5V (4V nominal) Ennek ellenére kifelé max. 2.8V-ot fog adni.
Milyen ellenállásokkal kellene összekötni az AVR-t a GSM-modullal?
Ezeknek a fenyeben vedd ugy, hogy nem is szoltam . Ami az ellenallast illeti, az abban az esetben kellett volna, ha mondjuk a gsm modul nagyobb feszultsegu kimenettel renxelkezik. Az avr labain van egy-egy vedodioda a tulfesz illetve a negativ fesz ellen. Az elobbi a bemenetrol a tapra kotve, utobbi a foldrol a bemenetre. Ezek "elvezetik" a nem odavalo feszt. Mivel ezen a diodan korlatlan aram nem kepes folyni, ezert erdemes egy ellenallast sorba kotni ele, ami korlatozza az aramot.
Erdekesseg, hogy egy atmel appnote szerint egy 1MOhmos ellenallassal meg a halozati 230V RMS is rakotheto a labakra, ha pl. a fazisatmenetet szeretnenk tudni. A min. ellenallas erteket mindig a tapfesz, a rakapcsolt fesz, illetve a vedodioda maximalisan elviselt arama adja.
Sziasztok!
Azt szeretném kérdezni,hogy AVR-eknél milyen órajel és előosztás eredményez ~1 másodperces periódusidőt? (timer-ekről beszélek) Köszönöm!
Ez attól függ, hogy milyen kristályod van, és melyik timert használod.
Valami további infót adj még meg. Mert 32,768KHz-től 20MHz-ig elő lehet állítani pontos 1mp-et.
Nekem 8Mhz-es kristályom van és 8 bit-es timer-re gondolok.
Ha van CTC-d, akkor az OCRx értéke:
OCRxx = F_CPU/elősztás/kívánt_freki-1; Tehát ha pl. 100Hz kell, 8-as előosztással, akkor: OCRxx = F_CPU/8/100-1; Amennyiben kis bitszámú timerrel kell ezt előállítani úgy nem kell feltétlen CTC, mert a legnagyobb előosztáson is nagy lesz a freki. Ilyen esetben fordítva kell számolni. tick = F_CPU/OVF/(esetleg ELŐOSZTÁS) tick = 8 000 000 / 256
Ez csak egy egyszerű példa. Azért van ilyen bonyolultan megírva, és nem úgy hogy:
Mert előbbi pontos, utóbbi 1-1 Overflow alkalmával mindig 1/31250-ed hibát belevinne. Ha hardverből szeretnél 1 másodpercet (tetszőleges kristály frekivel), akkor bizony 16 bites timerre van szükséged. Mert ezen megoldások hibát visznek bele az idő alapba az utasításvégrehajtási idő miatt. De természetesen ha csak megközelítőleg pontos 1 sec kell akkor bőven jó. Egy nem kritikus pontosságú (óra:perc) kijelzésű órához is bőven jó a tick-es osztás módszer. De minden módszernél kerüld a bonyolult utasításokat a timerben. Csak egy flag-et (bitet, vagy bájtot) célszerű ott állítani, mert látható hogy az új tick érték csak a megszakításban leírt utasítások végrehajtása után fog megtörténni.
Sziasztok!
Már legalább egy éve kacsintgatok a digitális áramkörök felé, de eddig nem tudtam eldönteni, hogy milyen mikrovezérlővel kezdjem az ismerkedést. Végül az Atmega 8 mellett döntöttem. Tegnap megérkezett a csomag, benne az AVR-rel. Ezt a programozót építettem meg apró módosítással, a BC549-t BCW66-tal helyettesítettem. Fordítónak a Wavrasm-ot használtam, a programozáshoz pedig a Ponyprog2000-et. A próbapanelem rendkívül egyszerű, viszont minden port ki van vezetve tüskesorra, így szinte bármit rá tudok kötni. Első programom nem csinál mást, mindössze 3 db ledet felváltva villogtat. Idővel meg szeretnék ismerkedni a C nyelv rejtelmeivel is, de most ezer más fontosabb dolgom van.
Aki csak most akar megismerkedni az AVR-ekkel, azt javaslom ne habozzon! Féltem, hogy működni fog-e a programozóm, vagy hogy a letöltött szoftvereket be tudom-e állítani. Szerencsére minden ment elsőre, csak az eredeti programon kellett kicsit módosítanom. Fentebb már a javított, működő program látható.
Sziasztok!
Megépítettem a Topi féle avr-programozót. A kérdésem: Egy usb hosszabítót szétvágtam s 5 vezetékem lett. Ezt akarom össze forrasztani a panellal, akkor az usb csatlakozó külső házának a vezetékét kössem össze a gnd-vel(a 4. érintkező kábelével)? Köszi!
NE kösd össze!
A ház az árnyékolásra csatlakozik, de jobban teszed ha a programozó oldalán ezt szabadon hagyod lógni. Ugyanis a föld(GND) az alaplapi csipszetre, a ház(SHIELD) pedig nagyon sokszor a gépházra megy. Galvanikus szempontból talán nem számítana, de itt hurkok vannak, és az alaplapon érzékeny áramkörök. Számítógépszetelő vagyok, és láttam már bőven olyat ahol galvanikus kapcsolat sincs a kettő között...
Sziasztok!
Ez most milyen lett így? MInden kritikát kitörő örömmel fogadok.
Amit javasoltam, azt még nem kötötted be...
Ami hianyzik a rajzrol:
1. Kvarc az AVR-hez(idealis lenne 7.3728MHz) 2. A taplabakhoz kozvetlen 100nF szuro kondik. 3. AVCC bekotese hianyzik. Ha hasznalod az analog reszt, akkor celszeru egy soros szuroinduktivitast is bekotni, valamint szurokondenzatort is. En spec. 4.7nH-t es 1µF -ot szoktam hasznalni. 4. Ha ADC-t hasznalod, akkor AREF labra 10-100nF szurokondit kell rakni. 5. Celszeru lenne az EMERG_OFF labat is bekotni. Ezzel a labbal veszhelyzetben tudod leallitani az eszkozt, igy nem kell a sorosporton a kikapcsolast kerni.(pl tulmelegedes eseten, ha mersz homersekletet is, vagy ha mered a tapfeszt, akkor a tapfeszultseg megengedett tartomanyon kivulre esese eseten is, stb) 6. Amennyiben szeretned a GPS modul RTC funkciojat is hasznalni, akkor a VRTC labra egy gombelemet kell kotni, kulonben tapfeszultseg hianyaban elfelejt mindent, es ha az ebreszto funkciot is szeretned hasznalni, akkor a VDD_EXT labat a mikrokontroller egyik INT labara kell kotni, hogy ebreszteni tudja a mikrokontrollert is. 7. RTS/CTS labakat szinten celszeru bekotni, mert lehet, hogy nem tudod a bejovo adatokat megfelelo sebesseggel feldolgozni es ezek hasznalataval a puffertulcsordulast meg tudod elozni. Amit modositani kell: 1. A PWRKEY bemenetet a mikrokontrollerre kell kotni, mert igy tudod majd bekapcsolni a GSM modult. 2. A modul tapjara 100µF tantal es 0.2-1µF keramia kondit kell kotni, lehetoleg minnel kozelebb a modulhoz. 3. A GSM modul tapkoreben az LM317 helyett valami nagyobb aramu stabilizatort hasznaljal, mert adas alatt rovid ideig akar 1.8A(2A max) is lehet az aramfelvetel, ha maximalis kimeno teljesitmenyen hasznalod. Ami gyanus: 1. A modulon a rajzod szerint van egy STATUS lab a VCHG es RI lab kozott. A dokumentacio szerint ott egy fenntartott lab van. Mivel a rajzodon nincsen a labszamozas feltuntetve, igy nem tudom, hogy az jo-e. (En ennek a leirasnak alapjan ellenoriztem.) Ha a halozat allapotat jelzo ledet kototted oda veletlen, akkor rakd at az egeszet a NETLIGHT labra.
Sziasztok.
Nekifogtam egy projektnek, http://www.microsyl.com/index.php/2010/03/20/mp3player/ ez lenne tervben megépítésre. Kezdésnek rendelkezésre áll a távirányítóhoz a mega8 és a 3310 nokia kijelző. Mielőtt jobban belevágok a projektbe gondoltam kipróbálom. A hibajelenség annyi, hogy a kijelzőn tükrözve jelenik meg a szöveg amit a proci küld. Bekötések stimmelnek, ránézésre működik, amennyire a gombok és a kijelző lehetővé teszi. Mivel mega8 és AVRICC (demó) a fordító, gondoltam ide írom. Nem vagyok nagy penge a szoftver írásában, így nem látom hol lehet a hiba. Átnéztem több projektet ami erre a kijelzőre és erre a fordítóra épül, de nem hozott eredményt a számomra. A forráskódot újrafordítottam, de változatlan a helyzet. (Még az elején belebotlottam vizsgálódás közben, hogy valakinek volt ugyanez a hiba, de nem tudom visszakeresni valami miatt...) Könnyen lehet, hogy más hiba is van a távirányító szoftverében, mintha nem kapcsolna ki, és gombok nyomkodása sem hoz változást, kiírja az üdvözlőszöveget, meg: "Song List" és itt megáll. De elsőnek az zavar, hogy tükörből kell olvasni a kijelzőt. Csatolom a fájlokat, hátha valaki látja a hibát. Köszönöm.
Nagyon szépen köszönöm, Reggie!
Mindezeket figyelembe fogom venni! A Status lábat egy újabb dokumentáció szerint tettem oda, ezt csatolom. |
Bejelentkezés
Hirdetés |