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
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 "
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
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...
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.
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.
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ő
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!
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.
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!
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?)
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).
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
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...
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.
Megpróbáltam, így ahogy rajzoltam de semmi, talán nem olyan vad a lábain a relékattogás..
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
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.
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.
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.
Mondjuk valami hasonló elrendezés jó lehet......
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.
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.
Ha bascomot használ nem kell HW ic2 láb SW ből 2 sorral lehet állítani hogy hova köti.
röntgen: Én is erre gondoltam. Csak nem tudtam lerajzolni most, de jó lett.
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.
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.
Szereztem kölcsön egy szkópot csak bele dugtam a táp + kábelét és ezt mutatja.
A táp negatívját is csatlakoztasd a helyes mérés kedvéért.
|
Bejelentkezés
Hirdetés |