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   450 / 840
(#) sikolymester válasza roleeka hozzászólására (») Jún 13, 2012 /
 
Valami ilyesmi:

  1. if (PINB & (1 << PB4))
  2. {
  3. PORTB |= (1 << PB3) //NPN tranzisztor kivezerlese
  4. for(int i = 0; i<60; i++)
  5. {
  6. _delay_ms(1000) //elfut ez 6.5333 mp-ig is, csak kisebb felbontassal
  7. }
  8. PORTB &= ~(1 << PB3)
  9. }
(#) szdani hozzászólása Jún 14, 2012 /
 
Sziasztok!
Megnéztem az oldalon a "Nyolc Lábbal AVR IV" részt, és szeretném azt az akkutöltőt átalakítani hogy 12Vos akkut töltsön. Mielőtt hülyeséget csinálnék valaki megtudná mondani hogy miket kell kicserélni?
(#) sikolymester válasza szdani hozzászólására (») Jún 14, 2012 /
 
Azt hiszem ez annál komplexebb kérdés, mintsem hogy itt lehessen válaszolni. Kezdeném a helyedben azzal, hogy megnézném milyen töltési görbét (karakterisztikát) vár egy 12V-os akku. Egyáltalán, milyen akkut szeretnél te tölteni, savas ólom akkumulátort? Sorba kötök 10 db NiMH akkumulátort és máris 12V-os akksit kapok. Mindenesetre remélem kicsit utánanéztél a dolgoknak interneten.

De, hogy a kérdésedre válaszoljak is:
Kell egy olyan táp, ami 12V-nál többre képes. Legyen mondjuk 15. A kapcsolás szerintem többnyire alkalmazható ezt leszámítva. Utána programozd le az egyik töltési karakterisztikát ami megfelel a tölteni kívánt akksinak és kész is.
(#) szdani válasza sikolymester hozzászólására (») Jún 14, 2012 /
 
A táp megvan hozzá Savas autó akkut kéne tölteni, igazából csak annyit kéne építeni a töltőbe hogy ha telivan akkor lekapcsol és kijelzi hogy feltöltött, meg olyan 2-3A-re le kéne szabályozni az áramot.
(#) szdani hozzászólása Jún 14, 2012 /
 
Ez nekem jó lenne úgy hogy az avr csak mér és megszakítja a töltést ha kész?
(#) zombee válasza szdani hozzászólására (») Jún 14, 2012 /
 
Nos, ez nem csak azért neccesebb mert más lehet a töltés karakterisztikája, hanem mert egy 12V-os akku 1-2 nagyságrenddel nagyobb áramokat vehet fel töltéskor. Látom hogy nem kispályázol, mert a 2-3A-es töltőáram egy kisebb autóakksi töltőárama! Kezdjük ott, hogy a cikkben foglalt töltő szabályzó része lineáris, azaz veszteséges! Magyarán elfűti a maradék feszültséget, ezért jól kell megválasztanod a bejövő tápot! Apropó, bejövő táp. Egy mezei dugasztáp főleg egy hagyományos trafóval szerelt típus nem fogja ezt neked elvinni! A szabályzóra visszatérve, hiába teszel be 5A-es LM1117-et, egy méretes hűtőborda, esetleg hűtőventi is kelleni fog!

Inkább kapcsolóüzemű típust választanék, és a helyedben nem is nagyon szórakoznék az építgetéssel. Helyette változtatható feszültségű típust tennék be, amin valahogy be lehet állítani a maximum áramot. Tehát ne a "leblokkolós" fajta legyen, hanem olyan ami túlterhelésnél a kimenő feszültséget csökkenti. Egy ilyen tápot vettem, max. kimenőárama 5A amit egy ellenálláscserével 3A-re csökkentettem, két másik ellenállást is kicseréltem mert a potival 11.5V-13.0V között lehetett váltani, egy kocsiakksihoz meg ugye 13.5-14.0V körüli töltőfesz kell ha a töltőáram már kisebb mint 3A...

Télen így töltöttem kb. 20 óráig egy 80Ah-s Banner akksit, másnap -22°C-on a Skoda pöccre indult!
(#) Csépe Zoltán hozzászólása Jún 14, 2012 /
 
Sziasztok!

Most kezdtem el foglalkozni az avr-ekkel és az oldalon található avr-s minta példákat csinálgattam eddig. Viszont most egyénileg akartam dolgozni, egy nyomógombos alkalmazást akartam készíteni amivel egy ledet lehet ki és bekapcsolni. Az lenne a kérédsem hogy ennek hol tudnék utánna nézni vagy valaki segítene megvalósítani?
(#) mzozo95 válasza Csépe Zoltán hozzászólására (») Jún 14, 2012 /
 
itt van egy cikk: Negyedik kísérlet: LED vezérlése nyomógombbal

Csak át kell írni avr-re, és kész... (watchdoggal nemkell foglalkozni, az a sor nem kell nekünk...
_delay__cycles helyett
  1. _delay_ms(20);

meg nem io430 és intrisics.h kell hanem
  1. #include <avr\io.h>
  2. #include <util/delay.h>

p1dir helyett meg
pl B porton:
  1. DDRB|=1;
  2. DDRB&= ~8;

azért egy mert 2^0, és azért 8 mert 2^3=8, de persze akármit lehet írni oda, attól függ melyik bitre(lábra) kötöd a ledet...
(#) Fizikus válasza Csépe Zoltán hozzászólására (») Jún 14, 2012 /
 
Szia!
Nyomogomb AVR-rel, megszakitasokkal:

Bővebben: Link

Bővebben: Link2
(#) Reggie válasza szdani hozzászólására (») Jún 15, 2012 /
 
Akar jo is lehet, nem ellenoriztem az aramkort. Viszont nem ertem minek akarsz AVR-t belekeverni, nem kell megszakitani a toltest, csak a toltofeszultseget kell korlatozni 13.2...13.8V-nal, valamint termeszetesen a maximalis aramot. A toltes pedig akkor van kesz, ha a toltoaram jelentosen lecsokkent, azaz ha nagyjabol 0.001*C20 korul van.

Mint ahogy mondtak, meg a disszipaciora figyelj. Ha ezeket betartod bajt nem csinalhatsz.

[Szerk] Meg valami: Szokasosan C20/10 koruli arammal szoktak tolteni az akkumulatorokat, de akar C20 koruli arammal is lehet utantolteni. A gyorstoltok C20/4 arammal is mehetnek, de ott rovid idonkent kisutest is vegeznek. A gyorstoltes hatranya az, hogy nagyobb vesztesseggel tortenik a toltes, es nem lesz 100%-os(ha erdekel leirom a fizikai/kemiai hatteret), igy altalaban 6 gyorstoltes utan illik csinalni egy teljes ciklust.
(#) mzozo95 válasza Reggie hozzászólására (») Jún 16, 2012 /
 
engem is érdekelne a fizikai/kémiai háttér, ez érdekes ..
(#) Reggie válasza mzozo95 hozzászólására (») Jún 16, 2012 / 3
 
Szoval koztudomasu, hogy az olom-sav akkumulatorok egyik elektrodja szivacsos szerkezetu olom, a masik elektrodja olomoxid, valamint az elektrolitja kensav, amely az energiaatalakitasban aktivan reszt vesz, azaz koncentracioja valtozik a toltottsegi allapotnak megfeleloen. A kisuteskor az olom elektrod szulfat ionokat vesz fel es igy olomszulfat keletkezik, az olomoxidos elektrod szulfat iont es hidrogen ionokat vesz fel es igy ott is olomszulfat, valamint viz keletkezik. Mivel mindket elektrodon olomszulfat keletkezik igy ezt kettosszulfat-elmeletnek hivjak. Ez termeszetesen egy kicsit meghaladott elmelet, mamar ennek a modositot elmeletevel magyarazzak, ahol ez a folyamat tobb lepcsoben megy vegbe, ami szerint eloszor bazikus olomszulfatok keletkeznek, ami csak lassan alakul at olomszulfatta. A szulfatosodas is osszetett, mivel ket kulonbozo allapotu olomszulfat fordulhat elo: amorf es kristalyos. Eloszor amorf olomszulfat jon letre, ez az ami nekunk jo, mivel ez alkalmas arra, hogy tolteskor a forditott iranyu reakcioban reszt vegyen. Ha sokaig allni hagyjuk az akkumulatort, akkor ez az amorf olomszulfat elkezd kristalyosodni, es igy az akkumulator veglegesen veszit a kapacitasabol. Mivel az elektrodok porozus szerkezetuek, igy a reakciohoz a kensavnak bele kell diffundalnia. Ha a kisutes gyors, azaz nagy arammal tortenik, akkor az elektrolithoz kozeli feluleten olyan gyorsan alakul ki az amorf olomszulfat, hogy a porusokat lezarja, igy az elektrod belsejeben levo aktiv anyag mar nem tud resztvenni a reakcioban. Ez a kapacitasvesztes reverzibilis, amennyiben nem all ilyen allapotban nagyon sokaig az akkumulator es nem passzivalodik. Tolteskor a toltoaramot szinten a diffuzio sebessege korlatozza, de ilyenkor nem tortenik hasonlo gatlas. Emiatt van az, hogy feszultseggeneratoros tolteskor a kezdeti szakaszon a toltoaram nagyon nagy, majd rovid ido alatt leesik es egy erteknel normalizalodik, ugyanis ekkor csak az elektrodok feluleten levo olomszulfat alakul at gyorsan, a belso reszeknek a reakcioban torteno reszvetelet a diffuzio lassitja.

Na igy elsore "roviden" ennyit tudok mondani.
(#) szdani válasza Reggie hozzászólására (») Jún 16, 2012 /
 
Rendben köszönöm mindenkinek.
(#) vagnerjazon hozzászólása Jún 18, 2012 /
 
Üdv.!

Ezzel a kódrészlettel küzdök, valamiért nem működik, csak akkor, ha bentről adok értéket a szamhossz-nak.
Tehát így nem jó:
  1. void szamkuldes(int kuldenivalo, int szamhossz)
  2. {
  3. int s0 = pow(10, (szamhossz-1));
  4.  
  5. for(int s1=0; s1<szamhossz; s1++, s0/=10)
  6. {
  7. UARTAdatKuld('0'+(kuldenivalo/s0) % 10);
  8. }
  9. }
így viszont igen:
  1. void szamkuldes(int kuldenivalo, int szamhossz)
  2. {
  3. szamhossz = 5;
  4. int s0 = pow(10, (szamhossz-1));
  5.  
  6. for(int s1=0; s1<szamhossz; s1++, s0/=10)
  7. {
  8. UARTAdatKuld('0'+(kuldenivalo/s0) % 10);
  9. }
  10. }
Meghívva így van:
  1. szamkuldes(valtozo, 5);
És így valamiért nem működik, csak ha benne adok neki értéket.
Ez mitől lehet?
(#) Reggie válasza vagnerjazon hozzászólására (») Jún 18, 2012 /
 
Hat ez igy sajnos nem eleg, a legjobb lenne, ha egy-egy dump-ot toltenel fel. Lehet akar optimizalasi problema, vagy stack beleer a valtozokba, stb.
(#) vagnerjazon válasza Reggie hozzászólására (») Jún 18, 2012 /
 
Ennyire nem vagyok otthon ebben, mi az a dump? Az előzőből kifelejtettem, hogy ha visszaküldetem vele a szamhosszt, akkor 5-öt kapok, szóval olyan, mint ha jó lenne, csak nem tudja használni utána. Meg ha if-et teszek bele, hogy küldjön mondjuk egy b betűt, ha 5-tel egyenlő, és az is működik. Alapértelmezetten -Os volt beállítva, átállítottam -O1 -re, de nem változott semmi.

Most kipróbáltam úgy, hogy csak ebből áll a program, mellékelem is. (soros.h-ban csak a soros beállítások vannak, az nem hinném, hogy számít) Végülis ha elküldöm az m-et, azt kapom, hogy "1241/" az "12345" helyett. És azt is most nézem, hogy ha megcserélem a void után a két változót(először van a szamhossz), akkor meg csak "/" jeleket kapok a végtelenségig. Szóval már nagyon nem értem.

program.c
    
(#) vagnerjazon válasza vagnerjazon hozzászólására (») Jún 18, 2012 /
 
Ezt is most vettem észre: egy, és kétjegyű szám esetén rendesen működik, de onnantól megbolondul.
(#) zombee válasza vagnerjazon hozzászólására (») Jún 18, 2012 /
 
Szerintem kasztolási és/vagy stack túlcsordulásos probléma lehet.
Utánanéztem a pow() függvénynek: double értéket vár!
Azaz double értékre kasztol, számol vele majd visszakasztolja int-é.
Ennek hátrányait inkább nem sorolnám, lényeg hogy nálam le se fordult a kód a pow() használata miatt.
Javaslom a pow() függvény kiváltását egy külön megírt szerzeménnyel, úgy menni fog:
  1. int mypow(int a, int x)
  2. {
  3.   int o = 1;
  4.   for(;x;x--) o*=a;
  5.   return o;
  6. }
(#) vagnerjazon válasza zombee hozzászólására (») Jún 18, 2012 /
 
Nagyon köszönöm, működik! Érdekes, hogy én is erre kezdtem gyanakodni, mert egy kis pihenés után kivettem belőle a pow-ot, és lényegileg így írtam át, és most készültem tesztelni azt is(úgy is működik, de ez a külön függvény még jobb is, köszönöm). Ráadásul így pow nélkül 1012byte-tal kisebb a kód, ami azért nem kevés(ez egyébként miért van?).
(#) tivi hozzászólása Jún 18, 2012 /
 
Sziasztok!

Épp most csinálok biciklire sebességmérőt és a számolást, vezérlést AVR-rel (atmega8) oldottam meg. Viszont az avr programozás nem sikerül.
Hiba:
Unable to enter programming mode. Verify interface settings, target power and connections to the target device.

Severity:ERROR
ComponentId:20100
StatusCode:1
ModuleName:TCF (TCF command: Device:startSession failed.)

Failed to enter programming mode. ispEnterProgMode: Error status received: Got 0xc0, expected 0x00

AVRStudio 5.1.208-at használok. AVR Doper a programozóm. Már többször programoztam vele atmega8515-öt és még most is megy vele. Programozó kábel jól van bekötve.

Válaszaitokat előre is köszönöm!
(#) Reggie válasza vagnerjazon hozzászólására (») Jún 18, 2012 /
 
Mivel hardverbol lebegopontos szamitast nem tud vegezni, igy ezt emulalnia kell. Ezek az emulacios rutinok foglaljak el a sok helyet.

Ha 100-nal nagyobb kitevot hasznalsz, szerintem hasznalj inkabb intelligens hatvanyozast, mivel igy kb. 14-16 muvelettel elvegezheto.
(#) zombee válasza tivi hozzászólására (») Jún 18, 2012 /
 
Hello!

Saját tapasztalat: AVR Studio 5 - nem támodatja az AVR Doper-t! Égetéshez használj AVR Studio 4.18-4.19-et!
(#) tivi válasza zombee hozzászólására (») Jún 18, 2012 /
 
Köszi, kipróbálom.
De amúgy atmega8515-öt sikerül AVRStudio 5-tel programozni.
(#) zombee válasza sikolymester hozzászólására (») Jún 19, 2012 /
 
A napokban újra elővettem az AVR Doper forráskódját, némi finomhangolás érdekében. Illetve ATMega88-ra
is szeretném lefordítani, a konstrukció alapján ezt lehet. De sajnos sehogy nem akar összejönni a dolog.

Amit eddig tettem:
AVR Studio 4.19-be új projekt, forrásfájlok importálása, elérési utak hozzáadása(./usbdrv; ./) így mindenki
lát mindenkit. A Makefile-t nem használom, helyette Project Options-ban adom meg: ATMega88 és 12MHz.

Ez történik:
A kód lefordul, és USB-re dugva a gép fel is ismeri az eszközt, beteszi a COM4 portra ahová egyébként
a többi Dopert is tette a tesztek alatt. Azonban AVR Studio-val való csatlakozáskor megbolondul.
A csatlakozás lassú, visszasír hogy a fw verzió 0.78xyz valami(8 vagy 10 számjegy), de a paraméter listát
már nem tudja betölteni és innentől a programozó is süket, se kép se hang.

Olyan is előfordult hogy AVR Toolchain-al lefordítva (project:conf.options:compiler rész) az AVR Studio
fel sem ismeri(de a windows továbbra is COM4-be teszi),
de WinAVR-el fordítva felismeri csak a fentebb már leírt jelenséget produkálja.
Ha 20MHz kristállyal hajtom meg(és F_CPU=20000000) akkor a Windows szintén felismeri, AVR Studio nem...

Még valami, ha a hardware.h-ban a DEBUG_OPTION részt nem teszem át 0-ba(alapértelmezésben 1)
akkor a Windows sem ismeri fel a programozót, de még nem is szól miatta, mintha be se lenne dugva!

Valaki megosztana velem egy már működő, leforduló AVR-Doper-es AVR Studio projektet(becsomagolva)?
(#) tanulo99 hozzászólása Jún 19, 2012 /
 
Sziasztok!
Ez a programozó ugye jó Tiny 45-höz? Winavr kezeli ezt a programozót? Ha igen akkor a makefileban mit jelöljek be programozó típusának? A port gondolom usb.
(#) sikolymester válasza zombee hozzászólására (») Jún 20, 2012 /
 
Érdekes.
Feltételezem a legújabb elérhető avr-doper verzióval próbáltad (2008-11-27 linkelt kommentemben én még azt vettem alapul). Azt kipróbálnád kérlek, hogy atmega8-ra fordítva, hasonló eljárással mi lesz az eredménye.

Illetve még egy kérdés: módosítottál bármit is a forrásban, vagy csak importáltád a studio 4.19-be, átállítottad atmega88-ra és kipróbáltad?

Ha atmega8-ra fordítva winavr-rel mindennemű módosítás nélkül sem működik, akkor valami nem sikerült az importálásnál.
(#) sikolymester válasza tanulo99 hozzászólására (») Jún 20, 2012 /
 
Kihagytad a linket.
(#) tanulo99 válasza sikolymester hozzászólására (») Jún 20, 2012 /
 
Akkor azért nem kaptam választ. Én Ez az:
F01982 AVR USB USBasp ISP PRGMR Programmer,Firmware Loader USB For ...KK UFO

Csatolom a makefilet a c fájlt és a hex fájlt. Tulajdonképpen a makefilet kéne megnézned jó e a c meg topi cikkéből származik, a hex meg a fordított.
(#) sikolymester válasza tanulo99 hozzászólására (») Jún 20, 2012 /
 
Nem vagyok nagy avrdude guru (az avrdude a winavr csomag része, ezt hívja meg a makefile alapján a make program utasításod)

Amit linkeltél ott azt írja, hogy ez egy USBasp.
Emiatt arra tippelek, hogy a következő sort írd át a makefile-ban:
  1. AVRDUDE_PROGRAMMER = avrisp

itt
  1. AVRDUDE_PROGRAMMER = usbasp

álljon

Ezt a makefileod alapján tudtam meg, ahol azt írta, hogy:
# Programming hardware
# Type: avrdude -c ?
# to get a full listing.

Hogy a kettő kompatibilis-e. Arra hamar rájössz te is, hogy már tudod, hogy ennek a becses neve usbasp.
(#) tanulo99 válasza sikolymester hozzászólására (») Jún 20, 2012 /
 
Az, de ott van az isp is és ha rákeresek a nevére ott is isp van és a winavr-be is isp van ami a legjobban hasonlít az asp-hoz.
Következő: »»   450 / 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