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   257 / 840
(#) vzoole válasza zsozsoX hozzászólására (») Aug 7, 2010 /
 
Akkor már csak az adó és vevő közötti távolság kellene. Ezalapján kiválaszthatod a megfelelő teljesítményű adókat.

Javaslom figyelmedbe az alábbi cikkeket:
Vezeték nélküli kommunikáció 434MHz-es (433,92 MHz) modulokkal
Vezeték nélküli kommunikáció 434MHz-es (433,92 MHz) modulokkal 2

Adókhoz elég egy 8 lábú AVR is.
Tápellátás én inkább lítium alapú akkumulátorokkal oldanám meg.
(#) john94 hozzászólása Aug 7, 2010 /
 
Hello!
Egy AVR-t többször is lehet programozni?
(#) zsozsoX válasza vzoole hozzászólására (») Aug 7, 2010 /
 
Az alábbi cikkeket már néztem és az alapokkal tisztában vagyok, ezért gondolom hogy AVR-ből olyan kellene ami tudja az uart-ot. A távolság kb.150 méter lenne teljesen nyílt terepen. Az akkumlátor töltés szabályozását is az AVR-el gondoltam megoldani.
(#) john94 hozzászólása Aug 7, 2010 /
 
AVR-re hány db ledet tudok kötni,hogy azokat villogtassa, ha lehet egyáltalán?
Ezeket annyira még nem tudom mert AVR-el sohasem foglalkoztam.
(#) kovacsj válasza john94 hozzászólására (») Aug 7, 2010 /
 
Azt írja az adatlap: The pin driver is strong enough to drive LED displays directly. All port pins have individually selectable pull-up resistors with a supply-voltage invariant resistance.

Minden portra egyet. De az össz-áramra szerintem figyelni kell!
De majd az okosabbak kijavítanak.
(#) vzoole válasza zsozsoX hozzászólására (») Aug 7, 2010 /
 
Akkor térjünk vissza az eredeti kérdésre...
Az alábbi linken van példa 1 mp-es megszakításra. Kezdésnek ezt kéne belenyomni a kontrollerbe úgy, hogy pl. másodpercenként bekapcsoljon/kikapcsoljon egy LED-et.

Vagy ha már megy az lcd kijelző, akkor minden másodpercben növeljen egy változó értéket, és ezt írja ki.

Ha ez megvan, akkor a main.c-t csatolhatnád függetlenül attól, hogy jó-e vagy nem.

1 másodperces megszakítás
(#) TavIR-AVR válasza kovacsj hozzászólására (») Aug 7, 2010 /
 
Az adatlap szerint (fejből):
- betáp lábakon (GND/Vcc) : 200mA
- lábanként: 40 mA
- portonként: 160 mA

Itt a limitek szigorúsága van meg, azaz 2 porton 2x160mA tiltott - betápkorlát miatt!


lábanként LED (soros ellenállással, 470R) kb. 2...10mA.
ha portonként 160mAed van, így a LEDeket max 20mA/lábbal hajthatod - max 10 db-t avrenkent...
Ha M16-od van:
2 db VCC ill GND van, így:
2x200mA=400mA
van rá 32 lábad (4port)
így: 400/32: 12mA/láb lehet....
Ha a portok 2-2 arányban oszlanak meg. DE itt 3:1 arányban van, azaz 200mA/18 db : 11mA

Szóval a ledekre max 10mA-t engedsz rá, akkor nem okozol gondot...


remélem nem számoltam el magamat....



Ja az AVR az adatlap alapján (4. sor!!) 10.000x programozható újra (Flash)
(#) zsozsoX válasza vzoole hozzászólására (») Aug 7, 2010 /
 
Az lcd már megy, itt a main.c megy rendesen.
  1. // Megszakítás példa
  2. // 1MHz
  3.  
  4. #include <avr/io.h>
  5. #include <stdio.h>
  6. #include "lcd_driver.c"
  7.  
  8. volatile unsigned char  clock_second=0;  //másodperc
  9. char str[3];
  10.  
  11.  
  12. ISR(TIMER1_COMPA_vect) {  // megszakítás, ez fut le ha a timer "lejár",
  13.  
  14.         clock_second++;
  15.      // jelen esetbe 1 másodpercenként
  16. } // megszakítás
  17.  
  18. //-------------------------------------
  19. int main(void) {
  20. //-------------------------------------
  21.         LCDinit(); //lcd indítása
  22.        
  23.         cursor_off(); //lcd kurzor kikapcsolása
  24.  
  25.  
  26.     // Setup timer1 16bites
  27.     TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10); // CTC mode, preselect ratio:64  
  28.     TCNT1 = 0;            // timer1 szamlaloja legyen 0
  29.     OCR1A = 15624;        // timer1 Compare A (15625) 1Hz ! 0...15624 = 15625
  30.                           // 1000000Hz/64/15624 = 1Hz -es megszakítás
  31.                           // (1MHz-es kvarcnál)
  32.        
  33.     TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  34.        
  35.     sei();    //megszakítás bekapcsolás  
  36.  
  37.        
  38.     while(1) {
  39.  
  40.        LCDsendCommand(0xc0); //lcd kurzor pozició
  41.        sprintf(str,"%d", clock_second);
  42.        LCDstring(str);  //kiírás lcd-re
  43.  
  44.     } // while
  45.         return 0;
  46. } // main
(#) kovacsj válasza TavIR-AVR hozzászólására (») Aug 7, 2010 /
 
Köszönöm! Lábat gondoltam én is, nem is tudom, miért írtam portot. De azért tanulságos, mert én is kezdő vagyok.
(#) luxmanpower válasza zombee hozzászólására (») Aug 7, 2010 /
 
Igen, én is ezt a megoldást használtam végül.
(#) vzoole válasza zsozsoX hozzászólására (») Aug 7, 2010 /
 
Ez kimaradt:

  1. #include <avr/interrupt.h>


És az OCR1A értékét számold ki a megfelelő órajelhez.

Most sietnem kell, majd jobban átnézem.
(#) edison14 hozzászólása Aug 7, 2010 /
 
Hali.

Egy AVR és PIC-es tesztpanelt tervezek melyen a következő eszközök már megtalálhatók:
- külső táplálás, a bemenetre mehet egyen és váltóáram is 13-25V-ig, a kimeneten: 12V és 5V valamint lehetőség van 5V-os USB-s táplálásra
- USB konnektor a tesztpanel táplálására és a processzor valamint a gép közti kommunikációra
- 4 darab potenciométer
- 2 darab tranzisztor 12V-os áramkörök és alkatrészek kapcsolgatásához
- piezo
- mikrofon
- órajel generátor
- 2 résopto
- 4x4-es billentyűzet
- 8 darab nyomógomb
- 2 darab NTC
- 40DIP-es ZIF IC foglalat
- motorvezérlő áramkör L293-as IC-vel
- egy 7 darab darlington tranzisztort tartalmazó IC (ULN2003)
- RESET áramkör
- TSOP1736 infra vevő
- RTC azaz valós órajel generátor
- DS18S20 hőszenzor
- PICKIT2, AVR DOPER és USB ASP csatlakozó a processzorok felprogramozásához
- 3 darab 74HC595-ös shift regiszter
- 3 darab LED oszlopsor
- 2 darab RGB LED
- 2x16 karakteres LCD kijelző
- 4x7 szegmenses közös anódú kijelző
A nyomógombok, a résoptók, a billentyűzet és az RCT kimenetén használhatunk felhúzóellenállásokat ha pedig nincsen rájuk szükség akkor egy JUMPER levételével nem lesznek felhúzva a kimenetek.
Az eszközök összeköttetésére WIRE TO BOAR csatlakozókat fogok használni.
A kérdés pedig az lenne, hogy még milyen alkatrészeket eszközöket tegyek a teszpanelre amik a programozás tanulása során hasznosak lehetnek?
(#) john94 hozzászólása Aug 7, 2010 /
 
Köszi a segítséget.
De milyen dolgok kellenek a programozásához?
És,hogy kell felprogramozni?
(#) Moderátor hozzászólása john94 hozzászólására (») Aug 7, 2010
 
Például válasz gomb használat.
(#) zsozsoX válasza vzoole hozzászólására (») Aug 7, 2010 /
 
A
  1. #include <avr/interrupt.h>

benne volt az lcd_drive-ban, úgyhogy müködik rendesen.
(#) sgt válasza edison14 hozzászólására (») Aug 7, 2010 /
 
Ethernet, USB (sőt ha PIC is lösz, akkor lehet USB host is), RS232 esetleg RS485, MMC olvasó, régi teló kijelző (egy színű), új teló kijelző (színes), bluetooth, CAN busz, esetleg LIN busz, másik azonos uC (TWI, USART, SPI tesztelésre), rádiófrekis SPI, foto dióda stb...

Én személy szerint nem látom sok értelmét tele zsúfolni egy nyákot ennyi mindennel. Ok, legyen rajta a legfontosabb, de én inkább modulosra építem (uC pinjeit szalag csatira vezettem ki), bármit bárhol rá lehet tenni. Nincs megkötve a kezem hogy amit nem tettem rá, azt hogy a fenébe fogom hozzá illeszteni. De te tudod. Sok sikert hozzá am !
(#) zombee válasza edison14 hozzászólására (») Aug 8, 2010 /
 
Szerintem is abszolút fölösleges ennyit rázsúfolni, a 40 lábas IC már feleennyi eszköznél sem elég, max. ha jumperezel de akkor megint smmi értelme...

Általában megrendelésre készítgetek AVR-es fejlesztőpaneleket(lásd: csatolt képek). Egy-egy összetett fejlesztőpanelnél én is trükközni kényszerülök, ha például LCD is kell akkor vagy a LED-ekkel azonos adatvonalat kap(és az engedélyezőt teszem külön), vagy pedig shift regiszterrel oldom meg.
Ahol kapott LED kijelzőt, mind multiplexálva lett, SŐT! Még a LED-sor is multiplexált, azaz egyetlen engedélyező lábat foglal a kontrollerből.
Alapvetően ha kell valami, a szabadon hagyott portokat vezesd ki valami csatlakozón, és egy másik panelra építsd meg az eszközt. Nem kell feltétlenül szalagkábel, a tűsort vagy lyuksort tartalmazó kispanelen közvetlenül elfér pár alkatrész, pl. poti, ntc, de egy MAX-232 is egy DB9- társaságában...

Csatoltam is képeket az eddigi panelekről:

Az első egy akvárium lámpa vezérlője lett(legutóbb megépített darab), napkelte-napnyugta szimulátorral. A LED-kijelzőt és az állapot LED-eket két shiftregiszter hajtja meg.

A másodiknál LCD kijelző kellett, a portok megtakarítása érdekében a LED-ekkel közös adatbuszt kapott.

A harmadik és negyedik képen két shift regiszter hajtja meg az LCD kijelzőt. Ennek oka, hogy a HD44780 mellé egy grafikus is fog csatlakozni, és kb. 11-12 bemenetét kell billegetni.
(#) zombee válasza john94 hozzászólására (») Aug 8, 2010 /
 
Programozó eszköz kell hozzá, kell még egy PC és egy olyan szoftver ami együttműködik a programozóval.
Ilyenek pl:
AVR Doper + AVR Studio
Bascom AVR + USB-ASP
PonyProg + nyomtatókábel (csak programletöltésre)

Ha programozni is akarsz akkor valami programnyelvet nem árt megtanulni. Én mindig is a C-t preferáltam, illetve kényesebb vezérlésnél assemblert használok. AVR Studio mindkettőt tudja.

LED-meghajtás(+saját tapasztalat):
Egy AVR kontroller kb. 20mA-t képes leadni a portlábakon, ennél nagyobb árammal ne próbálkozz mert leesik a feszültség.
Sűrűn hallani hogy egy portra és a táplábakra komoly áramlimit van, ezt én csak cáfolni tudom(azaz tuningolható).
Legutóbbi LED-soromat egy ATMega48 hajtja meg, 18 LED 20mA-en. Egyszerre is világíthatnak. Ilyenkor az össz áramfelvétel 400mA (!!!). A 7405-ös stabkocka izzik rendesen, de az AVR végig hűvös maradt...
(#) edison14 válasza zombee hozzászólására (») Aug 8, 2010 /
 
Hali.

Nem szeretnék annyi mindent rátervezni de az enyém is működne modulszerűen hisz csak meg kell külön panelre építeni a modult és egy hüvelycsatlakozóval rákötni az adott IC kimeneteire. Egy alap dolgokkal teli panelt terveztem melyen az előző hozzászólásomban említettek kaptak helyet mert szerintem ezek a tanulás elindulásához sőt már a fejlesztésekhez is jók. Akkor szerintem maradok azoknál amiket leírtam és tervezek hozzá modulokat hogy aki már fejlettebb szinten van az tovább tudjon lépni. Annyi a jó az egészben hogy a panel tartalmaz 3 shift regisztert melyből az egyikkel meg lehet hajtani az LCD-t a másikkal a 4x7 szegmenses kijelzőt a harmadikkal meg a LED oszlopsort és ehhez csak 4 lábat kell lefoglalni a processzorból. Tehát így egy 34 I/O lábbal ellátott processzorral majdnem az egész panelt tudom vezérelni.

Köszönöm a válaszaitokat.
(#) IMi válasza edison14 hozzászólására (») Aug 8, 2010 /
 
Szia!
EZEN az oldalon viszonylag sok ilyen fejlesztő eszköz van, innen is lehet ötleteket meríteni.Lásd még a kiegészítő kártyákat is.
(#) zombee válasza edison14 hozzászólására (») Aug 8, 2010 /
 
Ez a 3 shift regiszter körül akadna pár ellenvetésem:
- LCD: 1 SHR hajtja meg: csak 4 bites módba mehet, nem minden kijelző szereti(vagy RS+EN lábak a kontrollerre mennek)
- 4x7 szegmenses kijelző: egy kijelzőnek 7+1 szegmense van, és ebből 4 számjegyet építesz fel. A 7+1 szegmens elfoglalja az egész SHR-t, de a számjegyeket mivel választod ki? Vagy kell még egy SHR, vagy a kontroller másik 4 lábát le fogod foglalni.
- LED-sor: szerintem fölösleges külön SHR, mehetnek a LED-ek a 4x7 szegmenses kijelző szegmenskiválasztójára, és csak egy engedélyező vonal kell neki.

Ezért a helyedben így csinálnám:
A 3 SHR elegendő, csak át kell kötni pár dolgot. Az elsőt lefoglalja az LCD 8 adatbitje, a másodikat a 4x7 LED kijelző szegmenslábai és a LED-sor, a harmadik SHR pedig egy össznépi engedélyező lehet: LCD RS+EN, 4x7 szegmenses kijelző számjegykiválasztói + LED-sor kiválasztója. Természetesen a LED-sor és a 4x7 szegmenses kijelző számjegykiválasztója nagyobb áramot vesz fel, tranzisztorral kell meghajtani.

Shift regiszternek én a 74HC595-öt ajánlom. Az összes kimenete egy kivételével egymás mellet van. Különálló shift regiszterrel és kimeneti latch-el rendelkezik, azaz shifteléskor nem ugrálnak a kimenetek. A latch kimeneti meghajtója a /OE-val letiltható/engedélyezhető. Ezen kívül 3 fontos vezetéke van(lehet hogy más nevekkel): SHR-CLK, STORE-CLK, DATA.
A 74HC595-nek még van egy Q7* kimenete, ami lényegében a shiftregiszter 7. bitjének közvetlen(latch nélküli) kivezetése. Ez használható több SHR sorbakötésére. Így a kontrolleren csak 3 lábat foglal le, esetleg még a /OE-t is bekötheted az induláskori véletlen kijelzőállapotok megelőzésére.

Egyébként magad szeretnél tanulni, vagy kereskedelmi célokra szánod?
Ha tanulni szeretnél akkor megkérdem, mennyire ismered a shift regisztereket és a HD44780 kijelzőt, a LED-kijelző multiplexelését, stb.?
(#) TavIR-AVR válasza edison14 hozzászólására (») Aug 8, 2010 /
 
A shiftregiszteres móka felejtős. Használd a standard bekötéseket, azokhoz találsz mintaprogramokat. Az LCD direktbe a processzorra...

Sorosportra RS232 illetve USB-s átalakító (esetleg RS485).

Ami buszrendszer kellhet: I2C (óra, hőmérő, EEPROM)
Analóg jelek: potméter/elektret mikrofon/fotoellenállás

Programozó kivezetés (lehet az LCD lábakon): ISP.
Ehhez STK200 (LPT) vagy STK500 (USB/RS232)

Ha egyetem/debuglehetőség: M16 +JTAG

Csipogo! (OCxx lábra)
LED 1 db, szintén OCyy lábon.

INTx lábra infravevő kocka (TSOP) ill nyomógomb

Resetgomb

1Wire busz (DS1820 illetve egyeb 1Wchip)


Ezzel a felállással a fejlesztési feladatok 90 %-a lefedhető....



Programnyelvből:
C, ASM, Bascom, Arduino
Bascomot itt találsz:Bascom leírás
Arduino alapok: Arduino
Tippek, rajzok: Tipptár
Kész fejlesztőrendszerek: Fejlesztő demopanelek
(#) zombee válasza TavIR-AVR hozzászólására (») Aug 8, 2010 /
 
Az LCD direkt bekötése gondolom a Bascom AVR miatt érdemes, egyébként már megépítettem pár olyan kapcsolást ahol shift regiszter dolgozik, ez kevés lábszámú kontrollernél hasznosnak bizonyult.
A késleltetés sem gond, a mai shiftregiszterek(74HC595, 74HCT164) az MCU frekvenciájának töbszörösét tudják, SPI-n kiküldhető az adat, de szoftverből kiküldve sem okoz fennakadást.

A direkt bekötés szerintem csak akkor gazdaságos, ha az adatvonalakat máshol(pl. LED sor, LED 4x7 kijelző) is fel lehet használni.
(#) TavIR-AVR válasza zombee hozzászólására (») Aug 8, 2010 /
 
BascomAVR alatt is simán mehet a shiftregiszter. Viszont plusz nyák, plusz IC valamnt hibalehetőség....
Az adatvonalak kevés száma miatt azonban nem shiftregiszter, hanem nagyobb IC javasolt

Shiftregiszter inkább a 7szegmenses kijelzőnél létjogosult....
(#) zsozsoX hozzászólása Aug 8, 2010 /
 
Kellene egy kis segítség. Kiprogramoztam magam az Atmega8-ből, pedig tettem rá egy külső kvarcot és úgy probáltam beállítani a külső órajelet az Avrstudio-ban. Van rá esély, hogy így valahogy vissza állítsam vagy probáljam meg ezt http://www.hobbielektronika.hu/kapcsolasok/seged_orajel_generator.html?pg=1
(#) edison14 válasza TavIR-AVR hozzászólására (») Aug 8, 2010 /
 
Valójában a standard bekötéseket használom mindenhol mivel azokra találtam példaprogramokat itt az oldalon. A 3db shift regiszter direktbe a 3 darab LED oszlopsorra van kötve. Nos Beszéljen helyettem a nyák.
(#) john94 hozzászólása Aug 8, 2010 /
 
Hello!
Kezdésnek milyen programozót és AVR-t próbáljak?
És programból melyik a legegyszerűbb?
(#) Axel hozzászólása Aug 8, 2010 /
 
Sziasztok!

Mellékeltem egy programrészletet.
Lefordul de nem működik megfelelően, a beolvasás függvény cca. 3 sec után sem lép be abba az if ágba amely a segédváltozót 0-ra állítja és visszatér a main-hez. Továbbá a start_timer-nél a "*p_count++;" utasításnál azt a hülyeséget írja, hogy "warning: value computed is not used". Amit nem értek mert az a célom vele, hogy növelje a "beolvasas" függvény count változóját pointeren keresztül. Máshol ez teljesen hibamentesen működik. Hozzáteszem, hogy warning-ot hol kiírja hol nem a fordítás után. Esetleg compiler hiba?

Köszönöm!
(#) Axel hozzászólása Aug 8, 2010 /
 
Bocsánat, elrontottam feltöltést, a második txt.-ben van az aktuális kód.
(#) Axel hozzászólása Aug 8, 2010 /
 
Meg is van: zárójelhiba az említett sorban.

*p_count++;" helyett (*p_count)++;"
Következő: »»   257 / 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