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 |










