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
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.
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.
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.
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.
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
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)
Az lcd már megy, itt a main.c megy rendesen.
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.
Igen, én is ezt a megoldást használtam végül.
Ez kimaradt:
És az OCR1A értékét számold ki a megfelelő órajelhez. Most sietnem kell, majd jobban átnézem.
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?
Köszi a segítséget.
De milyen dolgok kellenek a programozásához? És,hogy kell felprogramozni?
A
benne volt az lcd_drive-ban, úgyhogy müködik rendesen.
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 !
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.
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...
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.
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.
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.?
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
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.
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....
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
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.
Hello!
Kezdésnek milyen programozót és AVR-t próbáljak? És programból melyik a legegyszerűbb?
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!
Bocsánat, elrontottam feltöltést, a második txt.-ben van az aktuális kód.
Meg is van: zárójelhiba az említett sorban.
*p_count++;" helyett (*p_count)++;" |
Bejelentkezés
Hirdetés |