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   713 / 840
(#) zombee válasza Gj hozzászólására (») Dec 31, 2015 / 2
 
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
(#) freechat hozzászólása Jan 1, 2016 /
 
Raspberry PI-n fordítottam egy programot.
Minden jól ment egy darabig, de most ezt kapom:
  1. sudo /usr/local/bin/avrdude -p t26 -P /dev/spidev0.0 -c linuxspi -b 10000 -F
  2.  
  3. avrdude: error: AVR device not responding
  4. avrdude: initialization failed, rc=-1
  5. avrdude: AVR device initialized and ready to accept instructions
  6. avrdude: Device signature = 0x88a2ee
  7. avrdude: Expected signature for ATtiny26 is 1E 91 09

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?
(#) freechat válasza freechat hozzászólására (») Jan 1, 2016 /
 
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.
(#) kapu48 válasza freechat hozzászólására (») Jan 1, 2016 / 1
 
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!

(#) Bakman válasza kapu48 hozzászólására (») Jan 1, 2016 /
 
Idézet:
„Dugdosós panel? = Megbízhatatlan érintkezés!”
Ezt azért erős így kijelenteni.
(#) csabeszq hozzászólása Jan 1, 2016 / 1
 
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:
  1. 7FF0:  87 bf           out     0x37, r24       ; SPM REG
  2. 7FF2:  e8 95           spm
  3. 7FF4:  08 95           ret


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.
(#) AxaGame hozzászólása Jan 2, 2016 /
 
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.)
(#) Robika hozzászólása Jan 3, 2016 /
 
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
(#) Kovidivi válasza Robika hozzászólására (») Jan 3, 2016 /
 
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.
(#) csatti2 válasza Robika hozzászólására (») Jan 3, 2016 /
 
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.).
(#) Robika válasza csatti2 hozzászólására (») Jan 3, 2016 /
 
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
(#) zombee válasza Robika hozzászólására (») Jan 3, 2016 /
 
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.
(#) kameleon2 válasza csatti2 hozzászólására (») Jan 3, 2016 /
 
RS485 és valamilyen nyílt protokoll.
A hozzászólás módosítva: Jan 3, 2016
(#) Robika válasza zombee hozzászólására (») Jan 3, 2016 /
 
Köszönöm, még jó hogy megkérdeztem.
Ez az RS-232/MAX232-es dolog,csak annyi,hogy az AVR-t összekötöm a MAX232-vel,plusz a pár kondi,amit igényel a MAX232.

Ezt megcsinálom a másik oldalon is, TX -> RX,RX -> TX és kész is?
(#) csatti2 válasza Robika hozzászólására (») Jan 3, 2016 / 1
 
Igen. Viszont az RS232 két résztvevőre lett kitalálva, ha több kell akkor használj RS485-öt.
(#) Sick-Bastard válasza csatti2 hozzászólására (») Jan 4, 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".
(#) zombee válasza Sick-Bastard hozzászólására (») Jan 4, 2016 /
 
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.
(#) freechat válasza kapu48 hozzászólására (») Jan 4, 2016 /
 
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 .
(#) csatti2 válasza Sick-Bastard hozzászólására (») Jan 4, 2016 /
 
Az AVR tudja. Amit nem tudok, hogy szabad-e több (mint 2) MAX232-t felfűzni ugyanarra az érpárra. Az RS232-t két pont közötti kommunikációra találták ki.
(#) zombee válasza csatti2 hozzászólására (») Jan 4, 2016 /
 
Vevőként akármennyit, adóként csak egyet. A MAX485 (többek közt) annyiban tér el tőle, hogy az adó része ki/be-kapcsolható. MAX232 esetén nincs érpár, csak jelvezeték(ek) és föld.
A hozzászólás módosítva: Jan 4, 2016
(#) csatti2 válasza zombee hozzászólására (») Jan 4, 2016 /
 
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.
(#) killbill válasza Robika hozzászólására (») Jan 5, 2016 /
 
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.
(#) elactrofan hozzászólása Jan 7, 2016 /
 
Ü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?
(#) pont válasza elactrofan hozzászólására (») Jan 7, 2016 /
 
Természetesen, multiplexelve mehet a 6 digit. De lehet shift regiszterekkel is, ha nem akarsz annyi portlábat elhasználni.
(#) elactrofan válasza pont hozzászólására (») Jan 7, 2016 /
 
Köszi a választ,
végül is pont annyi láb van ami kell, multiplexeléshez kell 20, adatra kell 2
(#) pont válasza elactrofan hozzászólására (») Jan 7, 2016 /
 
Miért 20? 8 a szegmenseknek, 6 a közös...
(#) Zsolt2 válasza elactrofan hozzászólására (») Jan 7, 2016 /
 
Idézet:
„Ezt a müszert 2x3 digiten jeleníteném meg”
Hogy lehet megjeleniteni a muszert 7 szegmenses kijelzon?

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
(#) elactrofan válasza pont hozzászólására (») Jan 7, 2016 /
 
Tehát a szegmenseket közösíthetem minta két érték kijelzésénél?
(#) pont válasza elactrofan hozzászólására (») Jan 7, 2016 /
 
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
(#) teglascs hozzászólása Jan 8, 2016 /
 
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?
Következő: »»   713 / 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