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!
Atmega328P mikrokontrollerre beállítottam a fuse biteket Low Frequency Crystal-ra, a mikrokonroller elindul, viszont ISP-n keresztül nem férek hozzá. Hogyan tudom a fuse biteket átállítani, vagy törölni az egész programot?
Nekem USBASP-n a Slow CLK jumpert kellett felhelyeznem, amikor elfelejtettem, hogy a felprogramozni kívánt AVR 1Mhz-es órajelent ment.
Milyen programozód van, milyen a 328-as kristálya?
Ha az AVR-t 5V-tal táplálod akkor az UART is 5Von üzemel.
A Málnától még gond nélkül tudja fogadni az adatokat, de a Málnának már sok lesz az 5V-os jel. Az AVR TXD lábára kell valamilyen megoldás amivel a feszültséget leviszed 3,3V-ra. A hőérzékelő milyen típusú? Mi a programja? Kapcsolás?
STK200 a programozó. A mikrokontrollernek kapcsolás szerint 16MHz-es kristálya van. Jelenleg egy órakvarc van beforrasztva.
LM 35 DZ , úgy néz ki hogy 5 volton minden renben, de így 3.3v on már vagy 10 Celsius fokkal többet mér , rászámolnák anyit , de pontosan nem tudom.
Köszönöm szépen mindenkinek a segítséget a sleep móddal kapcsolatban!
![]() Ahogy ígértem mellékeltem, a végleges működő kódot. Remélem más is hasznát veszi, még ha nem is a legprofibb legrövidebb módon van megírva. Építő kritikát egyébként elfogadok. Abból lehet igazán tanulni ![]() ![]()
Sikerült ismét programoznom az IC-t, 555-tel építette egy astabil multit, kb. 900kHz-es frekvenciára állítottam be, rákötöttem a 328 OSC2 lábára és így sikerült átállítani a fuse biteket.
Abban kérek még segítséget, hogy eredetileg a program 16MHz-ről futott, most fuse bit be van állítva a 8MHz belső órajelre. Mit kell a programban módosítanom, hogy a program ugyanúgy fusson mint 16MHz-ről? ITT található a program. A timer1 és a timer2 jelenleg fel van cseréve. Timer1-ről megy a kijelző multiplex üzemmódban, timer2 aszinkron módban egy órakvarcról hajtja az órát.
avrdudeban: -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m
ekkor 8Mhz<= kristályra van beállítva és SPIEN A fenti beállítással mennie kell a 16Mhzes kristállyal, de akkor a Timer2-t asszinkron üzemre nem lehet használni órakvarccal. Vagy egyik vagy másik, a kettő együtt nem megy.
Az LM 35 DZ 4V és 30V között üzemel. A 3,3V kevés neki, nem működik megfelelően.
Adjál neki 5V-ot és az outputot mondjuk oszt el precíz ellenállásokkal. Hogy mekkora kell azt sajnos nem tudom, itt másra bíznám a választ. (Talán 2db 100ohm vagy 1kohm???)
Jó ötlet. Köszi
![]()
Ezt értem, nekem az a gondom, hogy ha átállítom a fuse biteket 8MHz-es belső órajelre, akkor a programban beállított hangok fele olyan magasak és a beállított várakozási idők dupla olyan hosszúak, ezt szeretném valahogy kiküszöbölni, hogy a hangmagasságok és a várakozási idők ugyan olyan legyen mint 16MHz esetén.
Ha nem tudod programozni legrosszabb esetben párhuzamos programozóval tudod visszaállítani az eredeti fuse biteket. Pár hónapja feltettem ebbe a fórumba a kapcsolást és a kódot. Kell hozzá egy másik uc és egy marék ellenállás. Bővebben: Link
Szerk.: Bocs látom közben már megoldódot. ![]() A hozzászólás módosítva: Szept 28, 2015
Ha van forráskódod (C-ben), akkor ott kell újra definiálni a sebességet, vagy a Make file-ban.
helyett
Így a _delay_ms() valóban annyi lesz, amennyi meg van adva. A hozzászólás módosítva: Szept 28, 2015
Sziasztok! Én is jártam már így és hasonló módszerrel újra tudtam programozni, de nem tudom ez a megoldás mindig működik-e? Tapasztaltabbaktól kérnék megerősítést, mert nem merek kísérletezni az órakvarcal, attól félek úgymarad az uC. Köszönöm!
Sziasztok! Valaki tudna helpet adni jól van-e bekötve ez a kártyaolvasó? A világért nem akar működni. Eddig LC Studio-t használtam, de erre 'Sd Card Module' van ráírva. Lehetséges, hogy hibás a bekötése?
Én ilyenből vettem öt darabot, de az egyikben a tápegység IC zárlatos volt, a többi négy ment rendesen. Igaz, kb nincs is benne semmi, csak pár felhúzóellenállás.
Az a helyzet, hogy a program arduinoban íródott és eddig azzal is fordítottam gond nélkül, viszont így hiába írom be a fent említett sort, az arduino gondolom automatikusan 16MHz-re állítja az órajelet. Megpróbáltam a programot kimásolni és egy main.c fájlban elmenteni és Win-AVR programmal lefordítani, de a egy csomó hibát jelez. Makefájl rendben van, mégse fordítja le.
A hozzászólás módosítva: Szept 28, 2015
Egy órajel-generátor sok esetben segíthet, hacsak nincs kikapcsolva az SPIEN vagy/és az RSTDISBL ill. JTAGEN (ha van rajta).
Azt nem tudom, hogy mi van, ha van JTAG, de a RST ki van kapcsolva, akkor lehet-e JTAG-en felprogramozni? ![]() Minden más esetben a HVSP/HVPP megoldás egyikét kell használni, AVR-től függően. Ha konkrétan órakvarcra gondoltál mint CPU órajel, abban nem vagyok biztos. Lehet fut az AVR, de legvalószínűbb, hogy olyan lassan, hogy a programozókkal nem tud kommunikálni. Tudomásom szerint legalább 1MHz-es órajel kell neki, hogy programozható legyen.
Ez át kell itt adnom valaki másnak, aki használt már arduinot.
Amennyire ismerem az arduinot, a C kódja(felépítése/syntax?) jelentősen eltér a WinAVR-tól. pl.: ami arduinoban loop() az a WinAVR-ban a while(1) megfelelője... már ha jól értelmeztem egy minta kódot.
Értem, hát ez nem hangzik jól, akkor gyakorlatilag át kellene írni az egész programot. Köszönöm az eddigi segítséget.
Cpu órajelnek szántam, de utána nem lehetett programozni akkor sem, ha feltettem a programozóra az alacsony isp frekvenciás jumpert (Topi féle doper). A program amúgy futott rajta, csak lassan, mert az F_CPU-t nem írtam át. Az xtal1 lábra tettem ~1MHz négyszögjelet, és harmadik próbára át tudtam állítani a fuse biteket. De akkor ez nem egy 100%-os módszer.
Nem teljesen értem, hogy ha az eredeti Arduino program 16Mhz kristályról futott, akkor miért akarod 8MHz-es belső oszcillátorról futtatni.
Fogod, megveszel 700 Ft-ért a kínaiaktól egy Arduino nano-t és nem szórakozol kvarc kristállyal, meg fuse bitekkel, meg RESET gombbal, meg miegymással. Ha Arduinoban írták meg, akkor te miért nem Arduino-n akarod használni? Mindent lehet csinálni, ha megfelelően vájkálsz a config-ok között, akár 8 MHz-re is átállíthatod az Arduino keretet. Sőt, Arduino makefile-t is letölthetsz, ha make-kel akarsz fordítani. A kérdés, hogy van-e értelme. Szerintem semmi. Miért baj neked, hogy a nano 16 MHz kristályról fut? Miért jobb a belső RC oszcillátor a kvarc kristálynál? A hozzászólás módosítva: Szept 30, 2015
Mellesleg: ha az Ardiunot alacsony hardverórajellel akarod járatni:
Ez pont ugyanazt csinálja, mint a fuse biteknél a CLKDIV. A hozzászólás módosítva: Szept 30, 2015
Ha jol ertettem Vacok helyzetet, akkor az atiras azert kellett mert itt azt irta, hogy modositott az itteni eredeti programot. A Timer 2-t szerette volna aszinkron modban hasznalni, egy orakvarccal.
Az atmega328p XTAL es OSC ki/bemenetei egyazon labon vannak es ezert szeretne belso 8Mhz-es orajelen jaratni az AVRt.
Bocs az off-ért,valami hasonló megoldást tudnátok javasolni glcd-hez ?
Tárgytalan,találtam egy ingyenest.
Lcd-Tools a support-nál.Szerényebb képességű,de jól használható.Az app. notes-nál is sok hasznos dolog van.
Üdv!
Ha már kijelzőknél tartunk, ezt a fajta kijelzőt (HMI) Bővebben: Linknagyon bonyolult lenne összehozni AVR-el? Sokat meglehetne spórolni, ha ki lehetne hagyni a PLC-t. MODBUSZ-RTU használ RS232-n. "Csupán" csak memóriacímeket ír/olvas. Pl. egy bit lekéréséhez 0x512 formátumban kell megadni a címet.
Itt szét lehet nézni. Nekem sikerült már Slave Modbus-RTU protokollt implementálni AVR-en, nem látom akadályát a forditott müveletnek sem. A hozzá szükséges müködő CRC algoritmust linkelem.
|
Bejelentkezés
Hirdetés |