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   767 / 837
(#) Massawa válasza kiborg hozzászólására (») Márc 30, 2017 /
 
Elment az eszed? 4 helyett 27 kimenet, 27 tranyo 27 ellenállás ???????
Ejnye ejnye...
(#) Massawa válasza minimodel hozzászólására (») Márc 30, 2017 /
 
A legujabb LED-k 12V-rol 5k6 ellenállással is vakitanak
(#) Kovidivi válasza Massawa hozzászólására (») Márc 30, 2017 /
 
Úgy is nézheted, hogy mit könnyebb leprogramozni egy kezdőnek. Lehet shift regiszterrel könnyebb lenne, mint egy LED-mátrixot összehozni. A legegyszerűbb mégis az lenne, ha lenne 27 kimenete. Shift regiszterhez is kell 27 ellenállás, a LED-mátrixhoz viszont tudás kell. Az egyiket megveszed a boltban, a másikat a kérdezőnek el kell sajátítania!
(#) Massawa válasza Kovidivi hozzászólására (») Márc 30, 2017 /
 
Emberek, mire megprogramozol 27 portot 4 helyett ahol amugy is (fejben) ki kell találni a matrixot annyi idö alatt 10-t össze lehet forrasztani és kitesztelni. De ezt hagyjuk inkább a kollégára
(#) Kovidivi válasza Massawa hozzászólására (») Márc 30, 2017 /
 
Neked lehet, de nem egy totál kezdőnek.
A hozzászólás módosítva: Márc 30, 2017
(#) Massawa válasza Kovidivi hozzászólására (») Márc 30, 2017 /
 
Én sem vagyik nagy programozo, éppen ezért a mátrix sokkal célravezetöbb, hiszen csak a 4 kimenetröl kell gondoskodni és nem 27-röl meg egy marha nagy procirol (3 portos). Itt meg a méretek is fontosak, azaz a hely.
A mátrixot szépen összeforrasztja kiprobálja és ha minden jo lehet programozni.
(#) minimodel válasza Massawa hozzászólására (») Márc 30, 2017 /
 
Pontosan. Ez a tervem nekem is, elöbb fizikailag összehozom a mátrixot. A biztonság kedvéért ki is mérem majd aztán jöhet a programozása. Tranzisztorokra én is gondoltam. A kiszemelt LED-ek kb 3 mm-esek, két fehér lesz a tetején sárgára befestve (mert így hasonlít legjobban az eredeti színére), a többi normál borostyánsárga. Semmi szuperfényes, csak normál diffúz. Egyébként pont ez a jó kihívás benne, ahogy végigmegyek a különbözö példaprogramokon és értelmezem azokat, mi mit jelent, miért van ott, stb. Aztán ebböl jönnek a saját kreálmányaim, mint pl. a futófények 6 LED-del.
A hozzászólás módosítva: Márc 30, 2017
(#) kiborg válasza Massawa hozzászólására (») Márc 30, 2017 /
 
Nem ment el az eszem: (tőled idézek)

Azért kell a dioda matrix. Az AVR-böl is gyakoraltilag ugyanazokat a jeleket kell kinyerned.
Villogo fent
Bal
Közep
Jobb
Semmi (kikapcsolva)

Erre gondolva 4db tranyó és 4db ellenállás kell,mert ha közvetlenül akarja rákötni a ledeket a vezérlőre akkor csakis párhuzamosan tudja őket kötni(vagy egy kis szerencsével kettőt sorba).
Viszont ha nézem az ábráját,akkor adott esetben egy portlábon csüngne akár 10 led is egyszerre, ami szerintem egy portlábnak sok.
A vezérlő nem 12V-os,hanem ARduino,ami 5V.
A hozzászólás módosítva: Márc 30, 2017
(#) minimodel válasza kiborg hozzászólására (») Márc 30, 2017 /
 
Igen, pontosan így van. Ez az én elgondolásom is. Az Arduino egyébként most a próba és a "tyúkom" is egyben. Ha minden jól összejön a végén akkor kiszabadítom belöle a programomat és átteszem egy különálló ATmega chip-re (tojás), amit a "tyúk" sikeresen felprogramozott már bootloaderrel. és a fiókban várja a bevetését.
A hozzászólás módosítva: Márc 30, 2017
(#) Massawa válasza kiborg hozzászólására (») Márc 30, 2017 /
 
Azt nem tudjuk milyen LEDjei vannak.
A sárgábol akár 2-t is sorba köthet 5 Voltra, igy már csak öt (dupla) LED marad.. De ezt elöbb meg kellene rajzolnia, akkor majd meglátjuk mennyi is lesz. Miután SMD Ledekröl van szo, ( legfeljebb 3 mm-s) akkor untig elég modellban 5 mA egy LED-re ( különben ugy világit mint Dart Vader kardja).
Ahogy irtam nálam a LED alig 2 mA-t kap ( olcso kinai LEDek). A legrosszabb esetben még azt a 4 tranzisztort beépitheti.
(#) zombee válasza csabeszq hozzászólására (») Márc 31, 2017 /
 
Köszönöm. Az "until" szóval vagyok zavarban.
Tehát ha egy AVR az SPI Slave, ott minden 8 bit után beállítódik az SPIF flag, ill. meghívódik a megszakításrutin amennyiben engedélyezve van. Ha jól értem, a Slave ekkor átírhatja az SPDR regisztert, és a következő 8 órajelben ez fog kishiftelni belőle a MISO vonalon. És a Master oldalon két bájt átvitele közé be kell iktatni egy kis szünetet, hogy a Slave le tudja kezelni. Mindezt úgy, hogy az SS láb lehúzva marad.

Ezidáig bájtonként kezeltem a dolgot, és nem is volt 1 bájtosnál nagyobb átvitel Slave-->Master irányban, csak fordítva. Utóbbit (Master --> Slave) úgy oldottam meg, hogy a felső 4 bitben volt a cím, az alsóban maga az adat. 8 bájt átvitelére tökéletes (volt).
Ha több kellett, akkor az MSB volt a parancs(1)/adat(0) jelzőbit, és a teljes adatsor (CRC-vel) 7 bitenként ment át. A szekvenciát START és STOP parancs vezérelte, a STOP után egy ÜRES parancs átvitelekor kapta vissza a Master a nyugtát.
A hozzászólás módosítva: Márc 31, 2017
(#) csabeszq válasza Massawa hozzászólására (») Márc 31, 2017 /
 
Nekem teljesen más problémám van a dologgal, rühellem a kábeleket. Modellezésnél mindig az a legnagyobb probléma, hogy 27 kábel 27 helyen elromolhat, 4 kábel meg 4 helyen.

Vagy szalagkábellel buszozok, vagy sorosan oldom meg.

A világítást például WS2812-es LED szalag darabolásával próbálom majd megoldani. 3 pin van, azon darálom az adatokat, a megfelelő RGB LED meg megfelelő színben fog világítani.

Makett házaknál amúgy sem látszik belülről, hogy mi adja a fényt. Programból meg egyesével állítom a fényerőt és a színt.

Mindenesetre sok kábel sok szivacs...
(#) Massawa válasza csabeszq hozzászólására (») Márc 31, 2017 /
 
Én is ugyanerre gondoltam, mert ha jol számolom, az a tábla kb 3x4 cm méretü - vagy még annyi sem. Ezt összekötni karvastagságu 27+2 eres kábellel nem leányálom.
Én a legszivesebben az SMD procit is rátenném a lapra és 3 érrel kapcsolnám a külvilághoz.
(#) minimodel válasza Massawa hozzászólására (») Ápr 1, 2017 /
 
Pontosan így vagyok vele én is. Amúgy az 1:87-ben valóban okosan kell gazdálkodni majd a hellyel. De a hardver majd egy külön téma lesz amúgy is. Most már eljutottam odáig, hogy összeszedtem és kipróbáltam egy megszakítások nélküli és nem delay_ms-es pergésmentesítést, ami be is vált. Közben megvizsgáltam a cikkek között található AVR jelzölámpát is. Szintén összeraktam, lefuttattam és teszteltem, kísérletezgettem vele. Van pár gyermekbetegsége, de szintén kezdö kolléga írta és alap elgondolásnak jó is lesz. Szóval módosítottam úgy, hogy az egyes case utasítások között gombnyomással tudjak váltani. Èn is így szeretném a táblán váltani a jelzésképeket. Viszont mikor a legutolsó case-böl váltottam, akkor a program a default-ból rögtön átváltott az 1-es case-be. Ez valószínüleg azért volt mert pereg a gomb. Tehát ide az utolsó állapotra kell majd a pergésmentesítés.
(#) fifadani hozzászólása Ápr 3, 2017 /
 
Sziasztok!

Lenne egy problémám. Amiről nem tudom eldönteni, hogy az én hibám, a mega128-é, vagy a fordítóé.

Adott két LED a PA0-án, és a PA1-en. PE0 lábon pedig egy gomb. Mutatom a kódot:
  1. #include <avr/io.h>
  2. #define F_CPU 8000000UL
  3.  
  4. int main (void)
  5. {
  6.  
  7.         DDRE = 0x00;
  8.         PORTE |= (1<<PE0);
  9.         DDRA |= (1<<PA0) | (1<<PA1);
  10.  
  11.         while(1)
  12.         {
  13.  
  14.                 if(!(PINE && (1<<PE0)))
  15.                 {
  16.                         PORTA = (1<<PA1);
  17.                 }
  18.                 else
  19.                 {
  20.                         PORTA = (1<<PA0);
  21.                 }
  22.         }
  23.  
  24. return 0;
  25. }


Az történik, hogy hiába nyomom a gombot, nem vált állapotot a két LED.

Hol a hiba?

Köszönöm szépen!
A hozzászólás módosítva: Ápr 3, 2017
(#) killbill válasza fifadani hozzászólására (») Ápr 3, 2017 /
 
Ott a hiba, hogy nem &&, hanem csak sima & kellene a 14. sorba.
A hozzászólás módosítva: Ápr 3, 2017
(#) fifadani hozzászólása Ápr 4, 2017 /
 
Juj, tenyleg. Koszi.
(#) minimodel válasza minimodel hozzászólására (») Ápr 4, 2017 / 1
 
Èrdekes módon, elöbb megcsináltam a programot a villogó táblára, mint a hardwer részét. Nagyon foglalkoztatott a megoldás. Sokat böngésztem a netet, persze ilyen példát nem találtam, de a sok gondolkodásnak és próbálkozásnak ez lett az eredménye: Pontosan az, amit szerettem volna. Kiindulási állapot a bal nyil, gombnyomás után vált az "X"-re, újabb gombnyomásra vált a jobb nyilra és végül újabb gombnyomásra visszatér a bal nyilra. A jelzések addig maradnak változatlanok, míg a gombot meg nem nyomjuk. Egész véletlenül lett benne pergésmentesítés, mert a program csak akkor vált, ha véget ér egy villogás üteme. Azt mindenképp végig csinálja. Ìgy legalább biztosítva van a tábla a véletlen gombnyomások ellen is
  1. /*Ez a program egy elkorlátozótáblát vezérel, amin van két nagyobb villogó, 3 féle jelzésképet adó LED mátrix és egy forgó,
  2. kikerülési irányt mutató KRESZ tábla*/
  3.  
  4. #include <avr/io.h>
  5. #include <util/delay.h>
  6.  
  7. #define BAL_BE() PORTB |= (1<<PINB5)    //bal nyil képe bekapcsolva
  8. #define BAL_KI() PORTB &= ~(1<<PINB5)   //bal nyil képe kikapcsolva
  9. #define JOBB_BE() PORTB |= (1<<PINB4)   //jobb nyil képe bekapcsolva
  10. #define JOBB_KI() PORTB &= ~(1<<PINB4)  //jobb nyil képe kikapcsolva
  11. #define X_BE() PORTB |= (1<<PINB3)      //X képe bekapcsolva
  12. #define X_KI() PORTB &= ~(1<<PINB3)     //X képe kikapcsolva
  13. #define XENON_BE() PORTB |= (1<<PINB2)  //nagy villogók bekapcsolva
  14. #define XENON_KI() PORTB &= ~(1<<PINB2) //nagy villogók kikapcsolva
  15.  
  16. int main(void)
  17. {
  18. uint8_t state;
  19. DDRB = (1<<PINB2)|(1<<PINB3)|(1<<PINB4)|(1<<PINB5); //kimenetek
  20. DDRD &= ~(1 << PIND2); //a nyomógomb lába bemenetre állítva
  21. PORTD |= (1 << PIND2); //és felhúzva 5V-ra
  22. /* Ez az alapállapot az áramkör bekapcsolásakor.
  23. a kikerülés balra jelzést mutatja*/
  24. state = 0;
  25. while(1) {
  26. XENON_BE();
  27. _delay_ms(20);
  28. XENON_KI();
  29. _delay_ms(400);
  30. BAL_BE();
  31. _delay_ms(800);
  32. BAL_KI();
  33. _delay_ms(400);
  34. if (bit_is_clear(PIND, 2)) //ha lenyomjuk a gombot,
  35. {
  36. switch(state) { //váltson az alapállapotról tovább az X jelzésre
  37. case 0:
  38. while (1){
  39. XENON_BE();
  40. _delay_ms(20);
  41. XENON_KI();
  42. _delay_ms(400);
  43. X_BE();
  44. _delay_ms(800);
  45. X_KI();
  46. _delay_ms(400);
  47. if (bit_is_clear(PIND, 2)) //ha ismét megnyomjuk a gombot, lépjen tovább
  48. {
  49. break;
  50. }
  51. }
  52.  
  53. case 1:
  54. while(1) {
  55. XENON_BE();
  56. _delay_ms(20);
  57. XENON_KI();
  58. _delay_ms(400);
  59. JOBB_BE();
  60. _delay_ms(800);
  61. JOBB_KI();
  62. _delay_ms(400);
  63. if (bit_is_clear(PIND, 2)) //ha ismét megnyomjuk a gombot, az alapállapotra ugrik
  64. {
  65. break;
  66. }
  67. }
  68. }
  69. }
  70. }
  71. return 0;
  72. }


Most majd jöhet a szervó hozzá. Amire az "ilyen" tanulási módszer még ráébresztett, hogy nagyon nem mindegy az utasítások sorrendje és oda kell figyelni, hogy meg legyen minden kapcsos zárójelnek a párja Különben másként viselkedik a program.
A hozzászólás módosítva: Ápr 4, 2017
(#) minimodel hozzászólása Ápr 4, 2017 /
 
Néhány kép, amiket készítettem magáról a tábláról és a LED-es jelzésképekröl.
(#) kiborg hozzászólása Ápr 6, 2017 /
 
Sziasztok!

Megint belefutottam ebbe a problémába.
ISP megy, JTAG nem. Pedig ISP-n engedélyezve van a JTAG.
Órajelnek rendben kell lennie,mert egyébként meg nem tudnék ISP-n sem csatlakozni.
Mindkét esetben 5V-ról járatom. ATMega32-16AU.
Annyi még hozzátartozik, hogy bontott, de elméletileg ennek a ténynek nem kellene befolyásolni a működését.
Tudtok-e tippet adni, hogy mit ellenőrizzek le?
A hozzászólás módosítva: Ápr 6, 2017
(#) minimodel válasza kiborg hozzászólására (») Ápr 6, 2017 /
 
Lehet laikus vagyok ebben, de mit jelent az SPIEN mellett a pipa mellé rakott kis piros kérdöjel? Azt a program tette oda?
A hozzászólás módosítva: Ápr 6, 2017
(#) csatti2 válasza kiborg hozzászólására (») Ápr 6, 2017 /
 
Az a rész gondolom feltűnt, hogy a JTAG lábak mások mint amit az ISP-hez kell használni, ugye?
Ha debuggolni akarsz, máskor jobb választás lehet egy olyan példány, ami támogatja a d-wire-t. pl. ATMega328p
A hozzászólás módosítva: Ápr 6, 2017
(#) kiborg válasza csatti2 hozzászólására (») Ápr 6, 2017 /
 
Szia!

Természetesen az ISP-t a MOSI/MISO/Reset/SCK lábakon használom, a JTAG-ot pedig TCK-TMS-TDI-TDO lábakon szeretném használni.De nem akarja az igazságot
Jó dolog a debug, azért maradtam Mega16-32-64-128 vonalon,mert ez volt kéznél nagyobb darabszámban ingyért, tud debugot,van debuggerem is már hozzá(és egyszerű csinálni is) egyszerűen kezelhető, meg elég is volt amire kellett eddig, na meg persze, eddig ASM-ben nyomtam és ott nagyon jól lehetett debugolni JTAG-on keresztül is.(bár 4 lábat elvesztettem az tény,de ez még nem hiányzott sosem)

AVR Studio 4.14

@minimodel: a program rakja oda a kis piros kérdőjelet, azt jelenti, hogy ezen a felületen keresztül programozom, ezt nem engedi letiltani,mert akkor kitiltom magam, illetve kirántom magam alól a szőnyeget.
A hozzászólás módosítva: Ápr 6, 2017
(#) zombee válasza kiborg hozzászólására (») Ápr 7, 2017 /
 
Ezek szerint több IC-d is van. Hülye kérdés, de próbáltál másik IC-t berakni ugyanabba az áramkörbe?
(#) vargham válasza kiborg hozzászólására (») Ápr 7, 2017 /
 
Atmel Studio újabb verziója? 6 vagy 7?
(#) kiborg válasza zombee hozzászólására (») Ápr 7, 2017 /
 
Igen, van több IC-m is.
Van 5db Mega32, ebből 4 JTAg rossz, 1 db jó. Ez a második panel.
Az első panelnél beválasztottam egy rosszat,majd másodjára egy jót.(ugyanaz a panel volt) Ezzel azt befejezettnek nyilvánítottam.
Másodiknál (ugyanolyan panel) 3db hibás JTAG SPI OK.

De régebben jártam ugyanígy M16okkal is.Bár nem ilyen arányban.

@vargham: sajnos a 6 v. 7 Atmel Studio nem támogatja tudtommal a JTAG-ot.
(#) Massawa válasza kiborg hozzászólására (») Ápr 7, 2017 /
 
Ilyennel én is szenvedtem. A probapanelben több chip hibátlanul müködött. Átraktam a fehér breadboardba ott már nem, és ami leginkább aggasztott, hogy a NYÁK-ban sem. Nekem is szerencsére volt egy marék procim és igy sikerült kiválogatni néhányat ami mindenhol ment. A bepogramozott procik mindenhol hibátlanul müködtek, igy csak a JTAG kapcsolat érzékeny valamire.
(#) kiborg válasza Massawa hozzászólására (») Ápr 7, 2017 /
 
Eddig én ilyennel (szerencsére) nem találkoztam, ezért is vagyok meglepődve nem kicsit.
Érzékeny? Mire? A csati és a chip között nincs 1,5cm vezeték panelon, a programozó meg tesztelve másik JTAG-os chippel és ott minden gond nélkül működik.
Ilyen felirattal egyébként akkor is találkoztam, ha úgy próbáltam JTAG-on csatlakozni, hogy az le volt tiltva.
Létezik olyan esetleg, hogy hiába engedélyezem a JTAG-ot, az akkor is tiltva marad?
A hozzászólás módosítva: Ápr 7, 2017
(#) vargham válasza kiborg hozzászólására (») Ápr 7, 2017 /
 
"sajnos a 6 v. 7 Atmel Studio nem támogatja tudtommal a JTAG-ot."
Ezt honnan vetted? Nem lehet, hogy a te debuggeredet nem támogatja? Pontosan mit használsz?

JTAG-ICE III és AVR Dragon napi használatban van nálunk JTAG-en.

Atmel Studio 7 tool options.
(#) kiborg válasza vargham hozzászólására (») Ápr 7, 2017 /
 
JTAG-ICE (nem III)

Sima soros(najó USB-SERIAL átalakítóval)
(Bocs a félreérthetőségért,rosszul mondtam/írtam)
A hozzászólás módosítva: Ápr 7, 2017
Következő: »»   767 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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