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   728 / 840
(#) FDAssasin válasza Sick-Bastard hozzászólására (») Márc 16, 2016 /
 
Lehetséges hogy értelmetlen lenne rajzolnom. Átnéztem minden egyes forrasztást még párszor... az USBasp-n képes voltam kicsit összekeverni a tűket. Viszont továbbra sem működik, ugyanaz a hiba. A MISO-t cseréltem fel a MOSI-el, illetve az SCK-t kötöttem az NC-hez. Szóval gondolom most van egy szépen megsütött IC-m, ami még levélnehezéknek is túl könnyű. Vagy tudok még vele valamit kezdeni?

Ezt építettem meg: Bővebben: Link
kisebb változtatásokkal:
-7805 nincs benne, egyből az USBasp-ről kapja az 5V-ot, ezáltal a két kondenzátor is ki van szedve ami a transzformátor IC-hez kellene.
-A ledet és a 330 Ohmos ellenállást nem raktam rá
-10k ellenállás nincs az RST és a VCC közt
-Nincs reset gomb
-Csak a pillanatnyilag szükséges lábakat forrasztottam be (MISO, MOSI, RST, SCK, VCC, AREF, GND)
-Az USBasp 5V-ja és a GND-je közé tettem egy 16V-os 10μF-os kondenzátort (ha jól tudom a fehér csík a kondi oldalán a GND oldalt jelenti). Ezt egy régi videokártyáról szedtem le, de kimértem, elvileg 10.2μF a kapacitása (kicsit ingadozik a műszeren, kb 10.2 és 9.8 közt, igaz, nem a legstabilabb portok vannak hozzá. szóval lehet csak a kezem remeg). Lehet hogy ő a bűnös?

Mire ezt lerajzolom megöregszem, szóval bocsi, de nem nem szívesen bajlódnék azzal órákat. (vagy van rá valami jó program? mert én nem találtam) Fotót mellékeltem a tákolmányomról, de az alsó rész úgy sem látszik rendesen a kábelrengeteg miatt. De azért hátha segít és csak én vagyok vak.
A hozzászólás módosítva: Márc 18, 2016

arduino.zip
    
(#) csatti2 válasza FDAssasin hozzászólására (») Márc 16, 2016 /
 
Látom feleslegesen koptattam a billentyűzetem...
(#) FDAssasin válasza csatti2 hozzászólására (») Márc 16, 2016 /
 
Ezt nem mondanám. Csak az a helyzet, hogy nem nyomtatom a pénzt, illetve elég korlátozott képességekkel rendelkezem. Ezt összehozni is egy elég nehézség volt számomra, ennyi összevissza kábelezéssel. Nem akarok új programozót venni, ha a régit is megcsinálhatom. Ha meg veszek egy új Arduino-t, akkor miért bénáztam volna ezzel? Elnézést hogy látszólag ignoráltam a hozzászólásaidat, de millióegy helyen sokkal egyszerűbben írják le. Értem én, hogy a te munkád stabilabb és igényesebb, de valahol el kell kezdenem. De csak nem fogok ledeket egymás mellé forrasztgatni a végtelenségig... De természetesen szívesen fogadok bármilyen nem túlságosan bonylult (ferritgyöngy meg hasonlók ) javaslatot. Ha 10 honlapon nem láttam hogy ez így működni fog, akkor egy helyen sem...
A hozzászólás módosítva: Márc 16, 2016
(#) Istvanpisti válasza FDAssasin hozzászólására (») Márc 16, 2016 /
 
Idézet:
„10k ellenállás nincs az RST és a VCC közt”

Pedig kellene!
(#) Sick-Bastard válasza FDAssasin hozzászólására (») Márc 16, 2016 /
 
Mint írod, csak volt némi gubanc a kapcsolatban. A képet elnézve ez lesz a legvalószínűbb.
Nem egyszer esett meg velem, hogy mindenre megesküdtem volna, hogy a kapcsolásom jó, de mint kiderült mégsem.

Ne csak a forrasztásokat néz meg. Hanem a kapcsolatot a mega328 lábai és az USBasp tüskesora között.
Lehet egyszerűbb lenne a vezetékeket újra bekötni (előröl kezdeni). Tiszta lappal indulni.

Ezek az elkötések(MISO<->MISO, SCK<->NC csere) még nem vágják gajra az AVR-t. Az AREF és a VCC összekötése viszont nem jó. Így a referencia feszültsége mindig VCC-vel lesz egyenlő vagy rosszabb... ez részben, vagy teljesen gajra vághatja. (Ezt jól tudom?)

A kondi szerintem nem ludas. Ha az lenne a gond, akkor a PC nem is látná az USBaspt, mert akkor letiltaná. Olyan hibát kapnál, hogy a programozó nem elérhető.
(#) csatti2 válasza Sick-Bastard hozzászólására (») Márc 16, 2016 / 1
 
AREF-t csak akkor javasolt bekötni, ha tényleg van külső referencia. Ha pl. a belső referenciára kapcsol a szoftver mikor vmi külső is be van kötve, akkor elfüstöl az IC.
(#) Sick-Bastard válasza Istvanpisti hozzászólására (») Márc 16, 2016 /
 
Nem feltétlen. Ebben a típusban (vagy mindegyikben?) az adatlap szerint van egy beépített felhúzó ellenállás.
Azért nem árt, ha csak odakerül egy külső is. Én is használni szoktam.
(#) csatti2 válasza FDAssasin hozzászólására (») Márc 16, 2016 /
 
A gond az, hogy a 10k felhúzó ellenállás és a 100nF kondik nem igazán opcionálisak, bármi mást is írnak máshol.
Ha tudom, hogy egy protonyákon forrasztasz össze vmit, akkor biztos nem írom a ferritgyöngyöt és hasonlókat, mert kb. nem oszt nem szoroz, úgyse lesz tőle jobb. Feltételeztem, hogy azért akarsz saját Arduinót építeni, mert jobbat szeretnél mint, ami kapható. Kínából 900Ft körüli árért teljesen jó példányok vehetőek, sztem neked többe került, amit most ráköltöttél...
(#) tursaba válasza FDAssasin hozzászólására (») Márc 17, 2016 /
 
Szia! Van 2db gnd és egy Avcc láb is. Ezek be vannak kötve?
(#) Jhanee hozzászólása Márc 17, 2016 /
 
sziasztok
Van egy Atmega 128 fejlesztőpanelem Jtagice programozóval
Korábban kifogástalanul működött, most viszont ahogy csatlakoztatnám avr studio 4-ben a "could not connect jtagice" ablak jön fel folyamatosan.
COM port száma 1 és 4 között van.
Valakinek van ötlete mi lehet a probléma, esetleg merre induljak el?
A hozzászólás módosítva: Márc 17, 2016
(#) Kovidivi válasza Jhanee hozzászólására (») Márc 17, 2016 /
 
Fuse bit jól van beállítva? Jtagen-re gondolok.
(#) FDAssasin válasza csatti2 hozzászólására (») Márc 17, 2016 /
 
csatti2:
Akkor az AREF-t lekötöm teljesen. (vagy kössem össze valamivel?)
egy 10k-t rárakok (VCC és RST közé), de hova is kell a 100nF?
Amúgy azért akartam összerakni és nem venni, mert erre bátran rá merek forrasztani, nem úgy mint egy smd elemekkel telerakott lapra. De kezdek erősen azon a véleményen lenni, hogy ha még sokat szívok ezzel, akkor kidobom a fenébe és veszek egy összerakottat ebayen.

Sick-Bastard:
Úgy néztem a kapcsolást és csipogott is hogy érintkezik. Nem értem mi van... utoljára szétszedem az egészet és veszek egy pontozott univerzális nyákot (maratni nem tudok sajnos)

tursaba:
Igen, mindkettőt bekötöttem.
(#) csatti2 válasza FDAssasin hozzászólására (») Márc 17, 2016 /
 
AREF és GND közé 100nF (ez nem kötelező).
VCC és GND közé 100nF (közel a lábakhoz).
AVCC és GND közé 100nF (közel a lábakhoz).

Kapható protonyák, amit beledughatsz a gyári arduino-ba. Persze csinálhatsz ilyesmit házilag is ha akarsz. Ebből is látszik, hogy nem kötelező forrasztgatni az arduino-t.
Bővebben: Link
A hozzászólás módosítva: Márc 17, 2016
(#) FDAssasin válasza csatti2 hozzászólására (») Márc 17, 2016 /
 
Köszönöm. Holnap jelentek hogy mire jutottam.
Ez a protonyák dolog jó ötlet, de előbb meglátjuk hogy ezzel jutok-e valamire
(#) Max26 hozzászólása Márc 18, 2016 /
 
LED-et villogtatnék ATiny13A-val, de nem tudom felprogramozni, mert bármit csinálok a program memória 300%. Mit lehet tenni?

  1. #define F_CPU 9600000UL
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5. #include <stdio.h>
  6.  
  7. int main(void)
  8. {              
  9.                 DDRB=0xff;
  10.  
  11.                 while(1)
  12.                 {      
  13.                         PORTB=0x00;
  14.                         _delay_ms(1000);
  15.                         PORTB=0xff;
  16.                         _delay_ms(1000);
  17.                 }
  18.                
  19.         return 0;
  20. }

AVR Memory Usage
----------------
Device: attiny13a

Program: 3012 bytes (294.1% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...
(#) Max26 hozzászólása Márc 18, 2016 /
 
Sziasztok!
ATiny13A mikrokontrollernek az ADC-ét szeretném beállítani. Ez a kód így miért nem működik?

  1. #define F_CPU 4800000UL
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. void adc_init(void)// ADC konfiguralas (beallitas)
  9. {
  10.         ADMUX |= (1<<REFS0);   // Vcc mint referencia
  11.     ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); //ADC engedelyezese, ADC eloosztas: 4.8MHz / 64 = 75kHz, ami 50kHz...200kHz közt van.
  12. }
  13.      
  14. int adc_beolvas(unsigned char CH)
  15. {
  16.         ADMUX = (ADMUX & 0b11110000) | CH;    //ADC csatorna kivalasztasa
  17.         ADCSRA |= (1<<ADSC);    // ADC konverzio elinditasa  
  18.         while (ADCSRA & (1<<ADSC));  // varas az atalakitasra
  19.         ADCSRA |= (1<<ADSC);    // konverzió elindítás        
  20.         while (ADCSRA & (1<<ADSC));  // varas az atalakitasra  
  21.         return (ADCL | (ADCH<<8));      // ADC ertek kiolvasasa
  22. }
  23.  
  24. int main(void)
  25. {              
  26.                 int adc_ertek=0;
  27.                 DDRB=0b110111; //LED bemenet
  28.  
  29.                 adc_init();
  30.  
  31.                 while(1)
  32.                 {      
  33.                         adc_ertek=adc_beolvas(3); // ADC 3 -ról történik a beolvasás
  34.  
  35.                         if(adc_ertek>348)
  36.                         {
  37.                                 PORTB=0b010000; //LED nem világít
  38.                         }
  39.                         else
  40.                         {
  41.                                 PORTB=0b000000; //LED világít
  42.                         }      
  43.                 }
  44.         return 0;
  45. }
(#) csatti2 válasza Max26 hozzászólására (») Márc 18, 2016 /
 
Ez itt épp, hogy a beépített referenciát választja ki...
  1. ADMUX |= (1<<REFS0);   // Vcc mint referencia


Ha ez nem elég, akkor pedig próbálj inkább az ADCSRA ADIF bitjére várni konverzió végeként (ezt a bitet törölni is kell azzal, hogy utána 1-be írod), a leírás szerint ez akkor áll egybe, amikor a konverzió véget ért és az ADCL és ADCH regiszterek is frissültek.
(#) zombee válasza Jhanee hozzászólására (») Márc 18, 2016 /
 
Eszközkezelőben nézdd meg, melyik COM porton van( Start-->futtatás: devmgmt.msc ).
(#) Max26 válasza csatti2 hozzászólására (») Márc 19, 2016 /
 
A szenzor ML8511 1...3V közti kimenő jelet biztosít. A célom, hogy 1,123V-nál nagyobb feszültségnél a LED ne világítson. A lényeg, hogy a fenti kód működik breadboardon atmega32-vel 3.3V-ról, de attiny13a-val nem úgy működik ahogy elvárnám.

Ha a tápfeszültség 3.3V és ez a referencia is, akkor az U(quantum)=3.3/1024, így ADC(1,123V)=1,123/U(quantum)=348.
A problémám, hogy ez a határ attiny13a-nál nem 348, hanem kb 1000 adc értéknél van.
(#) csatti2 válasza Max26 hozzászólására (») Márc 19, 2016 /
 
Nem figyelsz. Rossz a kódod. A te kódod a belső referenciát választja ki (ami 1,1V körüli), miközben a kommentedben a Vcc-t írod...
(#) gerry hozzászólása Márc 19, 2016 /
 
Üdv! Frissen telepített winavr-be akartam a mellékelt programot átírni mega8515-re a 90S8515-ről, de csak hibát ír ki. Nem találja az "include".h fájlokat. Már átmásoltam a winavr-ből is a program könyvtárba de ua. a hiba. Valaki ránézne? Köszi

software.zip
    
(#) zombee válasza gerry hozzászólására (») Márc 19, 2016 /
 
És ha csak a régi(89S8515-re fordított) hex fájlt áttöltenéd a mega8515-be? Visszafele kompatíbilis.
(#) gerry válasza zombee hozzászólására (») Márc 19, 2016 /
 
Mást is szeretnék módosítani a programban. Elolvastam az oldalon található winavr telepítést, meg "kezelést". De nem jutottam előbre.
(#) Max26 válasza csatti2 hozzászólására (») Márc 20, 2016 /
 
Atmega32 máshogy volt bekötve. Ott működött azzal a kódrészlettel is. Attiny-nél kitöröltem azt a sort és most már azon is fut rendesen. Köszi a segítséget.
(#) zombee válasza gerry hozzászólására (») Márc 20, 2016 /
 
Megpróbálom AVR Studio-ba importálni. Milyen paraméterekkel kell fordítani? Csak ez miatt:
  1. int main (int argc, char *argv[]);
A hozzászólás módosítva: Márc 20, 2016
(#) gerry válasza zombee hozzászólására (») Márc 20, 2016 /
 
Üdv! Van az IEC.C- ben egy ilyen sor.

  1. #define DEVICENUMBER  10


Kellene egy fordítás

  1. #define DEVICENUMBER  9


Meg egy

  1. #define DEVICENUMBER  8


Ha kivetelezhető. Köszönöm!
(#) Ivan93 hozzászólása Márc 21, 2016 /
 
Sziasztok!
Az avr-ek hogy viselik, ha működés közben megváltozik a tápfeszültsége? Arra gondoltam, hogy az energiafelvétel minimalizálásához alvó mód előtt lekapcsolnám a step-up konvertert, és az avr ilyenkor csak az akku feszültségét kapná (konverterrel párhuzamos diódán keresztül), a konverter pedig nem fogyasztana semmit (meg a szenzorok sem). A kérdés csak elméleti, sehol nem találtam infót arról, hogy viselkedik ilyenkor az uC. A hirtelen változást egy kis kondenzátor simítaná ki, nehogy reseteljen.
(#) Kovidivi válasza Ivan93 hozzászólására (») Márc 21, 2016 /
 
Normálisan viselik. Az alacsony feszültség védelmet kapcsold ki az AVR-ben, vagy állítsd a legkisebbre.
(#) Ivan93 válasza Kovidivi hozzászólására (») Márc 21, 2016 /
 
Köszi! És szoktak ilyen megoldást használni, mert nem találtam semmit róla?
(#) zombee válasza Ivan93 hozzászólására (») Márc 21, 2016 /
 
Elviseli. A lényeg hogy a minimálisan előírt feszültség az meglegyen, a frekvenciától függően. Persze alvó módban ez 0Hz, de gondolni kell arra is hogy az ébredés pillanatában még a legkisebb feszkót kapja, de már "rendes" órajelen akar ketyegni. Ilyenkor simán elszállhat az egész. Megcsinálhatod hogy altatás előtt átállítod az órajelosztót(lásd: avr/power.h), így ébredéskor az alacsony indulófeszültséghez kicsi induló-órajel társul. A kondit illik jól méretezni, mert egy izmosabb fojtótekercs jókat rúghat a feszültségen amikor éppen megszűnik minden terhelés.

Konkrétan step-up konverter lekapcsolására még nem láttam példát, de a minimális feszültség(~2.2V) megléte esetén elviekben semmi akadálya nincs egy ilyen megoldásnak. Én szoftveres RTC-ben használtam olyat hogy az AVR egy 3V-os lítium elemről és egy 5V-os tápról is kapott tápfeszültséget, 1-1 diódán keresztül. Az 5V-os táp oldaláról a feszültség meglétét egy NPN tranzisztor és egy portláb felhasználásával ellenőrizni tudom: amikor "elmegy az áram", az AVR ezt érzékeli(lezár a tranzisztor), és kikapcsolja a LED-es kijelzőt meg az összes kimenetet. Az én megoldásomban az AVR megy alvásba, mert az órát továbbra is számlálni kell. 4MHz-es kristályt és 8-as osztást használok, azaz folyamatosan 500kHz-en ketyeg. Egy CR2032 elemmel elmegy ebben a módban kb. 2-3 hónapig...
Következő: »»   728 / 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