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
Van, 32.768.
Ezt akartam tudni, hogy mind a 4 bepipál. Köszi ja, még egy kérdés. Előfordulhat az, hogy a fuse bitek miatt, a nyomógombokkal nem lehet az időt beállítani? A funkciókra reagál mind a 3 gomb, de az idő és dátumbeállítást nem lehet elérni, nem lehet módosítani.
Szia!
Kotorásztam egy kicsit az ATmega88P adatlapjában: Idézet: „ATmega48P/88P/168P share the Timer/Counter Oscillator Pins (TOSC1 and TOSC2) with XTAL1 and XTAL2. When using the Timer/Counter Oscillator, the system clock needs to be four times the oscillator frequency. Due to this and the pin sharing, the Timer/Counter Oscillator can only be used when the Calibrated Internal RC Oscillator is selected as system clock source.” Ez azt jelenti, hogy a CKSEL3..0 biteknek a 0010 értéket kell beállítani. Idézet: „Device Clocking Option | CKSEL[3:0] Calibrated Internal RC Oscillator | 0010”
Ez a legegyszerűbb megoldás
![]()
Idézet: „Ez a legegyszerűbb megoldás” Ez tenyleg egyszeru, mar csak ket problemat kell benne megoldani: 1. Definialsz egy tombot aminek a hivatkozasat pointerkent felhasznalva lepegetsz a tomb elemeiben -- a kerdes pedig: Hogyan orzod meg az eredeti tomb cimet? 2. Jon egy 6 terabyt-os adathalmaz ami nem tartalmaz nullat... Mi fogja neked leallitani a 20 elemu tomb tullepeset? (Errol a problemarol mar korabban irtam)
Nyilvan, de annak aki ilyen kerdest tesz fel, nem biztos
![]()
Sziasztok!
Korábbi kapcsolásom elkezdtem átdolgozni AVR-re. Mivel nem akarom most szivatni magam az UART-al és jó lenne, ha a beállításokhoz nem kellene számítógép így azt tervezem, hogy a beállításokat 2x8 DIP kapcsolóval lehetne elvégezni. Így viszont temérdek bemenetre van szükségem. A bemenetek és kimenetek száma összesen 32db. Úgy gondolom erre az ATMEGA32 épphogy alkalmas. De ekkor fel kell használnom a MOSI,MISO,SCK lábakat is vagy bemenetként vagy kimenetként. De akkor hogyan fogom tudni programozni?
Szia!
A programozó lábakra akkor kötöd rá a programozót, amikor éppen be akarod programozni, nálam így tökéletesen működik(nem számít mit csinál az a láb éppen, úgy is lereseteli a programozó az AVR-t) Egyébként nem olyan nagy "szívás" az UART, ha van beépített hardware-s uartja a uC nek, csak inicializálni kell, és utána nem sokat kell vele foglalkozni, csak a bejövő adatot később feldolgozni(pl if bejövő bájt=a, akkor ezt csinálja...), emellett csak 1 láb kell hozzá... Zoltán
A programozo labakra DIP kapcsolot tegyel. A felhuzo ellenallasokat valaszd kelloen nagyra, ugy kb 10K kore es akkor tudod parhuzamosan programozni a kapcsolo allasatol fuggetlenul.
Közben rájöttem, hogy elszámoltam magam.
Szükségem lesz még egy időzítőre is amit potméterrel lehetne állítani 0-10 perc között. Gondolom ehhez szükségem lesz legalább egy ADC lábra. Innentől kezdve viszot -1 I/O lábam van. Input oldalon meglehet azt csinálni, hogy bemenetet csak 4 lábon figyelek? Mint a kimeneteknél a shift regiszter. Hasonlóképpen.
Hello, valamiért rosszul tette be a linket, azóta nem néztem fel ide.
Szóval, frekimérőhöz jó-e ez a tranzisztor a bemenő fokozatra? BFG67; BFG67/X; BFG67/XR
Van olyan SPI/TWI buszos portbővítő, amivel lehet kezelni bemenetet. Pl. az MCP23S17 SPI és 16 I/O.
De említetted a shift regisztert, abból beraksz párat kimenetnek, akkor a kontrollernek marad bemenethez elég lába. Vagy több ATMEGA, vagy van a nagytesó, az XMEGA-ák, sok-sok lábbal, smd. Jobban dokumentált a PIC18F sorozat magyarul, ehhez választhatsz pl. egy 18F6490-est, a Chipcad.hu-n a legolcsóbb 64 lábú (TQFP, 700Ft+ÁFA). Látom megjött az étvágy. Kitartást kívánok, mert kezdőként már szépen megbonyolítottad a dolgot. Programozód van? Az elég sarkalatos pontja az egésznek.
Természetesen van programozom meg egy marék tesz panelem arduino sorozat.
Elnézést, de a PIC-től elhatárolódom. Nincs különösebb oka ez számomra olyan mit az Intel vs. AMD. Én AMD párti vagyok és soha nem csalódtam. Szóval: Az a főgondom, hogy 8+3 kimenetre van szükségem. Ezt megoldom úgy, hogy 8 lábat szűkítek négyre shift regiszter segítségével és marad a +3. Így kimenetből csak 7 lábat használok fel. Viszont bemeneten kell 8+8+8+1+1. Ezt kellene valahogy leszűkítenem.
Attol fugg milyen kapcsolast talaltal ki.
Multiplexeld a DIP kapcsolokat. Ugy a 16 I/O helyett mar csak 8 kell.
1. Ha az eredeti cím kellene akkor deklarálni kell egy másik mutatót.
2. Általában szabványok vannak a kommunikáció minkéntjére pl. SCPI, ahol előre le van definiálva, hogy mekkora lehet a legnagyobb bejövő string hosszúsága, de ha ne adj Isten nem ezt a szabványt használod, akkor is fel állítasz saját magad egyet, amihez tudod igazítani mind a szoftvert mind a firmwaret. De ha még ezt sem teszed meg, akkor is a perfiériák meg fognak szabni egy határt aminél nem lehet hosszabb pl. LCD kijelző 2x16-osnál 32 karakternél egyszerre többet nem tudsz kijelezni.
Ha nem akarsz sem soros portot sem LCD használni, akkor még mindig "szebb" megoldás, ha ledeket használsz. Minden kimenet kap egy-egy ledet, amelyel egyrészről követhetővé válik a működés, hogy melyik kimenet épp mikor aktív, másrészről alakalmazható programozáshoz.
Kell még egy 2x kétállású kapcsoló (rajzon S1), amellyel a normál működés és programozás között tudsz választani. Programozás közben a be és kimenetek tiltva vannak. Kell még egy léptető gomb (rajzon S3) amellyel ki tudod választani, hogy épp mit szeretnél programozni. Ezt jelentheti pl. a második shift regiszteren lévő 3 kimenet állapota. Kell még minden bemenetre egy-egy nyomógomb (rajzon S2, S4), amellyel be/ki kapcsolhatod az adott ledet. Így 3x8 bitet tudsz beállítani: pl.: IC4-15 led: fűtés engedélyezés beállítása IC4-1 led: hűtés engedélyezés beállítása IC4-2 led: időzítő beállítása Ezek között válthatsz a "léptet" (S3) gombbal. Fűtés/hűtés engedélyező módban az egyes csatornákhoz rendelt led-ek mutathatják, hogy engedélyezett-e arra a csatornára vagy sem (IC3-15,1..7). Időzítő beállításakor a ledek az időzítés értékét mutathatják binárisan.
DIP kapcsolókkal is meg lehet oldani. A mellékelt rajzon minden egyes bemenethez 3 db DIP kapcsoló (vagy jumper) tartozhat (JP1, JP2, JP3 vagy S1, S2, S3).
A rajzon az 1-es lábak közösek kapcsoló csoportonként, a 2-es lábak pedig a 8 bemenetre csatlakoznak Induláskor az Atmega végig olvassa a kapcsolókat (PD0, PD1, PC1 portokkal), majd átvált a bementekre (PC2). Így 8 bemeneted van és 24 db (3x8) DIP kapcsolód.
Ha I2C bővítőIC-t használsz, sokkal egyszerűbb:
PCF8574-t. Ez 8bites portbővítő, és így elfoglalsz 2 AVR lábat és 8 ki/bemeneted van (és ebből 8 fűzhető fel). Bascom alól könnyű kezelni az I2C-t
Ha még nem írtam volna le: 220-330 kOhm bázisellenállás + 1µF kondi a DC leválasztásra,
a tranzisztor pedig open-collector módban működne és annak kimenete menne az osztóra és az AVR-re.
Mellékeltem az első elgondolásom és jönnek is a kérdések.
Közben rájöttem, hogy az egyik 8-as DIP kapcsolóra nincs szükségem csak egy kapcsolóra helyette. A többit szoftveresen lehet kezelni. Így most kimeneten továbbra is van 8 relé amit shift regiszter hajt és 3-at az AVR. Van 18 bemenetem. Így most 25 láb kell ez már bíztató. Visszont melyik bemenetet hova érdemes kötni az IC-n? Nem tudom eldönteni. A másik az időzítő: Potméterrel szereném állítani az idejét, de nem találtam rá megoldást. Gondolom a működés szoftveresen teljesen megoldható? Így menne: Ha bármelyik 'aktív' bemenet (tehát a termosztátok) bekapcsol és még egy kimenet sincs bekapcsolva akkor elindul az időzítő. Ha letelt a beállított idő csak akkor kapcsol be az utolsó 3 relé. Természetesen a bemenethez tartozó kimeneti relé egyből kell, hogy kapcsoljon arra nincs hatással az időzítés.
Mindent oda kötsz, ahova könnyű lesz beroutolni. Szoftverben majd megoldod.
Ami az időzítőt illeti. A potmétert az egyik ADC lábra kösd. Szoftverből aztán időzítesz.
Sziasztok!
Van 2db ilyen panelom. Egy atmega128 van rajtuk. Annyi a különbség a kettő között, hogy az egyikben 16MHz-es kvarc van, a másikban pedig 8MHz-es, valamint a 8MHz-es példányon az ft232 IC-hez nincs kvarc belerakva. UART-on szeretnék kommunikálni velük egy ft232 segítségével egy PC-vel. A 16MHz-es példánnyal működik, de a 8MHz-essel nem, pedig az UBRR értékének kivételével ugyan azt a programot írom beléjük. Ehhez szeretnék egy kis segítséget kérni. (Ubuntu rendszer alatt programozom Code-Blocks fejlesztői környezetben és avrdude-vel töltöm át a programot.)
Ohh perpill mar egy telo vegszervizben dolgozom tehat megtanultam BGA-t is feltenni de kb fel eve amikor a panelt legyartottam mert ugye azt kellett az elsok kozt teszt utan akkor meg ezt nem tudtam h itt fogok melozni... ellenben ha ugy lesz idom melo melltt es a leadasi hatarido elott lehet legyartom SMDben is
![]() Cikket meg nem tudom hogy lesz idom energian irni... meloban is rengeteg aa melom melle meg ez plussz allamvizsga... de utana lehet ![]()
Kezdetnek torold a programot a uC-bol es zard rovidre az FT232 RX es TX labat. Ha nem kapod vissza a terminalban amit kuldtel, akkor vagy rossz COM porton probalkozol, vagy hibas az IC.
A bazisellenallast sorosan gondoltad vagy hogy? Ez egy kozos emitteres kapcsolashoz meg mindig keves info.
inkább kb. ilyet...
De a 700ps késleltetésű komparátor is nagyon tetszik, mert egy 1/100 osztóval is elmegy.
Ha összekötöm az ft232 rx és tx lábát, akkor a terminálban visszakapom, amit küldtem.
Akkor csak a programoddal lehet gond. Biztos jol szamoltad ki az UBRR erteket? A CKDIV8 nem maradt veletlenul engedelyezve?
|
Bejelentkezés
Hirdetés |