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!
Látott valaki esetleg, valamelyik webáruházban ATtiny20 12U-1 chip -et? Erre a típusra lenne szükségem, ez 1.4mm x 1.5mm méretű. Illetve még kérdés, hogy ezt mely programozókkal tudom Winavr -ből programozni? Olyan is érdekelne ami otthon építhető, de ha van webáruház az is érdekelne. Köszi!
Sziasztok.
Végre sikerült működésre bírni egy 2x16 karakteres LCDt. Mindent szépen mutat amit kiiratok vele addig, amíg rá van csatlakoztatva a programozó (AVR Doper). Amint kihúzom a gépből, vagy a lecsatlakoztatom a kábeljeit, a szöveg helyére teli négyzetek futnak fel szépen sorban. Programozó nélkül, reset után pedig az első sorban csak teli négyzetek vannak, a 2. sor pedig üres. Miután bedugom a dopert, megjelenik a szöveg. Próbapanelen van összedrótozva. Mi okozhatja? A hozzászólás módosítva: Júl 2, 2013
Sziasztok
Olyat akarok csinálni, hogy 8 változót egy bájtba írni. pl. változó1=1, változő3=1 az 0b00000101 vagy változó6=1, változő5=1 változó2=1 az 0b00110010 Segítséget előre i köszönöm.
Szia én még AVR/microchipet soha nem programoztam, de PC programoknál így helyes c++ba
: a deklarációs résznél:
És akkor:
Köszönöm a segítséget, ugytünik ez kell nekem.
Sziasztok. Előrébb jutottam. Egyszerű V & A mérőt programoztam mega8 al.
Igy iratom ki a displayre:
A voltage változó double, mert a következő hibát kapom ha float. "Warning 1 format '%f' expects argument of type 'double', but argument 3 has type 'float' [-Wformat] Hogyan tudnám ezt orvosolni? Továbbá azt, hogy ha pl. 2,01V a fesz, akkor is 2,010V ot írjon ki. Most ugrál a tizedeshely és fixnek szeretném, mert elég zavaró. Előre is köszönöm, ha segít valaki egy kezdő AVRezőnek.
Szia!
Nézd át a sprintf függvény paraméterezését. Így én se tudom, mindig akkor szedem elő ha kell éppen. Bővebben: Link Bővebben: Link
Sziasztok!
Nekifogtam az avr programozásnak, de hamar elakadtam. Megépítettem az ebben a cikkben található, soros porti avr programozót. Építettem továbbá egy kicsit bonyolultabb eszközt ami majd egy PC tápot fog vezérelni labortápként egy ATmega8-al. Sajnos becsúszott egy kis hiba, mégpedig hogy a nyák tükrözve lett. Ez csak az AVR esetén jelentett kisebb problémát de annyival megoldottam hogy a lábait áthajtottam a másik irányba. Ezzel csak az a baj, hogy nagyon apró repedések keletkeztek a lábakon ezért gondoltam nem szedem ki a foglalatból hanem beforrasztok a foglalat lábaihoz egy pár kábelt a programozáshoz. Szépen bekötöttem mindent, majd, hogy ne egyből a mély vízbe ugorjak bele akartam égetni egy egyszerű programot ami csak az AVR D-portjára kötött led kijelző 2 ledjét villogtatja. Ponyproggal csináltam mindent úgy ahol a cikkben van hibaüzenetet sehol sem kaptam, mikor kiolvastam a memóriát ugyanazt kaptam, mint amit beleégettem. Majd amikor ráadom az AVR-re a tápot semmi. Multiméterrel is megnéztem, semmi. A programozó lábak egy-egy gombra vannak kötve tehát ez nem zavarhat be. Ezt a kódot égettem bele, amit Topi egyik cikkéből szedtem, annyi átalakítással hogy PORT-B 3 és 4 helyett PORT-D 0 és 1 lett. A hex file-t AVR studio + win avr-el csináltam, az AVR studioban csak anyit adtam meg hogy 1 Mhz órajel és ATmega8. A fuse biteket nem állítottam át, bár arra nem sikerült rájönnöm mire jók a BOOTSZ0 és 1 bitek, valamint mi az a start up time (SUT0 és 1), szóval valaki légy szíves magyarázza el.
A fő kérdés az, hogy lehet e hiba az égetésben, ha kiolvasva visszakopom az eredeti kódot, és ha ott nem akkor hol? A segítséget előre is köszönöm. Üdv, Csaba
A Warning-gal nem tudsz mit kezdeni, mert a sprintf double parametert var a %f-hez. Vagy double valtozot hasznasz, vagy cast-olod double-re:
Ja, es ez mindjart valasz a masik kerdesedre is. A %6.3f azt jelenti, hogy a teljes szam legalabb 6 karakter hosszu lesz, belertve a tizedespontot is. Es a pont utan 3 szamjegy lesz.
Köszi.
Tehát akkor ez a teljes kód:
A referencia 4V TL431 el előállítva. A maximum amit jelez 3.000V. Miben lehet a hiba?
Rájöttem! Az adc * 4/1024; nél 4.0 kell.
Ket hiba van. Egyreszt sosem lesz 4.0V az eredmeny, mert 1023-nal nagyobb erteket nem ad az ADC. Ez sima matek. De ez a kisebbik problema.
Az igazi hiba az, hogy a maximum adc ertek, ugye 1023. Az 1023*4=4092, amit ha elosztasz 1024-gyel, akkor az eredmeny 3. Mert a szamitas vegig int szamokkal tortenik. Csak a vegeredmenyt, ami 3 konvertalja at float-ta, ami 3.000 lesz. Ha azt irnad, hogy: voltage = adc * (4.0 / 1024), akkor jo lenne az eredmeny. Az 1 es az 1.0 teljesen mast jelent. Az egyik int, a masik lebegopontos. Javaslom, hogy olvasd el a 'C' nyelv idevonatkozo szabalyait, kulonos tekintettel az automatikus tipuskonverziokra.
Igen, aztán már rájöttem. Ismerős dolgok ezek nekem, csak már látszik, hogy este van... Idáig ezzel verekedtem, elsem hiszem. Aztán észrevettem mikor úgy 100x ra elolvastam a kódot.
Most már ugyanazt mutatja, mint a multiméter. Köszönöm! Viszont egy jó programozó jól jönne. Ezzel a Doper klónnal elég lassan megy és még hibát is dob, az időtúllépés miatt. Esetleg tudsz ajánlani valami tutit? A hozzászólás módosítva: Júl 3, 2013
Nem tudok jo programozot ajanlani. Sajat tervezesu, USB-s programozom van, de az alapvetoen Linux-os cucc.
Tegnap nem vettem eszre, de van itt meg egy-ket aprosag. Az egyik, hogy az LCD es ADC init benne van a ciklusban, de gondolom, ez csak veletlen.
Aztan a text[6] kicsi lesz. 6 karakter a szam, 1 a 'V', vagy az 'A' az aramnal ![]() Azon felul, ha a voltage es current double, akkor nem kell a (double) a sprintf hivasba, de ez nem hiba, mert semmilyen hatasa nincs ebben az esetben, csak felesleges.
Az 1. és a 3. dolgot észrevettem, a 2.at pedig kijavítottam.
Van pár gyengesége ennek a kapcsolásnak, merthogy tegnap rákötöttem a tápforrás megfelelő kimeneteire, és 3,.. V ig nem is mutatott semmit, csak nullát. Utána voltak különbségek a multis méréshez képest. A bemeneti osztó 1:1000, ezért a SW ban, még szoroztam 1000el. A villogást, hogyan lehet kiküszöbölni? Ma nemnagyon haladtam előre, nem jutott idő erre. Viszont ha statikus jelet mérek, akkor ugyan azt mutatja, mint a multi. A dinamikusan változó jelre, eléggé lassacskán reagál.Lehet kisebb előosztást kellene használni.
Valaki meg tudja mondani, hogy avr studio 4.19-el egy forráskódot, hogy kell hexxé fordítani egy saját szájízre átírt make-fájllal? Köszi
Sziasztok!
Nagyon kezdő vagyok az avr-ben. egy atmega128at szeretnék majd használni. Letöltöttem az adatlapját,viszont az műszaki angoltudás hiánya miatt és mint alapjába véve a mikrokontrollerhez való hozzá nem értésem miatt a portok használatát illetően (is) gondok merültek fel. Nem nagyon értem h melyik port mire való,és hogy melyik protra mit lehet kötni. Lenne valaki olyan rendes h leírja érthetően port-ról portra h melyik port mire szolgál? Annyira jöttem rá h a PORTF az az ADC bemente, a port B az az SPI kommunikációhoz kell, a PORTC vel pl LCD-t lehet vezérelni. De a többi az nem tiszta. Pl ha van egy Hall érzékelőm,aminek kimenete digitális jel, melyik lábára csatlakoztassam.Vagy alapjába véve egy digitális jelet melyik protra csatlakoztassak!!! Lehetőleg ne offoljatok a tudatlanságom miatt,mert szeretném megérteni. Köszönöm előre is !!!
Pl.: van a
Kovács Tamás tanárur leírása: ATMEL ATMEGA128 OLIMEX AVR-MT-128 FEJLESZTŐ PANEL Ebből sokat elleshetsz! Bővebben: Link.pdf
Köszönöm a segítséget, bár ezt már én is megtaláltam korábban (ebből jöttem rá pl az lcd vezérlésére). viszont a lényegében nem sokat segít nekem az a pdf. De ismételten köszönöm a segítséget!!!!
Nézd meg ezt. Hátha találsz valami hasznosat.
Szervusz!
Nekem ez az oldal jött be.
PortA: külső memória adat illetve címzéshez használható.
PortB: PB0-PB3 – SPI interfész(szolga vagy mester), PB4-nullás időzitő PWM és komparáló kimenet, PB5 és PB6-1-es időzitő PWM kimenete és komparáló kimenete(A illetve B kimenete), PB7-kettes időzitő PWM és komparáló kimenet illetve az egyes időzitő C kimenete. PortC: Atmega103 kompatibilis módban csak kimenet ként lehet használni (alapértelmezetten ez van beállítva egy új mikrokontrolleren). Még használható külső memória cím illetve adat sinként. PortD: PD0-PD3-külső megszakíŧás, ezenekívűl PD2-PD3 használható soros (UART) portnak. PD0-PD1 használahtó meg 2-vezetékes interfésznek is. PD4-PD7-külömböző időzitők külső órajel bemente. PortE: PE0-PE1:másik soros port ki és bemenete (UART0) illetve programozó lábak. PE4-PE7 külső megszakítások. PortF:ADC csatornák. PF4-PF7-JTAG programzó csatlakozó Ezen kívűk minden PORT használható digitális ki\be menetnek, mindegyik lábon külön felhuzó ellenállással. A programozásnál oda kell figyelni, mert nem a megszokott MOSI, MISO lábakra kell csatlakoztatni a programozót, hanem PE0 és PE1 lábakra. A karakteres LCD bármelyik portra lehet kötni. A hozzászólás módosítva: Júl 5, 2013
Sziasztok.
Építettem egy fordulatszám vezérlő áramkört, PC ventilátorokhoz. Az IC egy ATMega48, erre kapcsolódik két forgókapcsoló, amivel két PWM csatorna kitöltését állítom. Illetve még 8 LED, ami visszajelzi a kapcsoló állapotát. A PWM csatornákra 1-1 IRF840 MOSFET van kötve, azok kapcsolják ki-be a ventilátorokat. Az egyikre 4, a másikra 2 ventit lehet csatlakoztatni. Az AVR RESET lábát szabadon hagytam, sehova nincs bekötve. A gond az, hogy véletlenszerűen hiba jön elő. Teljesen rendszertelenül, nem tudom kétszer ugyan úgy előidézni. Az egyik hiba, hogy valamikor az AVR spontán resetel. Egyfolytában. Gonodl egyet, és utána folyamatosan újraindul. A másik, hogy valamikor 3 ventilátorral nem hajlandó elindulni a teljes áramkör. A tápellátást a számítógépem végzi (tehát betonstabil 12V), az AVR pedig egy 7805-re van kapcsolva a LED-ekkel együtt. Szerintetek mi lehet a probléma oka?
Sziasztok!
Most ismerekedem a C-vel. Van a delay_ms, ez 65 ms-t képes várni. 1 sec-es időzítést, hogy tudok létrehozni?
Nem vagyok nagy AVRes de ez nem működik, úgy tudom. Több _delay_ms -t összeraksz. Vagy használhatod az egyik timert ami interruptot idéz elő kb, 1s nél.
Érdekes :/
Akkor egy for loopba tesz 10msec-es delayt, vagy marad a timer. A hozzászólás módosítva: Júl 5, 2013
Szia, ne haragudj érte, én nem vagyok nagy szakértője a témának.
De ha szabadon, illetve lebegve hagyod a reset lábat, akkor mégis mit vársz mi történjen? Húzd fel a kontroller tápfeszültségére egy 1-10KOhm közötti ellenállással. Ahogy illik. |
Bejelentkezés
Hirdetés |