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!
Már egy programot sikerült SirLeslie és TavIR-AVR segítségével beprogramozni ATtyni45-be. Tanulásképpen ismét elővettem ezt a leírást, http://www.hobbielektronika.hu/kapcsolasok/nyolc_labbal_i_resz.html...%3E%3E Itt található programot szeretném úgy megoldani, hogy csak akkor szóljon, amikor kap egy indító jelet, pl. nyomógombról. Ez a program:
Hogyan tudnám ezt megoldani? Segítségeteket előre is köszönöm!
Egy io-t bemenetnek állítasz és teszel a main while ciklusba egy while loopot, ami addig áll, amíg nem változik meg az io állapota a kívántra.
Egyszerű, de nagyszerű.
A led és az ellenállása helyére tegyél egy nyomógombot és a PortB4-et állítsd be bemenetnek (a DDRB kezdetű sorban a PINB4 előtti az 1-est cseréld ki 0-ra).
A while ciklus tartalma pedig ez legyen:
Egyébként van egy Hangra aktivált sípoló kapcsolás, ezt kell csak kicsit átalakítani. Bővebben: Link
Sziasztok!
Nagyon köszönöm mindkettőtöknek a gyors választ! A belinkelt kapcsolás nagyon jó, mert tudom tanulmányozni a működést is. Még egyszer köszönöm!
Sziasztok! Az lenne a kérdésem, hogy ez az áramkör működhet-e?
Amit tudnia kéne: Gombnyomásra elindul egy 10-12 perces időzítés, (bekapcsolja a fetet) ennek lejárta után az AVR készenlétbe hejezi magát. Ha az időzítés lejárta előtt kap egy új impulzust, kezdi előről a számlálást. Az időzítés lejárta előtt 2-3 perccel figyelmeztet az egyik LED. Ha az akksi töltöttségi szintje ha túl alacsony, jelez a másik LED (csak a bekapcsolás ideje alatt). Mivel programozói ismereteim egyenlőek a nullával, szívesen fogadnék egy linket is, valami hasonló kütyüről. Azt meg sem merem említeni, hogy valaki megírhatná a hozzávaló progit Azért kéne AVR-rel megoldani, mert nagyon pici a rendelkezésre álló hely, és tiny13, meg tiny45 van kéznél soic tokos. Előre is köszönöm a válaszokat.
Ahhoz hogy mérni tudj táp feszt le kell osztanod a tápfeszt és úgy mérni belső referenciával.
Itt a HE-n minden szükséges cikk fent a progra megírásához. Szívesen megírom, de ingyen senki sem fogja vállalni.
Tehát a PB3 lára menő ellenállás helyett jó lesz egy trimmer, aminek alsó végét a GND-re kötöm, a csúszka pedig megy az AVR-re. Így legalább tudom állítani a kijelzés szintjét.
Köszönöm a gyors válasz, privátban megkereslek a program ügyében, de most mennem kell melózni.
Sziasztok, valaki tudna nekem C64-es Sid chip-ről használható leírást, AVR-es dallamcsengőnek kellene. Azt olvastam róla, hogy 6510-es processzort kell emulálni. Találtam videókat is róla, de leírást nem. Valaki szólaltatta meg AVRrel?
Hali!
Probléma merült fel egy M16 használatában. Timer0-t Fast PWM módba konfigurálom (ez működik is), míg a Timer2-t arra használom, hogy 50ms-ként növeljem/csökkentsem a OCR0-t( ezáltal változtassam a kitöltési tényezőt). Egy motor lassú elindulása/megállása lenne a végcél. Viszont szkópon nézem a jelet és nem folyamatos a PWM jel változása, hanem szakaszos, néha szemmel láthatóan megáll egy-egy pillanatra,majd folytatja tovább. Miért lehet ez? (a motoron is érezni, hogy időnként azonos a fordulata, majd egy rántással adja tudtomra,hogy most behozta a lemaradást) Miért okozhatja ezt ? Arra tippelek, hogy FAST PWM-módban nem folyamatos az OCR0 frissítése (hanem csak akkor amikor a számláló túlcsordult) de ezt meg azért vetem el, mert 64us-ként csordul túl, és én meg 50ms-ként frissítem. Adatok: 4MHz órajel, Timer0 nincs előosztó,WGM01 és WGM00 és COM01 és CS00 = 1, Timer2 1024-es előosztó, Timer2 Compare engedélyezve. Bocsi, hogy hosszú, de remélem valaki tud segíteni. Üdv Kiborg
Bugyuta elgondolás, de értelmesebb magyarázatot nem tudok: az a tippem hogy ez egy hardver bug.
A Timer0 és Timer2 órajelét ugyanarról a 4MHz-ről veszed, ezért - szerintem - néha előfordul hogy éppen akkor akarja befrissíteni az OCR0-t amikor a Timer0 Fast-PWM része éppen "rögzíti" azt a kövi ciklus erejéig. TIPP: frissítéskor állítsd le a TIMER0-t(CS02:00=0), majd tedd normál módba(WGM01:00=0), fontos hogy ezt a két lépést külön parancsban tedd meg. Ilyenkor állítsd át az OCR0-t, majd indíthatod Fast-PWM módban, ezt megtegeted már egyetlen parancsban is, csak a leállításnál fontos a sorrend.
üdv mindenkinek!
egy kérdést szeretnék feltenni : hogyan,melyik programmal tudk létrehozni .lst kiterjesztésű file-t? bascom avr-ben nem lehet. köszönöm a választ
Kulcsszó a kereséséhez:
Arduino + SID + C64 Illetve ezek kombinációi....
- Notepad?
File-Save as.... - Intéző, átnevezés? Mihez kellene? Mi célt szolgálna? Hova kell ez az állomány? Mit látnál belőle?
avr-gcc fordító erre kiválóan alkalmas.
Ha mfile-lal csinálsz makefile-t, akkor ez a sor eleve benne lesz:
Ez varázsol neked fordítás közben .lst file-t.
Szia!
A kérdésedre ugyan nem tudom a választ, de elvileg valami hasonló is lehet akár mint például, ha feltöltesz egy portot egy értékkel és utána azonnal olvasod. Példa: out PORTD,r16 NOP ; Itt kell az "időt húzni" in r17,PIND Mert a külső szignálra a reakció akár 1,5 órajel is lehet. Ennek ugyan semmi köze a problémádhoz, de talán ebbe az irányba kellene gondolatilag indulni. Feltételezem, hogy zombee fórumtársunk is hasonló elgondolások alapján kapirgált - szerintem - a jó irányba. Bár én azért nem nevezném hardware bug-nak. Ha meg van a megoldás, azt légyszíves tedd már közkincsé.
ez az avr-ggc fordító egy külön program?próbáltam letölteni de mintha ez az avr studio kiegészítője lenne,vagy részprogramja
és akkor ez azt tudja hogy megnyitok egy .hex vagy .bas kiterjesztésű filet-amit bascomavr-ben írtam- rámegyek hogy save as,aztán generál egy .lst filet? vagy hogy kell ezt kivitelezni a konvertálást? köszönöm a választ
Az avr-gcc egy c fordító AVRhez. A .lst file egy olyan valami, ami tartalmazza a c kódot és az assembly kódot, amit a fordító a c kódból csinált. Így egyből láthatja a delikvens, hogy mennyire hatékony a fordítója.
Nincsen értelme hex file-ról beszélni, abból nem lesz .lst. Kérlek mondd, mit szeretnél pontosan elérni?
Töltsd le az AVR Studio 4.18-t, melléje a WinAVR-t, tedd bele a programod, fordítsd le, indísd el a debugot, és van egy olyan ikon, hogy Toggle Dissambler Window, és tádád soronként mutatja, hogy minek mi a megvalósítása asm-ben. De a projekt mappában az lss kiterjesztésű fájl ugyanaz, szval azt is megnézheted.
Hali!
Köszi az ötletet, de sajnos nem vált be, megmaradt a rángatás, bár más módon sikerült csökkentenem. (ekkorával már együtt tudok élni)(részben a programban is volt hiba,amire közben rájöttem) Másrészt most csak a OC0-t vezérlem. Hogy lehetne ezt a jelet egy H-hídhoz felhasználni ? Mert ott nekem 4 vezetékre lenne szükségem. (ebben a részben volt a nagyobb rángatásért felelős rész) Ehhez a h-hídhoz.(ez csak félhíd)
Két H-félhíd kombinálható, így egy teljes H-híd vezérlése is megoldható 2 vezetékkel. Én még anno bipól tranzisztorokkal építettem a boci-boci-tarka hanggenerátorhoz, abba a négy "nagy" tranzisztor mellé két kicsi is ment, így vezérelhető volt 2 szálon. 2 vezérlőszál pedig minden AVR Timer1-én van.
Igen, de viszont nem szeretném fékezni(ergo rövidre zárni a forgórészt) a motort, ezért kell a 4 vezeték.
Azért használnák feteket, mert nagy áramokat (1-10A) kapcsolok 10-50V-on. Nem akarom hogy melegedjenek, nem szeretnék rájuk hűtőbordát rakni. Tudsz egy FET-es H-hidat mutatni, ami 2 vezetékes és ha nincs vezérelve, akkor nem nyit össze a két nagy fet ? Üdv Kiborg
Ne felejts beletenni un. dead time -ot. A feteknek van egy véges idejük, amíg lekapcsolnak. Ha ezzel nem számolsz, akkor jó kis füstölés lesz a vége. Legjobb az lenne, ha olyan mikrokontrollert használnál, amiben hardveresen van ilyen, mert ahogy olvasom nem sikerült egy sokkal egyszerűbb dolgot sem megcsinálnod hiba mentesen.
Volt(Van) valahol egy kapcsolás amiben az AVR vagy PIC és az egérből kiszedett optokapu összekapcsolása volt.
Végignéztem az összes kapcsolást és sehol nem találom. Le lett szedve vagy rossz helyen keresem? Valami próbapanelon volt összerakva.
Szia!
Tessék, gondolom, erre gondoltál.
Figyelmedbe ajánlom az Attiny26-t például, mivel abban van un. non-overlapping funkció a pwm kimeneteken. Nézegesd át az adatlapját, mert hasznos kis funkció ez.
kicsit idézve belőle: Idézet: „The non-overlapping output pairs (OC1A - OC1A and OC1B - OC1B) are never both set at the same time. This allows driving power switches directly.”
Köszi a figyelmeztetést.
A jelenleg használt H-hídnál nincs ilyen gondom, mert a kikapcsolást tranzisztor végzi el gyorsan, a bekapcsolást meg egy ellenállás, így a bekapcsolásom mindig lassabb lesz,mint a kikapcsolásom. Ha állandó PWM-el használom, semmi melegedése nincs, pedig 24V-os motorral játszok.(üresjáratban 500mA) A Tiny26 adatlapját megnézem.
a tina 7 nevezetű áramkör szimuláviós programban szeretnék letesztelni egy avr-t,és amikor a programot akarom betölteni,akkor 2 lehetőségem van:
- asm -et vagy - hex+lst párost töltök fel rá Mivel asm-hez nem értek,ezért gondoltam .bas-ból először hex-et csinálni BasicAvr segítségével,ez ment is csak azt az lst fájlt nem tudtam hogy micsoda. de így akkor nem is fog menni,mert látom hexből nem lesz lst.
Kell neked a WinAVR.
A következő parancsot add ki: avr-objdump -j .sec1 -d -m avr5 foo.hex Ezzel megkapod a hex fileből az asm filet. Gyakorlatilag egy disassembler így.
erről a programról még nem hallottam
hova adjam ki a parancsot, hogy kell ezt lefuttatni?
Úgy néz ki találtam egy avr-gcc fordító hibát.
A mellékelt programot lefordítva az avr-gcc-t (v4.5.3) használva (64bit-es ubuntu 12.04 rendszeren) -Os, -O2 és -O3 optimalizáció mellett hibás binárist készít. Az -O1 optimalizáció mellett nem jön elő a hiba. Ugyanezt a programot az avr-gcc v4.3.4 használva nem jelentkezik a hiba. Ha valakinek esetleg volna kedve és ideje kiprobálhatná, hogy milyen fordítóknál és/vagy milyen rendszeren jelentkezik ez a hiba. Segítségeteket előre is köszönöm. A mellékelt program csak egy LCD kijelzőt feltételez (R/W nincs használva). Az LCD kijelzőhöz használt portokat a ports.h file-ban kell átírni. A Makefile-ben atmega8 van beállítva 8MHz órajellel, ha szükséges át lehet írni. Helyes működés közben az LCD kijelzőn a '00 00', '01 01' .. '0F 0F' jelenik meg másodperces lépésközzel. Hibás működés közben ez helyett '00 FF', '01 FF' .. '0F FF' jelenik meg. (A hiba switch-en belüli értékadásnál jelentkezik, a main.c-ben a check() függvényben.) |
Bejelentkezés
Hirdetés |