Fórum témák
» Több friss téma |
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
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!
Én az MPC23017-re gondoltam. annak 16 portja van. És 16-3 írtam vagyis 13. Vagy félre értettelek?
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.
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?
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! 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.
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).
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.
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
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.
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.
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...
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.
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, --??
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.
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.
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.
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ő:
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...
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...
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
Lehet hogy rossz vezérlőt állítottál be...
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.
Csak a B-vel próbáltad már? Pedig mennie kell.
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...
Bocs, csak most néztem meg a kódot. Talán a PB1-et is kimenetnek kéne állítani a legelején:
|
Bejelentkezés
Hirdetés |