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
A kapcsolások közt nézz szét!
Bővebben: Link
Szintén ugyan ezt tudom mondani.
Bővebben: Link Bővebben: Link Vagy ha jobban is szeretnél foglalkozni az AVR-ekkel, akkor javaslom, hogy vásárolja egy gyári ISP-t. Az MSC Budapest-et tudom ajánlani, jó áraik vannak.
Köszi a válaszokat.
Akkor ezek után ISR.
Juj ,de jó! Köszönönm szépen. Tök egyszerű. Ezt mindenképp megcsinálom. Semmi extrém alkatrész.
Még egy kérdés. Ez egy régi tipus ha jól tudom. Van az Atmel-nek egy ezzel kompatibilis tipusa?? A cég oldalán van samples, és hát jobb is lenne egy moderenbb tipussal megvalósítani ezt a projektet ha van rá lehetőség. Előre is köszi az infót.
Mi régi típus?
Ahhoz hogy egyszer vagy kétszer beleégesd a szoftvert, teljesen megfelel, én majdnem egy évig használtam heti rendszerességgel.
Szívesen!
Nincs vele semmi gond, csak kicsit lassan égette be. Nem emlékszem már, azt hiszem hogy nem is lehetett az ISP órajelet változtatni, ha lehet, akkor az AVR órajelének a negyedére kell levenned, hogy tudd programozni. Pont a múlt héten szabadultam meg ettől a programozómtól, 1 évig légszerelve használtam, most meg kellett a soros port csatlakozó.
A lassúság nem gond. Nem fogom olyan gyakran használni, hogy számítana valamit is ,hogy várnom kell néhány percet. Majd kipróbálom. Összedobom próbapanelen, és meglátjuk. Még egyszer köszi!
Előbbiekben rosszul fogalmaztam. Megépítettem a PC ventillátor szabályzó (NTC-vel, és PWM-el, ATtiny13)
http://www.hobbielektronika.hu/kapcsolasok/nyolc_labbal_iii_resz_ol...4.html Itt 2 ventit szabályoz, 2 ntc-vel. nekem csak 1 ventre-és ntc-re van szükségem, viszont, szeretném azt megoldani, hogy a maradék bemenetét arra használnám, hogy figyelje a rákötött feszt, 3,3v vagy 5 v mindegy. ha ez a fesz megszünik, akkor a ventit 1 percig "FULL_SPEED" en járassa. Hogyan lehetne ezt megoldani? amatőr vagyok még nem nagyon programozgattam sajnos.
Ki kell hámozni a kódból a másik ventillátor szabályzását, az NTC helyére beteszel egy lehúzó ellenállás, mondjuk 1KOhm-osat és az ADC-vel méred a feszültséget, majd kiszámolod a kontrollerben, hogy hány V van a bemenetén. Egy kis hiszteriézist érdemes volna beletenni.
A doksiban van egy táblázat, ahol minden megszakítás mellet van egy memóriacím pl.: INT0 - 0x0001, ez azt jelenti, hogy megszakításkor ide ugrik a program?
Igen, de C-ben ezt a fordító rendezi úgy, hogy majd futás közben jó legyen. Nem kell vele sokat törődni.
Azt tudom, hogy c-ben ilyenekkel nem kell foglalkozni, de azt nem lehet megcsinálni, hogy mindenféle ISR() nélkül a a 0x0001-be írunk egy "goto kezd" parancsot?
Tudom, ez már nem annyira c, de érdekel; ezért is használtam a goto parancsot, nem azért, mert annyira kedvelem.
Szerintem nem kell ezt túlbonyolítani, az ISR()-t a megszakítás lekezelésére találták ki. Ha neked nem kell lekezelni semmit, akkor figyeld a zászlókat, és az alapján goto-zz. Az ISR() egy függvény, amiből nem szoktunk kiugrani anélkül, hogy befejeznénk. Ezért goto-t csak a legutolsó esetben használj, ha már semmi más nem jut eszedbe.
Köszi, a flag-figyelés jó ötlet.
Még az régebbi programhoz annyit, hogy átállítottam az INT0, hogy csökkené élnél szakítson meg, de ha folyamatosan gnd-n hagyom a PB2-t, akkor nem csak egyszer, hanem folyamatosan megszakít. Ez mitől van?
Letezik ISR(BADISR_vect) ami arra jo, hogy a lekezeletlen interruptokat is lekezeld. Van EMPTY_INTERRUPT is ami jelezni fogja, hogy az adott interruptnak nincs handlere, de ne okozzon resetet es ne ugorjon a bad isr-re se... Aztan van olyan, hogy ISR_ALIASOF, az meg arra jo, hogy van egy handlered, es ugyanazt hasznalod tobb masik interrupthoz is.
C-ben nagyon ritka, hogy valakinek manualisan kelljen barmit is lekezelnie. Ha van egy problemad szinte bizonyos, hogy masnak is volt mar hasonlo es arra van egy elegans megoldasa...
Rendben, de sajnos fogalmam sincsen, hogy is néz ez ki valójában.
hogyan kell mérni adc-vel a feszt? és hogy számoltatom ki vele, sajna nagyon lúzer vagok még ehez
A forráskódban máralapból van egy függvény ami mér, neked csak meg kell adnod hogy melyik csatornán akarsz mérni.
Így V-ban kapod meg: referenciafeszültség*(advisszadottértéke/1024)
az a baj, hogy fogalmam sincs hol van az amit módosítanom kell. köszönöm a segítséged. de sajnos nem értek hozzá még ennyire sem hogy ebből bármit is tudjak alkalmazni.
Ha meg akarod tanulni akkor sajnos bele kell feccolni az idot es valoszinuleg nem itt kell elkezdeni. Ha pedig nem, akkor valoszinuleg jobb, ha valakit megkersz csinalja meg neked.
Az L-es típusok tudnak 2.7V-ról működni, de cserébe csak 8MHz-en ketyegnek.
Akkor jól olvastam. Csak az ATmega88 működik a fentiek közül 3.3V-ról és az is csak max 10MHz-en.
Köszönöm!
Csak egy észrevétel:
Nem így kéne törölni egy regiszter bizonyos bitjeit:
Hanem így:
Ha kicsit belegondolsz, vagy méginkább levezeted papiron a logikai műveletet, akkor teljesen nyilvánvaló.
Ezt nem kell törölni, mert alapból 0, csak azért írtam ki, hogy látszanak a paraméterek.
Attól, hogy alapból nulla az a két bit, még nem logikai OR -al kéne törölni. Nem tart semmiből a helyes sort beírni a kódba. Fölleg, ha tudod, hogy az a sor most semmit nem csinál a kódodba. Ha egy kezdő belenéz a kódodba, akkor lehetőleg a helyes megoldást jegyezze meg.
Igazad van, de a bit törlés nekem sem megy zsigerből, ezért csináltam így.
De a megszakítás még mindig nem megy rendesen... |
Bejelentkezés
Hirdetés |