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   180 / 840
(#) Melphi hozzászólása Jan 28, 2010 /
 
Köszönöm kvarcal márt jó
Ezekután megtudnátok mondani h pontosam mit pipáljak ki?
(#) geniuszf hozzászólása Jan 28, 2010 /
 
Ez és Ez ugyanaz??
mármint a neve nem annak tűnik de a HEStore-sal is lehet Qtouch-ot (érintőfelületet) csinálni?
(#) Melphi hozzászólása Jan 28, 2010 /
 
Köszönöm mindenkinek, müködik a Topi féle avr programozó, amit Ponyproggal és stk200-al égettem fel.
Akinek kell a segítségem nyugottan szoljon szivesen segítek
(#) Topi válasza geniuszf hozzászólására (») Jan 28, 2010 /
 
Nem ugyanaz. Amit linkeltél, az ATmega128L amit az Atmel oldaláról linkeltél az pedig ATmega128A. Ha kiváltani akarod, akkor belső felépítésében egyeznek többé kevésbé (visszafelé kompatibilitás) De az L-esnek alacsonyabb a max. órajele.
(#) Melphi hozzászólása Jan 28, 2010 /
 
Valaki tudna segiteni, ez mi lehet?
(#) Ricsi89 válasza Melphi hozzászólására (») Jan 28, 2010 /
 
Az, hogy rámentél a frissítésre, amire nem kellett volna.
(#) Melphi hozzászólása Jan 28, 2010 /
 
És ennek mi az ellenszere?
Köszi
(#) Ricsi89 válasza Melphi hozzászólására (») Jan 28, 2010 /
 
Az, hogy amikor kiírja, hogy van újabb fw és hogy frissíted-e akkor rámész a mégse gombra és kész.
(#) Melphi hozzászólása Jan 28, 2010 /
 
Köszi
(#) (Felhasználó 4577) válasza Melphi hozzászólására (») Jan 29, 2010 /
 
Próbáld ki 16MHz-essel, ha megy, akkor semmit.
(#) mario1111 hozzászólása Jan 29, 2010 /
 
Üdv!

Eddig 8051-es alapú procit használtam, de most avr-re van igény. Azt szeretném megtudni, hogy milyen letöltőt érdemes venni. Eddig főként C8051F206-ra írtam programot és ennek a letöltő adaptere (debugger adapter) képes volt lépésenként futtatni a programot a procin és brake pointokat is lehetett használni. Van erre lehetőség az avr-eknél? Amit láttam letöltőt eddig az csak annyit tudott, hogy letöltötte a programot és kész. A hibakeresés egy gyötrelem volt, főleg, h más kódját kellett javítani....
Mit ajánlotok?

Üdv: Márió
(#) Cavalier válasza mario1111 hozzászólására (») Jan 29, 2010 /
 
AVR dragon

Programozó, debugger, tud többféle programozási módot is, szóval nem tudod magad véletlen kizárni fusebitekkel. Lehet, hogy nemsokára beruházok rá.
(#) tibi0531 válasza mario1111 hozzászólására (») Jan 29, 2010 /
 
Ha csak régebbi típusú mikrokontrollereket akarsz programozni/debuggolni (ATmega16-tól ATmega128-ig), akkor EZT ajánlom figyelmedbe.
(#) labu01wx hozzászólása Jan 30, 2010 /
 
Sziasztok!
Meg tudnátok mondani, hogy hogyan tudom megadni(C-ben) a procinak(ATiny45), hogy mit csináljon INT0 esetén?
(#) janyjozsef válasza labu01wx hozzászólására (») Jan 30, 2010 /
 
Szia.
Én AVR studióban GCC-vel így szoktam

  1. SIGNAL(SIG_INTERRUPT0)  // Ext Int0
  2. {
  3.         if(m_State_Struct->SPI_Ready == TRUE)
  4.                 Int0Service();
  5.         else
  6.                 m_State_Struct->CAN_Int_Occured = TRUE;
  7. }
(#) levy_k válasza janyjozsef hozzászólására (») Jan 30, 2010 /
 
A SIGNAL() elavult, új kódokhoz nem ajánlott, helyette az ISR() használatos.
(#) labu01wx válasza levy_k hozzászólására (») Jan 30, 2010 /
 
Köszönöm a választ.
Írtam is egy programot, nem mindenhol a leglogikusabb, de legalább megszakítást használ, illetve használna, ha működne...
A ledsor eléri a maximumot, de nem hajlandó újraindulni.

int.c
    
(#) ATtiny válasza labu01wx hozzászólására (») Jan 30, 2010 /
 
Lehagytad a volatile előtagot a változó definiálásánál. E nélkül nem tudod az adott változót megszakításból is használni.

  1. volatile char ujra=0;


(#) labu01wx válasza ATtiny hozzászólására (») Jan 30, 2010 /
 
Most működik, köszi.
Azt meg lehet valahogy csinálni, hogy interruptkor ne egy másik parancssort hajtson végra, hanem a főprogram egyik címkével megjelölt részéhez ugorjon?
pl:
  1. ISR(INT0_vect) {
  2.         goto kezd;
  3. }
(#) Damian666 hozzászólása Jan 30, 2010 /
 
Helósztok. még csak most kezdek ismerkedni at atmel-ekkel. de szeretnék csinálni egy íidőzítő kapcsolást, aminek az lenne a dolga hogy egyik bemeneten nézi a feszt, ami 5v. ha ez megszűnik akkor a kimenetén 1 percig ad 5 voltot. konkrétan a meglévő attiny 13-asromra gondoltam de fogalmam sincs még hogyan is mekk megírni programot rá. a nyolc lábbal egyik részéből megépítetem az attiny 13 assal készült pc venti vezérlést, de mivel nekem csak 1 ventire van szükségem ezért a másik portot nem veszem igénbe. át lehet e írni a programot, úgy hogy az időzítést is ez a kontroller végezze? . ha bonyesz akkor éppen felhasználhatok 1 másik kontrollert, de helymegtakarítás és kihasználatlanság végett, célszerűbb lenne a meglévő progijába módosítani. a segítséget előre is köszönöm.
(#) levy_k válasza labu01wx hozzászólására (») Jan 30, 2010 /
 
Akkor azt a részt rakd bele egy függvénybe és azt hívd meg a főprogramban és a megszakításban is. Egyébként kerüld a "goto"-t, mert egy idő után átláthatatlan lesz tőle a program.
(#) Ricsi89 hozzászólása Jan 30, 2010 /
 
Sziasztok!
Van egy programom, ami majdnem tökéletesen működik. Egy kivétellel. A funkció váltások nem mennek igazán jól. Ezekkel mit lehetne csinálni? Egy gombbal váltok funkciót. A funkciónak addig kellene menni, amíg újabb gombnyomás nem történik és akkor kellene váltania a következőre. Erre valami jobb megoldás nincs, mint amit én csináltam, mert itt csak két gombnyomás után kezdi el csinálni a következőt. Az oka, hogy a gombnyomásra csak a funkció while ciklusából lép ki és következőre vált. Mit lehetne ezzel csinálni? Programot mellékelem.

ledek.c
    
(#) ATtiny válasza labu01wx hozzászólására (») Jan 30, 2010 /
 
Szia!

Valahogy így kéne megoldanod amit te szeretnél goto nélkül:

  1. volatile char ujra;
  2.  
  3. int main(void)
  4. {
  5.         DDRB |=  1<<PB0 | 1<<PB1 | 1<<PB3 | 1<<PB4;
  6.         PORTB|= 1<<PB2 | 1<<PB5;
  7.         SREG |=1<<I; //interruptok engedélyezése
  8.         GIMSK|=1<<INT0;  //INT0 megszakítás engedélyezése
  9.         MCUCR|=0<<ISC00 | 0<<ISC01; //INT0, ha PB2==0
  10.         char i;
  11.         while(1)
  12.         {
  13.          ujra = 0;
  14.          for (i=0; i<17; i++)
  15.          {
  16.           SendData(CreateBar(i));
  17.           m_delay_10ms(30);
  18.          }
  19.          while(!ujra)
  20.          {
  21.           asm("nop");
  22.          }
  23.         }
  24. }
  25.  
  26. ISR(INT0_vect)
  27. {
  28.  ujra=1;
  29. }
(#) ATtiny válasza Ricsi89 hozzászólására (») Jan 30, 2010 /
 
Bele néztem a kódba, elvileg ha ezt a részt:

  1. while(1){
  2.            if (GOMB) {
  3.                  _delay_ms(200);
  4.                                  ++k;
  5.                                  
  6.                    switch (k) {
  7.                          case 1: villog1(); break;
  8.                          case 2: villog2(); break;
  9.                          case 3: villog3(); break;
  10.                        
  11.                    }
  12.            }


Átírod erre:

  1. while(1){
  2.            //if (GOMB) {
  3.                  _delay_ms(200);
  4.                  ++k;
  5.                                  
  6.                    switch (k) {
  7.                          case 1: villog1(); break;
  8.                          case 2: villog2(); break;
  9.                          case 3: villog3(); break;
  10.                        
  11.                    }
  12.            //}


Akkor jól kell működnie. Teljesen felesleges figyelni ott a gomb nyomásokat, mivel a három villogtató fügvényed úgyis csak akkor tér vissza, ha gombnyomás volt. Tehát ha bármelyik villogtató fügvényed visszatért a fő ciklusba, akkor automatikusan tudod, hogy gombnyomás történt. Nem kell még 1x vizsgálni, hogy valóban le van nyomva a gomb. A késleltetéseket lehet állítgatni kell majd egy kicsit.
(#) Ricsi89 válasza ATtiny hozzászólására (») Jan 30, 2010 /
 
Köszi! Működik. Látszik, hogy van még mit tanulnom.
(#) janyjozsef válasza levy_k hozzászólására (») Jan 30, 2010 /
 
Mi a különbség SIGNAL és ISR között?
Azonkívül, hogy látszatra egyformán működik.

És, ha elavult, akkor miért működik?
A fordítónak nem kellene szólnia, hogy ne ezt használjam? Vagy valaminek?

(#) levy_k válasza janyjozsef hozzászólására (») Jan 30, 2010 /
 
Az AVR libc írói nem ajánlják a SIGNAL()-t, ami annyit tesz, hogy a támogatása megszűnt. Kizárólag a régi kódok kompatibilitása miatt maradt benne a könyvtárban.
(#) trudnai válasza janyjozsef hozzászólására (») Jan 30, 2010 /
 
Idézet:
„Mi a különbség SIGNAL és ISR között?
Azonkívül, hogy látszatra egyformán működik.”


SIGNAL es az INTERRUPT a regi modszer, ezeket csereltek le az ISR-es modszerre. Gyakorlatilag fel akartak oldani a felreerteseket a ket megszakitasi tipus kozott, mivel az egyik blokkol, a masik nem. Igy lett az ISR aminek attributumokat lehet adni es azzal lehet meghatarozni, hogy blokkolo legyen-e vagy sem. Ezenkivul mas attributumok is vannak (pl., hogy csupasz legyen-e az ISR es akkor neked kell manualisan a kontextus mentest megvalositani).

Idézet:
„És, ha elavult, akkor miért működik?
A fordítónak nem kellene szólnia, hogy ne ezt használjam? Vagy valaminek?”


Pontosan ugyan amiatt ami miatt egy regi auto is meg mukodik: Sok embernek meg regi van, es, hogy ne kelljen azokat a bontoba vinni az utak es a benzin megmindig ugyanaz... Van egy regi alkalmazasod, ne kelljen mar atirni, csak mert valahol valaki ugy gondolta az ISR kevesbe kavarja meg a kezdoket, mint a SIGNAL.

(#) gabi20 hozzászólása Jan 30, 2010 /
 
Sziasztok!

PIC -hez már elég jól értek ,most szeretnék nekiállni
az AVR processzorokhoz. Az AVR - ről csak annyit tudok, hogy AVR. Valaki tudna segíteni, hogyan kezdjek neki? Milyen processzort használjak először , miben programozzak (assemblyhez jóül értek + egy kevés pascal), milyen égetőt ajánlotok kezdők számára...
Köszi a válaszokat
(#) Beachway hozzászólása Jan 30, 2010 /
 
Üdvözlök mindenkit! Lenne egy kérdésem. Nem sok tapasztalatom van e témában. Szeretnék építeni egy LCesr mérőt, és ehez kellene felprogramoznom egy MEGA8-P -t. Ehez keresnék kapcsolósi rajzot (programozóhoz) Ha lenne valakinek olyan ami garantáltan jó ehez a tipushoz, azt nagy örömmel fogadnám. Előre is köszönöm a segítségeteket!
Következő: »»   180 / 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