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   576 / 840
(#) killbill válasza 06smici hozzászólására (») Nov 28, 2013 /
 
Tapfesz, reset, orajel? Biztos, hogy jo helyen (cimen) indul el a programod RESET utan?
(#) 06smici válasza killbill hozzászólására (») Nov 28, 2013 /
 
Egyből a main címkére ugratom reset után. Reset felhúzó ellenállással tápra van kötve. Táp meg 5V-os stabról jön, nem hiszem hogy azzal lenne baj. Az órajelnél mire gondoltál? 4MHz-es kristály van benne.
Az előbb elfelejtettem írni, de mikor bekapcsolás után random értéket dob ki, akkor a reset sem segített rajta, se a táp lekapcs, majd újra be, csak egy újboli rátöltés oldotta meg.
(#) killbill válasza 06smici hozzászólására (») Nov 28, 2013 /
 
Hat, akkor valamiert megserul a flash-ben a program. Vagy felrefut a program es az irja felul valahogy, vagy hibas a uC. Lattam mar mindkettore peldat. Az 5V-os stab (7805) szeret gerjedni, ha nincs rendesen hidegitve. Muszerrel merve 5V, de a valosagban oszcillal, mondjuk 4 es 6 volt kozott, akar 1MHz-cel. Ilyet is lattam mar. Kimenetre, bemenetre 100nF keramia, es megnyugszik. Bar ez stabilizator tipustol fuggo, az adatlap megmondja, hogy kimenetre, bemenetre mekkora kondi kell, hogy stabil legyen.
(#) 06smici válasza killbill hozzászólására (») Nov 28, 2013 /
 
Na ez lehet a baja. 100nF-ot bele szoktam tenni, de ezt a panelt nem én terveztem. Eddig fel sem tűnt, hogy nincs benne. Nem,mégsem ez okozza. Most gyorsan megnéztem közvetlenül USB-re kötve is ugyan ezt csinálja.
Van itthon új AVR-em megnézem majd azzal is. De aztán az is lehet, hogy programban néztem el valamit, majd holnap átnézem még egyszer hátha meglesz.
(#) roland9 hozzászólása Nov 28, 2013 /
 
Sziasztok!
Nagy fába vágtam a fejszém...

Egy olyan problémám lenne, hogy akváriumra kellene nekem egy olyan (nem is olyan) kis elektronika ami 24 órában folyamatosan működik beállított időközönként meg húz egy relét (K1) és úgy tartja egy beállított ideig majd elenged, ez működtetné mondjuk a lámpát.

A másik amit még tudnia kellene a kis szerkezetnek hogy szintén beállított időben meghúz egy másik relét (K2) ami mondjuk ki kapcsolná a víz forgatót és egy idő után behúzna egy harmadik relé (K3) ami beszórná a kaját és rövid időn bellül elengedne a relé (K3) majd beállított idő után elengedne a (K2) relé is.

Ebben szeretném kérni a segítségeteket hogy ezt milyen AVR-el vagy PIC-el lehetne megoldani sajnos ebben a témában nem nagyon vagyok otthon :S
(#) fifadani válasza killbill hozzászólására (») Nov 28, 2013 /
 
Szia!
Holnap megnézem a suliban, hátha találok valami combosabb megoldást...
Apropó. Itthonra készítettem egy atmega 8-as panelecskét, kivezetve az össze portja csatira.
Olyan fejlesztői panel szerűség lenne ő.
A reset lábra tettem egy R-t illetve egy C közös pontját..
Szóval, Vcc - R - reset pin - C - GND.
10k-s felhúzó ellenállást és 100 nF-os kondit. Szükséges oda a kondenzátor?
(#) killbill válasza roland9 hozzászólására (») Nov 28, 2013 /
 
Ezt nagyjabol barmelyik AVR-rel meg lehet oldani. PIC-cel is, csak itt azokat nem ajanljuk
Nem is a mikrokontroller a kerdes, hanem, hogy van-e hozza fejlesztokornyezeted. Leginkabb a programozo a kerdes, mert a tobbi csak PC-s program. Es, hogy akarsz-e ezzel melyebben foglalkozni. Meg akarod ismerni a mikrokontrolleres vilagot? Programozashoz ertesz? Vagy csak a kesz megoldast keresed?
(#) killbill válasza fifadani hozzászólására (») Nov 28, 2013 /
 
Szerintem nem szukseges, de artani nem arthat. Az AVR-ekben van POR aramkor, azaz Power On Reset. En meg eletemben nem tettem RESET-re kondit. Igaz, en mindig teszek táp monitor reset aramkort, pl. MCP130.
(#) roland9 válasza killbill hozzászólására (») Nov 28, 2013 /
 
Igen szeretnék jobban foglalkozni vele érdekel nagyon a téma, a baj az, hogy a programozáshoz sem értek és szeretném megtanulni.
(#) killbill válasza roland9 hozzászólására (») Nov 28, 2013 /
 
Akkor hajra! Azt mondjuk nem tudom, hogy merre indulj Nem tudom, van-e kezdo programoz topic itt. Programozasban csak elmeletben tudok segiteni, mert (hacsak nem te is Linux-ot hasznalsz), en nem ismerem a vindozos rendszereket, programozokat.
(#) roland9 válasza killbill hozzászólására (») Nov 29, 2013 /
 
Én windows-os vagyok és az AVR Studio 5-öt szedtem le, aztán majd kiderül, hogy mire tudok vele menni
(#) TavIR-AVR válasza roland9 hozzászólására (») Nov 29, 2013 /
 
Első lépésekhez a 8 lábbal című sorozat vagy a 60 nap alatt Arduino jó induláshoz.
(#) csabeszq válasza roland9 hozzászólására (») Nov 29, 2013 /
 
A probléma bonyolultságát nem a relék adják. Nyilván az IC kimenetét egy tranzisztorral + védődiódával kierősíted és kapcsolsz vele. Ha pedig dolgozni sem akarsz sokat, akkor megveszel egy Arduino-t és akár USB kábelen is felprogramozhatod. Eddig a dolog teljesen egyszerű, fél óra.

A probléma lényege az, hogy gondolom azért csinálod, mert el akarsz menni otthonról és tudni akarod kapnak-e enni.

Ezután jön egy áramszünet: az IC elfelejti az időt, délben fűt és világít, este kikapcsol, hajnali 3-kor beszórja a halaknak a kaját,... Eddig még nem is baj, max. a halak furcsán fogják érezni magukat. A mechanikai problémák rosszabbak, pl. hogy elakad a szárított bolha szóró és kaja nincs, szegények meg lezabálják a két hét alatt az akváriumi növényeket.

Automata etetéshez jó, de ha hosszabb időre elmész és mondjuk tényleg nem akarod, hogy megdögöljenek, az már nem egyszerű.
A hozzászólás módosítva: Nov 29, 2013
(#) szdani hozzászólása Nov 29, 2013 /
 
Valaki tudna abban segíteni hogy mi a különbség az ATmega168 és az ATmega168V között? Mert van pár ATmega168V-m de abban valamiért nem fut le a program. A programozó ATmega168-nak ismeri fel és belső 8MHz-es órajelét állítottam be.
(#) Ricsi89 válasza szdani hozzászólására (») Nov 29, 2013 / 1
 
A V végződésű maximum órajele 10MHz és 1,8-5V között üzemel. A sima az 20MHz-ig megy és 2,7-5V között üzemel.
(#) szdani válasza Ricsi89 hozzászólására (») Nov 29, 2013 /
 
Rendben köszönöm szépen.
(#) roland9 válasza csabeszq hozzászólására (») Nov 29, 2013 /
 
Ez így van. De az etető már megvan 12V-ról működik egyenlőre adapterrel. de ha esetleg áram szünet lenne akkor teszek be egy 12V/7Ah aksit és így nem megy el az idő sem és etetni is fog. Max nem lesz világítás. (Több munkám lesz az algával )
(#) roland9 válasza TavIR-AVR hozzászólására (») Nov 29, 2013 /
 
Köszönöm szépen!
(#) macsaba hozzászólása Nov 30, 2013 /
 
Sziasztok!
Ebben a cikkben olvastam hogy össze lehet kötni avr-el a telefont. Az eeprom adataiba gondolom azokat kell beírni mint amit a gépembe írok statikus ip beállításnál. Viszont azt nem tudom, hogy a Mac címhez mi kerül, és a telefonos alkalmazásnál az url címhez. Már csak azért is érthetetlen ez nekem mert ugye a legtöbb szolgáltatónál az ip folyamatosan cserélődik és sok helyen (nálam is), még egy router is bekavar. Tehát valaki elmagyarázhatná hogy hova mit kell írni és kicsit részletesebben hogy miért, és miként is működik ez a kapcsolat.

Köszi,
Csaba
(#) Zsolt2 válasza macsaba hozzászólására (») Nov 30, 2013 /
 
A legtobb routernek van DDNS szolgaltatasa, vagyis egy URL-t rendel az aktualis IP cimhez, amit mindig frissit, mikor a szolgaltato IP-t cserel. Ha van ilyen opcio a routernel akkor ennek a beallitasa utan ezt az URL-t kell beallitani, ha nincs akkor az IP-t. Ahhoz, hogy kivulorol el tudd erni az eszkozt, meg be kell allitsd a routeren Port Forward (port atiranyitas)-t is: 80-as portot atiranyitani az EEPROM-ba beirt IP-re, szinten 80-as portra, minden protokollt (TCP, UPD), igy a router tudni fogja, hogy hova kell atiranyitsa a bejovo csomagokat. A belso halozatodrol az EEPROM-ba beirt IP-t is hasznalhatod.

Udv,
Zsolt
(#) macsaba válasza Zsolt2 hozzászólására (») Nov 30, 2013 /
 
Először is köszi a választ. Most már csak az nem tiszta, hogy a router alapból a 80-as portot használja http kapcsolatok létrehozására. Na most a router külön tudja valahogy választani a beérkező csomagokat hogy melyik jön a gépemre és melyik a vezérlőre vagy át kell állítani a http kapcsolatokat másik portra?

Üdv,
Csaba
(#) Zsolt2 válasza macsaba hozzászólására (») Nov 30, 2013 /
 
Csak a http keresek mennek a 80-as porton (a gepedtol kifele), a bejovo csomagok mas porton mennek, es ezeket maskepp kezeli a router.NAT (neteork adress translation vagyis halozati cim forditas) cimszo alatt tobbet olvashatsz errol a temarol
Ezert kell beallitani a port atiranyitast, hogy minden keres ami a 80-as portra erkezi iranyitsa at a vezerlore.
A hozzászólás módosítva: Nov 30, 2013
(#) TobJoz hozzászólása Nov 30, 2013 /
 
Segítségeteket szeretném kérni mert nem jövök rá mi lehet az oka. Segítséget előre is köszönöm.
(#) TobJoz hozzászólása Nov 30, 2013 /
 
Bocsi a kép lemaradt.

hiba.jpg
    
(#) zombee válasza TobJoz hozzászólására (») Nov 30, 2013 /
 
Szia!

A "Main" fülön állítsd át a "PP/HVSP Mode" részt "ISP Mode"-ra és menni fog.
(#) Szabi1 hozzászólása Dec 2, 2013 /
 
Sziasztok!
Ha én intrerupt-ot akarok használni ATMEGA8 chipen, és INT1 már felvan használva LCD egyik vezetékének kimenetként akkor ugye használhatom INT0 külön függetlenül attól hogy INT1 kimenet?
(#) TavIR-AVR válasza Szabi1 hozzászólására (») Dec 2, 2013 /
 
Igen. Függetlenül kezelhető.
(#) Szabi1 válasza TavIR-AVR hozzászólására (») Dec 2, 2013 /
 
Következő a problémám. Egy akkuőr szerű áramkört építettem, a lényeg hogy ATMEGA8 feszültséget és áramerősséget kellene mérjen, találtam is egy külföldi oldalt dokumentációval, kiegészítettem a kódot még 1-2 dologgal, de sajnos első lefutásnál az LCD re kiírja a feszültséget, de gyorsan lenullázódik, nem tudom mi a hiba valaki átnézni?
  1. int adc; //adc ertek
  2. int rxd;        // bemeneti labak ellenorzesehez szukseges valtozo
  3. float volt,amper; // kiszamolt volt es amper ertek
  4. uint8_t charged; // logikai tiupskent hasznalt valtozo
  5.  
  6.  
  7. ISR (INT0_vect)
  8. {
  9.         //ADC init//
  10.     _delay_ms(2000);
  11.     rxd = (PIND & 0b00000100); //input check
  12.     if(rxd==1) PORTB = 0b00000000; //shutdown by switch
  13.      GICR &= ~(1<<INT0);    //  INT0 letiltasa (nyomogomb perges megakadalyozasa erdekeben)
  14. }
  15.  
  16. uint16_t ReadADC(uint8_t ch)
  17. {
  18. ch=ch&0b00000111;
  19. ADMUX|=ch;
  20. ADCSRA|=(1<<ADSC);
  21. while(!(ADCSRA & (1<<ADIF)));
  22. ADCSRA|=(1<<ADIF);
  23. return(ADC);
  24. }
  25. //adc olvasas, elsokent volt, azutan amper meres
  26.  
  27.  
  28. void print(uint16_t parameter)
  29. {
  30. parameter%=10000;
  31. lcd_putc((parameter/1000)+48);
  32. parameter%=1000;
  33. lcd_putc((parameter/100)+48);
  34. parameter%=100;
  35. lcd_puts(".");
  36. lcd_putc((parameter/10)+48);
  37. lcd_putc((parameter%10)+48);
  38. } //adc kiiras
  39.  
  40. int main(void)
  41. {
  42. //DDRB|=(1<<PB0); // Portb0 input
  43. PORTD |= _BV(PD2); // internal pullup resistor to shut down switch
  44.  
  45. DDRB = 0b00000110; //PB1 charger relay  //PB2 prot relay
  46. PORTB = 0b00000100; //prot on.
  47. charged=0;
  48.  
  49. //lcd init
  50. lcd_init(LCD_DISP_ON);
  51. lcd_clrscr();
  52.  
  53. //adc init
  54. ADMUX=(1<<REFS0);                         // For Aref=AVcc;
  55. ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescalar div factor =128
  56.  GICR |= (1<<INT0);
  57.  MCUCR = (1<<ISC01) ; //INTR0 lefuto elre fusson le az interrupt
  58.  sei ( );
  59.  
  60. while(1)
  61. {
  62.  
  63.  if((GICR & (1<<INT0)) == 0)
  64.             {
  65.   // varakozas nehany szaz ms-ig, amig a nyomogomb befejezi a pergest
  66.             _delay_ms(250);
  67.   // minden tovabbi varakozo megszakítás torlese, majd a megszakitasok engedelyezese
  68.             GIFR |= (1<<INTF0);        // INT0-hoz tartozo jelzobit torlese
  69.             GICR |= (1<<INT0);        // INT0 megszakitas engedelyezese
  70.             }
  71.  
  72. if(volt == 21.6) PORTB = 0b00000000; //shutdown at 0%
  73. rxd = (PIND & 0b00000001); // charger check
  74. if(rxd==1){lcd_gotoxy(13,1); lcd_puts("AC ");}
  75. else {lcd_gotoxy(9,1); lcd_puts("BAT");}
  76.  
  77. if(volt<23.52)
  78.         {
  79.             //toltes
  80.  
  81.             charged=0;
  82.             PORTB = 0b00000110; //toltes rele be
  83.                         lcd_gotoxy(9,1); lcd_puts("CH ");
  84.         }
  85. else if (amper == 0)
  86. {
  87.     PORTB = 0b00000100; // toltes rele ki
  88.    lcd_gotoxy(9,1); lcd_puts("BAT");
  89.     charged=1;
  90. }
  91.  
  92. //lcd_puts(“Volts”);
  93. //lcd_gotoxy(8,0);
  94. //lcd_puts(“Amperes”);
  95. //lcd_gotoxy(0,1);
  96.  
  97.  
  98. lcd_gotoxy(1,1);
  99. _delay_ms(50);
  100. adc=ReadADC(0);
  101. volt=adc*5;
  102. print(volt);
  103. lcd_puts("V");
  104.  
  105. _delay_ms(50);
  106. adc=ReadADC(1);
  107. lcd_gotoxy(8,1);
  108. amper=adc*10;
  109. print(amper);
  110. lcd_puts("A");
  111. _delay_ms(10);
  112. _delay_ms(100);
  113.  
  114. }
  115. }
A hozzászólás módosítva: Dec 2, 2013
(#) zombee válasza Szabi1 hozzászólására (») Dec 2, 2013 /
 
Van még az ICP(1) láb is ami az 1-es időzítőhöz tartozik, és az INTx lábakhoz hasonlóan(lefutó és felfutó élre) egyszerűen beállítható. Használható a T0/T1/T2 is (ha van), azok is időzítőkhöz tartoznak és - igaz kicsit trükkösen - szintén beállíthatók fel-és lefutó élre. Azonban míg az ICP1 láb az időzítő működésén nem változtat, a T0/T1/T2 lábak interrupt forrásként való beállításával használhatatlanná válik az érintett időzítő egység. Mókolós kedvű embereknél láttam olyat hogy az analóg komparátort használják ilyen célra. Ha sok interrupt forrásod van akkor javasolt:
- ATMega48/88/168 használata, mert minden portlábra beállítható interrupt(de csak csoportban)
- diódás kapcsolással a forrásokat rávezetni egyetlen INT lábra, hogy mindegyiket érzékelje.
(ez utóbbi csak nyomógombos vagy hasonló elven működő rendszereknél életképes)
A hozzászólás módosítva: Dec 2, 2013
(#) Szabi1 válasza zombee hozzászólására (») Dec 2, 2013 /
 
A megszakításkérelem problémát megoldottam, most az említett feszültség méréssel van baj hogy csak az indítástól kezdve kevés ideig marad a kijelzőn.
Következő: »»   576 / 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