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 építettem, meglepően sokáig elvoltal vele, amíg megtaláltam minden nyák hibát, ami miatt nem ment.
Ajánlom figyelmedbe mindenekelőtt azokat a pineket, amiket ki kell szedni a 40 lábas dip foglalatból, az nem valami látható helyen van elmagyarázva. Persze, csak ha az előre megadott NYÁKot gyártottad le. Szóval én azt javaslom, hogy multimétert elő, és hibákat keres.
Szia!
Köszönöm a válaszodat... Időközben megoldódott a problémák egyik, fő része.A 2.11-es firmware-t beprogramoztuk az ATmega88P-be, és a szerkezet működik.Három Atmega8-at és egy ATmega88P-t "megjavított"... A MANUAL üzemmóba kapcsolás továbbra is gond az RS232 konverteremmel. Automata módban remekül kiír mindent, de nem hajlandó belépni Manual-ba. Végülis ez már nem nagy probléma, csak kicsit zavaró, mert nem igazán értjük mi okozhatja. A panelt egy jó barátom készítette, meglehetősen igényesen dolgozik, lajos1969 néven szokott felrakni a fórumokba az elkészített dolgairól (dolgainkról)képeket (pl.Labortáp, 3D globe...stb.). Természetesen ellenőriztük a PCB-t. Csak ez a fránya RS232...
Sziasztok,
ATmega128 alatt egy rádiós IC-vel RS232 kommunikációt kell folytatnom 19200 baud, 8N1 beállítások mellett. Az alábbi C függvény végzi a soros konfigot:
F_CPU = 8000000 0x3E karaktert kellene kapnom az eszköztől, amelyet rendben lévőnek látok a szkópon: start bit, 8 adatbit, 1 stop bit. ~50 us a bitidő, ami a baud beállításnak megfelelő. Viszont az RX megszakításban már 0xBE vagy 0x9E érkezik, azaz a bájt felső nibble-jében bit eltérések adódnak. Bitekkel szemléltetve:
Van valakinek ötlete, javaslata, hogy mi történik? Köszönöm! Idézet: „Fontos, hogy minden sorban páros bájt legyen megadva, ha egy 16bites számot adsz meg (.dw) akkor ez már megoldott.” Ezt rosszul írtam, ez a megadási mód a flash-nél igaz, EEPROM területen páratlan számú bájt is megadható egy sorban.
Mégis gond van a bitidőkkel. Az általam kiküldött bájt esetében látom, hogy az 5. bit környékén már ~fél bitnyi "belógás" van. Az ATmega128 8 megás belső oszcillátorát használom, a baud biztos hogy jól van kiszámolva és beállítva. Létezhet ekkora elcsúszás ilyen nem túl nagy sebességnél (19200)? Kipróbálom 14 megás külsővel.
Idézet: „Létezhet ekkora elcsúszás ilyen nem túl nagy sebességnél (19200)?” Igen lehet. Nekem pont előfordult most. Egy korábban már jól működő programot beégettem egy másik Atmega8-ba. Nos, mindkettő a belső 8Mhz-es oscillatorról megy. A jelenség az volt, hogy az utóbbi esetben csupa zagyvaság jött át az UARTon. Sokáig keresgettem, hogy mi lehet a baj, majd rájöttem, hogy az oscillator volt a hibás. Pedig csak 9600-as baud ratet használtam. Ami megoldotta a dolgot az az hogy kalibráltam a belső oscillatort ez alapján Röviden annyi, hogy az avrstudioban bemész a programozó felületre, ott van egy Advanced fül. Ott be tudod állítani, hogy milyen frekvenciára akarsz kalibrálni. A Read gombra kidob egy értéket. Nos ezt kell neked beírni az OSCCAL regiszterbe. Lehetőséged van az Read gomb alatt a write megnyomásával egy megadott eeprom címbe írni ezt az értéket, amit aztán runtime-ban kiolvashatsz. Ez gyakorlatilag arra jó, hogy ugyanazzal a kóddal különböző uc-ket tudj kalibrálni, mivel mindegyiknek más és más lesz ez a kalibrációs értéke. A mellékelt képen lehet látni az említett menüt.
Szia, köszönöm, hogy válaszoltál!
Próbáltam a kalibrálást és a 8 MHz-re adott értékkel (0xB7) inicializáltam a processzort (OSCCAL), de nem változott semmi, ugyanúgy 0xBE jött 0x3E helyett. Most 14 megás külső kristály van rajta, viszont most nem tudom, hogy a SUT_CKSEL dropdown listában melyik beállítást válasszam. F_OSC már beállított 14745600-ra. Ext.Crystal/Resonator High Freq.; Start-up time: 16K + 64 ms beállításokkal hibás karakterek jönnek át (0xF8). Mit kellene beállítanom?
Sikerült megoldani. A 14 megás külső kristállyal szépek a bit idők, nincs csúszás, az adatok jók. Ez fog maradni, mert szabadban, fagyban, hőségben is mennie kell az eszköznek. Üdv
Vettem ATtiny2313-mat, Ezen megy a program, de valamiért instabil egy kicsit a soros kommunikáció. Igazából nem baj, mert I2C-n fog menni, az remélem jó lesz.
Viszont ATtiny2313-on hogyan kell beállítani a TWI-t? Az adatlapban nem találom, ott valami USI (Universal Serial Interface) van, de van neki SDA meg SCL lába, tehát kell lennie benne.
Az instabilitás megoldódott (a szervó bezavart a tápfeszültségbe, tettem rá egy kondenzátort, így most tökéletes). Találtam egy mintát az USI használatára mint slave TWI eszköz, de sajnos bárhogy próbálom nem sikerül elküldeni neki semmit. Úgy tűnik itt végleg megakadtam, ha valaki meg tudná mondani, hogy hogyan kell használni ezt a mintát, annak nagyon örülnék.
Sziasztok!
Lenne egy kérésem. Hogyan lehetne megoldani, hogy egy gps modul által küldött infót átalakítsak kissé. van egy program, amiben elvileg működik a dolog, csak nekem valamiért nem jó.
Nos ez a kód külön adja vissza a fok és perc értéket, nekem viszont egyben kellene, és ráadásul nem számként, hanem stringként. Valaki át tudná nekem írni ezt a részletet, hogy jó legyen, mert én nem igazán vágom a pointeres értékekkel való játszadozást. Úgy is jó lenne, ha csak egyszerűen egy string lenne a visszatérési értéke a függvénynek. persze ha megoldható. Tehát mint a kód elején beadok neki egy stringet, pl "5333.9472" és visszatérési érték meg "53.565786" legyen.
Fogyaszd egészséggel. Amúgy meg kezdd átnézni a pointereket, mert hamar el fogsz akadni a mikrokontroller programozásban.
Nekem is hasonló problémám van amikor programozom az AVR-t akkor ID megegyezik az adatlappal de a dude-éval nem... néztem a man file-t de sokat nem tudtam meg belőle hogy a signature-e miért nem egyezik. mondjuk a régebben vásárolt 88-asok jók voltak, de amiket egy hónapja vettem már nem...
Atmega88 - Crunchbang - Dragon
Hello!
12 voltról akarok egy atmeg8-at üzemeltetni. feszültségosztóval 7.5/4.5=R1/R2 4.5V ot gondoltam az avr-nek. csak nem tudomm mennyi áramot engedjek vagy ha LM7805 -el csinálom abból 5V jön ki az nem sok az atmega8-nak?
Fesz oszto nem tul jo otlet, hiszen a tap vonalon nem szerencses a nagy impednancia. Nem beszelve arrol, hogy az ugye nem szur semmit sem. Zeneres megoldas is tulajdonkeppen egy feszultseg oszto, csak ott ugye az also tag a zener amelyik biztositja bizonyos hatarok kozott, hogy nagyjabol ugyanakkora feszultseg jojjon ki. De meg erre is ildomos egy emitter kovetot ratenni, hogy az impednancia az AVR-ed fele viszonylag kicsi legyen.
Aramot pedig nem te engeded az AVR-nek, hanem majd azt o szepen leveszi maganak. Ha pl van egy stabil 500A-es tapod, akkor nem kell oda neked semmi aram korlatozas, AVR-en nem fog 500A atmenni. A tapokon az a maximum ertek, ennyit kepes maximum leadni, hogy a feszultseg szintje jelentosen esne, de ez nem fog "atpreselodni ha torik ha szakad" az aramkoron. 7805-el az egyetlen gond, hogy az elfuti a tobblet feszultseget. Tehat ha az aramkorod tul sok aramot venne fel, akkor azt a 12V-5V azaz 7V-nyi reszt el kell melegitenie. Hogy mennyit, az Ohm torvenyevel kiszamithatod. Jobban jarnl valami LDO-val.
Feszosztóval:
I=const=U1/R1=U2/R2 ---> U1/U2=R1/R2 --->7.5/4.5=R1/R2 Tehát ha feszosztó mellett döntök a két ellenállás aránya adott, a méretük nem. A méretükkel én döntöm el a max áram értékét. Nyilván nemfog az avr-en nagyobb áram folyni mint amit felvesz, de mivel nemtudom, h. mekkora akkor nyugodtan engedjek rá 1/2A-t?
Köszönöm szépen, tökéletesen működik. Végre kiírja rendesen az értékeket. Most már mehet a gsm modul beüzemelése is és utána már küldhetem az adatokat sms-ben.
1-2A? Most viccelsz? Miért akarsz elfűteni ekkora teljesítményt ellenálláson? Akkor már inkább a stab IC. Nem tudom mi a bajod a stab IC-vel. 5V-os stabbal pont jó is lenne és nem kellene ennyit vacakolni.
Ezt a feszültség osztóval való táplálást verd ki a fejedből.
Abból amit írsz látszik, hogy nincsen nagy tapasztalatod elektronikában, szóval ne szállj szerintem vitába, ha meg akarsz fogadni egy jó tanácsot. Használj feszültség stabilizáló IC-t. Ilyen pl. a 7805-ös. Ha te úgy gondolod, hogy az áramkörödben amperek fognak szaladgálni, akkor szemezgess innen valami "bikábbat": Fesz stab IC-k. Hogy mennyi sok az atmega-nak az az adatlapból derül ki. Forgasd bizalommal. Bár annyit megelőlegezek, hogy az 5V-ot imádni fogja. Azt pedig, hogy egy feszültség osztóval való táplálás egyenértékű lenne egy feszültség stabilizáló IC-vel, azzal erősen vitatkozni lehetne. Ugyanis előbbinél nincsen visszacsatolás, míg utóbbinál van.
igaz, akkor megvan a válasz a kérdésemre:
Nem kell sokkal nagyobb áramot engedni a kelleténél, h. ne legyen nagy a teljesítményveszteség, akkor ~10mA-el számolok, annyi bőven elég. Vagy sabilizátor IC. A két megoldás közel egyenértékű szerintem.
Valami nem jó. Szerintem a gyári rész, amit beraktam, az nem jól csinál valamit. Ebből az adatból: 4800.2942 ez lesz: 48,4903. Ez pedig nem helyes, mivel 48,004903-nak kellene lennie. Valamiért a percet nem 0,2942-ből számolja, hanem 29,42-ből.
Azt hiszem megvan a gond.
Most a perc az 0,2942. Ez beolvasásnál még jó is. De ha ezzel számol, akkor az elején lévő két nulla kiesik. Utána hiába oszt, szoroz, ha a nullákat nem veszi figyelembe. És ha a végén kellene az a két nulla, akkor az a műveleteknek hála már nem lesz ott.
Megegyszer: Nem tudsz nagyobb aramot athajtani az AVR-en, mint amennyit az fel akar venni. Pont. A fesz osztonal az imednanciat a felso tag adja meg neked... ami ugye sorba van kotve ilyen modon a tappal.
Minel nagyobb az az ellenallass annal rosszabb a helyzet. Viszont minel kisebb, annal nagyobb aram folyik el feleslegben az ellenallas halozaton. Azt ugye el fogja neked melegiteni. Zenerrel azert jarnal jobban, mert ott ugy allitod be, hogy 1 - 1.5 mA follyon az ellenallas+zeneren. Igy nem kell feleslegesen nagy ellenallas a felso tagon. Azonkivul ugye az AVR-ed ill az aramkorod is kozre jatszik az osztonal, igy egy normalis ellenallas osztonal ahogy esetleg valtozna az AVR aram felvetele, ugy valtozik a feszultseg szint is. Ez pedig nagyon nem jo... Idézet: „A két megoldás közel egyenértékű szerintem.” Koránt sem. Míg ellenállás esetén az AVR-re jutó fesztültség baromi erősen függ az éppen aktuális áramtól, addig fesz.stabilizátornál olyan stabilan fog állni, mint a katonatiszt. Ha sok a feszültséged, akkor köss sorba több diódát, melyen 0.6V esik darabonként és ezután használj egy 5V-os stabkockát vagy a korábban már említett zener+ellenállás kombinációval játssz el egy kicsit. Bármelyik mellett döntesz, a 2 ellenállásos fesz.osztónál bármi jobb lehet
Sziasztok
Keressgéltem a forumon de nem kaptam választ a kérdésemre. Egy AVR-t szeretnék táplálni egy motor gyújtókábelére épített tekercsről. Alapjáraton, ha belövöm 5V-ra a feszültséget, akkor max fordulaton felugorhat 1000V-ra is (nagyvonalu becslés). Hogy tudom biztosítani az 5V-ot a szerkezetnek? (világítótekercs nincs benne, elemes módszerrel meg nem tudom megoldani, mert pont az lenne a szerkezet lényege, hogy akkor adjon feszültséget, amikor jár a motor ) Segítségeteket előre is köszönöm
És mi lenne, ha az akkumulátorról táplálnád, a gyújtótekercsről levett feszültség pedig csak pusztán jelezné az AVR-nek, hogy jár a motor?
Nem vagyok benne biztos, hogy egy 46dB-es sávban mozgó feszültségforrást meg tudsz szelidíteni, hogy táplálni tudjon egy mikrokontrollert.
Hát az a bajom, hogy nincs benne akkumulátor (cross motor)
Sziasztok!
Egy ATmega16-os kontrollert használok és a problémám az, hogy az analóg komparátorom rendszeresen megszakítást generál annak ellenére, hogy semmilyen fel vagy lefutó él nincs a bemenetén. Rögtön már a programozás után, mielőtt rányomnék a futtatás gombra már látható az I/O view-ban hogy az ACI flag egybe van állítva. Hiába írok bele egy egyest, hogy töröljem a flaget nem történik semmi. Ez az inicializáló függvényem:
Mi lehet a probléma? Előre is köszönöm a választ!
Kicsit nehezen olvasható, hogy mi történik az első sorban. Írd így, hogy könnyebben láthassuk:
Így látjuk, hogy az ACME-t törlöd ki az SFIOR-ban. Azt pedig, hogy miért kapsz interruptot, ahhoz kellene tudni, hogy mi is van erre rákötve. Mármint milyen hardver/jel bemenet. Az adatlap amúgy ezt írja: Idézet: „When changing the ACIS1/ACIS0 bits, the Analog Comparator Interrupt must be disabled by clearing its Interrupt Enable bit in the ACSR Register. Otherwise an interrupt can occur when the bits are changed.” Tehát az inicializálás elvileg helyes sorrendben történik. Egyébként az, hogy hiába törlöd az interruptot, az mégis rendre megjelenik arra következtet, hogy a bemeneten csak történik valami. Ha pl. nincsenek fix potenciálra kötve az analog comparátor lábak, akkor össze vissza ugrál a potenciáljuk, tehát az simán generálhat interruptot. |
Bejelentkezés
Hirdetés |