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   622 / 840
(#) killbill válasza csabeszq hozzászólására (») Okt 9, 2014 /
 
Es miert kellene forditasi hiba legyen? Ha a TIMER_FAST_PWM_OCRA_TOP makro definialva van, akkor ez nem lesz forditasi hiba, mert ez csak egy egyszeru fuggvenyhivas ket parameterrel. Esetleg, ha nem TIMER_FAST... lenne, hanem TIMER0_FAST_PWM_OCRA_TOP..., akkor az egyik CPU header-ben deklaralva lenne, mig a masikban nem. Es maris megkapod a forditasi hibat.
Az agybaj reszevel teljesen egyetertek, engem is zavar, amikor ugyanazon gyarto chip-jeiben a modulok teljesen mashogy vannak megoldva. De ezen a probleman nem a C fordito hivatott segiteni. Rengeteg modon lehet ezt kezelni, de szerintem teljesen generalizalni nem lehet.
(#) TavIR-AVR válasza kapu48 hozzászólására (») Okt 9, 2014 /
 
Mi az Arduino eredeti célja?
-> hogy megvalósítsa a physical computing modellt. A környezetből érkező jelre válasz(okat) generáljon és a programozást kivigye a kocka informatika helyett a művészeti projektekbe (Processing -> Wiring -> Arduino). Az hogy van 5 kontroller, az azt jelenti, hogy könnyebb univerzális kódot írni, ami az _ismert_ standard chipekre lefordul, a _kötött_ 8 v. 16 MHz órajel mellett...

Az Arduino kialakulása és a családfája...
A hozzászólás módosítva: Okt 9, 2014
(#) pajti2 hozzászólása Okt 10, 2014 /
 
Sziasztok! Van valakinek olyan tapasztalata, hogy pic-et és atmegá-t kötni össze spi buszon? Amennyire adatlapon ellenőrizni tudom, a mode1 és mode3 kompatibilis tud lenni atmegánál. Ha valaki csinálta már, ellenőrizném az elméletet.
(#) killbill válasza pajti2 hozzászólására (») Okt 10, 2014 /
 
Az SPI busz egy Motorola szabvany, tehat ha a ket mikrokontrollerben szabvanyos az SPI, akkor siman osszekothetoek. Persze azonos modban es a megfelelo sebesseggel. Ezt altalaban a SLAVE hatarozza meg, tobbnyire az a lassabb.
(#) steelgoofy hozzászólása Okt 10, 2014 /
 
Szeretném kideríteni, hogy van e lehetőség arra hogy egy STK500 programozón keresztül adatokat írassak ki soros monitorra egy atmega chipről ?
(#) rikko hozzászólása Okt 10, 2014 /
 
Sziasztok!

Lenne egy olyan problémám, hogy csinálnék egy CO2 monitort ehhez tegnap megjött a cellám:
Bővebben: Link

Mandarin nyelvtudásúak előnyben . Van rajta Vcc GND Ao Do és TCM. Na mint megtudtam a TCM a temperature compensation port. Bármit is jelentsen.
Rákötöttem a cellára az 5V-ot arduino uno-n keresztül ( az uno-t 9 V 2A külső tápellátáson tápláltam) és az analog kimenetét. Néztem(uno-n keresztül), hogyan alakul a kijövő feszültség (ugye a 0-5 V) és sajnos azt tapasztaltam, hogy 0,86-1,2 között ugrál, elég vehemensen. Így mérésre használhatatlan, mert a szenzor adatlapja szerint:
Bővebben: Link
csak 0-50mV változást kellene mutatnia. Sajnos amikor tized voltokat ugrál akkor ezt nem lehet észrevenni.
Levettem az analog lábat az A0 ról és láttam, hogy a simán terheletlen az A0 pin 4,6 és 5V között ugrál (hasonló vehemenciával). Gondoltam meghalt a kártya. Rátettem egy másik szondát (talajnedvességmérőt
Bővebben: Link
Na ezen szög stabilan jöttek az adatok. (Ugyan úgy A0-án) Ebből arra következtetek, hogy az uno-m mégsem halott.

Megmértem a feszt a cellán az analog kimenetet. Láttam, hogy 1,111V. Ráfújtam (abban reméltem van CO2 ) és láttam, hogy lement 1,080V-ra vagy tán még lejjebb.

Ennek örültem, mert azt gondolom akkor valamire mégis jó lehet a cella. A kérdés csak az, hogy hogyan tudnám detektálni és stabilizálni a feszmérést?

Üdvözlettel:
Rikko
A hozzászólás módosítva: Okt 10, 2014
(#) pajti2 válasza rikko hozzászólására (») Okt 10, 2014 /
 
Hogyan küldted be a jelet az atmegába? A katalógus lap szerint nagyimpedanciás erősítővel le kellene választani. A feszmérőd lehet vagy Mohm. Az atmega közvetlen AD bemenete szerintem kevesebb.
(#) rikko válasza pajti2 hozzászólására (») Okt 10, 2014 /
 
Csak simán bekötöttem az analog kimenetét az uno A0-jára és analog.read-del néztem, hogy mit csinál (meg átváltottam V ra).
Amit furcsálok, hogy ha csak magát az "üres lábat" nézem akkor is eléggé ugrál 4,6 és 5V között.
Szóval azt mondod, hogy nem lehetne direkt kötnöm a kártyára? Hasonló cuccokat találtam ott ezt nem írták (rajzolják ):S
pl.:Bővebben: Link Bővebben: Link
A hozzászólás módosítva: Okt 10, 2014
(#) pajti2 válasza rikko hozzászólására (») Okt 10, 2014 /
 
Kapcsolási rajzot így hirtelen sehol sem találtam, de a második linkedről idéznék a weblapról
Idézet:
„Essentially the circuitry includes a LMC662 operational amplifier for voltage and impedance matching and a stabilised 6 volt output”
- szerintem nem véletlen.

Amit fentebb írtál, hogy megmérted a feszt a cellán - gondolom valami digit multiméterrel. Ha azzal működött, arduinoval meg nem, az impedancia erősen gyanús tényező.

Amit próbálj ki:

Az arduinod bármilyen tápon is van, az ő tápjára rákötsz egy bc182-es kollektort, az emitterét az ad bemenetére (amivel eddig mérni próbáltad), és az emittert 10k-s ellenállással gnd-re is. A tranzisztor bázist pedig csupaszon ráadod az eszköz B kimenetére (semmi ellenállás, csak csupaszon oda neki). Az eszköz A kimenetét gnd-re kötöd (szerintem eddig is oda kötötted). Gyors impedancia-illesztés gyanánt, ha éppen nincs műveleti erősítőd kéznél, vagy nem akarsz azzal vacakolni. Emberi számítás szerint nem fog elfüstölni semmi sem.

Szerk.: Apropó a linken a folytatásban azt is írják, kell neki a 6V ahhoz, hogy működni tudjon. Ha a kimeneti fesz már stabil, és épp csak nem illeszkedik a karakterisztikához, szedj majd valahonnét 6V-ot az 5 helyett. Ha mást nem, lehet kapni kicsi 6V-os trafókat, az eszköznek váltófeszt is adhatsz, nem kell neki egyen, az a fesz csak fűteni van ott - szerintem.
A hozzászólás módosítva: Okt 10, 2014
(#) rikko válasza pajti2 hozzászólására (») Okt 10, 2014 /
 
Köszi.

Szerintem találtam kapcsolási rajzot (bár nekem nem teljesen ez a típus van abban benne van az LMC662 (legalábbis szerintem). A tranzisztoros ötletet remélem ki tudom próbálni, bár valszeg nincs bc182-őm a polcon. Bármilyen NPN jó lenne? Mondjuk a kísérleti útra gondoltam, hogy az emitterre előtte rámérek, hogy tényleg csak 5V-e.

Szerk: a tápjára a rákötést a úgy gondolod, hogy a lapról veszem (ami 5v) vagy ami előtte van (9V) ? Az emitter 10K ellenállását a GND-re is gondolom a lapra gondoltad. Bocs az értetlenségemért.

Ennek a másik fel (nem a két tűs az nem egy műveleti erősító? Mert olyanom éppen van otthon. Bár nem tudom, hogy mit kéne kötnöm a két tüskére (elöl, a "villa" helyére).
A hozzászólás módosítva: Okt 10, 2014
(#) rikko válasza rikko hozzászólására (») Okt 10, 2014 /
 
Hát ez nagyon jó nem küldte el a módosítást.
Szóval ennek a másik fele: Bővebben: Link
És még annyit írtam, hogy a TCP láb mint hőmérséklet kompenzátor nem lehet, hogy be kéne kötnöm? Vagy kéne vele valamit csinálnom. Rámértem és 3,2 V-ot mutatott.

Link javítva.
Használd a link gombot!
-moderátor-
A hozzászólás módosítva: Okt 10, 2014
(#) pajti2 válasza rikko hozzászólására (») Okt 10, 2014 /
 
A tranzisztoros tipp semmi egyéb, mint egy sima emitter követő alapkapcsolás. Ha van műveleti erősítőd bekötve impedancia leválasztónak, akkor működnie kell. Ha nem működött, nincs tippem. Ha van működő kapcsolás, vissza kellene fejteni róla a kapcsrajzot.
(#) ToMmY_hun hozzászólása Okt 12, 2014 /
 
Sziasztok!

Lenne egy kérdésem, ami nem teljesen illik a topic témájához, de talán a meglévők közül itt lenne érdemes feltenni.

Van egy T-bird 2 fejlesztőpanelem, ami pár napja tönkrement. A konkrét probléma az, hogy az USB -> UART átalakító FTDI (FT232RL) chippel nem kommunikál a PC. Felismeri és az eszközkezelőben kiírja a típusszámot, de ennél többre nem jutok vele. A panelen kettő darab ilyen chip is van, egyik a programozóval, másik az Atmega128-cal való kommunikációra. Az érdekessége a dolognak az, hogy egyik chipet sem ismeri fel a gépem.
Mielőtt azt gondolnátok, hogy driver probléma mondanám hogy nem az, mert másik T-bird megy ezen a gépen és másik gépen sem megy az enyém, holott egy másik pedig igen. Az eszköz szállítás közben ment tönkre, a gyári papírdobozában vittem be a suliba és akkor adta meg magát. Esetleg valakinek lenne bármilyen ötlete, hogy mi mondhatta be az unalmast a panelen? Az Atmega128 tökéletesen működik, az utoljára rátöltött program fut rajta.

Köszi előre is a segítséget, remélem lesz tippetek.
(#) videokartyab hozzászólása Okt 13, 2014 /
 
Sziasztok

Van egy USB AVRJtag ICE programozóm, konkrétan ez.
A kérdés az hogy működne ez Atmega 16A-val is vagy csak 16 és 16L ?
(#) kiborg válasza videokartyab hozzászólására (») Okt 13, 2014 /
 
IGEN.
(#) videokartyab hozzászólása Okt 14, 2014 /
 
Volt már valakinek dolga PGA 2311-es digitális hangerőszabályzóval?
Atmega 16-al próbálom vezérelgetni de nem jutok egyről a kettőre.
(#) killbill válasza videokartyab hozzászólására (») Okt 14, 2014 /
 
Nem tunik bonyolultnak. Mi a gond?
(#) videokartyab válasza killbill hozzászólására (») Okt 15, 2014 /
 
A datasheetje szerint összeraktam, de össze vissza szólal meg(random magától).
Arra gyanakodok hogy kinyírtam az atmegát mert pl futófény csak belső oszcillátorról akar menni ha átkapcsolom a kvarcra akkor elmegy félig és megáll(szóval nem 100-as).
Vagy ez valami más gondra utal ?
(#) killbill válasza videokartyab hozzászólására (») Okt 15, 2014 /
 
Hogyan van megepitve? Van egy fenykeped rola?
(#) videokartyab válasza killbill hozzászólására (») Okt 15, 2014 /
 
Kb így van összerakva.
A +-5V pedig két tápból van összepakolva és két kondiból.
(#) killbill válasza videokartyab hozzászólására (») Okt 15, 2014 /
 
Hat.. nem eppen egy telifoldes nyák.. Ha az SPI kommunikaciora gyanakszol, akkor azt megteheted, hogy megnezed, hogy mi jon vissza a szabalyzo chip-bol. Mondjuk kikuldesz neki 4 byte-ot (pl: 0x55aaffff) es megnezed, hogy mi jott vissza. Elvileg 0xxxxx55aa kell visszajojjon belole. Az elso negy x az elozoleg beletoltott hangero ertek kell legyen. Mekkora SPI orajelet hasznalsz?
(#) videokartyab válasza killbill hozzászólására (») Okt 15, 2014 /
 
Aszt hiszem 16-os osztásban van jelenleg szóval 16Mhz/16=1Mhz.
A 2311 datasheet 6,25MHz-et ír szóval bőven alatta vagyok.
Még csak ismerkedek ezzel az SPI-os dologgal, jelenleg így néz ki a kód amivel dolgozom.
Elvileg ennek már meg kéne szólalni nemde?

spi.JPG
    
(#) vzoole válasza videokartyab hozzászólására (») Okt 15, 2014 /
 
A chip 16 bitet vár (jobb-8bit, bal-8bit), nem tudom mit szól csak 8 bithez.

Ehhez át kéne írni az SPIreadwrite függvényt, hogy 2 byte-ot küldjön egymás után.
(#) killbill válasza videokartyab hozzászólására (») Okt 16, 2014 /
 
Ugy van, ahogy vzoole mondja. Alkalmankent 16 bitet kell irni a chip-be ugy, hogy kozben a CS vegig low maradjon.
(#) Trubica hozzászólása Okt 16, 2014 /
 
Sziasztok!

Egy kis segítségre lenne szükségem. Egy Mz ETZ motorra tervezek elektronikus gyújtást, egy 40 osztásos enkóder és egy AVR segítségével.

Amiben bizonytalan vagyok, hogy az enkóder a motorblokkban, a gyújtásvezérlő az ülés alatt bedobozolva található, és a kettő közötti távolságot hogy tudnám áthidalni. Konkrétan nem tudom hogy a gyújtás szikrája mennyire zavarná az adatátvitelt.

Kábelnek árnyékolt riasztó kábelt gondoltam, avr mellett opto-kapus leválasztással. Legfeljebb 30 KHz-es négyszögjelet kéne átvinnie. Szerintetek ezt még elviselné (kb 1 m-es vezeték) ?
(#) TavIR-AVR válasza steelgoofy hozzászólására (») Okt 17, 2014 /
 
Igen, ha:
a,
- firmware-t kicseréled egy SPI->soros fordítóra
- AVR oldalon nem a soros, hanem a SPI buszra írsz.

b,
- STK500 processzorát RESETbe rakod
- Az USB illesztő Tx/Rx lábát, GND-t összekötöd az AVReddel.

Mindkét megoldás barkács
(#) TavIR-AVR válasza Trubica hozzászólására (») Okt 17, 2014 /
 
Árnyékolás, az AVR bemeneten 5V1-es zenerrel szűrés, prellmentesítés. Optokapi felesleges.
A 30kHz hogyan jött ki?
Mechanikus az enkóder? Nem lesz hosszú életű... Rázkódás, nagyszámú kapcsolás miatt...
(#) Trubica válasza TavIR-AVR hozzászólására (») Okt 17, 2014 /
 
Köszi! Akkor kicsit egyszerűbb lesz.

Az enkóder házi építésű optikai, 40-es osztású tárcsával. A 30 khz az tényleg nem ide jön. Valóban 6,7 kHZ 10000-es fordulaton. Prellmentesítés szoftverből.

Még annyi, hogy a fordulatszámmérőt és a kilométerórát kibeleztem és raktam bele egy-egy rc szervót. Ezt is az ülés alól kéne irányítani. Kicsit hosszabb is a vezeték. 50 Hz pwm.

Ide szerinted kell opto, vagy elég egy tranzisztor?
(#) Droot hozzászólása Okt 17, 2014 /
 
Sziasztok!

Nem boldogulok a MAX31855-el.
Szeretném sorosporton a hőmérsékletet kiíratni. 2 tizedes pontosan, a belső hőelemét és a k típusú hőelemét is. Teljesen értelmetlen értékeket kapok...

Az alábbi teszt programot írtam:
  1. PORTB &=~(1<<PB0); //MAX6675_CS_ENABLE;
  2.                 b1  = spi_readwrite(0x00);
  3.                 b2 = spi_readwrite(0x00);
  4.                 b3 = spi_readwrite(0x00);
  5.                 b4 = spi_readwrite(0x00);
  6.     PORTB |= (1<<PB0); //MAX6675_CS_DISABLE;
  7. USART_SendByte(0x01);
  8. USART_SendByte(b1);
  9. USART_SendByte(0x02);
  10. USART_SendByte(b2);
  11. USART_SendByte(0x03);
  12. USART_SendByte(b4);
  13. USART_SendByte(0x04);
  14. USART_SendByte(b4);


A csatolmányban lévő értékeket kapom.
Csak "kézzel" szedtem ki a biteket, és átváltottam decimális számmá, de pl 4110 jött ki a k elem hőmérsékletére, ezt ugye még el kell osztani 4-el, de így is teljesen rossz érték jön ki, mert szobahőmérsékleten tesztelem.

Van ötletetek, hogy hogy írjam meg hogy elküldje sorosporton a helyes értékeket?

Próbáltam saját kútfőből, de hülyeség jött ki így is. (13 fok...)
  1. data = spi_readwrite(0x00);
  2. data <<=8;
  3. data |= spi_readwrite(0x00);
  4. data <<=8;
  5. data |= spi_readwrite(0x00);
  6. data <<=8;
  7. data |= spi_readwrite(0x00);
  8. if (data & 0x10000) USART_putstring("Hiba!");
  9.  
  10. else
  11.  
  12. {
  13.  
  14.         th = ((data >> 18) & 0x3fff);
  15.         if (th & 0x2000) th |= 0xC000;
  16.     th = th + 2;                  // round up by 0.5 degC (2 LSBs)
  17.  
  18. //th=th/4;
  19.  
  20.  
  21. sprintf(str,"tmp: %d",(int)th);
  22.  
  23.  
  24.         USART_putstring(str);
A hozzászólás módosítva: Okt 17, 2014
(#) killbill válasza Droot hozzászólására (») Okt 17, 2014 /
 
Mondjuk a teszt kikuldesnel b3 helyett b4-et kuldesz...
Következő: »»   622 / 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