Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   395 / 840
(#) kiborg válasza Gery hozzászólására (») Dec 28, 2011 /
 

Nem csak nálad.
(#) Tetye válasza zolee1209 hozzászólására (») Dec 28, 2011 /
 
9v 1a adjak a szkóp bemenetére?
(#) zolika60 válasza Tetye hozzászólására (») Dec 28, 2011 /
 
Nyugodtan.
(#) röntgen válasza karika200 hozzászólására (») Dec 28, 2011 /
 
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 !?
(#) Tetye válasza zolika60 hozzászólására (») Dec 28, 2011 /
 
Hát így végig próbáltam az összes variációt amit tudott a szkóp de semmi egyenes a vonalka mindenhogy.
(#) karika200 válasza röntgen hozzászólására (») Dec 28, 2011 /
 
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!
(#) nolex hozzászólása Dec 29, 2011 /
 
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.
(#) TavIR-AVR válasza Tetye hozzászólására (») Dec 29, 2011 /
 
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)...
(#) sgt válasza nolex hozzászólására (») Dec 29, 2011 /
 
Erre gondolsz?
(#) nolex válasza sgt hozzászólására (») Dec 29, 2011 /
 
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.
(#) zombee válasza nolex hozzászólására (») Dec 29, 2011 /
 
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)
(#) zombee válasza zombee hozzászólására (») Dec 29, 2011 /
 
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...
(#) edison14 hozzászólása Dec 30, 2011 /
 
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.
(#) zombee válasza edison14 hozzászólására (») Dec 30, 2011 /
 
Nyomj F12-t(clean), ja és fontos hogy az elérési útban ne legyen se szóköz se ékezet...
(#) nolex válasza zombee hozzászólására (») Dec 30, 2011 /
 
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
(#) edison14 válasza zombee hozzászólására (») Dec 31, 2011 /
 
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.
(#) zombee válasza edison14 hozzászólására (») Dec 31, 2011 /
 
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...
(#) zombee válasza nolex hozzászólására (») Dec 31, 2011 /
 
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:
  1. #include<avr/io.h>
  2. int main(void)
  3. {
  4.   DDRB = 1<<PB1;
  5.   ICR1 = 31;
  6.   OCR1A = 15;
  7.   TCCR1A = 1<<COM1A1 | 0<<COM1A0 | 1<<WGM11 | 0<<WGM10;
  8.   TCCR1B = 1<<WGM13 | 1<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10;
  9.   while(1);
  10. }

timer.png
    
(#) zombee válasza zombee hozzászólására (») Dec 31, 2011 /
 
É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...

timer.GIF
    
(#) Norberto válasza zombee hozzászólására (») Dec 31, 2011 /
 
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.
(#) nolex válasza zombee hozzászólására (») Dec 31, 2011 /
 
Ó nagyon köszönöm!

Mondd csak egyébként mire való ez az ICR1 regiszter?
(#) zombee válasza nolex hozzászólására (») Dec 31, 2011 /
 
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.
(#) nolex válasza zombee hozzászólására (») Dec 31, 2011 /
 
Igen műkszik a dolog, most már hozzáfoghatok a rezonáns kapcstáp szabályzás tervezésébe
(#) Reggie válasza Tetye hozzászólására (») Dec 31, 2011 /
 
Pont nem erre gondoltam. Az RC tagnal az R sorban legyen mint a dioda.
(#) Reggie válasza Tetye hozzászólására (») Dec 31, 2011 /
 
A szkopot ugy dugd ra a dugasztapra, hogy kozben a te aramkorod is ra van kotve.
(#) sikolymester válasza edison14 hozzászólására (») Jan 1, 2012 /
 
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.
(#) bleeez hozzászólása Jan 1, 2012 /
 
Boldog Új Évet Kívánok Mindenkinek!
(#) zombee válasza sikolymester hozzászólására (») Jan 1, 2012 /
 
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)?
(#) 06smici hozzászólása Jan 1, 2012 /
 
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
(#) TavIR-AVR válasza 06smici hozzászólására (») Jan 1, 2012 /
 
Kerülőúton:


a=regiszterérték (bár Bascom alól nem szerencsé direkt regisztereket cseszegetni)

On a gosub cimke1, cimke2, ...
Következő: »»   395 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem