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   235 / 840
(#) csabóca válasza zombee hozzászólására (») Jún 14, 2010 /
 
A helyzet árnyaltabb. Rengeteg féle kontrollert kell programoznom, ill. a vezérlőtől (PLC) függően a felhasználói programot egy fix memóriába égetnem. Ez általában EEPROM, vagy flash. A cégnek nincs a 200 féle uc-hez írója, assemblere, debugja stb. Helyette vagyok én, akinek meg kell oldani a feladatot. A ciki az, hogy már a hétvégeken is a céges ATR-eket kell nyomatom a gyerekszobában. Meg a hardvert hozzá, mert ha nincs elég időm kitökölni a szoftvert, akkor megoldom hardveresen. Aztán a jön a következő ipari robot, aminek nem megy pl. a szenzorrendszere, megállapítom, hogy elszállt a controller, vagy sérült a program (hegesztőrobotoknál gyakran előfordul a nagy áramlökések miatt). ...és kezdődik előről az egész. Na megyek melózni...
(#) zombee válasza csabóca hozzászólására (») Jún 14, 2010 /
 
Ez igen!
Mikor lesz toborzás?
Én egy ilyen helyet képzeltem el magamnak, mint munkahely.
Bár egyelőre a legbonyolultabb szerkezeteim egy saját tervezésű és készítésű induktivitásmérő, CNC vezérlő,
távirányítós kapu és egy mikró vezérlőpanele voltak...
(#) csabóca válasza zombee hozzászólására (») Jún 14, 2010 /
 
Műszakos meló, nem leányálom, mert időre kell mindennek kész lenni. Én is itthagynám, csak itt a környéken 0 munkalehetőség van ilyen magamfajta nyákolónak. A törlesztést (55 qm) meg fizetni kell.
(#) fillx hozzászólása Jún 14, 2010 /
 
sziasztok!

a következő kérdésem lenne
ATtiny2313 -at használok
az a problémám hogy main függvényből meghívva a display funkció működik de a timer0 ISR fűggvényéből nem hívódik meg ezt mi okozhatja?
itt a forrás:
  1. #include <avr\io.h>
  2. #include <avr\interrupt.h>
  3. #include <util\delay.h>
  4.  
  5. //=================
  6. // Portbeállítások
  7. //-----------------
  8. #define S1 PIND0
  9. #define S2 PIND1
  10. #define S3 PINA1
  11. #define S4 PINA0
  12. //-----------------
  13. #define SZI PIND4
  14. #define GAZ PIND5
  15. //-----------------
  16. #define SIP PIND6
  17. //-----------------
  18. #define BTN1 PIND2
  19. #define BTN2 PIND3
  20. //=================
  21.  
  22.  
  23. const uint8_t segs[] =
  24. {
  25. 0x77, //0
  26. 0x06, //1
  27. 0xF2, //2
  28. 0xF1, //3
  29. 0x87, //4
  30. 0xDA, //5
  31. 0xFA, //6
  32. 0x16, //7
  33. 0xF7, //8
  34. 0xD7, //9
  35. 0x00  //üres
  36. };
  37.  
  38. uint8_t prescale=0;
  39. uint8_t sec=0;
  40. uint8_t h1=0;
  41. uint8_t h10=0;
  42. uint8_t m1=0;
  43. uint8_t m10=0;
  44.  
  45.  
  46. //---------------------------
  47. void init(void)
  48. //---------------------------
  49. {
  50.         SREG |= (1<<7);
  51.  
  52.         TIMSK = 0x84;
  53.     TCCR1B = 0x01;
  54.  
  55.         DDRA = 0x07;
  56.         DDRB = 0xFF;
  57.         DDRD = 0x73;
  58.  
  59. }
  60.  
  61. //---------------------------
  62. void display(uint8_t seg1, uint8_t seg2, uint8_t seg3, uint8_t seg4)
  63. //---------------------------
  64. {
  65.         // seg1
  66.         PORTB = ~segs[seg1];
  67.         PORTD |= (1<<S1);
  68.         PORTD &= ~(1<<S1);
  69.  
  70.         // seg2
  71.         PORTB = ~segs[seg2];
  72.         PORTD |= (1<<S2);
  73.         PORTD &= ~(1<<S2);
  74.  
  75.         // seg3
  76.         PORTB = ~segs[seg3];
  77.         PORTA |= (1<<S3);
  78.         PORTA &= ~(1<<S3);
  79.  
  80.         // seg4
  81.         PORTB = ~segs[seg4];
  82.         PORTA |= (1<<S4);
  83.         PORTA &= ~(1<<S4);
  84.  
  85. }
  86.  
  87. //---------------------------
  88. ISR(TIMER1_OVF_vect)
  89. //---------------------------
  90. {
  91.         if(!bit_is_set(PORTD,SIP)){PORTD |= (1<<SIP);}
  92.         else {PORTD &= ~(1<<SIP);}
  93.  
  94.     if(++prescale == 225){prescale = 0;sec++;};
  95.     if(sec>59){m1++;sec=0;};
  96.     if(m1>9){m1=0;m10++;};
  97.     if(m10>5){m10=0;h1++;};
  98.     if(h1>9){h1=0;h10++;};
  99.     if(h10>1 && h1>3){h1=0;h10=0;};
  100.  
  101.         display(h10,h1,m10,m1);
  102.  
  103.         return;
  104. }
  105.  
  106. //---------------------------
  107. int main(void)
  108. //---------------------------
  109. {
  110.         init();
  111.  
  112.         while(1)
  113.         {
  114.                 //display(1,2,3,4);
  115.         }
  116.  
  117.         return 0;
  118. }
(#) ATtiny válasza fillx hozzászólására (») Jún 14, 2010 /
 
volatile előtag hiányzik a funkció deklarálásánál. Ugyancsak hiányzik a volatile előtag a megszakításban használ változók deklarálásánál. Amúgy meg nem javaslom, hogy a megszakításból hosszabb program részeket hívjál meg. Garantáltan bele fogsz ütközni a túl sokáig tartó megszakítás problémájába. Természetesen nem lehetetlen hosszú ideig tartó megszakítások írása, de komoly tervezést igényel a késeltetések miatt.
(#) edison14 hozzászólása Jún 14, 2010 /
 
Helló!

Azt szeretném kérdezni, hogy feltételben hogyan vizsgálhatom azt, hogy a gomb nyomva van?

  1. if (PINC & (itt mit kellene írni)) {
  2.                                                    gomb nyomva van
  3.                                                 }
  4. else                                         {
  5.                                                   gomb nincsen nyomva
  6.                                                }


A segítséget köszönöm.
(#) (Felhasználó 4577) válasza edison14 hozzászólására (») Jún 14, 2010 /
 
Olvass vissza pár oldalt.
(#) 7805 hozzászólása Jún 14, 2010 /
 
Üdv Sikeresen beindullt az ATmel at89s51 es avr em de a következő lenne kérdésem mivel ez egy kijelző előtt van a kijelzőt rá lehet bírni valamire.?? mert a felső sarokban van 2 ledsor és azt szeretném meg csinállni h ráteszek a kábelekre 2 db hőváltoztatós ellenálást és ahogy nő a hőmérséklet mennek fel a ledek vagy csak világíttani őket..

cucc.jpg
    
(#) trudnai válasza ATtiny hozzászólására (») Jún 14, 2010 /
 
Funkcio deklaralasnal mit csinal a volatile?
(#) 7805 hozzászólása Jún 14, 2010 /
 
Idáig sikerült eljutni...
(#) edison14 válasza (Felhasználó 4577) hozzászólására (») Jún 14, 2010 /
 
Kössz megtaláltam.

Annyi kérdésem lenne hogy a ! milyen funkciót hajt végre?
Esetleg nincsen valami leírás ami ezeket a funkciókat összefoglalja?
(#) TavIR-AVR válasza 7805 hozzászólására (») Jún 14, 2010 /
 
Kapcsolasi rajz nelkul korulmenyes lesz....

En a Bascom-51-l jatszanek, sokmindent elfed a chipen belul....

sima set/reset labakkal vegigzongoraznam az egesz chipet....
(#) (Felhasználó 4577) válasza edison14 hozzászólására (») Jún 14, 2010 /
 
Abban a feltételben alacsony szintre teljesül az if.
De, csak keresni kell a google-el.
(#) edison14 válasza (Felhasználó 4577) hozzászólására (») Jún 14, 2010 /
 
Hát keresésben nem vagyok túl erős de ezentúl majd figyelek. Nem tudom hogy háláljam meg a türelmedet és a segítségedet. Ha esetleg valami eszedbe jut csak szólj.

Még egyszer köszönöm.
(#) zbiro hozzászólása Jún 15, 2010 /
 
Ismerkedem az avr-ekkel, és pwm-mel szeretném egy futófény fényerejét szabályozni. A mellékelt rajz mennyire működőképes? (pb1 a pwm, pb3-5 pedig a tényleges futófény)
Köszönöm a segítséget!

pwm.jpg
    
(#) kajozs válasza zbiro hozzászólására (») Jún 15, 2010 /
 
Szia!

Szerintem működőképes, csak a pwm frekvenciája jóval nagyobb legyen mint a futófényé.

üdv kajozs
(#) Axel hozzászólása Jún 15, 2010 /
 
Sziasztok!

Vettem egy Attiny 24-20 procit. Szeretnék vele egy kapcsolást építeni ami egy kódzár lenne. A lényege, hogy a négyjegyű kódot a program futása alatt egy tömb tárolja. Áramszünet esetén azonban ez a kód ha jól tudom elszállna és a 4 elemű tömböt nullákkal töltené fel alapértelmezésként, ami nem éppen elegáns megoldás. Ezért a proci eeprom-jában szeretném ezt tárolni amivel minden induláskor még az elején feltöltené a tömböt(normál esetben évente max. 1-2 történne ez meg csak mikor elmegy az áram). Hogyan lehetne ezt a legegyszerűbben megoldani? Majd böngészem az adatlap eeprom-ról szóló részét is de egy kis segítség elkélne mert azután könnyebben érthető.

Köszi szépen!
(#) Ideiglenes válasza zbiro hozzászólására (») Jún 15, 2010 / 1
 
Nem jó az elképzelés.

T1, T2, T3 közvetlenül a tápra kapcsolt pnp tranzisztorok lehetnének, ez esetben természetesen az emitterük kapcsolódna a tápra, a kollektoraikra kapcsolódna külön külön az R5-LED1, R6-LED2, R7-LED3 fogyasztók. A LED-ek katódjai a rajzodon megegyezően összekötve kapcsolódnának a T4 ( npn ) kollektorára, aminek emittere a testre dolgozik.

A másik megoldás, ha mindegyik tranzisztor npn tipusú, akkor a T1,T2,T3 tranzisztorok emitterei lennének összekötve és azok kapcsolódnának a T4 kollektorához. Az R-LED fogyasztók pedig a táp és a T1-T3 tranzisztorok kollektorai közé sorakoznának.

A rajzod szerint érdekes lenne a működés. Ha T4 nyitott ( tehát vezet, akkor azon marad kb 0,4V. A LED1 nyitófeszültsége 1,4V ( piros esetén ). T1 bázis emitter nyitófeszültsége 0,7V. T1 bázisára tehát legalább 0,4+1,4+0,7 = 2,5V-ot kell kapcsolnod, hogy vezessen, de ez csak egy adott munkapontban lenne igaz és csak piros led-del. Ha mondjuk KÉK ledet szeretnél üzemeltetni, annak nyitófeszültsége már 3-5V és valószínűleg nem viágítanának, mivel 0,4+4+0,7 = 5,1V, ami nem éri el a tranzisztor nyitásához szükséges feszültséget.

Bipoláris tranzisztoroknál, ha kapcsolóként használod, általános szabály, hogy
NPN tranzisztor emitter lába a GND-re
PNP tranzisztor emitter lába a +5V-ra
van kötve,így biztosíthatod, hogy a tranzisztor telítésbe legyen vezérlelve.
(#) kajozs válasza Ideiglenes hozzászólására (») Jún 15, 2010 /
 
Igazad van, elnéztem énis.
Valamiért ennek néztem , és ezért irtam, hogy működhet:

Idézet:
„A másik megoldás, ha mindegyik tranzisztor npn tipusú, akkor a T1,T2,T3 tranzisztorok emitterei lennének összekötve és azok kapcsolódnának a T4 kollektorához. Az R-LED fogyasztók pedig a táp és a T1-T3 tranzisztorok kollektorai közé sorakoznának.”
(#) edison14 hozzászólása Jún 15, 2010 /
 
Heló!

Azt szeretném megkérdezni, hogy változót hogyan hozhatok létre?

Ezt próbáltam: unsigned int i;
(#) Axel hozzászólása Jún 15, 2010 /
 
Jól csináltad, előjel nélküli int változót így kell deklarálni.
(#) edison14 válasza Axel hozzászólására (») Jún 15, 2010 /
 
És ha jól tudom a main elé kell tenni a változó deklarálását vagy netán tévedek? Mert olyant ír ki a fordító, hogy:
warning: operation on változó may be undefined

Ez azt jelenti, hogy a változó nincsen definiálva ha jól fordítottam! Mit ronthattam el?
(#) (Felhasználó 4577) válasza edison14 hozzászólására (») Jún 15, 2010 /
 
Ékezetes karaktereket nem használhatsz.

  1. unsigned int valtozo = 0;

Attól függ, hogy kell-e nullázni, vagy valami más értéket adni neki, hogy mire fogod használni.
(#) zbiro válasza Ideiglenes hozzászólására (») Jún 15, 2010 /
 
Hogy őszinte legyek, nem igazán látom a különbséget. Amit írtál példát (kék led, 5V), tulajdonképpen bármilyen elrendezésben kevés a feszültség, hogy mindhárom félvezető kinyisson, ez pedig azt eredményezi, hogy semmikor nem fog a led világítani (az analóg technika soha nem ment igazán)
Egyébként ha jól értem (és a fentieken nagyvonalúan átsiklom ), akkor a pnp tranziszotros a jobb megoldás, mert ott a tranzisztorok közelebb lehetnek a táphoz?
Vagy ezekkel a kérdésekkel inkább célozzam meg a kezdő topicot? :zavart2:
(#) Ideiglenes válasza zbiro hozzászólására (») Jún 16, 2010 /
 
Ez furcsa. Teljesen átment, amire gondoltam. Végre sikerült valami nekem is. A mellékelt rajzok pont olyanok, ahogy képzeltem.

Én a PNP-NPN összeállítást tartom jobbnak a tranzisztorok kivezérelhetősége szempontjából, nincs visszacsatolás az elrendezésben. Persze ez az elrendezés akkor fog működni, ha csak egy tápod van, két vezetékkel táplálod a rendszert ( GND, Vcc ). Itt úgy kell számolnod, hogy a LED-ek nyitófeszültsége + 2*0,4V ne legyen nagyobb, mint a tápfesz, különben nem fog világítani a LED.

Elsőre sem értettem amúgy a negyedik tranzisztor feladatát. Feltételezem, hogy a PWM jelet kapcsolnád rá, miközben a másik három tranzisztor adná, hogy a három közül melyik LED világítson. Én egy kicsit a helyedben gyúrnék a szofveren ( nem sokból tart ) és elhagynám a negyedik tranzisztort.

Ha csak a három tranzisztor lenne, akkor három NPN tranzisztorral úgy is működhet a kapcsolásod, hogy a LED-ek nagyobb tápot kapnak, mint a vezérlőegység, tehát függetleníteni lehetne a vezérlés tápját a teljesítményelemek tápjától. Ilyenkor a GND közös. Ezzel a megoldással akár kék LED-eket is meg lehet hajtani.

És abban teljesen igazad van, hogy a kérdés nem teljesen ide tartozik, mivel ez általában bármilyen vezérlőnél előforduló kérdés, hogy hogyan illesszük a vezérlőhöz a teljesítmény részeket.
(#) Ideiglenes válasza edison14 hozzászólására (») Jún 16, 2010 /
 
A változó deklarálását ( létrehozását ) teheted a main() függvény elé, illetve a main() függvény belsejébe is.

Ha elé teszed, akkor globális lesz, a teljes programon belül bármelyik függvényből hivatkozhatsz rá.

Ha a main() függvényen belül hozod létre, akkor csak azon belül hivatkozhatsz rá, másik függvényben ismretlen változó lesz.
(#) echo11 hozzászólása Jún 16, 2010 /
 
Hello mindenkinek! Az lenne a kérdésem (tudom hogy már iszonyatosan unalmas, de nincs más ötletem ahol megkérdezhetném):ide felraktam az STK200-as programozót bekötéssel és az lenne a lényeg, hogy jó-e így?
Amúgy a 3,3V egy tapasztalt embertől (fött.tojas) jött. A másik kérdés, pedig az hogy ha én például kihagyom az ellenállásokat vagy 3,3V helyett más feszültséget adok (5V alatt), akkor tehetek valami kárt a PC-ben vagy az IC-ben?

Nagyon várom a válaszokat, mert itt ülök kezemben az avr-el és nem mertek semmit csinálni, nehogy elcsesszek valamit.....
(#) zbiro válasza Ideiglenes hozzászólására (») Jún 16, 2010 /
 
Örülök, hogy örömet okozhattam
A tranzisztoros kérdéssel átvonulok a kezdőkhöz, viszont a pwm-mell kapcsolatban azért megjegyezném, hogy nem igazán értek veled egyet. Miért írnék saját megoldást, amikor az avr-ben ezt már lekódolták, és működik? Nyilván lehetnek olyan esetek, amikor valamilyen szempontból nem optimális a működése (vagy pl meg kell spórolni a plusz tranzisztort), akkor érdemes lehet a megírásán gondolkozni, de az esetek nagy részében szerintem a gyári megoldás használható (és használandó).
(#) edison14 válasza Ideiglenes hozzászólására (») Jún 16, 2010 /
 
Helló!

Sikerült!! Már nem ír hibát. Az volt a baj hogy rosszul használtam a változót. Most már szépen fut a program.

Köszönöm az eddigi segítséget de szerintem még sokszor szükségem lesz rátok.
(#) echo11 hozzászólása Jún 16, 2010 /
 
Bocsi ha bunkónak és 'erőszakosnak' tűnök, de valaki legyen szíves válaszolni..... :bummafejbe:
Következő: »»   235 / 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