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 -F: hagyja figyelmen kívül, ha az AVR ID-je és a tényleges ID nem egyezik (nem javasolt ennek használata).
A STK500-kent valamiért nem látszik. Én kipróbálnám, h STK500 terminalba belépni (AVRDUDE). Hátha.
Hali AVR Studio4 használok, ATmega8 EEPROMát kellene beprogramoznom. Valaki le tudná írni hogyan kell? (Az EEPROM hex fájlt be tudom égetni, csak létrehozni nem tudom)
Szia!
Én így szoktam asm-ben. Fontos, hogy minden sorban páros bájt legyen megadva, ha egy 16bites számot adsz meg (.dw) akkor ez már megoldott.
Sziasztok
AVR Studio4 GCC fordítója ilyen hibát küld nekem : "... error: expected ')' before ';' token" ráadásul sokszor. Pl egy ilyen sorra is ezt irja: mode=EEPROM_read(mode_addr) ; Ahogy látom minden a helyén van. Valamelyik header fájlommal lehet gond vagy a fordítóm hülyült meg és telepíthetem újra? Kérnék egy kis segítséget, vagy ötletet valakitől.. Zoli
A 'mod_addr' az egy makro amit Te definialtal '#define' -al? Mert akkor gondolom oda tettel veletlen egy pontos vesszot... pl:
ahelyett, hogy:
Masik lehetoseg, hogy a 'mod_addr' makrokent van valahol definialva egy include file-ban, es Te megprobaltal letre hozni egy valtozot ugyanilyen neven...
Atmega8 prociban Timer0-ra tudna nekem valaki egy 1 Hz-es megszakítást definiálni 1Mhz-es órajelnél ?
Mármint beállítani a timert, a megszakítás megírása az megy. Köszi
Atmega8 processzorának Timer0-jára tudna nekem valaki egy 1Hz-es megszakítást definiálni ? A timer beállítására gondolok, a megszakítást meg tudom írni.
Köszi
Egy kis matek . 1000000-ról indulsz, osztod az osztás mértékével, és tovább osztod a 256-TCNT0 kivonás eredményével, és megkapod mekkora frekijű a megszakítás. Jobban jársz ha erre egy programot írsz, gyorsabb a dolog.
Fizikus iránytűs cikkében az I2C-ről írtak segítségével szeretnék egy ATMega8535 és egy ATMega8 közt I2C-n kommunikálni. El is kezdtem átírni a kódot, de megakadtam. Azt honnan tudom, hogy mi a két vezérlőnek a címe? Vagy azt be kell állítani valahol előre?
Idézet: „Azt honnan tudom, hogy mi a két vezérlőnek a címe? Vagy azt be kell állítani valahol előre?” A Slave eszkoznel az I2C azonositot a TWI cimregiszterben kell megadni (TWAR). Bővebben: Link Itt van peldaprogram Slave I2C AVR-re az oldal aljan: Bővebben: Link 2
Igen így van! A pontosvessző volt a hibás, csak ugye a hiba nem oda mutatott hanem a kódba. Köszönöm azért a segítséget, mire ezt elolvastam én is észrevettem, a sok define között fel se tünt egy jó ideig
Köszönöm, de én nem arra gondoltam, hogy hogyan adom meg a címet, hanem hogy honnan lehet tudni hogy mi a cím?
Mivel az AVR a legtobbszor az I2C(TWI) Master (annak nem kell cim, csak a slave-eknek, mert a Master iranyitja az egesz kommunikaciot, O szolitja meg a slave-eket ha adatot akar kuldeni vagy fogadni), ezert nincs elore megadott I2C cime. Ha Slave kent akarod az AVR-t hasznalni, akkor egy altalad valasztott I2C cimet adsz meg a TWAR TWI cimregiszterben es ezutan ezt hasznalva tudja a Master megszolitani a Slave-et.
Ja, már értem. Elnézést, kicsit félreértettem a dolgot. Szóval ha a slave avr-be ezt a sort írom, akkor a master a 0x10 néven éri majd el?
Közben próbálkoztam, annyit sikerült elérnem, hogy a slve-re kötött LED-et be tudom kapcsolni úgy, hogy a masternek UART-on küldök egy b betűt, az pedig i2c-n küld parancsot a LED bekapcsolására.
Viszont az a gond, hogy valamiért csak egy adatot tudok küldeni a slave-nek, mert utána az egész "lefagy". Ha a slave-nak alapból ki van kapcsolva a LED-je, akkor be tudom kapcsolni, de ki már nem, mert akkor lefagy a master(ami folyamatosan villogtat egy LED-et, hogy látsszon, minden rendben van-e). Ha alapból be van kapcsolva, akkor pedig ki lehet kapcsolni, de ha megint be akarom, akkor már megint ugyanaz a jelenség. Ha kétszer elküldöm a bekapcsolást(vagy a kikapcsolást), akkor is ez van. A slave oldali programra gyanakszom, mert ha elküldök valamit, és be/ki kapcsolja a LED-et, és leveszem a tápot a slave-ről, majd visszateszem, és megint küldök valamit, akkor nem fagy le a master. Szóval szerintem az a gond, hogy a slave valamiért nem tud egynél több adatot fogadni, csak fogalmam sincs, hogy miért. Fölteszem mindkét kódot, remélem, tud majd segíteni valaki. Master:
A soros.h-ban vannak az UART beállítások, de azzal nincs gond. Slave:
Ja és még annyit tennék hozzá, hogy 7,3728 MHz-es kvarcról megy mindkét vezérlő.
Most vettem észre: ha a masternek sorosan egymás után elküldök egy b, majd egy k, majd megint b betűt(LED be, ki, be), nem törődve azzal, hogy a második betűnél bent marad valamiért a megszakításban, akkor a következő az eredmény: az első b betűnél bekapcsol a LED, és még minden rendben van, a számítógépre meg is jön sorosan a BE szöveg, jelezve hogy elküldte a slave-nek az adatot. A k betűnél nem kapcsol ki a LED, a master meg a megszakításban marad, és nem küldi el a KI szöveget, az ezt követő b betűnek semmilyen látható hatása nincs, és szintén nincs BE szöveg.
Viszont ha ezek után leveszem a tápfeszt a slave-ről, majd vissza, akkor a master elküldi neki az adatot a LED kikapcsolására, és ugyan ez nem látszik, mert alapból ki van kapcsolva a LED amikor a program indul a slave-en, viszont a master ekkor elküldi a KI szöveget, majd megint a megszakításban marad, és ha másodszor is leveszem a tápot a slave-ről, majd vissza, akkor meg bekapcsolja a LED-et, és elküldi a BE szöveget, és már nem marad bent a megszakításban. Ez vajon mitől lehet?
Megoldódott! Nem kevés keresés után ráakadtam egy példára, ahonnan felhasználtam néhány sort. Jól gondoltam, tényleg a slave oldalon volt a hiba. A megoldás:
Hogyan lehet szoftveres PWM-et létrehozni? Szervó(ka)t szeretnék vezérelni vele. Küszködtem timerrel, de nem sikerült, mert nem tudom rendesen beállítani. Folyton végálláson túlra akarta állítani a szervót. Tudom, hogy nagyon terheli az avr-t a szoftveres PWM, de nem baj mert ez csak ezt fogja csinálni, meg az I2C adatfogadást (I2C-n kapja, hogy melyik szervót hova állítsa).
Üdv.,
Épített-e valaki közületek HVPP Fuse bits doctor-t? Én erre vetemedtem és sajnos nem sikerült tökéletesen működésre bírni. A probléma kicsit hosszabb magyarázatra szorul, ezért később fejteném ki, amennyiben valaki jelentkezik erre az üzenetre... Előre is köszönöm.
Nezzed meg az itt levo PDF-et es a zip fajlt.
AVR136 - tobb csatornas szoftveres PWM
Srácok Az a problémám van, hogy amikor programozom az AVR-em nagyon sűrűn eltűnik az AVRStudio4-ben a programozó. Azt írja hogy nincs csatlakoztatva és akkor le kell húznom meg vissza. Kb minden programozás után. Néha felprogramozza, van mikor már hamarabb eltűnik. Többször más usb portba dugtam, de a számítógépen mindíg COM3 porton érzékelte, ez nemtudom gond-e.
AVR Doper STK500 as usb-s programozóm van. amikor attiny13asokat programoztam nem volt semmi baja, viszont most áttértem atmega8 ra amihez készítettem egy panelt, fizikus will-i robotjáé alapján, aztán azóta jöttek elő a gondok. Viszont akkoriban kezdtem el azthiszem más usbkbe is dugdosni. Nem lehet ezt a hibát valahogy szoftveresen orvosolni? miven már nemtudom melyikbe telepítettem fel. Nemlehet hogy valamit az áramkörön forrasztottam félre? Tüzetesen átvizsgáltam és nemnagyon láttam problémát. Viszont ez az első AVRes panelom ami tud külön tápforrásról is menni. Azon sem tudtam eligazodni, hogy a resetet akkor most földre kell húzni? vagy 5 voltot adni neki hogy elinduljon rajta a program? Remélem tudtok segíteni. Üdv.: Dave
Köszönöm szépen, ez ígéretesnek tűnik, megpróbáltam lefordítani, egyenlőre hagyva a soros kommunikációt (ráérek akkor átírni I2C-re, ha már működik), és hát mivel a program ATtiny2313-ra van írva, jött is pár hiba, hogy nem talál olyan regisztereket. Egy kivételével mindet megnéztem az ATtiny2313 adatlapjában, hogy micsoda, majd kikerestem az ATMega8 adatlapjából a megfelelőjét.
Ez az az egy kivétel:
Oscillator"-nak a "System Clock Prescalar"-e. Tehát egy belső oszcillátor előosztója. Most akkor az ATtiny2313-ban van egy olyan belső oszcillátor ami az ATMega8-ban nincs? Mert az adatlapjában nem találtam ilyet. Hogyan lehetne akkor átírni ezt a részt ATMega8-ra?
Az amit szeretnél vele programozni, az 5V-os tápfeszültséggel megy?
Ha a programozandó áramköröd külön tápról megy, akkor vedd le a doperről a táp jumpert. Szoftveres hiba nem nagyon lehet, amennyiben a legújabb doper fw-t használod. Én arra gyanakszom, hogy van egy forrasztási hibád valahol, amitől megszakad a fizikai usb kapcsolat.
Úgy oldottam meg, hogy van egy 5volt stabilizáló része a panelnek, szépen megszűröm több helyen kondikkal, mértem is valami 5.05 voltot kap mindenhol ahol kell neki. Elösször felprogramozom a doperrel ott villog szépen, csinálja amit kell neki, aztán lehúzom róla és rákötöm a külön tápra, akkor már nem. Valószínűleg szerintem is forrasztási hiba így ezt a csatát szerintem nekem kell megvívnom . Az L293-as dual full bridge ic környékén van szerintem a baj. Ugyanonnan kapja az is az 5 voltot, a 9 voltot meg csak egy kondival megszűrve küldöm rá közvetlen a nagy tápforrásból. Ez gondolom nem probléma (csak erősítőknél volt ilyen problémám, hogy külön táp kellett nekik.)
Találtam hibát. A mega8-asomhoz prcíziós foglalatot adtak és nem a lemezeset, aztán alig tudtam beledugni. Nem tudtam kb csak félig beleerőltetni, persze hogy volt szakadás benne. Az egyik lába le-le ugrált a feszültségről meg kitudja a többi mit művelt. Most sikerült helyreközel beletenni normálisan, de a külső tápforrásra még mindíg meg se nyikkan. Keresem a hibát de nem lelem még.
Átgondoltam, azt hiszem, mégsem kínlódok az ATMega8-ra való átírással, inkább veszek egy ATtiny2313-mat, és akkor remélem működni fog.
Hát az újraindulgatás továbbra sem szűnt meg. Ha átdugom egy másik usb portba, akkoris ugyanúgy az a portszáma és a hely is amit ír a portnál.
Multiméterrel lemértem mindent és az 5v meg föld között egy picit felcsipog ha ráviszem, az szerintem a kondik miatt van, vagy a vezérlővel párhuzamosan kötött led miatt, nemtudom. Akkor is ledob néha mikor még nem is programoztam fel csak rádugtam, lefordítottam a kódot és elkezdeném felprogramozni. Hírtelen villan, hogy nincs eszköz rákötve. Tűrhetetlen így, nincs valami tippetek? (Azért nem ment eddig küldő tápról mert a boden-t nem jelöltem be szóval az a probléma megoldódott.) |
Bejelentkezés
Hirdetés |