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
Ha csak a lábszám miatt kell kettő, akkor miért használja mindkét AVR a külső memóriát? Mekkora EEPROM/SRAM memória kell?
Egyébként ha csak lábszámnövelés a cél és van már egy SPI vagy I2C buszod, akkor a választás nálam MCP23017 vagy MCP23S017. Ezeket r*hadt könnyű kezelni, igaz, pár napot eltöltöttem a doksi áttanulmányozásával és a próbálgatással mire meglett. Ja, és tudja az 1.7MHz-es módot. Ezen kívül, ha még gyorsabb cuccot akarok akkor shift regiszter(74HC595) vagy címezhető latch(74HC259) a befutó nálam, én ezeket ipari áramkörökben (is) használom. 8 darab MCP23017-el építettem egy tanítható csatlakozásvizsgálót 128 csatornával, a másodperc töredéke alatt megvizsgálja hogy van-e szakadás vagy zárlat az egyébként kusza kapcsolásban... A hozzászólás módosítva: Dec 31, 2015
Raspberry PI-n fordítottam egy programot.
Minden jól ment egy darabig, de most ezt kapom:
A program nem változott és elvileg a fuse bitekhez sem nyúltam. Nincs rákötve semmi csak a reset, VCC,GND, MISO, MOSI, SCLK Ötletem sincs mi lehet a baja, lehet kinyírtam a chippet?
Hát még ilyet: most meg működik.
Azért fent hagyom a kérdést, hátha tényleg van valami hiba a dologban.
Dugdosós panel? = Megbízhatatlan érintkezés! = Váratlan érthetetlen hiba jelenségek! = Hajtépés!
Következmény?: Dugdosós panel elajándékozása az ellenségednek! Idézet: Ezt azért erős így kijelenteni. „Dugdosós panel? = Megbízhatatlan érintkezés!”
Az alap problémám az volt, hogy viszonylag sok maradandó memória kellett egy projekthez (4k). Atmega328P-n EEPROM-ban tárolni ennyit nem lehet, mert kevés a hely. Lehet külső EEPROM-ot hozzáadni, vagy erősebb IC-t berakni, de számomra egyik sem tűnt igazán optimálisnak.
Az alap kérdés az, hogy van egy 32k-s IC, amiből a program max 10k-t foglal el, akkor miért nem használjuk a maradék flash-t adattárolásra. Ezt próbáltam ma ki és sikerült a fennmaradó flash-ben adatot tárolnom. Az alap probléma az, hogy application memory-t kizárólag a bootloader írhat (SPM parancs). Éppen ezért meg kellett hackelni az Arduino bootloader-jét, hogy futtasson igény esetén SPM-et. A bootloader-ben telepítendő kód 6 byte-ot foglal el:
Ezt a kódot hívogatja az alkalmazás, amikor saját magát írja felül. Lehet, hogy más is érdekel a téma, azért osztottam meg.
Sziasztok!
AtTiny45 pwm üzemmódjával van egy kis bajom, kérdésem. Oc1B (pb4) portot szeretném felhasználni úgy, hogy fix széles negatív impulzusom lenne (mondjuk 2 t1 ütem) és oc1c által megadott ütemnyi H szint (változó, de a teszthez legyen fix 10). Ehhez bekapcsoltam szerintem az összes szükséges vezérlő bitet ( ocr1b, ocr1c, pwm1b, com1b1:0 , órajel osztás). Az én olvasatomban com1b1:0= 11 üzemmódban produkálná azt az impulzust, amire nekem szükségem lenne. Ez a studio debug programjában így is működik. De nem lép ki a pb4 lábon semmi! Com1v1:0 másik két üzemmódjában (10 és 01) viszont dolgozik a pb4 láb (és a debug is ugyanazt csinálja). Valami hasonlót tapasztalt már valaki vagy én hibázok el valami beállítást? ui: (Tudom, be lehet állítani úgy is oc1b értékét, hogy oc1c-hez képes legyen fix különbség, csak ebben az esetben két regisztert kell beállítani a frekvencia módosításakor, amely mindig szinkronizációs nehézséget okoz. Ezt szerettem volna elkerülni.)
Sziasztok!
Több AVR kommunikációját hogy oldanátok meg,ha a sebesség nem számít? Lenne egy 1-1 kapcsolat: itt soros kapcsolatra gondoltam Lenne egy master-slave kapcsolat: itt TWI/I2C-re gondoltam. Ezek a kapcsolatok mindenképp vezetékesen lennének,de a sebesség nem számít Van más lehetőségem is? Atmega328p-vel szeretném. Köszönöm
Kb. millió lehetőséged van. SPI, infra, WIFI, Bluetooth, 1Wire, I2C, amit akarsz. Írhatsz saját protokollt is. Talán a legegyszerűbb a soros kapcsolat kiépítése, az optikai leválasztás is könnyen megoldható, sokkal több uC-t is felfűzhetsz ugyanarra a kábelre, majd a proci eldönti, hogy neki szól-e a parancs.
Elég fontos szempont a távolság, illetve a későbbi fizikai elhelyezés (egy készülékben lesz a két uC vagy különböző pontokon lesznek pl.: a házon belül lesznek vagy az egyik eszköz odakint a szabadban, esetleg a vezeték két épület között lesz kihúzva, stb.).
Köszönöm a válaszotokat!
két különböző nyák lesz, más más funkcionalitással. Az egyik inkább ilyen adatkiértékelő/gyűjtő,a másik meg adatmegjelenítő. Mind a kettő eszköz szabadban lesz,de a két eszköz körülbelülel 1-1,5 méter távolságban vannak. Viszont, a két eszköz kommunikációja zajosabb úton mehet keresztül(ahol több vezeték is mehet,kisebb "nagyobb" feszültséggel). Ez egy járműn lesz. A vezetékeket,ahol majd kommunikálnak szeretném a zajokat kiküszöbölni. Erre gondoltam: https://en.wikipedia.org/wiki/Differential_signaling Ezt használják a soros átvitel eszközöknél. Itt egy CMOS invertert szeretnék (Egy FET és pár ellenállás),másik oldalt egy műveleti erősítő (kivonó). Vezetékes kapcsolat lenne jó,mert a távolság nem változik, elég fix helyen lesznek. Nekem az I2C soros felfűzés tetszik a legjobban. Itt viszont láttam,hogy SCL-t és SDA-t is fel kell húzni VCC-re egy ellenállásra. Itt ha több helyen történik ez a pull up, az probléma? Kerestem több ilyen I2C-s projektet,de mindenhol maximum 2 eszköz van. (Master-Slave). Én meg azt szeretném,hogy 1 master és vagy 3-4 slave legyen. Működhet szerintetek? Köszönöm a segítőkészségeteket
Az I2C-t konkrétan nem arra találták ki hogy nagyobb távolságokra felfűzzed, a (gyenge) felhúzó ellenállás miatt pedig szóba se jöhet zajos környezetben. Neked RS-232/422 kell, MAX232 vagy MAX422 illesztővel. Az elég lesz, nem kell differenciális átvitel.
RS485 és valamilyen nyílt protokoll.
A hozzászólás módosítva: Jan 3, 2016
Üdv!
Idézet: „Multi-processor Communication Mode ...The Multi-processor Communication mode enables several slave MCUs to receive data from a master MCU...” Ebben a módban működik az 1 master több salve RS232/RS422 nem? (még nem próbáltam) Már ha a master és a slave(ek) is AVR-ek, vagy legalábbis ismerik ezt a "módot".
Azt sajnos nem tudom mit tud az MPCM amit minimális kódolással nem lehet elérni, de az biztos hogy egy half-duplex vonalon egy ilyen kommunikáció a speckó mód mellőzésével (is) megvalósítható. Az RS485 egyébként pont egy ilyen half-duplex buszt jelent.
Nem az volt a baj , én csak ilyet használok eddig nagyon megbízhatóak voltak. Na nem a gagyi verzió, olyanból többet nem veszek az biztos .
Félrevezetően fogalmaztam, én is erre gondoltam az "érpárral" (Rx, Tx), ami természetesen nem volt helyes.
Mindenesetre nem helyettesíthető vele egy I2C jellegű kommunikáció ha nem válaszolhatnak az eszközök. Ezért mondtam az RS485-öt.
Egy járművön ajánlott az alacsony impedanciás differenciál átvitel. Ha csak két AVR-t akarsz összekötni, akkor talán a legjobb megoldás egy full duplex RS422 összeköttetés. Ez AVR-enként egy SN75179 és 1 100-120 Ohm ellenállás. A kábel pedig 2 érpár. Legjobb a sodrott, pl. UTP kábel. Software-esen ugyanaz a dolgod, mint az RS232 esetén lenne.
Üdv!
Lehetséges egy avrel több értéket kijeleztetni? Arra gondolok, hogy van egy panel müszet amiben ampert és feszültséget mérünk. Ezt a müszert 2x3 digiten (7 szegmenses kijelzö )jeleníteném meg. Atmel 328 proci alkalmas lehet erre?
Természetesen, multiplexelve mehet a 6 digit. De lehet shift regiszterekkel is, ha nem akarsz annyi portlábat elhasználni.
Köszi a választ,
végül is pont annyi láb van ami kell, multiplexeléshez kell 20, adatra kell 2
Miért 20? 8 a szegmenseknek, 6 a közös...
Idézet: Hogy lehet megjeleniteni a muszert 7 szegmenses kijelzon?„Ezt a müszert 2x3 digiten jeleníteném meg” Roviden a valaszom az, hogy lehetseges. Az atmega328 tobb ADC bemettel rendelkezi, szoval a merest el tudja vegezni es van eleg ki-be mente, hogy meghahtsa a kijelzot is. A hozzászólás módosítva: Jan 7, 2016
Tehát a szegmenseket közösíthetem minta két érték kijelzésénél?
Mind a 6 digitnek össze lesz kötve az összes a szegmens, az összes b szegmens stb. A kontrollernek mindegy hogy az a digit végül is hova tartozik, csak te ne keverd össze
Sziasztok, abszolút kezdő kérdés (elnézést):
jól gondolom, hogy a készen kapható programozó eszközökbe csak DIP tokozású AVR-eket lehet beletenni? A "SO..."/"TQFP..." kivitelek esetében hogy töltitek fel a programot a mikrokontrollerbe? |
Bejelentkezés
Hirdetés |