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   394 / 840
(#) TavIR-AVR válasza zombee hozzászólására (») Dec 27, 2011 / 1
 
A belső felhúzó nagyértékű. Így ennek következménye hogyha reset kapcsolót/gombot teszel rá, akkor az ottlevő kábel antennaként viselkedik. Így a véletlenszerű RESET bejátszhat. Főkleg ha a közelben induktív / zajongó eszközök jelennek meg.

Sőt az A sorozatú IC-k érdekesebbek:
- belső ellenállások értéke megnőtt.
- belső csíkszélesség csökkent.
Következmények:
- külső zavarokra érzékenyebbek, ha csak a belső felhúzó-ellenállásra építesz
- kisebb áramfelvétel
AVR A vagy AVR nem A

Illetve érdemes a fejlesztéseknél a következőket betartani:
- BOD bekapcsol (tápfeszingadozás hatásainak kivédése (RESET))
- Watchdog használata (tetszhalott chip újraindítás)
- MCUSR regiszter viszgálat, hogy vajon mi volt a reset oka
- Külső kvarc esetén korrekt bekötés (1Mohm a 2 láb közt, GND fele egyforma 12...27pF kondi, magas kvarc esetén CkOpt bekapcsolás)
- Tápfesz szűrés (100 nF kerámia)
- Vcc és VccA / GND és GNDA bekötése
- korrekt vezetékezés és árnyékolás...

A tápfesz HW-hibák okozzák a bosszúságok 20 %-át... Pedig csak kis odafigyelés kell.

A reset láb és a Vcc fele 1k5...10k és a Reset+GND közt 100nF kerámia a bekapcsolási késleltetést is megoldja, amikor az áramkör kezd működni és minden rendszer még a "bekapcsolási tranziensek lázában ég "
(#) Richei hozzászólása Dec 27, 2011 /
 
Sziasztok
Lenne egy kérdésem. Van egy Atmega 88-am. A C porton 2 lábat kimenetbe állítottam. Azon keresztül vezérlek egy TA8429-es IC-t. Motor forgásirány váltást végez. A D portra nyomógombokat tettem, programmal vezérelve lehet váltani a forgás irányt. A motor egy 12V-os áttételes DC motor. Valamint a C port lábaira ledeket kötöttem ezzel is lehet figyeleni a forgás irányt. Minden rendben működött gombnyomásra szépen irányt vált. Aztán egyszer csak a Ledek fényereje lecsökkent és nem működött tovább a dolog. Rámértem a port lábain csak 1,82V van. A tápfeszültség 4,9 V. Áttettem egy másik portra a motor vezérlőt a ledekkel ott is ugyanez van csak halványan világítanak a ledek. Mi történt? Tönkrement a mikrovezérlő? Előre is köszönöm a segítséget
(#) zombee válasza Richei hozzászólására (») Dec 27, 2011 /
 
Lekötötted a motorvezérlő IC-t az AVR-ről és úgy is próbáltad? A LED-ek előtt mekkora előtét ellenállás van?

A tünetekből ítélve az jutott még eszembe hogy a DDRC az adott lábakon nulla, pedig 1-nek kéne lennie.
Ilyenkor egy áramgenerátor húzza fel(kb. 100 uA), ami a LED-ek nyitófeszültségén értelemszerűen elakad.
Ezt az áramgenerátort 47kOhm-os felhúzó ellenállásnak is nevezik(ahogy én is), kinek mi tetszik...
(#) Richei válasza zombee hozzászólására (») Dec 27, 2011 /
 
Ha a motorvezérlő IC rajta van az AVR-en akkor halványan villognak a ledeket programtól függetlenül. Ledek előtt 1 kohm-os előtét van. Lehet soknak tűnik,de ezelőtt működött. Ha a motorvezérlőt lehúzom az AVR-ről akkor halványan világítanak a LED-ek, ahogy a program meg van írva.
(#) zombee válasza Richei hozzászólására (») Dec 27, 2011 /
 
Tehát nincs változás? A feszültséget is nézted? Ugye a portláb feszültségét méred és nem a LED-ekét?
Egy apróság még eszembe jutott, az az, hogy ha a PORTC-t használod(analóg rész) akkor az az
AVCC-ről van megtáplálva. Ha nem kötöd az AVCC-t is a tápra akkor előfordulhat feszültségesés a C porton...

Az 1kOhm nem olyan egetrengetően nagy, de biztosan halványabb a LED mint ha 150-220 Ohm lenne előtte.
Ettől függetlenül ha a portlábon ~1.8V van mikor a tápfesz 4.9V az már nem egészséges,
vagy a program hibádzik(pl. egy lekezeletlen interrupt vagy véget érő program), vagy a port van túlterhelve.
(#) Gery válasza sikolymester hozzászólására (») Dec 28, 2011 /
 
Szia!

Bocs, hogy sokáig nem írtam, de ez csak most tudtam leülni és foglalkozni ismét a problémával.

Szóval a motor mindkét irányba tud forogni, de külön fék nincs rajta. A forgásirányt a potméter forgásiránya adja meg.
a "sebesség=konstans*(beállított pozíció érték-aktuális pozíció érték"-ben a konstansot 0.1 -re állítottam és így lassan forog, de ennek következtében nem mindig "őrül" meg a motor.
Nos nekem ennél talán nagyobb sebesség így nagyobb konstans is kéne, de ez önmagában nem elég.
Abban tudsz segíteni hogy az integráló tagnak minek kéne lennie?
Olyat találtam az interneten, hogy:

I=I+(K/T)*(sv-pv)

ahol
I=integrálási tag,
K=erősítési konstans
T=időállandó (Ha jól értelmezem egy mérés alapján meghatározott konstans. Sok mindent kipróbáltam ide, de az eredmény mindig ugyan az volt.)
sv=beállított pozíció érték,
sp=aktuális pozíció érték,

Aztán ezt az I tagot hozzáadtam a sebességhez, de csak annyi történt, hogy ez az I tag folyamatosan számolt felfele és a motor még őrültebben forgott.

Minek kéne lennie az I tagnak, vagy hogy kéne bele vinni az egyenletbe, hogy a szabályozás működőképes legyen?

Üdv.:Gergő
(#) karika200 hozzászólása Dec 28, 2011 /
 
Sziasztok!

Elkezdenék ismerkedni az MCU-kal és az AVR mellett döntöttem. Kitűztem magam elé egy relatív egyszerűbb projectet, aminek még hasznát is látom és a későbbiekben tovább is vinném a dolgot. A dolog a következő:
Van egy RS-232 porton kommunikáló hőmérőm ami már évek óta remekül működik. Arra gondoltam, hogy kezdésnek építenék egy egyszerű kapcsolást, amin ül egy AVR ami egy LCD-re írná ki a dolgokat és egy soros portot kezelne. Először természetesen a "Hello world!" lesz az első lépés, de ha az megvan, így nem kell új panelt építeni a hőmérő lekérdezéséhez és az így kapott adatok LCD-n való megjelenítéséhez.(Amikor meg már oda vissza megy minden, egy Arduino-s Ethernet modullal meg lehetne támogatni a dolgot akár ;])
A szoftveres oldalával el boldogulok, de a hardware-hez kérnék egy kis segítséget, kapcsolási rajz formájában. Tehát egy olyan faék egyszerűségű kapcsolást keresek, amin ül egy AVR, egy LCD kijelző és egy RS-232-es kommunikációra alkalmas interface. Természetesen a kapcsolási rajz mellett minden egyéb tippet, tanácsot is nagyon szívesen fogadok.
Köszönöm!
(#) zombee válasza karika200 hozzászólására (») Dec 28, 2011 /
 
Annyi biztos hogy ennek a hőmérőnek nem sok köze van ahhoz az RS-232-höz amit megszokhattnuk.
Egy AVR-es cucchoz általában csak az Rx/Tx kerül bekötésre, néha még becsusszan a CTS/RTS.

A jó hír, hogy mindenféle hókuszpókusz és passzív elemek(kondik, ellenállások, diódák) tömegmészárlását elkerülve
egy ilyen hőérzékelő közvetlen ráköthető az AVR portlábaira, és ugyanez igaz az LCD-kijelzőre is.
(#) Tetye hozzászólása Dec 28, 2011 /
 
Sziasztok!
Van egy komoly gondom. Van egy avr-es áramkör amit most raktam össze. Ha usb 5v-ról megy akkor hibátlanul működik, de ha saját tápról akkor vannak bajok teljesen megbolondul az egész, mintha a táppal lenne a baj, de teljesen stabil 5v-ot ad. Rakok fel egy rajzot róla.
Szkópom nincs. A fekete táp a bal felső sarokban egy 230V/9V1A es kapcsi, dugasztáp.
Teljesen megörül tőle a cucc, soros porton is és a kijelzőn is csak összevisszaságok vannak a kimeneti lábak is össze vissza lebegnek. Az AVR 11,0592 Mhz külső kristályról megy, két lába 27pf-el GND-re húzva, háza szint úgy. Ha az X ponton megszakítom és USB ről táplálom akkor hibátlan stabil. Ha az adapter helyett kapja az USB 5v-ot akkor is jó csak kisebb picit a fesz. mert step-down ic van ugye a tápban. De ha oda adok pl akku 12 v -ot azzal is jó csak ezzel az adapterrel nem és ebből van csak amit tudok hozzá használni mert se egy pc-t se egy akkut nem rakhatok oda. Ha vannak ötletek azt köszönöm!

bug.JPG
    
(#) karika200 válasza zombee hozzászólására (») Dec 28, 2011 /
 
Igen, nézegettem a kapcsolásokat, cikkeket itt az oldalon és ezen a panelen néztem, hogy csak RX és TX van bekötve. Le tudnád írni, hogy hogyan lehetne egy ilyen IC-t az AVR-hez kötni(A hőmérőnél használt IC a Dallas 2-Wire kommunikációját használja.)? (Vagy lehet egyszerűbb lenne hőt mérni egy ellenállásal?)
(#) zombee válasza karika200 hozzászólására (») Dec 28, 2011 /
 
Ellenállással sem lenne egyszerűbb, mert ott be kell kalibrálni. Ugyanis ott Ohm-okat kapsz.
A Dallas-os hőmérő csak 1 portlábat foglal el, a másik kettő a táp+föld! Több hőmérőnél az adatláb
közös is lehet, mivel egyedi azonosítóval(címmel) rendelkezik minden ilyen eszköz.

Ha csak 1-2 hőmérőd van akkor a kommunikáció könnyebb oldalát választanám, azaz külön portlábakra
mennek a hőmérők. Ennek az az előnye hogy nem kell a címekkel foglalkozni, egy SKIP ROM utasítás megteszi.
Egyedüli hátrány hogy minden hőmérőhöz külön szál megy ki és portlábat is foglal, de a föld-táp közös lehet.

Ha közösíted őket(pl. mert sok van belőlük) akkor marad a címlekérdezgetés bonyolult algoritmusa,
vagy a címek leolvasása/bepötyögése az IC-k sík elülső oldaláról(és a CRC kiszámítása: az nincs rajta).
(#) karika200 válasza zombee hozzászólására (») Dec 28, 2011 /
 
Végül is csak 2 ilyen IC-t szeretnék egy AVR-re bízni, egyet beltérre, másikat kintre. Tehát az egyszerűbb, portonként egy IC megoldás nekem teljesen megfelel. A címzés viszont miért probléma az MCU-nál? Én a PC-s szoftverben csak simán megcímzem, hogy 0x48, 0x49 stb.
Mondtad, hogy 1 IC 1 port. Akkor gondolom az IC...

VDD lábára megy a +5Volt
az A0, A1, A2 és GND lábakat földre húzzuk
az SDA láb megy az AVR-re

és a 2-es, SCL lábra pedig adunk neki valami féle órajelet, vagy az hova kerül?

Köszi
(#) luxmanpower válasza karika200 hozzászólására (») Dec 28, 2011 /
 
Jó lenne tisztázni, hogy mi az IC típusa, mert amiről te beszélsz az az IIC protokoll, és annak köze sincs a Dallas protokolljához...
(#) Reggie válasza Tetye hozzászólására (») Dec 28, 2011 /
 
Nyilvan valoan nem stabil a tap es ez okozza a problemat. Mindenbizonnyal a DC-DC konvertered es a fali dugasztap AC-DC konvertere osszegerjed. En megprobalnek tovabbi szuro elemeket rakni a ketto koze, azaz soros RC tagokat nagyerteku kondival es kiserteku ellenallassal. Kezdetnek pl. rajkal egymas utan 1-1 5.1Ohm+1000µF-ot. Nem biztos, hogy ez megoldja a problemat, szkop nekul nehez megmondani, hogy pontosan mi lenne a jo neked, de ha megprobalod, baj nem lesz belole. Ha ennyire nem akarsz vacakolni, akkor kezdetnek probalj meg egy diodat rakni a ketto koze, hogy csak egy iranyu lehessen az energia-aramlas, hatha segit.
(#) Tetye válasza Reggie hozzászólására (») Dec 28, 2011 /
 
Megpróbáltam, így ahogy rajzoltam de semmi, talán nem olyan vad a lábain a relékattogás..

bug1.JPG
    
(#) zombee válasza Tetye hozzászólására (») Dec 28, 2011 /
 
Hello!

Szarvashibák kapcsolóüzemű tápoknál:
- mezei dióda helyett Schottky kell
- mezei kondi helyett low-ESR kell
- a tekercsnek az áramot is kell bírnia(~1A), cseppforma meg SMD biztos nem jó
- az alkatrészeket egymáshoz közel kell tenni rövid vezetékekkel, breadboardon gerjedni fog
(#) karika200 válasza luxmanpower hozzászólására (») Dec 28, 2011 /
 
Ahogy a linkelt kapcsoláson látszik is DS1621-es IC. Tehát azt mondod, hogy már csak a bekötése miatt is i2c? Hogyan lehetne egy ilyen IC-t és egy LCD kijelzőt illeszteni egy AVR-hez? Típust direkt nem írtam, de gondolom a legegyszerűbb 8 bites jószág nekem bőven elég lesz. Köszi.
(#) Tetye válasza zombee hozzászólására (») Dec 28, 2011 /
 
Hali!
A dióda amit a tápba kell tenni az 1N5822, több rajz ezt írja és eddig nem volt vele baj.
Az összes kondi yageo low esr kondi.
A tekercs az egy 100uH 3A es 1,5cm*1cm kb.
És az egész kb egy SD kártyányi részen van.
(#) Tetye válasza karika200 hozzászólására (») Dec 28, 2011 /
 
Ez nem soros porton adja az adatokat, hanem i2c-n.
Ehhez két avr láb kell neked, az LCD-hez 4 felsőbit, E, R/W ez 6 lábat visz. Atmega8 de még a tiny2313 is bőven elég neked ehhez.
LCD mehet rá direktbe a lábra, DS ick szint úgy de oda kell 2db 10k-s felhúzó ellenállás, és ha már 10k van a kezedben tegyél a UC reset lábára is egy felhúzót.
(#) röntgen válasza karika200 hozzászólására (») Dec 28, 2011 /
 
Mondjuk valami hasonló elrendezés jó lehet......
(#) dB_Thunder válasza Gery hozzászólására (») Dec 28, 2011 /
 
Nem értem miért kell újból feltalálni a spanyolviaszt, mikor komoly matematikusok leírták, hogy áll össze egy PI, PD, vagy PID vezérlés. És azt is kitalálták hogy kell BEHANGOLNI !Ezt józan paraszti logikával nem lehet hangolni, mert kicsik bonyolultabbak az összefüggések.
A neked megfelelő értékeket csak TE TUDOD MEGHATÁROZNI ! Nem kísérletezni kell, úgy sosem lesz meg az eredmény! Ráadásul más más szabály vonatkozik a különböző szabályzókra ! Tehát a PID szabállyal nem lehet PD vagy PI szabályzót hangolni!
Gond még az lehet hogy bizonyos üzemi feltételeknél más paraméterekkel kell működnie a PID szabályzónak, ezért is jó az önszabályzó (tanuló) PID.
Neked nem programozási problémád van hanem az hogy fogalmad sincs a PID-ről, ehhez pedig már ajánlottam fórumot, most adok egy linket ahonnan az általam összegyűjtött infók vannak. Találsz benne elméletet gazdagon, illetve néhány analóg megvalósítást is.
Egyébként a I tagot néha "nullázák",de ez is kiderül a leírásokból.

PID-es cuccok.
(#) zolee1209 válasza Tetye hozzászólására (») Dec 28, 2011 /
 
Az R tag soros a tápágban.
(#) röntgen válasza röntgen hozzászólására (») Dec 28, 2011 /
 
Bocs a kép lemaradt.

ds1621.jpg
    
(#) zombee válasza Tetye hozzászólására (») Dec 28, 2011 /
 
Hűűűha, kicsit megtévesztett a Dallas-os dolog, mert azonnal 1-Wire amire gondoltam, itt meg egész más.

Az I2C jóval egyszerűbb mint az 1-Wire, persze kell egy kis idő mire ezt is megérti az ember.
Én minimum ATMega48-at vagy ATMega8-at ajánlok, mert ezeknél majdnem teljes, hardver-I2C támogatás van.

Az adatok sorosan mennek oda-vissza(SDA), de az órajelet csak az AVR adhat ki a második vezetéken(SCL).
Egy ATMega8/48/88 esetében megvan ez a két szál, vannak működő és kisméretű C könyvtárak is.
(#) Tetye válasza zolee1209 hozzászólására (») Dec 28, 2011 /
 
Próbáltam úgy is de nem akarja.
(#) Tetye válasza zombee hozzászólására (») Dec 28, 2011 /
 
Ha bascomot használ nem kell HW ic2 láb SW ből 2 sorral lehet állítani hogy hova köti.
  1. Config Sda = Portd.5
  2. Config Scl = Portd.4
  3. Config I2cdelay = 10

röntgen:
Én is erre gondoltam. Csak nem tudtam lerajzolni most, de jó lett.
(#) Gery válasza dB_Thunder hozzászólására (») Dec 28, 2011 /
 
De azóta már PI szabályzóról van szó nem PID-ről, és én is azt próbálom megcsinálni.
És egy oldalon egész jó leírást találtam, ami alapján sikerült megvalósítani időközben, az erősítést és a többit is kísérletezéssel aránylag jól belőttem. Persze épp emiatt még közel sem tökéletes, és még van egy másik probléma, de az nem ebből fakad.
A zip fájlra amit adtál azt írja ki, hogy hibásan csomagolt. Nálam van a hiba vajon? Mert érdekelne.
(#) karika200 válasza röntgen hozzászólására (») Dec 28, 2011 /
 
Köszönöm a kapcsolást! Lenne 2 buta kérdésem vele kapcsolatban:

1, A "felfele mutató nyilak" pontosan mit jelölnek? Utána néztem és a "signal-ground"-ot találtam a legjobb magyarázatnak. Pontosan hova kellene kötni?
2, Az U1 A0,A1,A2 lábai GND-n vannak, de az U2 lábainál csak az A1 és A2 van GND-n. Nem szeretném megkérdőjelezni a kapcsolást, mivel sajnos ennyire nem értek hozzá, pusztán érdeklődök, hogy ez szándékos-e.

+1, Betápot hol adok a kapcsolásnak?

Köszönöm a segítséget neked is és a többieknek is.
(#) Tetye válasza Reggie hozzászólására (») Dec 28, 2011 /
 
Szereztem kölcsön egy szkópot csak bele dugtam a táp + kábelét és ezt mutatja.

tap.JPG
    
(#) zolee1209 válasza Tetye hozzászólására (») Dec 28, 2011 /
 
A táp negatívját is csatlakoztasd a helyes mérés kedvéért.
Következő: »»   394 / 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