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   428 / 840
(#) H2opok válasza Reggie hozzászólására (») Márc 22, 2012 /
 
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.
(#) Hp41C válasza H2opok hozzászólására (») Márc 22, 2012 /
 
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”
(#) sgt válasza Reggie hozzászólására (») Márc 22, 2012 / 1
 
Ez a legegyszerűbb megoldás :
  1. char string[20];
  2. while(*string++ = UDR);
(#) trudnai válasza sgt hozzászólására (») Márc 22, 2012 /
 
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)
(#) Reggie válasza sgt hozzászólására (») Márc 23, 2012 /
 
Nyilvan, de annak aki ilyen kerdest tesz fel, nem biztos
(#) blackdog hozzászólása Márc 23, 2012 /
 
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?
(#) mzozo95 válasza blackdog hozzászólására (») Márc 23, 2012 /
 
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
(#) Reggie válasza blackdog hozzászólására (») Márc 23, 2012 /
 
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.
(#) blackdog válasza blackdog hozzászólására (») Márc 23, 2012 /
 
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.
(#) zombee válasza Reggie hozzászólására (») Márc 23, 2012 /
 
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
(#) zsupi1987 válasza pakibec hozzászólására (») Márc 23, 2012 /
 
Találtam egy AVR-ekkel és Arduino-val foglalkozó oldalt:

Bővebben: Link

Ha valakit érdekelne...
(#) Seton válasza blackdog hozzászólására (») Márc 23, 2012 /
 
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.
(#) blackdog válasza Seton hozzászólására (») Márc 23, 2012 /
 
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.
(#) Seton válasza blackdog hozzászólására (») Márc 23, 2012 /
 
Akkor meg kell ismerkedni az SPI-vel (egyszerűbb a TWI-nél), és használni az említett portbővítőt.
ATMega16+MCP23S17 a tuti kombináció, így még shift regiszter sem kell.
(#) Reggie válasza zombee hozzászólására (») Márc 23, 2012 /
 
Attol fugg milyen kapcsolast talaltal ki.
(#) Reggie válasza blackdog hozzászólására (») Márc 23, 2012 /
 
Multiplexeld a DIP kapcsolokat. Ugy a 16 I/O helyett mar csak 8 kell.
(#) sgt válasza trudnai hozzászólására (») Márc 24, 2012 /
 
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.
(#) dc001 válasza blackdog hozzászólására (») Márc 24, 2012 /
 
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.

hut-fut2.png
    
(#) dc001 válasza blackdog hozzászólására (») Márc 24, 2012 /
 
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.

hut-fut3.png
    
(#) TavIR-AVR válasza dc001 hozzászólására (») Márc 24, 2012 /
 
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
(#) zombee válasza Reggie hozzászólására (») Márc 24, 2012 /
 
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.
(#) blackdog válasza dc001 hozzászólására (») Márc 24, 2012 /
 
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.
(#) sikolymester válasza blackdog hozzászólására (») Márc 24, 2012 /
 
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.
(#) Petroimro hozzászólása Márc 24, 2012 /
 
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.)

main.c
    
(#) prody válasza szdani hozzászólására (») Márc 24, 2012 /
 
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 inkabb pepecselos melo nem olyan nehez annak akinek van egy kis tapasztalata gepeszetbol minimal elektronika beagy meg minimal perl. najo igy elmondva kicsit sok, de egyebkent nem az .
(#) Reggie válasza Petroimro hozzászólására (») Márc 24, 2012 /
 
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.
(#) Reggie válasza zombee hozzászólására (») Márc 24, 2012 /
 
A bazisellenallast sorosan gondoltad vagy hogy? Ez egy kozos emitteres kapcsolashoz meg mindig keves info.
(#) zombee válasza Reggie hozzászólására (») Márc 24, 2012 /
 
inkább kb. ilyet...

De a 700ps késleltetésű komparátor is nagyon tetszik, mert egy 1/100 osztóval is elmegy.

bemenet.PNG
    
(#) Petroimro válasza Reggie hozzászólására (») Márc 24, 2012 /
 
Ha összekötöm az ft232 rx és tx lábát, akkor a terminálban visszakapom, amit küldtem.
(#) Reggie válasza Petroimro hozzászólására (») Márc 24, 2012 /
 
Akkor csak a programoddal lehet gond. Biztos jol szamoltad ki az UBRR erteket? A CKDIV8 nem maradt veletlenul engedelyezve?
Következő: »»   428 / 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