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 nyíl a +tápot(VCC) jelöli. Ha egyforma IC-t használsz I2C buszon akkor a címzését meg kell oldani. Ezért a hardveres címbeállítással teszünk köztük különbséget.
A cím: 1001+A2+A1+A0+R/W ---> adatlapban megtalálod. Csak a lényeget akartam lerajzolni, gondoltam a táp kivitelezés nem lehet gond !?
Hát így végig próbáltam az összes variációt amit tudott a szkóp de semmi egyenes a vonalka mindenhogy.
Köszönöm, sokat segítettél. Így már valóban nem lesz gond. Megtámogatom egy feszültség stabilizátorral meg kap egy dugasztápot és megoldva. Köszönöm ismételten!
Hogyan tudnék kész C kódban assembly sorokat implementálni?
Egyelőre csak angolul találtam leírást, ami számomra kicsit érthetetlen és külön fájlban van az ASM rész.
Bascom és az I2C
Az I2C alapban szoftveres a Bascom alatt. A HW-eshez kell külső könyvtár (számodra ez irreleváns most)...
Köszi szépen, igen ez már sokkal érthetőbb!
Viszont feldobok egy nagy kérdést: Szeretnék frekvenciát és impulzuskitöltést szabályozni egyszerre! Erre kell sajnos az assembly mivel ha magam írom meg az utasításokat akár 250khz-es kapcsoló frekvenciát is alkalmazhatok, míg ha sima C-ben írom meg akkor csak 50khz környékén tudom megalkotni. Alapvető elgondolás: egy timert üzemeltetek ctc módban úgy hogy minden egyes egyezés esetén egy olyan interruptot állítok be, ami megváltoztatja a compare registert. Ezáltal T1 és T2 időt szabadon választhatom.
Miért is lenne 5-ször lassabb C-ben megírva? Ember, hardveres PWM-et csinálsz!
Totál mind1 hogy az OCR1A/B meg az ICR1 regisztereket C-ben vagy assemblerben billegeted, a hatás ugyanaz! A frekit csak az határozza meg hogy a számlálód... 1:milyen frekin számlál; 2:hányat számol mire körbeér(CTC)
Sőt, PWM(nem, nem CTC!) módban még az is működik hogy a regisztereket hiába noszogatod,
mindig csak akkor fog frissülni amikor körbeér a számláló. Ez az esetleges "szőröket" is kiküszöböli. CTC-ben ez nem működik mert azonnal frissül az OCR, és ha a frissítés pillanatában a számláló a régi és az új komparálási(OCRxy) érték közé esik akkor bizony lesz ott egy szőr a kimenő jelben ami nem kellemes...
Hali.
Nemrég elővettem az egyik projektemet, hogy egy kicsit alakítgatok rajta de az AVR studio 4.19-es verziója meghülyül. Nem frissíti a hex fájlt. A projekt beállításainál be van állatva a HEX fájl létrehozása. Nem értem mi lehet a baja. Találkozott már valaki ilyen működéssel.
Nyomj F12-t(clean), ja és fontos hogy az elérési útban ne legyen se szóköz se ékezet...
Nos azért amit leírtál félig igaz.
Az igaz hogy alapvetően a számlálás gyorsasága az MCU sebességétől függ. Ez esetben atmega48 belső RC oszcillátora, ami 8mhz. Na mármost szkóppal lemérve C-ben megírva a rutint max 50khz-es T1+T2-es periódust(ezzel tudom szabályozni a kitöltést és a frekit egyszerre) tudtam megírni, ezt CTC-ben. Most nekiálltam és megírtam assemblyben, amiben sokkal több majd 250khz-et értem el. Továbbá: a PWM csak FIX frekvencián működik, a OCR regiszterekkel csak a deltát, vagyis a kitöltési tényezőt szabályozod. Attiny ami kifejezetten PWM szabályzásra van kihegyezve ott van hogy a PWM frekvenciát 10khz-enként te magad beállíthatod. Utólag megnéztem a GCC által gyártott assembly kódsort és valóban kevesebb utasításból írtam meg
A cleant próbáltam de nem tisztította ki a fájlokat. Az elérési útban nincsenek ékezetek sem szóközök. Asszem megpróbálom újratelepíteni hátha jól fog viselkedni.
Volt már nálami is olyan apró hiba ami bosszantott és csak újratelepítés oldotta meg.
Illetve sokszor ha hiba van a kódban, nem ugrik oda duplakattintással, és ezen csak egy újraindítás segít...
Most írtál először AVR típust, így talán többet segíthetek.
A 16 bites timer esetében igenis beállítható a frekvencia a kitöltési tényező mellett! Nézd meg azt a jónagy táblázatot(csatolva), találsz olyat ahol "Fast PWM" van, és a "TOP" az ICR1. Ugyanez a típusú időzítő ketyeg még az ATTiny2313, ATTiny24, és a 6-lábú ATTiny-k belsejbében is! ATTiny25 és ATTiny26 esetében teljesen más, és igaz hogy 8 bites, de legalább az OCR1C-vel állítható... Más tiny-k vagy timerek esetében(már ha van PWM) csak az OCRxA-val állítható ami ugye nem kívánatos... De inkább írok egy rövid C kódot ATMega48-ra, talán még működik is. 8MHz órajelre(CKDIV8 kikapcs!) Elvileg 250kHz és 50% kitöltésű jelet ad. Ösztönös volt az adatlap alapján, bocs amiért nem próbáltam ki:
És ezúton megkérném a fórum kedves karbantartóit hogy csináljanak már valamit,
mert kb. ötödszörre próbálom meg feltölteni ezt a kiszexuált képet...
Pedig hosszú évekig lazán, kisujjból mehetett a PNG képek feltöltése... aztán egyszer történt egy fordulat és vége. Amúgy Topin kívül senki nem képes ennek a hibának a kijavítására, legalábbis a HE keretein belül. De legalább lenne egy közlemény, hogy súlyos biztonsági rést von maga után a PNG, vagy valami... de semmi.
Szóval működik?
Az ICR1 az "Input Capture" funkció tároló regisztere, 16 bites úgy mint a számláló. Amikor bekövetkezik egy előre beállított esemény, a TCNT1 értéke még abban a CPU-órajelben átmásolódik az ICR1-be. Az esemény ezzel párhuzamosan interruptot is generálhat(beállítódik az interrupt flag). A funkció arra jó, hogy a külső esemény bekövetkeztének idejét kicsit később vissza tudjuk kérdezni. Én például infra, illetve 434MHz-es távirányítókhoz használom, ezen kívül fordulatszámmérésre. Mindenhová jó ahol vagy az impulzushosszt, vagy a periódusidőt akarjuk nagyon pontosan megmérni. Egy autómotor fordulatszáma olyan kicsi hogy frekvenciaméréssel már nem lehet pontos a mérés. A külső esemény származhat az analóg komparátorból, illetve az ICP1 lábról is(beállítható). Természetesen a funkció nem működik, ha olyan időzítő módot használsz ahol a TOP==ICR1.
Igen műkszik a dolog, most már hozzáfoghatok a rezonáns kapcstáp szabályzás tervezésébe
Pont nem erre gondoltam. Az RC tagnal az R sorban legyen mint a dioda.
A szkopot ugy dugd ra a dugasztapra, hogy kozben a te aramkorod is ra van kotve.
A studio 4.19-es nem a WINAVR-t gondolja alapértelmezett compilernek, amennyiben az AVRTools fel van telepítve. Nálam pl. azzal semmi nem fordul rendesen.
A mellékelt file-on láthatod, hogy mit kell átállítanod.
Most veszem észre hogy nekem is átváltott Toolchain-osra, még a régebbi(Toolchain telepítés előtti)
projekteknél is. Most elég macera lenne az összeset átállítani, főleg ha az újaknál is a Toolchain a default. Hol tud ez elakadni, mi a hátránya/előnye, és hogyan tudnám visszaállítani az eredeti állapotot(winavr)?
Sziasztok
Az lenne a kérdésem hogy bascomban lehet-e olyat csinálni hogy egy regiszterben tárolt értékű subrutint hív be? pl: ha a változóm értéke 13 akkor a 13as subrutint hívja meg. Remélem nem kérdeztem hülyeséget... Boldog Új Évet Kívánok mindenkinek
Kerülőúton:
a=regiszterérték (bár Bascom alól nem szerencsé direkt regisztereket cseszegetni) On a gosub cimke1, cimke2, ... |
Bejelentkezés
Hirdetés |