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   673 / 838
(#) mrbini válasza Kovidivi hozzászólására (») Jún 10, 2015 /
 
Úgy néz ki, hogy megúsztam a program írást. Megoldódott a probléma. Ki kellet kapcsolni az optimalizációt a fordítóban és így működik.

kapu48
A hét végén lesz egy kicsi időm és kipróbálom az ötleted. Megpróbálom átírni arra amit tanácsoltál.
Mindenkinek köszönöm a segítséget.
(#) csabeszq válasza mrbini hozzászólására (») Jún 10, 2015 / 1
 
Hát ez elég rosszul hangzik.

Csak aztán ki ne jöjjön egy új gcc verzió, mert akkor újra 20 optimalizációt végig kell próbálnod, mire esetleg elindul újra a program.

Szóval szerintem kapcsold vissza az optimalizációt és találd meg, hogy mit rontottál el. Puffer túlírás, volatile lehagyása az interruptban, ...
(#) killbill válasza csabeszq hozzászólására (») Jún 10, 2015 /
 
Az ilyen varakozo fuggvenyekkel van a legtobb baj:

while(wait) --wait;

Ennyi. Ezt -O2, -Os ugy kiszedi, mint a sicc! Ilyet mar 10 eve sem lett volnta szabad leirni...
A hozzászólás módosítva: Jún 10, 2015
(#) zombee hozzászólása Jún 10, 2015 /
 
Sziasztok!

ATXMega esetén elvileg a bootloader teljesen független a programmemóriától. Az lenne a kérdésem
hogy AVR Studio 4 alatt ezt lehet írni-olvasni, esetleg a sorosportos már gyárilag benne van?
Illetve valami gyorstalpaló is érdekelne, nem baj ha nem magyar, csak a portok és megszakítások
kezelése lenne fontos. Konkrétan xMega32A4 lenne az első "áldozat".
(#) zombee válasza zombee hozzászólására (») Jún 12, 2015 /
 
Egy kicsit pang a téma...

Szóval ott tartok hogy van egy ilyen ATXMega32a4 board a ribu.at-ról:
Bővebben: Link

Ebbe MCS bootloadert tettek ami csak Bascom-ból működik, ezen kívül van egy kis program ami viszont csak .bin fájlokat fogad el. Jó, tudom, létezik hex-->bit átalakítás, de én inkább
a "hagyományos" módot választanám, AVR Studio + AVRISP-mkII (klón). Utóbbi egyébként
rendesen látja, kommunikál vele, csak a tápon kell még igazítani kicsit mert csak külső táppal megy.
El akarom kerülni hogy a bootloadert letöröljem, de ha elveszne akkor nem lenne utolsó dolog
a végén valahogy visszatenni...
A hozzászólás módosítva: Jún 12, 2015
(#) kapu48 válasza zombee hozzászólására (») Jún 12, 2015 /
 
Beállítható a: Bascom >> Options >> Output >> Binary file pipa

És készít neked *.bin-t
A hozzászólás módosítva: Jún 12, 2015
(#) Max26 hozzászólása Jún 13, 2015 /
 
Sziasztok! 4x4-es mátrix billentyűzet bekötése a képen látható. Proteus ISIS-ben tökéletesen működik, hardveresen a kapcsolási rajz szerint van bekötve, ugyanakkor a valóságban megépítettem és semmit nem reagál. (a kiírató függvény működik, és az LCD is).

main.c tartalma: Bővebben: Link
keypad.h tartalma: Bővebben: Link

A hardveres bekötéssel vagy a programkóddal van a hiba?

4x4.jpg
    
(#) killbill válasza Max26 hozzászólására (») Jún 13, 2015 /
 
Az ellenallasok kozos fele nem foldre, hanem Vcc-re kellene legyen kotve.
(#) csatti2 válasza Max26 hozzászólására (») Jún 13, 2015 /
 
Próbáld meg kicserélni a 10k-s lehúzó ellenállásokat 2k - 3k körülire. Mivel a beépített felhúzó ellenállás értéke nem igazán egzakt (talán 30k körül van) a 10k-val való feszültségosztó kihúzhatja a bemenő feszültségek értékeit a javasolt tartományból.
A hozzászólás módosítva: Jún 13, 2015
(#) csatti2 válasza killbill hozzászólására (») Jún 13, 2015 /
 
Az redundáns lenne, azok már most is Vcc-re vannak húzva belül.
(#) killbill válasza csatti2 hozzászólására (») Jún 13, 2015 /
 
Azok a lehuzok egyaltalan minek vannak? Mivel a programkod csak akkor fogad el barmit is, ha a beolvasott ertekben csak egy bit nulla, a tobbi egy. Ha meg kisebb ellenallassal huzza le, akkor meg biztosabb, hogy nem fog mukodni.
(#) killbill válasza csatti2 hozzászólására (») Jún 13, 2015 /
 
Lenne.. Ugyan. A kod eleve redundans, tele felesleges utasitasokkal. Miert pont a HW lenne jo? Egyebkent nem biztos, hogy redundans, mivel a belso felhuzok eleg kis arammal mennek, ha tul hosszu kabelek vannak, elofordulhat, hogy lassan toltik at a kabel kapacitasat. Valamint a zavarerzekenyseg is javul a kisebb impedanciaktol. Szoval a 4.7k..10k teljesen elfogadhato felhuzo lenne ott.
(#) csatti2 válasza killbill hozzászólására (») Jún 13, 2015 /
 
Én is gondolkodtam azokon a lehúzókon, szerintem is meg lehet oldani simán nélkülük (ráadásul jobban is).
(#) killbill válasza csatti2 hozzászólására (») Jún 13, 2015 /
 
Ha gondolkodtal rajta, akkor miert irod azt, hogy csokkenteni kell? Ki kell szedni oket vagy atkotni a Vcc-re. Nezd meg a mellekelt kodot is mielott "jotanacsot" adsz!
A hozzászólás módosítva: Jún 13, 2015
(#) zombee válasza kapu48 hozzászólására (») Jún 13, 2015 /
 
A lényeg lemaradt? Én AVR Studio-ban szeretném írni a programot ami csak HEX-et csinál, BIN-t nem.
Úgy lenne kényelmes ha nem a bootloadert hanem az AVRISP-mkII - t használnám, csak el akarom
kerülni a bootloader törlését, illetve később magát a bootloadert szeretném újratölteni.
(#) Max26 válasza killbill hozzászólására (») Jún 13, 2015 /
 
Igen, tényleg ennyi volt csak. Köszi szépen.
(#) kapu48 válasza zombee hozzászólására (») Jún 13, 2015 /
 
Passz!
Tényleg nem értem a problémád!

De szerintem a kétféle módszert nem lehet egyszerre használni.

A reset vektoron levő cím vagy a programod kezdetére mutat (Atmel Studio), vagy a bot loaderre (és az dönti el hova kerül a program kezdete) .
(#) zombee válasza kapu48 hozzászólására (») Jún 13, 2015 /
 
Azaz maga a program (hex vagy bin) már tartalmazza, hogy hova kerül a kód?
(#) kapu48 válasza zombee hozzászólására (») Jún 13, 2015 /
 
(#) Kovidivi hozzászólása Jún 14, 2015 /
 
Sziasztok!
Hogyan lehet mozgóátlagot legegyszerűbben számolni? Gondolok itt arra, hogy pl. ADC-vel mérek, és szép lassan elsímítja a hirtelen váltást? Valami olyaami rémlik, hogy tömbben gyűjtök 10 értéket, és mindig eldobom az utolsót? Hasonló megoldás van, vagy ez korrekt? Köszönöm.
(#) csatti2 válasza Kovidivi hozzászólására (») Jún 14, 2015 /
 
(#) Max26 hozzászólása Jún 14, 2015 /
 
Sziasztok! Látott már valaki olyat, hogy egy 2x16-os LCD megfelelően van bekötve. Mégis megjelenítéskor a szöveget pislákolva írja ki? Rámértem a portokra, teszteltem őket 1db LED-el. Ha magas szintre állítottam, akkor a LED világított és nem villogott. Alacsony szintnél nem világított a LED. Breadboardon van összerakva az áramkör, itt-ott megtűzdeltem zavarszűrő kondival, de ez sem segített. Eddig ugyanazt a Drivert használtam az LCD-hez és eddig működött.
(#) Kovidivi válasza Max26 hozzászólására (») Jún 14, 2015 /
 
Igen, láttam már. Pl. ha 100mS-ként frissíted a kijelző tartalmát, akkor vibrálni fog, az újraírás lassúsága miatt. Felesleges ugyanazt az adatot kiküldeni rá ilyen sűrűn, bőven elég akkor, ha változás történik. Az LCD kezelése lassú művelet, jobb, ha csak ritkán kell ezzel foglalkozni.
Csatti2: Köszi, megnézem!
(#) zombee válasza Kovidivi hozzászólására (») Jún 14, 2015 / 1
 
Szerintem egyszerűbb dolgot keresel. Ennek csúszóablak a neve, valakik hívják még nulladfokú szűrőnek is. Lényege hogy a legutolsó értéket minden mérés után eldobod(azaz az új értéket oda szúrod be). Ehhez kell egy tömb és egy számláló. A többit a fantáziádra bízom.
(#) zombee válasza Kovidivi hozzászólására (») Jún 14, 2015 /
 
Kijelző frissítésnél kb. 320ms az elfogadható határ, annál gyorsabbat nem mindig lehet olvasni, egy lassabb meg idegőrlő lehet. De ekkor is érdemes lenne csak a változó adatokat frissíteni, és nem letörölni a kijelzőt és mindent újraírni mert akkor villog. Gyakori hiba, hogy a "write" függvény minden alkalommal megcímzi az X,Y pozíciót, ami értékes időt vesz el. Ha az egész kijelzőt frissítenéd akkor előbb állítsd össze a sztringet (32+1 karakter nem sok), állítsd 0,0-ba a kijelző pozíciót és egyben írd ki. Akkor törölni (CLS) sem kell, úgyis felülíródik és baromi gyors lesz az egész frissítés.
(#) killbill válasza Kovidivi hozzászólására (») Jún 14, 2015 / 1
 
  1. /*
  2.  * Elsofoku digitalis szuro
  3.  * ~~~~~~~~~~~~~~
  4.  */
  5.  
  6. /*
  7.  * FACT erteke minel nagyobb, annal durvabb a szuro.
  8.  * Maximalis erteke 16 - sizeof(minta)
  9.  * Ha a mintak 8 bitesek, akkor max. 8, ha a mintak 10 bitesek, akkor max. 6.
  10.  */
  11. #define FACT 4  // 2..8 minel nagyobb, annal durvabban szur
  12.  
  13. /*
  14.  * Ennek a fuggvenynek at kell adni rendszeres idokozonkent az szurendo
  15.  * erteket.
  16.  */
  17. void addnew(uint16_t val)
  18. {
  19. static uint16_t  cap, init;
  20.  
  21.   if(init == 0){
  22.      init = 1;
  23.      cap = val << FACT;
  24.   }
  25.   else
  26.     cap += val - (cap >> FACT);
  27. }
  28.  
  29.  
  30. /*
  31.  * Visszaadja a szurt erteket
  32.  */
  33. uint16_t filtered_value(void)
  34. {
  35.   return cap >> FACT;
  36. }
(#) Kovidivi hozzászólása Jún 16, 2015 /
 
Köszönöm a tippeket!
(#) Kovidivi hozzászólása Jún 18, 2015 /
 
Sziasztok!
Járt már valaki úgy, hogy túl sokáig melegített egy AVR-t (esetemben kb. 15 percig, mivel összefolyt 3 láb, és sehogy sem akart lejönni), és utána a fogyasztása kicsit megnőtt? A programhibát majdnem kizárhatom, mert volt régebbi verzióm, próbáltam mini programot is, ami elküldi alvóba az AVR-t azonnal. 15-20mA-t eszik folyamatosan, ez felel meg az alvó "üzemmódnak" (előtte 0.001mA volt). A portok megfelelően működnek, mégis valahova folyik az áram. Próbáltam minden PORT-ot tápfeszültségre húzni, és végigmértem, sehol sem veszik el a 3V3, aztán leraktam GND-re, mindenhol 0V volt, kivéve a Reset.
Ami még lehetséges, hogy valahol van egy mini átvezetés, de ezt nem találom sehol. IC cserét ne javasoljatok, mert ha csak ez a megoldás, akkor lehet inkább kidobom az egészet, mert akkora szenvedés lenne Van ötletetek?
Köszi.
(#) Droot válasza Kovidivi hozzászólására (») Jún 18, 2015 /
 
A panelt tisztítsd meg alkohollal/denaturált szesszel/féktisztítóval ha nincs más akkor esetleg nitrohígítóval különös tekintettel az AVR lábaira, kis ecsettel dörzsöld le körülötte a gyantát és ha megszáradt próbáld ki újra. Ha nincs a panelon "nyitott" alkatrész pl buzzer akkor nyugodtan öntsd rá az oldószert, nem kell sajnálni, ami lefolyt tedd el legközelebb jó lesz.
(#) mbalint1 hozzászólása Jún 18, 2015 /
 
Helló!
Nem igazán tudtam eldönteni hova is illik ez a kérdés de azért remélem kapok válasz mert már nagyon idegesít a probléma .
Az van hogy van egy ATtiny45-öm, egy Arduinóm meg egy .hex fájlom.Értelemszerűen az ATtinyre kellene felrakni a.hex fájlt az Arduinóval(más programozóm nem lévén).Találtam is kismillió cikket nagyjából mindegyik ugyanazt írja, de egyik sem működik nekem.Felrakom sz Arduinóra az ArduinoISPt, rákötöm az ATtinyre eszerint. Ezután az Arduinó IDEt bekonfigurálom az ATtinyre (8Mhz belső órajellel) felrakom a bootloadert. Majd parancssorba:
  1. avrdude -c avrisp -p t45 -P com6 -b 19200 –U flash:w:main.hex:i

Erre meg ezt írja ki:
  1. Please define PAGEL and BS2 signals for ATtiny45!


Légszíves segítsetek!
Következő: »»   673 / 838
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