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   458 / 840
(#) atmelke hozzászólása Júl 17, 2012 /
 
Sziasztok!

Gyors segítségre lenne szükségem egy határidős munkához. 74LS247-eket kellene meghajtani Atmega 168-cal. Szépen el is készült az áramkör, viszont az áramfelvétel magas, a BCD/7 szegmens átalaktó melegszik veszettül, a szegmensek villognak és hülyeségeket látok a kijelzőn. A feszültségszintek rendben vannak az LS247 bemenetein.
Bármilyen ötletet szívesen várok.

Köszönöm, üdv!
(#) blackdog válasza TavIR-AVR hozzászólására (») Júl 17, 2012 /
 
Én az MPC23017-re gondoltam. annak 16 portja van. És 16-3 írtam vagyis 13. Vagy félre értettelek?
(#) blackdog válasza blackdog hozzászólására (») Júl 17, 2012 /
 
Sziasztok!

Továbbra is küzdök a port bővítéssel. Akár mit is olvasok úgy érzem, hogy SPI az én barátom Shift Register-rel és ha kell plusz egy kissebb AVR-el. Viszont kicsit megakadtam az SPI-vel.
Ahol kimenetet szerenék bővíteni, ha kell ott 74HC595-t használnék. Ennek a kimenetei csatlakoznának egy ULN2804 tranzisztor mezőhöz ami vezérlene 8db relét.
A gondom ott van, hogy nem iazán értem az SPI működését. Az oké, hogyha 1-1 relét kell bekapcsolni, de hogyan működik, ha 4-5 relé kell, hogy bekapcsoljon?
Jól értem, hogy SPI-n keresztül gyakorlatilag az órajel függvényében változnak a kimenetek? Oké, hogy pl. 16MHz elég gyors még, ha 64-el osztom akkor is, de ezek szerint a relék valamilyen frekvenciájú feszültséget fognak kapni?
A másik ami nem tudom, hogy hogyan lenne a legjobb az az, hogy az AVR programozásakor ne induljon el a regiszter és egyéb ide kötött IC-k. Pl. két AVR-t kötök össze SPI-n az bonyadalnat okoz programozáskor. Segítsetek eloszlatni a ködöt és a felhőket.
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 17, 2012 /
 
Igen, félreértettél...

Az AVR-en 3 lábat elvisz, és kapsz 16-t.

Vagy úgy érted, hogy "plusz 13 lábat kaptál az eredetihez képest?
(#) zombee válasza blackdog hozzászólására (») Júl 17, 2012 /
 
Az alap shift regiszter valóban úgy működik ahogy leírod: egy órajelimpulzus(pontosabban felfutó él) hatására
a kimenetek tartalma "odébblép" 1-el. Tehát a Q0->Q1, Q1->Q2, stb... A Q0-ba bekerül a DATA(MOSI)
vezetéken lévő adat, a Q7 tartalma pedig "elvész", hacsak nincs rákötve a következő shift regiszter bemenetére.

Ez a fajta megoldás NAGYON RITKA, mert néhány speciális alkalmazást leszámítva használhatatlan!
Pont azért amit leírtál: léptetés közben a relék "recegnek", nemkívánatos eredményt produkálva.

A "tárolós shift regiszter" annyiban jobb, hogy a shift regiszter kimenete léptetés közben nem változtatja meg az IC kimenetein lévő állapotot. Tehát léptetheted akár 1Hz-el is, semmi nem fog történni!

A shift regiszter kimenete csak az IC STORE bemenetére adott impulzus(felfutó él) hatására
íródik be a kimeneti tárolóba. Még van egy /OE(output enable) bemenet, ezt ha földre kötöd,
azzal kapcsolod be a kimenet meghajtását, egyébként Hi-Z lesz az összes kimenet. A /MR(master reset)
földre húzásával törlöd a shift regisztert és a kimeneti tárolót is. Ezt érdemes a tápra(VCC) kötni.
A Q7* a shift regiszter közvetlen kimenete, erre kell kötni a következő shift regiszter DATA bemenetét.

Az IC adatlapjában más nevek, jelölések lehetnek(gyártófüggő!), de a lényeg ugyanaz!
(#) blackdog válasza TavIR-AVR hozzászólására (») Júl 17, 2012 /
 
Idézet:
„Vagy úgy érted, hogy "plusz 13 lábat kaptál az eredetihez képest?”

Igen.

zombee
Köszönöm a választ. Próba panelen kipróbálom a működését és szkóppal figyelem majd. Így tudok a legtöbbet tanulni belőle. Legalább örülök, hogy nem volt teljesen hülyeség a kérdésem.

Már csak a programozási problémát nem tudom megoldani elméletben.
(#) zombee válasza zombee hozzászólására (») Júl 17, 2012 / 1
 
Folytatom!

Használat AVR-el:
- DATA: MOSI
- CLK: SCK
- /MR: tápra
- /OE: földre
- STORE: bármely portláb az AVR-en(kivéve MISO). Csak megsúgom hogy a /SS-re kösd...

Ez utóbbit ha egy lehúzó ellenálláson(~10kOhm) keresztül a földre kötöd, programozás közben,
illetve a programod elindulásakor nem fogja megváltoztatni a kimenetek értékeit.
Még lehet a /MR-t összekötni az AVR /RESET lábával(de akkor ne kösd tápra), így programozáskor lekapcsol.
A /OE-t pedig felhúzó ellenállással rákötheted a földre, és az AVR valamelyik portlábára. Ennek hatására
programozáskor és ameddig nem állítod be(programból), a shift regiszter kimenete inaktív lesz.

A MISO-ra ne köss semmit ha hardveres SPI-t szeretnél használni!
/SS: a hardveres SPI csak akkor fog megszólalni ha kimenetnek állítod be(DDR) és "lehúzod"(PORT).
(#) Reggie válasza TavIR-AVR hozzászólására (») Júl 18, 2012 /
 
Semmi gond.

A szabvanyban nincsen semmilyen 9600 bit/s. A vezetektol fuggoen, de 100 kbit/s a korlat ekkora tavon. Javaslom olvasd el a TIA TSB-89-es doksit.
(#) pogany.tamas válasza pogany.tamas hozzászólására (») Júl 18, 2012 /
 
Na mint kiderült, user error a dolog, ugyanis miután beprogramoztam (jól) külső kristályra, azt nem tudtam, hogy a kristály nélkül még programozni sem lehet
(#) zombee válasza Reggie hozzászólására (») Júl 18, 2012 /
 
A szabvány tudtommal csak a fizikai formátumot, jeleket írja le. Aztán a hálózat mérete, minősége, na meg a zavarok és a hibatűrő képesség, robusztus igények alapján eldöntheti bárki hogy milyet használ.
(#) zombee válasza pogany.tamas hozzászólására (») Júl 18, 2012 /
 
Hát igen, ez nem PIC.
Én is befürödtem amikor PIC-es áramkört kellett javítanom, és csak azért suhantam át a zárlatos kristály
felett mert programozni simán engedte magát. El is vett 2-3 órát munkaidőmből mire rájöttem.
(#) TavIR-AVR válasza Reggie hozzászólására (») Júl 18, 2012 /
 
Köszönöm a javítást . Tényleg ... Valami régebbi doksit leltem ezek szerint...


Tanulásként és tippnek egy RS485 leíró doksi...

rs485.pdf
    
(#) blackdog hozzászólása Júl 18, 2012 /
 
Sziasztok!

Még mindig variálok a portbővítéssel. Vagy még egy AVR vagy 2db 74hc597. Mind két esetben SPI kommunikáció. A 74hc597 az a gondom, hogy nem tudom lehet-e kettőt összekötni. Szükségem van a +16 input portra. Ha még egy AVR-t teszek be ott sem nyerek fizikai méretet (helyet) és még a programozás is 2x kell és a programozáskor a lábakat még külön is kell választanom ami plusz macera. Segítsetek a legjobb megoldás megtalálásában.
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 18, 2012 /
 
Hehe

Egyéb ötletek:
1, Tegyél be egy másik 40/44 lábú AVR-t.
És SPI/I2C-n kössed össze őket... És persze INT

2, Cseréld ki a központi chipedet 1280/2560 -re. Így alapesetben 84 I/O lábad van.

3, I2C, SPI bővítőchipek + INT

4, Sorbafűzhető (daisy chain) shiftregiszterek, ekkor polling...

5, --??
(#) huba válasza blackdog hozzászólására (») Júl 18, 2012 /
 
Tudom ajánlani a microchip MCP23S17-es portbővítőjét. Nagyon bevált. És nem is drága. Konfigurálható ki és bemenet, interrupt opciók.
(#) zombee válasza blackdog hozzászólására (») Júl 18, 2012 /
 
Ha nem kell interrupt(tehát jelszint-váltás detektálás) akkor jó a shift regiszter.
Bármennyit fel tudsz fűzni egy láncra, mert a shift regiszter részének van be-és kimenete is.
Itt ugye a Q (kimenet)lábat kötöd az AVR-re(MISO), a második shift regiszter Q lábát az első Ds bemenetére.

Ha interrupt kell akkor I2C-n PCF8574 kell, ez 8 bites, a címtartománya 4 bit, összesen 16-ot tudsz kezelni.

Ja és az AVR (nagyobbra) cseréje is opció lehet.
(#) blackdog válasza TavIR-AVR hozzászólására (») Júl 18, 2012 1 /
 
Tudom, hogy legszebb öröm a káröröm, de én most nem vagyok kisegítve. ATMEGA32 TQFP44 IC-t használok jelenleg és ezt kell még bővítenem. Tudom, hogy nagyobb chip a legeszerűbb, de nem vállalom be a nagyobbat. Nekem ezt is épp elég gond forrasztani. Ezért abból építkezem amim van. Arról nem beszélve, hogy kölségekben jobban járok port bővítéssel mit "big" chippel.
Ennek tükrében van esetleg használható ötleted? Hálás lennék.
(#) Robi98 hozzászólása Júl 18, 2012 /
 
Sziasztok!
Szeretnék írni egy olyan programot ATtiny45-re hogy a Timer 0 A-csatornájára kötött LED-nek a fényereje ellentétesen változik a B-csatornájára kötött LED fényerejével. Ellenben az lett a megoldás hogy az A-csatornára kötött LED fényereje ugyanúgy nő-csökken ahogy kell (talán egy kicsit több ideig) a B-csatornára kötött led pedig teljesen sötét.
A kód a következő:
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. int main(void)
  5. {
  6. DDRB|=(1<<PB0);
  7. TCCR0A=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  8. TCCR0B|=(1<<CS01);
  9.  
  10. TCNT0=255;
  11. OCR0A=0x00;
  12. OCR0B=255;
  13.  
  14. while(1)
  15. {
  16. while(OCR0A<255)
  17. {
  18. TCNT0=0x00;
  19. OCR0A++;
  20. _delay_ms(15);
  21. }
  22. while(OCR0B>0)
  23. {
  24. TCNT0=0x00;
  25. OCR0B--;
  26. _delay_ms(15);
  27. }
  28. while(OCR0B<255)
  29. {
  30. TCNT0=0x00;
  31. OCR0B++;
  32. _delay_ms(15);
  33. }
  34. while(OCR0A>0)
  35. {
  36. TCNT0=0x00;
  37. OCR0A--;
  38. _delay_ms(15);
  39. }
  40.  
  41. }
  42. }
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 18, 2012 / 1
 
Igen, mint már írtam:
1, I2C busz:
PCF8574 (8 bites ki/bemenet, a bemenetváltozást INTerrupton jelzi); 8 db fűzhető egy buszra

2, I2C busz:
MCP23017 / MCP23016 (ezek 16bites, összevissza konfigurálható portbővítők, INT változásjelzéssel); 8db lehet egy buszon

3, I2C busz:
MCP23008 (ez 8bites, összevissza konfigurálható portbővítők, INT változásjelzéssel); 8db lehet egy buszon

4, I2C busz:
Másik AVR chip (master/slave mód). A protokoll a Te kezedben van. Az AVR szabad IO lábszáma -3 láb használható (I2C + INT) Van benne portbővítő, ADC, Timer stb

5, SPI busz
shiftregiszter, pollingozással. Korlátlan bővíthetőség.
Bemenetfigyelés INT alapon egyeseknél van. Nem teszteltem

6, SPI busz
MCP23S17 16 láb, INT a változásra
SPI: 3 láb + 1 Chipselect vagy van I2C szerű belső SPI-s címzése is

7, SPI busz
Másik AVR chip (master/slave mód). A protokoll a Te kezedben van. Az AVR szabad IO lábszáma -4 láb használható (SPI + INT) Van benne portbővítő, ADC, Timer stb

8, 1Wire busz
DS2408 8 bites bővítő, AVR oldalon 1 Dallasbusz láb + 1 INT. Korlátlan darabszámú felfűzhető 30 méteren

9, 1Wire busz
DS2413, DS2406, DS24xx - portbővítők. 1-2-4-8 ki/bemenetek

10, 1wire busz
Másik AVR chip (slave mód). A protokoll kötött. Az AVR szabad IO lábszáma -2 láb használható (1Wire (INT(?)) + INT) Van benne portbővítő, ADC, Timer stb

Ennyi elég? de ezek 70% már volt...
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 18, 2012 /
 
Illetve ugyanilyen lábtávolsággal van a Mega128-as TQFP64.
Esetleg DIP40-es tok: Mega16/32/644/644P/1284P

DIP40 tok alá befér 2-3 TQFP44-es . Itt a nyák lesz szép sűrű huzalozású. Én ezt gyártatnám, lötstoppal... Vasalós + SMD forrasztósan ez már nem tetszik...
(#) sgt válasza Robi98 hozzászólására (») Júl 19, 2012 /
 
Szia!

Próbáltad már sima PWM-ként?
(#) Robi98 válasza sgt hozzászólására (») Júl 19, 2012 /
 
Tehát fázishelyes PWM-el?
(#) zombee válasza Robi98 hozzászólására (») Júl 19, 2012 /
 
Szerintem sima, Fast PWM-et csinálj!
(#) kiborg hozzászólása Júl 20, 2012 /
 
Hali!
AVRStudio-val programoznék C-ben. (4.14)
Megírok egy egyszerű programot, lefordítom, ekkor jelez X darab warningot, ha csak lefordítom újra, akkor meg már nem warningol. Ez miért van? Lehet ellene tenni?
Maga a programot, ha letöltöm, működik. NEM csak szimulálom.
Üdv Kiborg
(#) mzozo95 válasza kiborg hozzászólására (») Júl 20, 2012 /
 
Lehet hogy rossz vezérlőt állítottál be...
(#) kiborg válasza mzozo95 hozzászólására (») Júl 20, 2012 /
 
Nem, jó típus van beállítva.
(#) Robi98 válasza zombee hozzászólására (») Júl 20, 2012 /
 
Azt csináltam.
Gyors PWM-et állítottam be (WGM00=1, WGM01=1) és csak az OCR0A és OCR0B értékét növeltem/csökkentettem mindkét esetben, de csak az A csatornára kötött led (OC0A) csinálja azt amit kell. A másik egyáltalán nem világít.

Továbra sem tudom, hogy mi lehet a hiba.
(#) sgt válasza Robi98 hozzászólására (») Júl 20, 2012 /
 
Csak a B-vel próbáltad már? Pedig mennie kell.
(#) zombee válasza kiborg hozzászólására (») Júl 20, 2012 /
 
Hááát, a 4.14 nem a legújabb(nálam 4.19 van), de a jelenség ismerős - ez bizony AVR Studio bug,
és frissítéssel sem fog elmúlni! Én már megtanultam élni vele: csak akkor jön elő, ha SEMMIT nem változtatsz
a kódon és úgy fordítod újra. Ha már kap egy szóközt, a warningok ottmaradnak a helyükön.
Érdemes mindegyikkel foglalkozni(és nem újabb F7-el eltüntetni) mert utána mehet a fejvakarás...

Van néhány másik, jóval idegesítőbb bug is. Egyik, amikor a vágólapot úgy használom hogy a CTRL-t végig
benyomva hagyom, és nem csak beillesztgetek hanem törlök is egész sorokat vagy bekezdéseket: kifagy!
A másik pedig fordításhoz kapcsolódik: hiába kattintok az error vagy warning résznél, nem ugrik oda.
Ez utóbbin egyébként az AVR Studio újraindítása mindig segít, de kifagyásnál a kódot nem menti...
(#) zombee válasza Robi98 hozzászólására (») Júl 20, 2012 /
 
Bocs, csak most néztem meg a kódot. Talán a PB1-et is kimenetnek kéne állítani a legelején:
  1. DDRB|= (1<<PB0) | (1<<PB1);
Következő: »»   458 / 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