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
Sziasztok!
Attiny2313-al készítettem egy PWM-es ventillátorszabályzót. Azt akartam elérni vele, hogy 0-255-ig randomra váltogatja a beírt számokat, így a ventillátor hol maxon forog, hol épphogy csak megy, néha persze leáll. A kérdésem a következő: Nem ad le 5V-ot, próbáltam ledet rákötni, de azzal sem kap 5V-ot, saccolásom szerint olyan 3V jöhet ki rajta. Szerintetek mi lehet a baj? Forráskód:
Üdv, yoman
Üdv mindenkinek!
Egy Atmega16 hoz lenne szükségem bootloaderrre. Sajnos szoftveres uart van csak (a hardveres lábai foglaltak). Tud esetleg valaki olyan bootloadert ami képes szoftveres uarton működni? Bascomot használok a fejlesztéshez. Előre is köszönöm.
Bascom alatt találsz egy csomó programozási lehetőséget. Ahol bootloadert látsz(arduino, MCS) és COM portot(pl. a FLIP csak USB-n megy), mindegyiknél keress rá guglin, hátha akad olyan is ami szoftveres.
1: tettél rá aluláteresztő szűrőt?
2: a PWM max. 0-255-ig megy. A "széleken" vagy nem teljesen 0(inverz PWM) vagy a maximum kimenet is meg van szaggatva. Szűrő ÉS terhelés nélkül a kimenet különálló életre kel. De talán a terhelés fontosabb...
Sziasztok!
Mi tulajdonképpen a brown-out az Atmeleknél? Köszönöm előre is!
Ha jól értelmezem, a feszültség csökkenése esetén csinál egy reset-et és egy bizonyos ideig késlelteti az indítást?
Hello,
Nem tettem rá szűrőt. Ha jól értelmezem, akkor a pwm terhelés nélkül ad ki 5V-ot?
Nem egészen 5V-ot, mert a szórt kapacitások is közrejátszanak. Inkább úgy nevezném hogy
szűrő nélkül csak egy négyszögjelet kapsz. A szűrő azért kell hogy ezt egy analóg feszültségértékre átalakítsd. A terhelés pedig azért, hogy folyamatos legyen a vezetés. A szaggatott vezetési tartományban a kimenőfeszültség mindig nagyobb mint a kitöltési tényező és az AVR feszültségének szorzata. Van egy képlet de sajnos nem jut eszembe hogy minimum mekkora terhelés kell(mA-ben). Valami ilyesmi: I(min) = k/f*L*C; ahol f a frekvencia, C a szűrőkondi, L a szűrőtekercs, a k-t most nem tudom fejből.
Sziasztok
megakadtam egy kommunikációs dologban. 2vezetékes rendszer lenne több AVR között, de most valamiért nem megy. 1 Master és több slave eszköz lenne( mind ATmega IC). Remélem tudtok segíteni mit rontok el. Tehát a master rész:
A main fv-ben csak 1-1 bájtot küldenék próbaképp.
A slave eszközben a kód:
Az F_CPU mindekét programban 8MHZ. A TWI címek természetesen ugyanazok. Ha adat érkezik a slave-re akkor próbának fel kéne gyulladni egy lednek de az nem történik meg. A master-en is ha a bájt átküldés végbement akkor is egy led jelezné hogy eljutott odáig a program, de ez se történik meg ! Esetleg tudtok valami tippet adni vagy valami forrást ahol működő master slave kód esetleg elérhető lenne? Sokadik próbálkozásra se akar menni
Üdv újra.
Ezen honlapos megoldás is már sokadik átdolgozásra került nálam, de még mindig nem megy. http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc Ezalapján a master részem ilyen :
A slave pedig ilyen :
Na ekkor ha nincs összekötve a 2 eszköz akkor a master-en villog a led, mert az i2c_start hibával tér vissza. Amint rákötöm a slave eszközt a led folyamatosan ég.. Nem lép tovább. és a slave-en persze nem kezd el égni a led szóval nem megy át adat. Azt még megnéztem hogy a vezetékek ilyenkor "megfagyott" állapotban hogy állnak : SCL : 5V SDA : ~0V
Nos éjjel még szkópot sikerült szerválnom
Tapasztalat : ha slave eszköz nincs rádugva a masterra akkor szépen kiadja a start utasítást az adress bájttal együtt, de nincs válasz és villog a led ezért.. SCL és SDA lábakon mérhető az adatmozgás. Amint rádugom a slave-t a start bitnél megáll az egész. az SDA láb a földön marad... Ez miért lehet?
Félsiker!
Beraktam egy 100nF kondit amitől már megjelentek hibás karakterek, és néha a tényleges hőmérséklet is fel fel villant. A ckdiv8-at kivettem már az első próbálkozásnál, mert nem ment fel másképp a progi, és végül kivettem a kvarcot ennek hatására a következő figyelhető meg: bekapcsoláskor 34C-t ír, majd 9C-t és aztán jön a vicces rész hibás karaktereket írkál másodpercenként változtatva, majd kb 10sec elteltével kiírja a tényleges hőmérsékletet, majd néha valami nonfiguratívat, majd ismét a helyes hőmérsékletet. Nem tudom mire vélni, de végülis működik, úgyhogy köszönöm a segítségeteket! Üdv: Krisztián
Sziasztok,
megoldódott! Esetleg aki tanulni szeretne a hibámból : Amint a TWI hardvert aktiválom , az SDA láb az IC-n belül pár kOhm -os mérhető ellenállással lekerült a földre és onnan el se mozdult. Amúgy minden más funkció tökéletesen működit az IC-n, csak ez nem. IC cserével a TWI lábak is tökéletesen működnek. Pityu
Pontosan erre való. Hiszen túl alacsony feszültségen hibák történhetnek az áramkörben. Sokszor pedig jobb, ha egy egység semmit sem csinál, mintsem, hogy azt hibásan tegye. Ekkor jön jól a brown out reset
Persze itt van: http://lmgtfy.com/?q=Hex+to+ascii+table
Tessék választani...
Sziasztok!
Az a kérdésem, hogy az AVR egyik lábát +5V-ról áttudom e kapcsolni testre, és ha igen, akkor hogyan? Üdv, yoman
???
I/O lábat igen.A megfelelő bitjébe írj 0-t (Portx.y=0)
Olyat szeretnék csinálni, ha az AVR egyik lábát letestelem, akkor 3 lábat testre kapcsol, és másik 3 lábat +5V-ra? Már egy ideje szenvedek vele de nem nagyon sikerül
Tehát: PORTB.0-át figyeljük. Ha testre kötöd és ezután a program ráfut az "if"-es részre, teljesül a vágyad: A PORTB.4,5,6 beáll 1-re(+5V), a PORTB.1,2,3 földre(0V).
6 gombot szeretnék rákötni egy AVR-re 2 dróttal.
Az elgondolás az, hogy egy Analóg bemenetre kötném rá a gombokat amiknél ellenállásos feszültségosztással tudnám mikor melyik gombot nyomta le. A szoftver részével nincs gondom, de a gombok kapcsolási rajza nagy segítség lenne számomra illetve az, hogy ez így működhet-e? Egyszerre csak egy lenyomott gombot kell érzékelnie.
A 2 dróttal használhatsz I2C expandert is. Analóg portra elég 1 is. Ha egyszerre valóban csak 1 gomb lesz rákötve akkor ellenállásosztót használj úgy, hogy egy közös ellenállás húzza fel az 5V-ra a portot, majd rákötöd a gombokat amiken keresztül különböző ellenállásértékekkel a földre kapcsolódnak. Ne az ellenállásokat kalkuláld hanem a kimenő feszültséget. Szűrőtől és zavarjelektől függően minimum 5-10%-os lépésközök legyenek! Egy bizonyos korlátig az R-2R létra is használható. Korlátozottan, mert a gombok csak lenyomott állapotban vezetnek. De ha pl. 33-100Ohm a felhúzó ellenállás a gombokon és a létrán az R=10-22kOhm, akkor az egyszerre lenyomott gombokat is fel tudod ismerni!
Helósztok, Találtam 1 tachometer progit, atmega 16-hoz, forráskód .c-ben van. de mihelyt én hex-re akarom fordítani, minden féle hibát talál, alapból nem talál pl: mega16.h-t meg a többi ilyen dolgot sem. mi lehet ennek az oka?
Egyébként bármit próbálok hex-re átalakítani, minden proginál et csinálja
io.h -t includeolj mega16 helyett. Az avr tipusa a project propertiesben legyen beallitva. Tovabba a delay.h az util/delay.h ha jol emelkszem.
A forráskódot ilyenkor illik automatikusan csatolni, valószínű hogy ebbe a hozzászólásba
már adtam volna a kijavított kódot. De már látszik hogy a legelső soroknál mi a gebasz: A beszúrandó könyvtárakat "helyben" keresi, miközben azok máshol és másképp helyezkednek el. Például a delay.h az így érhető el: util/delay.h Emlékezetem szerint mega16.h sincs már, én arra tippelek hogy ezt még valami régebbi C fordító alá írták. A mega16.h helyett avr/io.h használata ajánlott. A szerepe ugyanaz, csak ez mindenhová jó...
Az avr-lib nem is tartalmaz mega16.h, bcd.h fajlokat. delay.h van csak util/delay.h -t kell include-olni, de van egy olyan erzesem, hogy ez a delay.h nem biztos, hogy az amit a te programod keres.
Ugy tudom, hogy ezek a "Codevision C compiler for AVR" nevu fordito eseten hasznalatosak. Esetleg megprobalhatod a mega16.h helyere az avr/io.h -t irni. A bcd.h-ban lenyegeben ket fuggveny van: unsigned char bcd2bin(unsigned char n) unsigned char bin2bcd(unsigned char n) Ezeknek nincsen megfeleloik az avr-libc-ben, viszont konnyen implementalhatoak:
az util/delay.t elfogadta, de az io.h-t nem, és nagyon sok hasonló van :S
csatolom a progit :S Hátha jobb ha látod köszönöm előre is.
Sajnos én nem értek ennyire az avr-ekhez, sem a programozáshoz, szeretném megtanulni, de az nem 1-2 óra köszömöm
|
Bejelentkezés
Hirdetés |