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
Kis segítség a számoláshoz: a segédellenállás értékét úgy kell megválasztani, hogy az NTC mérési tartománya a lehető legnagyobb felbontásban legyen kihasználva. Az első esetnél a két véglet(80°C és 10°C) mellett mért ellenállás számtani közepe. Így a "középhőmérséklet" mellett a mért feszültség 2.5V lesz. Ha túl nagy áram folyik így az ellenálláson a 90°C-os résznél akkor növelni kell az ellenállást. Ez a lépés a felbontást rontja, közvetlenül a pontoságot nem.
A második képen, ha nem ismernéd fel, egy áramgenerátor szerepel. A soros kapcsolás miatt az NTC-n mindig* ugyanakkora áram folyik mint az R2 ellenálláson: I=Uref/R2. Az AVR pedig ezt a feszültséget fogja megkapni: I*(R2+Rntc)=Uref*(1+Rntc/R2) Itt megvan az a szabadság, hogy az Uref és R2 "kicsi" értékre történő megválasztásával a mérési tartomány majdnem 0V-tól 5V-ig terjed. A "+V" helyére nem kell kötni semmit, az csak ott van. A dolog hátulütője, hogy a műveleti erősítőnek +/- 12V-os tápot kell biztosítani. Ha Rail-to-Rail típus akkor 0V és +5V elég lesz neki.
Ez nem programozási segítség kérés, inkább elektronikai lenne. Olyan megoldást keresek, amivel tudok 6 ledet vezérelni, ezek közül mindig csak 1 égne és még 6 ledet, de ezek közül több is égne. Ez ugye 12 led, és ha egyesével kötöm az avr-re akkor ugye 12lábat alapból elvesz. Olyan kapcsolás érdekelne, amivel tudok lábakat felszabadítani, de a ledek is megmaradnának.
Gondolom óra akar lenni. Az első 6-os blokk esetén a "charlieplexing" a nyerő, így azok már
csak 3 lábat vesznek el, és statikusan is vezérelhető hiszen mindig csak 1 LED világít. A másik 6-os blokkra is működik a dolog, de akkor időben folyamatosan kapcsolgatni kell hogy az összes kívánt LED-et lásd égni.
Nem óra, hanem egy erősítőnek az "agya" lenne. Az első 6os blokk az a bemeneti helyzetet jelző ledeké, a másik 6os meg a többi módozatnak a ledjei (power, mute, stb).
Áh köszönöm, valami hasonlón gondolkoztam én is, (valahol láttam ilyen megoldást, csak az kisebb volt) és nem tudtam mi a neve, és pontosan, hogy kell megcsinálni.
Ez az IC-s megoldás jobban tetszik. A végleges panel még nincs kész, úgyhogy szerintem neki is állok valami tervnek.
Köszönöm a segítséget ![]()
Valami nem stimmel a rajzodban. Charlieplexing és 4 vezeték esetén 12 LED hajtható meg. A képlet: n vezetékkel n*(n-1) LED, (vagy nyomógomb). Meg is találtam a hibát: az első és a harmadik sor között hiányzik egy antiparalel páros. De ettől függetlenül 10 LED-re is működik.
A hozzászólás módosítva: Aug 19, 2013
Az SPI es a shiftregiszter a 2 varazsszo ami neked kell! SPI-vel csak 4 vezetekkel vezerelhetsz shift regiszterek segitsegevel akarhany LED-et. Egy shift regiszterrel 8 LED-et tudsz meghajtani, de ha sorbafuzol ket darabot azzal mar 16 LED vezerelheto...
AVR SPI + shift regiszter A hozzászólás módosítva: Aug 20, 2013
- SPI bővítő elvisz 3 (4) lábat (3: MOSI-kuld, SCK-orajel, CS-ChipSelect
8 I/O bővítő (75HC595...) Sok I/O (TM1836, MAX7221/7219, HT3216) - I2C busz az elvisz 2 lábat. 8 I/O bővítő (PCF8574, MCP2008...) 16 I/O bővítő (MCP23016, MCP2017) -1Wire bővítő elvisz 1 lábat 8 I/O bővítő (DS2408) Esetleg másik AVR a meghajtásra? És ide bármi protokollt tehetsz... ![]()
Nagyon szívesen! Bár egy pillanatra még azt hittem hogy én tévedek.
Köszönöm mindenkinek az infókat! Ennyi módszerről nem is tudtam, de ennyi módszerből egy tuti jó lesz.
![]()
Sziasztok!
3x4-es matrix billentyűzetet használok, és 2x7szegmenses kijelzőre ír ki számokat, azt szeretném valahogy megírni hogy ha egymás után 2 számot ütök be, mondjuk 1-et meg 2-t akkor az 12 legyen. valaki tud rá esetleg megoldást? Előre is köszönöm.
Beletenném a lenyomott gombokat karakterként egy stringbe, 12 gombod van az 10 szám(0-9), plusz visszatörlés és egy enter. Megszakításokkal van kezelve a gomb lenyomás akkor egyszerű: string régiérték + lenyomott gomb, enterre pedig egy típus konverzió. Biztosan lehet egyszerűbben is, így eszi a controller memóriáját a konverzió.
Sziasztok!
Szeretnék egy régi-régi gondomra végleges megoldást találni. Eddig hőmérséklet mérést legsikeresebben NTC-vel tudtam megvalósítani. Próbálkoztam LM35-el, de hosszú vezetéken nagyon instabil volt. Ami minden esetben elvárás lenne: - 10m vezeték ne okozzon neki gondot - 0,1 °C felbontásban tudjam kezelni a mért értéket - Széles tartományban mérjen. Legalább -30°C és +110°C között. - Meghibásodás esetén könnyen cserélhető legyen Arra jutottam, hogy DS18 20 vagy DS1821 lenne a legmegfelelőbb választás. Ami a gondom és nem egyértelmű a válasz: - Saját hőtermelése mennyire problémás - 0,1 °C felbontáshoz, ha jól látom kell a 11bit felbontás, de inkább a 12bit. Ekkor viszont szerintem lassú. 750ms és, ha másodpercenként akarom megjeleníteni egy LCD-n a mért értéket akkor szerintem leterhelem az AVR-t, de ebben pl. bizonytalan vagyok. - Meghibásodás esetén, ha cserélni kell a szenzort akkor a szoftvert is frissíteni kell? Az IC címe miatt gondolom. A hozzászólás módosítva: Aug 22, 2013
DS18x20 esetén a 750 ms nem azt jelenti hogy az adatátvitel addig tart, hanem két mérés között minimum ennyit kell várni. Ezalatt azt csinál az AVR amit csak akarsz. A másodpercenkénti megjelenítéssel nem lesz gond, a mérés és az új érték kiíratása 100ms alatt megoldható.
Ha egy vezetékre csak 1 IC megy, akkor használhatod a "skip adress" parancsot, és ezzel meg van oldva a cserebere kérdése is. De létezik "adress detect" metódus, amivel feltérképezhető a vonalon lévő IC-k címe. Ha ráérsz leprogramozni akkor ezzel is meg van oldva a csere. A hozzászólás módosítva: Aug 22, 2013
Egy vezetékre csak egy szenzort szánok.
És vajon marad elég idő a többi feladatra is? Ez a 750ms zavar nagyon ill. a saját hőtermelését nem értem. Szerk: 750ms most már értem. Az nem befolyásolja az AVR-t. ![]() A hozzászólás módosítva: Aug 22, 2013
Azt én honnan tudjam hogy marad-e elég idő másra is? Nem az én programom...
![]() Szerintem felesleges ezen rágódni, mindennek van hőtermelése! Egy digitális szenzor esetén biztosan odafigyelnek erre is, nem Te találtad fel a spanyolviaszt.
A digitális jel miatt gondolom kevésbé zavar érzékeny. Ill sok helyen olvastam már, hogy hosszú vezetéken jobb választás.
Az LM35 állandóan billeg +-1°C. Próbáltam az adatlap szerinti szűréseket elvégezni, de csak javult, de nem szűnt meg az instabilitása. ![]() De, ha erre jól bevált és stabil megoldásod szívesen fogadom. Ill. Még egy gondom volt az LM35-el. Negatív hőmérséklet méréséhez az adatlap szerint kell (-) táp is. A hozzászólás módosítva: Aug 23, 2013
Ezt úgy szokás megírni, hogy:
kala1982a megoldásáról lebeszélnélek egyrészt a string kezelés okán, másrészt a borzasztó helypazarlása okán. Ez bármekkora méretű integerre működik (értelemszerűen az overflow-t ki kell védeni). A hozzászólás módosítva: Aug 23, 2013
A DS1820 (1-wire busz) zavarerzeketlen. nem veletlen talaltak ki a 60-70 (illetve az ajanlasok betartasaval) a 200 m tavot.
1 vezetekre simen mehet tobb eszkoz. Nalam a csucs az 25 homero volt 30 m kabelen. Sajat hotermeles _folyamatos_ meressel <0.1 fok hibat okozott (5V rendszerben). A homero -40..+125 fokot siman tud. Konnyu csere: nalam telefoncsatlakozos (szabvanyos) a meroillesztes. Azaz azonnal cserelheto a kabelvegen. Sima 4eres telefonkabelen megy a meres... 11 bit: 0.125fok, 12 bit:0.0625 fok. 750 ms a meres. azaz a merj! kiadasa (~3 msec) es a eredmeny kiolvashatosaganak _kezdete_ kozt eltelt idot illik kivarni. De ha tavtaplalt a rendszer (kap 5V-t is) akkor <200 ms a meres! Masodpercenkent meres: 1. Hofok kiolvasas 2. meres inditasa 3. LCDre kiirni a hofokot 3a waitms 150 4 goto 1 Igy a meresi kesleltetesed a LCDre kiiras+varakozas, es _azonnal_ mindig ott a kesz hofokerteked! A DS1820 ha csak 1 van: a SkipRom utasitassal kihagyhatod a chipazonositast. Igy a buszon 1 homero van, igy a : - mindenki merjen - barkitol kell a hofokadat utasitasokra az egyszer momerod valaszol ![]() Vagy prg inditasakor lekerdezed ki van a buszon es utana azon a cimen szolitgatod.... Fontos! CRC azert van benne, hogy a hibakat/zavarokat a kommunikacioban kiszurd! Am ilyen hosszakra a parazita mod nem megy, hanem csak a tavtaplalat mod (3 vezetek). Az LM 75 zavarerzekeny: kell melle a 100nF keramiakondi, a 1k5..2k2 felhuzo az I2C buszra es a max kabelhossz <1m. A hozzászólás módosítva: Aug 23, 2013
LM75 az adatlap alapjan +/-1 fokot tud. Ne is varj tobbet tole....
Nem kell negativ tap a chipnek a minusz hofokokhoz!
1-wire design app notes:
http://www.midondesign.com/Documents/1-WireApplicationGuide103.pdf
Sziasztok!
Nemrég kezdtem el foglalkozni az AVR (ATmega8, ATmega16 és ATmega32) mikrovezérlőkkel (mert ezt követelték a munkakörülmények) és mivel megrögzött PIC-es vagyok ezért nagyon zavar az, hogy a makrók definiálásánál nem lehet külön egy PORT egyik bitjét elnevezni és majd erre hivatkozni a program további részében, legen akár bemenet vagy kimenet. Pl: PIC: (MPLAB C18-ban)
AVR: (AVR Studio-ban)
Itt egy egyszerű példa, eltekintve a prell jelenségtől és egyéb beállításoktól (uC típus, include-ok, CPU órajel, stb.) mindkét mikrovezérlő ugyanazt csinálja: ha lenyomjuk a gombot akkor kigyul a LED, mint a példából is látszik PIC-ek esetén sokkal egyszerűbb és átláthatóbb a program, mint AVR-ek esetén. Nem lehet valamilyen módon ugyanúgy használni a bitek kezelését AVR-eknél is, mint PIC-eknél, mert sokszor idegesítő az a sok léptetés (1<<PXn), meg tagadás és egyéb műveletek egy bit beállítására? Előre is köszönöm! Üdv, Atti. A hozzászólás módosítva: Aug 24, 2013
Bascom-AVR jó?
pl: kimenet: Portb.1 bemenet: pinb.1
Sziasztok!
Kérnék egy kis segítséget... Van egy BCD-ből 7 szegmenses meghajtó IC-m. PC5-től PC2-ig vannak a lábak bekötve a meghajtó IC-be. PC5 - A, PC4 - B, PC3 - C, PC2 - D. Elindítok egy számlálót 9-ig, ha eléri a 9-et 0-áz. Ez oks. Viszont, hogy tudom a számot BCD-be átszámoltatni és a lábakra varázsolni? Köszi! ![]()
biztos jobban kezeli a Bascom ilyet, csak az a baj hogy az
1: nem C 2: 4KB felett teljes verzió kell 3: optimalizálás - van-e egyáltalán? A hozzászólás módosítva: Aug 24, 2013
A C megoldás lehet hogy nem olyan szép mint a Bascom-os, de azért használható:
De készíthetsz saját makrókat:
C-ben:
|
Bejelentkezés
Hirdetés |