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   731 / 840
(#) k3gy3tl3n válasza Brian88 hozzászólására (») Ápr 7, 2016 /
 
Szerintem nincs. Ezekszerint a vevő már adott és neked csak a távirányító kell?
Ha magad építenél adót és vevőt is én az NRF24L01 modult ajánlanám egy AVR-re kötve.
Amenyiben elég közelre müködnie (10-20m) akkor EZT egyébként meg EZT.
A hozzászólás módosítva: Ápr 7, 2016
(#) Brian88 válasza k3gy3tl3n hozzászólására (») Ápr 8, 2016 /
 
Szia
Én csinálom az adót is meg a vevőt is. Autó/kapu stb nyitó lenne belőle. AES128 titkosítást szeretnék használni, mivel csak ebben bízok. Ezt (egyenlőre) még senki sem törte fel. Ezért kellene ilyen távirányító. Akkor viszont marad a házi építés.
(#) Brian88 hozzászólása Ápr 8, 2016 /
 
Sziasztok
debugWire opcióval felszerelt programozó/debbuger csak a gyári Atmel változatokba létezik pl: MK2, ICE stb Nincs valami olcsó kínai programozó ami tudja ezt?
(#) csabeszq válasza Brian88 hozzászólására (») Ápr 10, 2016 /
 
Hogy véded ki a lehallgatást?
A hozzászólás módosítva: Ápr 10, 2016
(#) csatti2 válasza csabeszq hozzászólására (») Ápr 10, 2016 /
 
Ha vmilyen private/public kulcs jellegű megoldást alkalmaz ugrókóddal, akkor nyugodtan lehet hallgatózni, a dekódoláshoz szükséges információ sosem lesz kisugározva.
(#) Brian88 válasza csatti2 hozzászólására (») Ápr 11, 2016 /
 
Pontosan ez a cél. Hiába hallgatod le, az ugrókód miatt sosem lesz kétszer ugyan az az üzenet. A privite key pedig megakadályozza a visszafejthetőséget. Így feltörni kb lehetetlen.
(#) Bell válasza Brian88 hozzászólására (») Ápr 11, 2016 /
 
A kódfeltörésen kívül a kód ismételt felhasználása is kritikus, amit a KEELOQ -os rendszer jól megoldott.
Ilyet próbáltál már?
Talán egyszerűbb lenne a kapcsolatot azzal bejátszani, aztán kicsit AES-el tuningolni, mint újat kitalálni.
(#) Brian88 válasza Bell hozzászólására (») Ápr 11, 2016 /
 
Igen a kettő kombinációja már tuti biztos. De szerintem elég egy fix egyedi azonosító + random számot összerakni egy üzenetben, majd ezt lekódolni. Mivel kétszer sosem lesz ugyan az az üzenet, így a kód ismétléses feltörés nem működik. Visszafejteni nem lehet. A vevő pedig dekódolás után eldobja a random számot, és csak a fix azonosítót nézi.
(#) FDAssasin hozzászólása Ápr 11, 2016 /
 
Sziasztok!
Szeretnék bocsánatot kérni mindenkitől aki próbált segíteni nekem és figyelmen kívül hagytam. USBasp-vel akartam programozni és nem válaszolt a chip. Csak a 10k ellenállás hiányzott, amit mindenki bele akart verni a hülye fejembe. Nos, mivel ráraktam, elméletben működik a dolog, DE...
A chipet felismeri a gép viszont nem 328P hanem sima 328, ezért más a chip ,,alírása". Szóval ezt a hibát kapom:

  1. Arduino: 1.6.7 (Windows XP), Alaplap:"Arduino/Genuino Uno"
  2.  
  3. avrdude: warning: cannot set sck period. please check for usbasp firmware update.
  4. avrdude: Expected signature for ATmega328P is 1E 95 0F
  5.          Double check chip, or use -F to override this check.
  6. Nem megfelelő mikrokontroller lett kiválasztva. Pontosítani az Eszközök > Alappanelek menüben lehet.


Arduino IDE-al próbálkozom és szeretnék ezen a fordítón is maradni (hacsak nincs egy hasonlóan egyszerű megoldása valakinek, mert nem szeretnék driver problémákba ütközni a Win XP miatt). Mit tudok kezdeni ezzel?
(#) Bell válasza Brian88 hozzászólására (») Ápr 11, 2016 /
 
Ezzel az a gond, amit említettem: nincs védve a kód ismételt felhasználása ellen.
Így nem kell kódot fejteni sem.
Egyszerűen rögzítem a jelsorozatot, ugyanazt én is elküldöm, kinyitom a garázsodat.
(#) Ivan93 válasza Bell hozzászólására (») Ápr 11, 2016 /
 
Ha a vevő x ideig nem fogadja el egymás után ugyanazt a kódot, akkor nincs vele gond szerintem.
(#) csabeszq válasza Ivan93 hozzászólására (») Ápr 11, 2016 /
 
Nem így kell megoldani.

Az adóban és a vevőben van egy számláló. Amikor az adó küld, elküldi a számláló értékét is (AES titkosítással).
Amennyiben a számláló magasabb az előző értéknél, úgy a vevő elfogadja, ha kisebb vagy egyenlő, akkor elutasítja. Az egyesével növelés nem jó, mert az adót lehet, hogy véletlen másik városban nyomod meg, egyik oldalon nő a számláló, a másikon nem. Egyszerű: mindig a magasabb értéket fogadod el.

Mi van, ha a feleségednek is kell nyitó kulcs?

Két számláló lesz. Az adó elküldi a számlált értéket és azt, hogy a te adód, vagy a feleségedé. A vevő ezalapján növeli a te, vagy a feleséged számlálóját.
(#) Brian88 válasza Bell hozzászólására (») Ápr 11, 2016 /
 
Igazad van, kelleni fog egy fix azonosító + egy számláló aminek az értéke mindig +1 nő. Így kétszer nem fogadja el a már "használt" kódot.
(#) Sick-Bastard válasza FDAssasin hozzászólására (») Ápr 11, 2016 /
 
Üdv!

Az avrdude.exe-hez tartozó avrdude.conf fileban kell egy új chippet felvenned. Lényegében cnrtl+c/v-zni kell az atmega328p adatait, aztán csak 2 dologot kell módosítani: az "id" és a "signature".
  1. id                      = "m328";
  2. signature               = 0x1e 0x95 0x14;

Ennyi.

Hogy egyszerűbb legyen mellékeltem is a módosított .conf filet.
Elnézést, de tesztelni nem tudom. (nincs sima 328asom)

avrdude.conf
    
(#) Bell válasza Brian88 hozzászólására (») Ápr 11, 2016 /
 
Használhatónak tűnő KEELOQ kódok vannak C-ben. Abból szerintem többet lehet tanulni, mint a doksikból.
(#) cimopata hozzászólása Ápr 12, 2016 /
 
Sziasztok.

AZ lenne a kérdésem, ha benne vagyok épp egy Timer interrupt végrehajtásba és azon belül jönne egy hosszabb delay ami alatt esetegesen újból meghívhatná magát ugyan az a megszakítás akkor mi történik? Mindenképpen elkezdi újból végrehajtani saját magát vagy még megvárja az azon belül levő késleltetés végét?
A hozzászólás módosítva: Ápr 12, 2016
(#) Jaedong válasza cimopata hozzászólására (») Ápr 12, 2016 /
 
Szia!
Egy interrupt kiszolgálása közben automatikusan le vannak tiltva a globális megszakítások, tehát nem fogsz ide-oda ugrálni, egyik megszakításból, a másikba (kivéve, ha ezt külön engedélyezed, amit kerülj szerintem ). Ha a globális megszakítás le van tiltva (mint amikor egy épp kiszolgálsz egyet isrt), attól még a különálló megszakítás flageket állíta a hw. Azaz amint újra engedélyezve lesz (pl. visszatért az isr rutinból), végrehajtja a többi megszakítást szépen sorban. Prioritási sorrend az úgy van, hogy minél alacsonyabb címen helyezkednek el, annál nagyobb előnyt élveznek. Legmagasabb prioritással a reset rendelkezik, utána a INT0 és így tovább...

Minden megszakításnak van egy saját flag-je ami jelzi, hogy megszakítás érkezett. Ez azt is jelenti, hogy te egy megszakításon belül, vagy közben egyszerre több megszakítás jön mondjuk az INT0-ból, attól még azt egynek fogja érzékelni a hw, mert csak egy darab bit jelzi, hogy történt interrupt vagy nem.

Ez a te esetedben azt jelenti, hogy ha a delay-ed alatt egy vagy több interrupt jön a timered-től, akkor, amint visszatérsz az isr rutinból, és nincs magasabb prioritással rendelkező interrupt, akkor újra visszaugrasz kiszolgálni a megszakítást (ha van magasabb prioritású akkor meg sorba megy).

Amúgy ha szabad megkérdezni, mire kell a delay? Megszakításon belül nem az igazi (meg amúgy is, általában könnyen kiváltható), sőt isr-be illik minél rövidebb kódot írni.
(#) cimopata válasza Jaedong hozzászólására (») Ápr 12, 2016 /
 
Köszi értem.

1602 kijelző karaktereinek van beállítva egy timer 100us-onként és amikor elér a 16. karakterhez vagy visszatérne a nullára mielőtt még írná a karaktert csinálok egy sorváltást csak nincs kedvem rá külön függvényt íri hanem elé raktam a karakter kiírásnak és azt végrehajtja majd vár mondjuk 1ms-t és kezdi végre a karakter kiírását. De mivel időközben lejárna a 100us a megszakítás újból kezdené a következő karakter kiírását ugyan ebben a függvényben.

De az is lehet kihagyom a delayt és beteszek valami return parancsot ami kihagyná arra a körre a karakter kiírást és akkor meg is lenne a sorváltásnak a 100us várakozási idő.
(#) killbill válasza cimopata hozzászólására (») Ápr 12, 2016 /
 
Errol beszelsz:
  1. u8_t display[32];
  2.  
  3. static u8_t *dp = display;
  4.  
  5. void    LcdRefresh(void)
  6. {
  7. static  u8_t cmd;
  8.  
  9.     if(!cmd && dp == display + 16){
  10.         lcd_cmd(0xc0);
  11.         cmd = 1;
  12.     }
  13.     else if(dp == display + 32){
  14.         lcd_cmd(0x80);
  15.         dp = display;
  16.     }
  17.     else{
  18.         lcd_dat(*dp++);
  19.         cmd = 0;
  20.     }
  21. }
(#) Brian88 válasza csabeszq hozzászólására (») Ápr 12, 2016 /
 
Szia
Igen lehet mindegyiknek egy számlálója. Hisz eleve minden kulcsnak saját ID-je lesz, ami alapján lehet azonosítani. Egy Strukturán belül 1-1 tömb (ID és számláló) esetén szinte korlátlan (porcitól függően több száz) mennyiségű ID/számlálót/ adót fel lehet venni.
(#) FDAssasin válasza Sick-Bastard hozzászólására (») Ápr 12, 2016 /
 
Bemásoltam, de ezt kapom:

  1. Arduino: 1.6.7 (Windows XP), Alaplap:"Arduino/Genuino Uno"
  2.  
  3. avrdude: error at D:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf:320: programmer type must be written as "id_type"
  4. Hiba a bootloader égetése közben.


Nálam az Arduino IDE mappája D:\Program Files\Arduino\hardware\tools\avr\etc
Vannak fórumok ahol a dokumentumok mappát mondját, ott is van egy Arduino mappa, de az nem configot, csak libeket tartalmaz. Lehetséges hogy rossz elérési úttal próbálkozom?
(#) Sick-Bastard válasza FDAssasin hozzászólására (») Ápr 12, 2016 /
 
Elnézést, én hibáztam több esetben is.

Amit én mellékeltem az azért nem megy, mert az avrdude 5.1-hez való config file.
Az arduino 1.6.8-ban (most töltöttem le) abban 6.0.1-es avrdude van. (tippem szerint a tiédben is)
Ebben már benne volt eredetileg mindkét chip. Szóval jó volt az eredeti config file.
Ha véletlenül kitörölted volna, mellékelem az eredetit, amit az arduino mappából másoltam.

Így visszajutunk az eredeti problémára:
  1. Arduino: 1.6.7 (Windows XP), Alaplap:"Arduino/Genuino Uno"
  2. avrdude: warning: cannot set sck period. please check for usbasp firmware update.
  3. avrdude: Expected signature for ATmega328P is 1E 95 0F
  4.          Double check chip, or use -F to override this check.
  5. Nem megfelelő mikrokontroller lett kiválasztva. Pontosítani az Eszközök > Alappanelek menüben lehet.


Erre nem találtam meg a megoldást. Nem tudom, hogy lehet simán az ICt hozzárendelni. Bocsi.

avrdude.conf
    
(#) freechat válasza csabeszq hozzászólására (») Ápr 13, 2016 /
 
Csak az ár miatt használnám illetve nem találtam még értelmes wifi modult amivel könnyen meg lehetne csinálni a kapcsolatot.
(#) Bakman válasza freechat hozzászólására (») Ápr 13, 2016 /
 
Sokkal egyszerűbb kezelni a BT modult és szerintem stabilabb is, mint az ESP8266. Tehát hajrá!
(#) FDAssasin válasza Sick-Bastard hozzászólására (») Ápr 13, 2016 /
 
És ha csak kapna egy -F paramétert? Elméletben a 2 chip ugyanaz bitek és útvonalak terén, csak a P-s verzió energiatakarékosabb, a jobb gyártástechnológia miatt.
(#) rolandgw válasza FDAssasin hozzászólására (») Ápr 13, 2016 /
 
Szerintem programozd fel ezzel .
(#) cimopata hozzászólása Ápr 15, 2016 /
 
Üdv. Nem igazán AVR kérdés de nem tudom máshol feltenni.

Szeretnék összehozni labortáp célokra egy nagyon precíz DAC áramkört lehetőleg nagyon olcsón.
Minimum 16 bites kellene de ahogy nézem eléggé drágák és mivel 2 csatorna kellene az nem lenne olcsó cél IC-vel. Arra gondoltam beszerzek egy Bővebben: Link

Tudom ez 12 bites, de arra gondoltam , hogy precíz műveleti erősítővel 2db 12 bites jelet összeadnám 1/ 0.01 arányban. Nem baj ha a belső referencia vagy a műveletik esetleg az összeadás pontatlan mert kinéztem egy további 22 bites ADC-t ami szintén alig 7-800ft. Az monitorozná az előállított feszt és visszacsatolva a processzorba az esetleges hibát korrigálná.

Elképzelésem szerint így egy nagyon pontos DAC-om lenne a pontossága pedig a mérő ADC referencia pontosságán múlna amit egy nagy pontosságú feszmérővel elég jól be lehet kalibrálni.

Mi a véleményetek a dologról?
(#) wbt válasza cimopata hozzászólására (») Ápr 15, 2016 /
 
Milyen pontos labortápot akarsz? 40V-ig a 0.01V-os felbontás nem elég? Vagy kalibrátort gyártasz? Az összeadás elméletileg működik, gyakorlatilag a drift elviheti, ami alapban még talán nem is gond, csak akkor van meglepődés, amikor növekvő DAC értékre csökkenő kimenő feszt kapsz, erre meg a zárt hurkú szabályozás megőrül. Vagy zero-drift erősítőket használsz vagy vegyél inkább igazi 16bites DAC-ot, árban ugyan ott leszel. Ha jól rémlik, a MicroChip-nél van 13-14bites SPI DAC is...igaz, azok asszem nem szorzó típusúak, ami ilyen felhasználásnál előny lenne.
(#) ktamas66 válasza cimopata hozzászólására (») Ápr 15, 2016 /
 
Én PIC-ben levő két DA-t (8 és 5 bites) kötöttem így egy összeadó erősítővel, működött. A pontosság engem sem izgatott, mert a visszamért jelet figyeltem. Régebben játszottam egy 24 bites AD-vel NAU7802), de nem volt sikerélményem . Mindenképp egy ilyen pontosságú referencia megépítése is komoly kihívás, nem tudom labortáphoz kell-e ilyen pontosság egyáltalán.
(#) wbt hozzászólása Ápr 15, 2016 /
 
Azért 8/5 bitet analóg módon összeadni szerintem kicsit más mint 2x12 bitet. Ugyebár a másodlagos 12-bites DAC 1 lépcsőjére jutna 12 bit. Szerintem kezelhetetlen. Főleg szabályozási körben. Kisebb felbontásokban én csináltam PWM szorzót is, de 8+10 bitnél is már SW trükközés kellett. Mondjuk arra is kíváncsi leszek majd, hogy mivel lesz bemérve a cucc, mert 24-bites jeleket méricskélni nem konyhaasztal sarkán elvagyunk feladat. (főleg, ha az ADC nem tartalmaz szűrőt) Az meg külön érdekes feladat, ha már tápegységről van szó, amikor 0-2A-el megrántja a terhelés a tápot mondjuk 20kHz-el...
Következő: »»   731 / 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