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   545 / 840
(#) johny999 válasza csabeszq hozzászólására (») Jún 30, 2013 /
 
Oké.

Igen azt próbálom AVR-re átültetni. Csak a programmal gyűlt meg a bajom...

Még arra kéne rájönnöm hogy ha a freq változó elszámolt 200-tól 66-ig, akkor kezdjen el visszafele számolni ne ugorjon egyből 200-ra.
(#) csabeszq válasza johny999 hozzászólására (») Jún 30, 2013 /
 
Oda-vissza számolásnál az alap, amire gondolni kell az a negatív számok és az abszolútérték függvény.

Tehát: nem 200-tól számolsz 66-ig, hanem -134-től +134-ig.

A frekvencia a számlálód abszolútértéke + 66.
(#) vzoole válasza rolandgw hozzászólására (») Jún 30, 2013 /
 
Sajnos nem ismerem az AS. nyelvet.
De a fő loop-ba csak akkor engedélyezd a gomb működését, ha az fel van engedve.
(#) tecsa hozzászólása Jún 30, 2013 /
 
Sziasztok!

Korábban javaslatot kaptam, hogy atmega8-al valósítsam meg a készülő kis projektem amin 4db 7szegmenses kijelző, és pár darab led van. A négy 7 szegmenses kijelző vezérlésér szét kell bontanom(2x74ls47). Így ez összesen elfoglal 12 lábat a kontrolleren. 2x4 BCD kód, és 4db szegmensválasztó. Nem tudom használni még a programozáshoz és UART kommunikációhoz használandó lábakat, így a 21-ből már 16 foglalt lábam van. A maradék 5 lábról kéne valahogy kb 10 LED-et vezérelni, mint a F1-es autók kormányán a fordulat visszajelző ledek. Ehez kérnék tanácsot milyen IC-vel lehetne ezt megoldani. Esetleg a komplett kapcsolásom rossz így?
A hozzászólás módosítva: Jún 30, 2013
(#) csabeszq válasza tecsa hozzászólására (») Jún 30, 2013 /
 
74HC595 - shift regiszter (100 Ft körül)

Bővebben: Arduino shift out
(#) vzoole válasza tecsa hozzászólására (») Jún 30, 2013 /
 
Én a 7 szegmenses kijelzőt is multiplexálva hajtanám közvetlen az mcu-ról.
Ugyanide mehetne a visszajelző led is. Így nem kéne külső IC.
Mannyire kritikus a fényerő?
(#) tecsa válasza vzoole hozzászólására (») Jún 30, 2013 /
 
Spi-t használni még jobban megbonyolítja a programozást, de remélem nem lesz akkora probléma ezzel. Na majd próbálkozom. Amúgy itt HE-n van UART, és SPI program is, szóval a kettőt össze ollózva talán nem lesz akkora nehézség. Így használhatnék több 74HC595 IC-t.

Közvetlenül az mcu-ról multiplexálvan hány láb kéne a 7szegmenseshez? Mert lassan így is szűkében vagyok!

Köszi a segítséget.
A hozzászólás módosítva: Jún 30, 2013
(#) vzoole válasza tecsa hozzászólására (») Jún 30, 2013 /
 
Tizedespont kell? Külső kvarc kell?
(#) csabeszq válasza tecsa hozzászólására (») Jún 30, 2013 /
 
Shift regiszterhez nem muszáj az SPI. Minimális a gyorsulás ahhoz képest, mintha programból állítanád a lábakat. Durván fele a sebesség programból, ami a legtöbb esetben nem kritikus.

Ha meg interruptolsz is hozzá, akkor már lassabb is lehet, mint szoftveresen.
(#) tecsa válasza vzoole hozzászólására (») Jún 30, 2013 /
 
Tizedespont nem kell. Külső kvarc kell az UART kommunikáció miatt.
(#) vzoole válasza tecsa hozzászólására (») Jún 30, 2013 /
 
Ja és SPI kell valamihez, vagy csak az IC-ket hajtani?
(#) tecsa válasza vzoole hozzászólására (») Jún 30, 2013 /
 
Csak az ICkhez. Amúgy elegendő az UART. PCről kapok egy byte-ot és azt küldi ki a 7szegmens egyikére vagy a ledekre.
(#) johny999 válasza csabeszq hozzászólására (») Jún 30, 2013 /
 
Akkor ez a kod nem is lenne jó?

  1. int count_up = 0;
  2.  
  3. ISR(TIMER1_OVF_vect) {
  4.  
  5.         timer1_ovf_count++;
  6.  
  7.         if (timer1_ovf_count > 30) {
  8.  
  9.                 if (count_up == 1) {
  10.                         if (freq <= 200) {
  11.                                 freq++;
  12.                         }
  13.                         if (freq > 200) {
  14.                                 count_up = 0;
  15.                         }
  16.                 }
  17.  
  18.                 if (count_up == 0) {
  19.                         if (freq >= 66) {
  20.                                 freq--;
  21.                         }
  22.                         if (freq < 66) {
  23.                                 count_up = 1;
  24.                         }
  25.                 }
  26.  
  27.                 OCR0A = freq;
  28.                 timer1_ovf_count = 0;
  29.         }
  30. }
A hozzászólás módosítva: Jún 30, 2013
(#) vzoole válasza tecsa hozzászólására (») Jún 30, 2013 /
 
Így megoldható, habár a fényerő már tud csökkenni 6-os multiplexbe.

Az ellenállások kimaradtak a PD7-PB5 lábig.

mega8.jpg
    
(#) tecsa válasza vzoole hozzászólására (») Jún 30, 2013 /
 
74ls47, meg 74hc595 is van itthon. breadboardon majd kipróbálom mind a kettőt.
(#) csabeszq válasza johny999 hozzászólására (») Jún 30, 2013 /
 
Próbáld ki, ha működik maradjon így, ha nem javítsd ki.

Többféleképpen is meg lehet oldani egy problémát és mi informatikusok hajlamosak vagyunk olyan 3 soros megoldásokat adni, melyeket rajtunk kívül mások nem értenek.

A te megoldásod érthető, mert közvetlenül a problémánál maradtál.
(#) csabeszq válasza vzoole hozzászólására (») Júl 1, 2013 /
 
Van olyan LED elrendezés, hogy jóval kevesebb vezetékkel irányíthatsz LED-eket.

Alapja, hogy a LED csak egy irányba vezet, a másikba zár. Kötsz egy LED-et az 1-2, 1-3, 2-3, 3-2, 3-1, 2-1 lábakra és máris 3 vezetéken 6 LED-et irányítasz.

4 vezetékkel a 10 LED lefedhető, de egyszerre csak egyet tudsz bekapcsolni, szóval multiplexelni kell.
A hozzászólás módosítva: Júl 1, 2013
(#) zombee válasza csabeszq hozzászólására (») Júl 1, 2013 /
 
Gondolom a charlieplexing-re gondolsz. Pár szót én is szólnék róla. Ha LED-eket kapcsolsz charlieplexing módban akkor szinte alig különbözik a "sima" multiplexálástól, de a vezetékek (egy híján) fele megspórolható vele. Alapszabály: N darab vezetékkel N*(N-1) LED hajtható meg, ill. ha billentyűzeted van akkor ennyi nyomógomb köthető be egyszerre.

Még egy nagyon fontos különbség a sima multiplexáláshoz képest, hogy ha soronként multiplexálsz akkor az egyik vezetékkel kiválasztod a sort, a többivel (N-1 darab) az adott sorban lévő LED-ek gyújtását állítod be. A gyújtás a sorkiválasztó vezetéknél használt polaritással ellentétes, ha pedig sötét marad akkor HI-Z állapotba kell tenni. Az áramkorlátozó ellenállást az N datab vonal és a mikrokontroller közé szokták tenni, de ekkor egyszerre csak 1 darab LED hajtható meg a feszültségesés miatt. Ha LED-enként teszel ellenállást akkor egyszerre N-1 LED hajtható meg, de ügyelni kell a mikrokontroller áramfelvételére(sormeghajtónál a legnagyobb).

Keress rá, kísérletezgess, méregess, többet nem tudok segíteni!
(#) zolibon hozzászólása Júl 1, 2013 /
 
Sziasztok! Egy nagyon amatőr kérdésem lenne a publikumhoz. Egy forráskódot és a hozzá tartozó makefile-t, hogyan tudom újrafordítani a saját beállításaimmal avr studioban? Sajnos sok, általam kedvezőbb beállítás csak így fejtené ki hatását, de a mikéntjéről fogalmam sincs. Programíráshoz nem értek, csupán egy meglévő prog. paramétereit szeretném "hexesíteni"Köszönöm a segítséget előre is!
Tisztelettel: Zoli
(#) johny999 válasza csabeszq hozzászólására (») Júl 1, 2013 /
 
A piezom kattog mintha megbolondult volna :/ Mi lehet a baj :/
Ha csak 1 frekvenciát engedek rá és akkor is. A lenti bekötéssel tesztelem.
A hozzászólás módosítva: Júl 1, 2013

untitled.PNG
    
(#) pluto válasza zolibon hozzászólására (») Júl 1, 2013 / 1
 
Szia!

Egyszerűbb, mint gondolnád. Feltételezem, hogy a makefile-t és a hozzátartozó fájlokat valahová bemásoltad. Amennyiben a fájlok egy bizonyos könyvtárstruktúrában léteznek, azt ne változtasd meg, különben nem fog semmit megtalálni. A start-menüben az Atmel bejegyzés alatt találsz egy Atmel Studio Command Prompt bejegyzést (ezt a 6.1-re írom, a régebbiekre nem tudok fejből hozzá szólni). Ezt felhívod, kinyílik egy cmd ablak. Innen elvándorolsz abba a könyvtárba ahol a makefile található. (DOS parancsok) Itt meg azt mondod neki, hogy make all. És ha minden rendben volt, akkor szépen megcsinálja a HEX-t.
(#) Massawa hozzászólása Júl 1, 2013 /
 
Sziasztok, egy kérésem lenne: kaphato valahol ATMEGA1284PU, DIL-40 tokoasu proci? Kösz!
(#) zolibon hozzászólása Júl 1, 2013 /
 
Nagyon köszönöm! Megpróbálom kivitelezni.
(#) zolibon válasza pluto hozzászólására (») Júl 1, 2013 /
 
Gondolom előtte átírom a számomraq lényegesebb dolgokat a makefile-ban egy szövegszerkesztövel?
(#) pluto válasza zolibon hozzászólására (») Júl 1, 2013 /
 
Igen, különben mi értelme?
(#) zolibon válasza zolibon hozzászólására (») Júl 1, 2013 /
 
Sok sok köszi! Én eddig valami tortoise SVN és winawr-el küzdöttem de sikertelenül....
(#) pluto válasza zolibon hozzászólására (») Júl 1, 2013 /
 
Örülök, hogy sikerült. Kívánok Neked további sok sikerélményt.
(#) zolibon válasza pluto hozzászólására (») Júl 1, 2013 /
 
Még nem sikerült, csak próbálom. Nekem 4.19-es avrstudio van és annak nincs a start menüben"Atmel Studio Command Prompt"....
(#) Szabi1 hozzászólása Júl 1, 2013 /
 
Sziasztok! így jól van bekötve ez az LPT programozó atmega8-ra?

AVR_ISP.gif
    
(#) TavIR-AVR válasza Szabi1 hozzászólására (») Júl 2, 2013 /
 
A reset és az 5V közé ne 1k, hanem 4k7...10k-t tegyél.
Az LPT utáni 330 ohmok elhagyhatóak.
A Vref -et én nem 5Vra kötném, hanem a Vref és a GND közé 100nF.

Javaslat: XTAL1 és XTAL2-re a kvarcot raknám pluszban (kvarc + 2 db 15..33 pF kondi + 1Mohm a kvarc 2 lába közé.)
Következő: »»   545 / 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