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
Üdv!
Megint sikerült valami érdekesbe ütköznöm. Írtam egy makrót, ami 2x szépen le is fut, de a 3. alkalommal mintha szimplán átugraná.
A kód HyperTerminalban ezt írja ki: Idézet: „USART Ready SPI Ready Int Enabled 80clk pulse done CMD0 i = 0 R1 = 1 IDLE_STATE Next CMD CMD1 i = 0 R1 = 1 IDLE_STATE CMD1 i = 1 R1 = 0 SD_Init Completed Waiting for 0xFE ff ff ff ff ff ff ff ff ff ff f f ff ff ff ff ff ff ff ff ff f f ff ff ff...” A kérdéses rész a while(1)-ban található SD_CMD_Loop(18,0,0xFF,0); sor. Mintha teljesen átugraná. SB
Köszi. Ez nem az amit kerestem. A PWM megy. Az a metódus érdekel ami kiegyenlíti a környezeti megvilágítás változását. Talán PID szabályzónak hívják? No, majd így keresem.
Azért letöltöttem. A hozzászólás módosítva: Ápr 20, 2014
Megvan a hiba.
Rossz helyen volt az R1 újradefiniálása.
Azert van itt meg hiba. Legfokepp a makrok definialasanal.
A pontosvesszo a makrodefinico vegen nem kell, viszont neha meglepo dolgokat eredmenyez. Pl a kovetkezo kodreszlet hibaval fog fordulni:
A masik, hogy jobb ha megszokod, hogy minden ilyen jellegu makrot bezarojelezel. Ha pl. azt irod egy makroba, hogy: #define VALAMI 2 + 3 Aztan kesobb a programban azt irod, hogy valtozo = VALAMI * 3; akkor a varttal ellentetben nem 5*3, hanem 11 lesz a valtozo erteke.
USART0_TX_String("PARAMETER_ERR");
USART0_TXD(9); helyett irhatsz: USART0_TX_String("PARAMETER_ERR\t"); 10 es 13 kikuldesere a USART0_TX_String("\n\r"); Persze a szoveg vegen nem kell kulon irni, irhatod egybe is: USART0_TX_String("Ennek a szovegnek a vegen lesz egy CR LF\r\n"); A hozzászólás módosítva: Ápr 20, 2014
Köszönöm az eddigi segítséget, valóban a CKDIV8-at felejtettem el kipipálni.
Én naívan meg azt hittem, hogy innét kezdve minden probléma megoldódott. De most meg USART-tal szívok már egy ideje. SN75176-ot raktam RS485 buszmeghajtónak rá és programból adnám ki neki a busz írásának engedéylezését.
Ahogy a képen is látszik az AVR Tx lábán ott a kiküldött adat, de a TXC1 bit egyből jelzi,hogy végzett az adat küldésével és így az engedélyező lábon csak egy tüske jelenik meg. A busz túloldalán meg semmi az Rx vonalon. Ezek szerint a shift regiszter kiürülése nem egyszerre történne a frame létrehozása? Mert akkor se a TXCn sem pedig az UDREn bit nem használható fel a tényleges adatküldés befejezésének észlelésére.
Nem lehet, hogy az a baj, hogy nem torlod a TXC1 bitet? Egyszer bebillen es utana ugy is marad, amig nem fut le a Transmit Complete interrupt, vagy amig le nem torlod.
Torles: UCSR1A = (1 << TXC1);
De az könnyen előfordulhat. Bíztam benne hogy ez is olyan bit ami kiolvasáskor törlődik.
A megszakítást meg pl egyáltalán nem sikerült életre keltenem. TXIE be van állítva SEI() is megvolt de egyszerűen nem hívódik meg a megszakítás vektor. Adatlapban mintha olvastam volna valamit, hogy TXC bit kell ahhoz is de az akkor nem automatikusan generálódik?
Az adatlap szerint a global interrupt-ot kell engedelyezned es a TXCIE bitet a UCSRxB-ben. Ezek utan jonnie kell a megszakitasnak, ha kikuldte a byte-ot.
Szisztok!
AVR-es szenzorpárosítás kérdés. Remélem megállja itt a helyét. Ha nem, előre is elnézést. Van egy nyomás mérő szenzor, amit AVR-el párosítottam. A szenzor tápfeszültsége 2,2 és 3,6V között lehet. Ez rendben is van, mert 3V-os stab ic-n keresztül táplálom. Az AVR ugyanakkor 5V-ról megy. Kommunikáció i2c-n keresztül, felhúzó ellenállás 5V-on. A kérdésem az hogy a későbbiekben okozhat gondot a szenzornak hogy az SDA és SCA lábakon 5V van? (jelenleg szépen megy, nem okoz neki gondot) Vagy alkalmazzak mindenképp feszültségosztást? Köszi a választ előre is. A hozzászólás módosítva: Ápr 22, 2014
A 3V-os chip belső védődiódáját használod fesz. illesztésre. Nem egészséges. Ezen névlegesen 0.1mA mehet (ökölszabály). A SCL/SDA-ra meg a 10k felhúzó halovány lenne....
Szintillesztő kellene....
Még jó hogy megkérdeztem. Valahogy éreztem hogy nem oké így, még ha jelenleg szépen is megy. Akkor csinálok egy szintillesztőt. Egyelőre úgy is csak breadboardon raktam össze, gyorsan meg is tudom hozzá csinálni.
Köszi a választ!
Olvasd el a szenzor adatlapjat! Abban le kell legyen irva a valasz. Ha nincs benne, akkor en nem engednek ra 5V-ot. Van egy egyszeru szintilleszto, azzal viszont megoldhato a dolog. Két FET (FDV301) es plusz ket ellenallas a mar meglevo ket felhuzo mellett.
Üdv
Igaz már kérdeztem,de sajna segitség nem jött. Lehet valaki hozzáértő elsiklott felette. Egy működő programban kellene módositani,. Ha valaki meg tudná oldani ,hálás lennék. Itt a link,a leirás végén letölthető a program. Bővebben: Link Annyit kellene módositani ,hogy a másodperc visszafelé léptessen, 60 tól vissza 0 ig. Persze a perc a 0 után lépne előre. Köszi
Üdv!
Lenne egy elég különleges problémám amire remélem valakinek van egy épkézláb ötlete megoldásként. Atmega32 és 24lc512 eeprom i2c-n keresztül kommunikál. Az i2c library-ban nem lehet gond (ds1307 RTC írható és olvasható ezzel a library-val) mégis egy érdekes hibám van. Az eeprom írását követő i2c stop alatt vagy inkább után megfagy az egész mikrokontroller. Azért mondtam hogy a stop után inkább mert ha nincs benne a stop-ban a twsto figyelése. Tehát csak beállítom a stop-hoz a megfelelő regisztereket az lefut viszont nem ír az eeprom-ba. Ugyebár itt jönne az a pár ms-os várakozás az írási folyamat befejezésére vagy a twsto figyelése. Ha ez benne van akkor írás után megfagy. Ha kiveszem az írást a programból akkor az eeprom-ból visszaolvasva látható hogy beírta. (és olvasásnál sőt más egyéb i2c kommunikációnál nincs gond a stop-al). Egyedül eeprom írásnál fagy meg de maga az írás lefut tökéletesen. Viszont így ilyen formában használhatatlan. Cseréltem mcu-t, eepromot, felhúzó ellenállást, kipróbáltam szoftveresen is scl órajel állítást, f_cpu felüldefiniálást stb. ha valamiért gondja lenne (bár ezen kívül minden tökéletesen megy) ezért vagyok elbizonytalanodva hogy mi lehet a gond hogy csak és kizárólag az eeprom írásnál fagy meg de tulajdonképpen az is végrehajtódik. (Sajnos más típusú eeprom nincs itthon próbálni.) Valakinek ötlet esetleg erre hogy mi okozhatja ezt a fennakadást a működésben? Köszönöm előre is!
Sziasztok!
Én itt új vagyok, és remélem jó helyen kopogtatok. Van több projekt fájlom is avr studióhoz tiny 23-al, meg 25-tel, és nem értek mindent rendesen, emiatt lehet hogy nem is csinálom jól a dolgokat. Szóval ha valamelyikőtöknek volna ideje, hogy egy néhány email váltással megosszam a konkrét problémát, és van türelme egy lámához, kérem írjon nekem. Az emailcímem publikus. Üdv: Szilárd
Üdv!
Épp ezért kérdeztem meg, mert nem volt benne az adatlapban, csak a tápfeszültség értékekre tért ki. A kommunikációnál csak annyit írnak hogy mennyi a max adatátviteli sebesség. Amugy nem kisérletnek szántam hogy szintillesztő nélkül kötöttem be, csak a próbapaneles szerelés közben először LCD nélkül teszteltem a szenzort, és akkor elég volt 3,3V-t az AVR-nek. Aztán jött a 2X16-os LCD, és 5V-ra kellett emelnem, és az i2c-s adatvonalat véletlen nem piszkáltam meg. Akkor szembesültem hogy így is működik, aztán tanácstalan lettem (pláne hogy adatlapban erre nem tértek ki), és utána itt megkérdeztem. A szintillesztőnél az általad megírt fet-es megoldást alkalmazom már jóideje, tehát itt sem lett másképp.
Sziasztok! Egy USB explrorert szerettem volna építeni, felprogramozás után nem működött.
Felraktam a fórumba rakott firmware-jét ahol először 5x vált ledet 1 sec alatt. Miután bedugom a gépbe nem ismerte fel a ledek villogtak rendesen. Gondoltam valami fuse bit hiba lesz, és azt hiszem sikerült external clock-ra állítsam. Hogyan hozhatom vissza?
Van egy ilyen kapcsolásom készen ez nemjó? Bővebben: Link PWM strobi vezérlő, de azt hiszem 12V rol megyen.
A hozzászólás módosítva: Ápr 23, 2014
ATTINY2313 CKSEL0=0 CKSEL1,2,3=1 CKDIV8=0 SUT0=0, SUT1=0
Jelenleg fel nem használva attiny 13A van itthon, holnap csinálok egy foglalatos panelt neki próbanyákon összedobva, irok valami PWM generátort és elvilgeg feléled a 2313 ugye?
Melyik lábára kell a 2313 nak a PWM? Ha külső 12Mhz kristályt használnák, akkor mire kell állítani a fuse biteket? A hozzászólás módosítva: Ápr 23, 2014
Hogy pontosan érthető legyen: CKSEL0=0,CKSEL1=1,CKSEL2=1,CKSEL3=1 szóval igen, most úgy van
Most 12Mhz es van attól függetlenűl mehet a 8 mhz helyette?
Másik AVR rel nem lehet helyrehozni? Mert ilyen IC-t nemigen tudok beszerezni, csak rendelni, és az hosszú idő míg lejön postán, és minél hamarabb kellene a kütyü
Hi zotyaka!
Nem látjuk a kódodat! Ezért nem is tudjuk mi a hiba oka! Viszont az adatlapot nézegetve: 512K I2C™ Serial EEPROM 10. old. 6.1 Byte Write és FIGURE 6-1: BYTE WRITE Leírtak szerint próbálod begyömöszölni a BYTE-ket?
Köszönöm a választ kapu48!
Nos kísérletezgetést követően már annyit elértem hogy 99% esélyt adok arra hogy a write-protection szól bele a dologba. Elméletileg ha lehúzzuk a földre fixen akkor nincs írásvédelem azonban ez nem teljesen igaz legalábbis az én speciális esetemben. Tehát az írás végrehajtódik azonban befagy az egész. Ha az írásvédelem aktiválva van akkor semmi gond, írni nem tudok de úgy olvas mint a kis angyal. Az írásvédelem tehát betette a keresztet most a szakdolgozatomnak olyan formában hogy egyenlőre hanyagolom a külső eeprom-ot és használom a belső 1K eepromot, RFID tag tárolásra az is megteszi, beléptető rendszer eseményeit pedig tárolom egy változóban az atmega-n mind1 csak legyen kész. 1,5 napot tököltem el az eeprom írási gonddal. 100% hogy valamit én rontottam el de hogy mit? Az írás maga:
Tehát ez az adatlap alapján való gyömöszölésnek felel meg. Az I2C kommunikációhoz Peter Fleury I2C library-ját használtam, azonban elkészítettem egy totál fapados verziót is ami csak a minimum igényeket szolgálja ki. Egyikkel sem ment az írás. Mind kifagyott az írás után. Adatlapban azt láttam hogy ez az írásvédelem miatt fordulhat elő, már csak annyi a gond hogy földre van húzva így a WP tiltva van, tehát elméletileg nem szólhat bele.
Az is lehet, hogy túl magas az SCL frekvenciája?
Ha a I2c_Stop-nál akad meg? Próbálj beletenni 1 kiléptető számlálót, hogy ne álljon ott végtelenségig! Valahogy így:
Ha jól gondolom, ez Counter =0-nál kiléptet. Aztán próbálhatsz valami ellenőrző hibakeresést futtatni. Különben működni e kellene. A hozzászólás módosítva: Ápr 24, 2014
Mivel a Te EEPROMod LC típus szerintem a Max FCLK 400Khz lehet!
Adatlap: TABLE 1-2: AC CHARACTERISTICS szerint! Nálad ez menyire van belőve?:
A hozzászólás módosítva: Ápr 24, 2014
Szia!
Iras utan ki kell adni a stop-ot, mert kulonben az EEPROM el sem kezd irni belul. De a TWSTO bitnek ehhez semmi koze. Azt, hogy mikor vegzett az EEPROM az irassal, azt onnan tudod, hogy kikuldesz egy START-ot majd az EEPROM Slave address-et, es ha erre nem kapsz ACK-ot az EEPROM-tol, akkor meg varnod kell. Ezt ismetelgeted addig, amig az EEPROM visszaadja az ACK-ot.
Nem leptet ki counter=0-nal. Sot. ami azt illeti akkor sem mindig lept ki, ha a TWSTO bit mar torlodott, mert aritmetikai vagy kapcsolat van a ketto kozott. Inkabb igy:
Csak ennek a modszernek van egy irto nagy hibaja, megpedig az, hogy fogalmunk sincs rola, hogy mennyi ido utan fog kilepni, hiszen csak azt tudjuk, hogy hanyszor fog a ciklus lefutni, de, hogy az mennyi ido, az rengeteg mindentol fugg. Viszont, ha a while()-ba beteszunk egy ismert ideju hivast (pl: _delay_us(10)), vagy hasonlot, akkor rendben leszunk. De lehet egy globalis timer erteket is figyelni a counter++ helyett, es akkor nem kell kulon varakozo fuggvenyt hivogatni. -- Fuggetlenul ettol, az en emlekeimben ugy el a dolog, hogy a TWSTO bitet soha nem kellett nezni, a STOP ki fog menni, hacsak valaki le nem foldeli az SCL vonalat. Nemreg irtam LPC11xx mikrokontrollerre i2c master/slave driver-t, es abban pontosan ugyanaz az i2c blokk van, mint az AVR-ekben. A STOP kikuldeset nem kell megvarni, interruptot sem ker az i2c logika, amikor kikuldte a STOP-ot. |
Bejelentkezés
Hirdetés |