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   628 / 837
(#) Anthym hozzászólása Nov 13, 2014 /
 
Sziasztok. Most ismerkedem az USBasp programozó használatával. A programozó driverét sikeresen feltelepítettem. AVR studio 4-el szeretném használni, de sajnos képtelen vagyok connectelni a programozót. Tudnátok segíteni a probléma megoldásában ? köszönöm
(#) rolandgw válasza Anthym hozzászólására (») Nov 13, 2014 /
 
Hol olvastad,hogy a studio-val működik ? Esetleg external tool-ként.
Az előző oldal itt a fórumban: Avr dude+GUI
(#) holex válasza Anthym hozzászólására (») Nov 13, 2014 /
 
(#) simib hozzászólása Nov 13, 2014 1 /
 
Sziasztok!
Egy enkódert próbálok működésre bírni Xmega128A3 mikrokontroller segítségével. A beépített kvadratúra dekódert próbálom alkalmazni. Beállítások után úgy tűnik, hogy működik is a dolog, de akadtak apróbb hibák, amik nem hagynak nyugodni...

Az enkóder 2 lába az A port 6-os és 7-es lábára csatlakoznak. Forgatáskor egy lcd-n olvashatom le a számláló adott értékét, azonban a leírások által megadott 4-es lépések helyett nekem csak 2-vel növeli vagy csökkenti a számláló értékét, emellett a számlálás iránya is fordítva van (fordított bekötés miatt). Ha megcserélem az "event" bemeneten a lábat (6-ról, 7-es lábra), azaz a másik lábról szeretném vezérelni azt, akkor nem működik a számlálás. Lassú tekerésnél látom, hogy egyet ugrik a számláló, de azután vissza is ugrik egyet...

Az enkóder inicializálása:
  1. PORTA.PIN6CTRL = PORT_ISC_LEVEL_gc | PORT_OPC_PULLUP_gc;
  2.         PORTA.PIN7CTRL = PORT_ISC_LEVEL_gc | PORT_OPC_PULLUP_gc;
  3.         EVSYS.CH0MUX = EVSYS_CHMUX_PORTA_PIN6_gc;
  4.         EVSYS.CH0CTRL = EVSYS_QDEN_bm | EVSYS_DIGFILT_8SAMPLES_gc;
  5.         TCC0.CTRLD = TC_EVACT_QDEC_gc | TC_EVSEL_CH0_gc;
  6.         TCC0.PER = 1000;
  7.         TCC0.CTRLA = TC_CLKSEL_EVCH0_gc;


Az érték kiírása:
  1. lcd_clear_and_home();
  2.                 int lcd_output = TCC0.CNT;
  3.                 char lcd_string_out[35];
  4.                 itoa(lcd_output,lcd_string_out,10);
  5.                 lcd_write_string_0(lcd_string_out);


Valakinek van valami ötlete, hogy mi okozhatja ezt a jelenséget?

Köszönöm!
(#) simib válasza simib hozzászólására (») Nov 14, 2014 /
 
Közben az egyik kérdésemre megtaláltam a választ:

A mikrokontroller leírásában kicsit elrejtve benne van, hogy az enkóder kimeneteit a mikrokontroller egymás után következő bemeneteire kell csatlakoztatni és az eseménykezelő triggerét az első bemenetre kell állítani. Értelemszerűen ha a következő bemenetre állítjuk a trigger forrást, akkor már nem fog működni a dekóder.

A másik problémám viszont még mindig fennáll.
(#) kapu48 válasza simib hozzászólására (») Nov 14, 2014 /
 
Mivel a hsz.edből, nem derült ki, hogy tulajdonlépen miről is van szó!

Ha csatolnál, 1 linket lehet még választ is kapnál!
(#) Topi hozzászólása Nov 15, 2014 /
 
A titkos Atmegax8PB típus

A napokban temettem el a 7 éves SSD-met, ezért új telepítés következett Atmel Studio 6-ból is, így esett a választás a friss 6.2-re, amiben észrevettem az ATmegax8PB típust.

Érdekesség, hogy PB-s adatlap van az atmel oldalán, de se errata, se migration guide, se changes, se semmi doksi nem található róla, miben másabb a PB a PA-tól. Első ránézésre az adatlap is egyforma, műszaki adatai sem térnek el komolyabban. Kivéve kettőt, a fogyasztási adatok (és van PORTE), ami meglepetésemre nem jobbak, hanem jóval rosszabbak lettek (PB vs PA).
1.8V @ 1MHz
Active: 0.35mA vs. 0.2mA
Power down: 0.4uA vs. 0.1uA
Power save: <1uA vs. 0,75uA

Ha bárki talált már infót ami részletezné a PB altípust, ossza meg velem legyen kedves.
A hozzászólás módosítva: Nov 15, 2014
(#) simib válasza kapu48 hozzászólására (») Nov 16, 2014 /
 
Erről lenne szó: Using the XMEGA Quadrature Decoder

A problémám pedig lényegében az, hogy az enkóder elfordulását követő számlálónak egy "kattanásnyi" elfordulásakor 4-el kellene csökkennie vagy növekedni, viszont nálam csak 2-vel változik.
(#) Lucifer válasza Topi hozzászólására (») Nov 16, 2014 /
 
Szerintem a múltkor jött erről infó valamelyik hírlevelükben. Ha érdekel előtúrom.
A hozzászólás módosítva: Nov 16, 2014
(#) Topi válasza Lucifer hozzászólására (») Nov 17, 2014 /
 
Ha könnyen megtalálható, akkor szívesen vennék pár idevonatkozó sort, de nem sem dől össze a világ, gondolom előbb-utóbb hírlevélen kívül doksiban is tudatják majd.
Igazából csak azért keltette fel az érdeklődésemet, mert ~ 30 széria gyártásban lévő fejlesztésem használja ezt a procit, havi 5-600 db fölött fogy csak pl. ATmega48PA-ból aztán hátha olcsóbb/jobb lesz és cserélhető.
(#) Lucifer válasza Topi hozzászólására (») Nov 17, 2014 /
 
No kiderült, hogy nem a hírlevélben volt hanem a CNX-en és nem Xmega, hanem csak sima megáról szólt. Összekevertem, bocs.
(#) lajos1969 hozzászólása Nov 17, 2014 /
 
Sziasztok!
Szeretnék egy kis segítséget kérni Tőletek ha lehet!
Megépítettem ezt az órát, annyi gond van vele, hogy nem reagál a nyomógombokra és az óra is 00:00:80-át jelez ki bekapcsoláskor. Csak akkor hajlandó járni ha beállítom a DS1307-ben az időt/pót elemmel egy másik órában/ s úgy rakom be, így megy az óra, de a gombokra így sem reagál.
Felraknám a programját én sajnos nem értek hozzá de Ti biztos tudtok rá megoldást.
Nagyon szépen köszönöm előre is!!!!
(#) holex válasza lajos1969 hozzászólására (») Nov 18, 2014 /
 
A gombokhoz felhúzó ellenállást mindenképp kellene tenni.
(#) Istvanpisti válasza holex hozzászólására (») Nov 18, 2014 /
 
Nem feltétlenül, hiszen be lehet kapcsolni a felhúzó ellenállásokat, és a programozó ezt meg is tette a "LedBoard_8x48_define.h" fájlban a
  1. BtnPORT |= Button1|Button2|Button3|Button4;
sorral
(#) holex válasza Istvanpisti hozzászólására (») Nov 18, 2014 /
 
Ja igen, tényleg, bocsi.
(#) Istvanpisti válasza lajos1969 hozzászólására (») Nov 18, 2014 /
 
Szia !

Szerintem ez a program még nincsen készen. A LedBoard_8x48_subroutines.h fájlban megírta a programozó a
  1. void IICClockWriteData (void)
függvényt, ami a DS1307 RTC-be írna adatot, de sehol nem hívja meg.

Nyomógomb kezelést megírta a LedBoard_8x48_interrupt.h fájlban a BtnGet() fv-ben, amit hívogat is a Timer2 interruptból és a BtnMask változóba el is rakja a lenyomásokról az információt, de a főprogramban csak 1 üres while ciklus van, alatta kikommentezett egy kódrészletet.
  1. while (1){}
  2.  
  3.  
  4. /*      while (1){
  5.                 char BtnMask = BtnFlags;
  6.                 BtnFlags =0;           
  7.  
  8.                 if (BtnMask == ShortUp)
  9.                         LedBoardMessageShow (TxtUp);
  10.  
  11.                 if (BtnMask == ShortDown)
  12.                         LedBoardMessageShow (TxtDown);
  13.  
  14.                 if (BtnMask == ShortLeft)
  15.                         LedBoardMessageShow (TxtLeft);
  16.  
  17.                 if (BtnMask == ShortRight)
  18.                         LedBoardMessageShow (TxtRight);
  19.         }*/


Itt kellene egy menü szerűséget megírni és onnan meghívni a DS1307 beállító és egyéb rutinokat.
(#) Suncorgo hozzászólása Nov 18, 2014 /
 
Sziasztok!

Hosszabb buszra lenne szükségem (20 méter) differenciál jelvezetékkel a zavarszűrés miatt. Erre csatlakoztatnék egy pár AVR procit. Nem baj a half-duplex kommunikáció. UART protokol előnyben mivel ez (is) található az AVR procikban.

Eddig a szimulátorral erre jutottam (csatolom). Hasonlít a CANBUS jelhez viszont UART protokollal.

Érdemes ezt megépíteni vagy jobban járok egy canbus transceiver ic-vel? (pl MCP 2551)
(#) lajos1969 válasza Istvanpisti hozzászólására (») Nov 18, 2014 /
 
Köszönöm a választ!!
Csak az a baj, hogy ez már tényleg meghaladja a tudásom.
Valaki meg tudná esetleg csinálni ezt?? Akkor már teljesen kész lenne ez az óra.
Köszönöm!
(#) wbt válasza Suncorgo hozzászólására (») Nov 18, 2014 /
 
Szia!
Miért is nem lenne jó a normál RS485 a feladathoz? Adó/vevő IC filléres dolog, kiforrott.
Ütközés várható a buszon? (mert akkor CAN vagy LIN kellene).
75176 kicsit sokat eszik, de LTC485 vagy Analog Devices IC-je alig.
(#) Suncorgo válasza wbt hozzászólására (») Nov 18, 2014 /
 
Igen jó lenne, pont tegnap előtt rendeltem és most 4 ic-t nem akarok rendelni megint külön.
Megnézem differenciál vezeték nélkül, jel test half-duplex UART a TX diódával leválasztva, közösítve RX+TX és ellenállással tápra húzva. Ha ez nem jön be, vagy nem lesz stabil akkor az LTC485 lesz a nyerő. Köszönöm! Üdv!

hduart.jpg
    
(#) kapu48 válasza Suncorgo hozzászólására (») Nov 18, 2014 /
 
És ezzel akarsz 8*20m áthidalni?
(#) rolandgw hozzászólása Nov 19, 2014 /
 
Üdv !
C-ben hogy lehet megoldani ezt az indirekt ugrást ?
  1. lds     temp,param_num
  2. clr     ZH
  3. mov     ZL,temp
  4. subi ZL,low(-PR_ADDC0)  ;add offset
  5. sbci ZH,high(-PR_ADDC0)
  6. ijmp    ;jump to offset
  7. PR_ADDC0:       rjmp    PR_ADDS0       
  8. PR_ADDC1:       rjmp    PR_ADDS1       
  9. PR_ADDC2:       rjmp    PR_ADDS2       
  10. PR_ADDC3:       rjmp    PR_ADDS3       
  11. PR_ADDC4:       rjmp    PR_ADDS4
  12. .
  13. .
(#) killbill válasza rolandgw hozzászólására (») Nov 19, 2014 /
 
Fuggvenypointerrel:

  1. /* Ezeket deklaralni kell. Es persze valakinek meg is kell irni oket */
  2.  
  3. int  PR_ADDS0(int);
  4. int  PR_ADDS1(int);
  5. int  PR_ADDS2(int);
  6.  
  7. /* Ebben a tombben int-et visszaado, es 1 int-et varo fuggvenyek cimei lesznek */
  8. /* A tomb neve table lesz. A tombot inicializaljuk */
  9.  
  10.  
  11. static (int *table[])(int) = {
  12.  PR_ADDS0, PR_ADDS1, PR_ADDS2
  13. };
  14.  
  15. int a, x;
  16.  
  17. /* Most meghivjuk a 'par_num'-adik fuggvenyt, atadjuk neki 'a'-t es a visszateresi erteket betesszuk x-be*/
  18.  
  19. x =(*table[par_num])(a);
(#) rolandgw válasza killbill hozzászólására (») Nov 19, 2014 /
 
Köszönöm !
(#) Suncorgo válasza kapu48 hozzászólására (») Nov 19, 2014 /
 
Végül ez a megoldás nem is került tesztelés alá sem.
Én sem fűztem hozzá sok reményt.

Sikerült szereznem SN75176 -os ic-t. Ennek a busz kimenetére miért is kellenek az ellenállások? Mind 2 végére 120 ohm-ot láttam szinte mindenhol. A buszra csatlakozó vevőknek nem lesz elég belső ellenállásuk hogy ne okozzon problémát az ellenállás hiánya? Nem akarnám terhelni a kimenetét feleslegesen ezért kérdezem.

Továbbá szerencsés-e ha a kimenet védelméért zénereket teszek a kimenetre és egy pár ohmos ellenállást sorosan?
A hozzászólás módosítva: Nov 19, 2014

védelem.jpg
    
(#) Suncorgo hozzászólása Nov 19, 2014 /
 
Érdeklődnék még hogy ha véletlen ütközés keletkezik (fejlesztés során nem kizárt ) akkor a buszmeghajtó ic-k azonnal elmennek az örök vadászmezőkre?

Az adatátvitelhez közösnek kell lenni a GND-nek? (3 vezeték kell a kommunikációhoz?)

Bocsásatok meg a rengeteg kérdésért de új vagyok ebben a fajta kommuunikációs témában.
(#) Massawa hozzászólása Nov 20, 2014 /
 
Egy olyan feladatot tervezek megoldani, hogy egy léptetömotort egy fordulaton belül 24 elméleti állásba kell megállitani. ( nem biztos, hogy valamennyibe, de többe nem).
Az állást egy-egy LED jelezné ki egy kör peremén. Mellettük 1-1 nyomogomb megnyomására fordulna a motor a kivánt állásba.
Egy két részletkérdésre keresek még választ.
1. Hogyan döntsem el, hogy mikor merre forduljon a motor ( jobbra-balra) - elvben lehetne mindig a rövidebb utat választani, de
2. Igény van 180 fokos fordulatra, azaz ha az adott álláshoz a szemben levö gombot nyomom meg akkor 180 fokkal kell a motornak fordulnia.
Ebben a fázisban nem tervezek visszajelzést, azaz a motor kizárolag a kapott impulzusokra reagál, ami viszont igényli a bekapcsolás utáni szinkronizálást, azaz a motor állását összehangolni a LED kijelzö állásával.
Ötletek?
Kösz
(#) zsuscsinyo válasza Suncorgo hozzászólására (») Nov 20, 2014 /
 
Ezek közvetlen busz-meghajtó IC-k, nem kell a zener védelem, továbbá az ellenállás amit említettél impedancia illesztésre szolgál, hogy a jel visszaverődést megakadályozzák a vezetékekben.
Bővebben: Link
Arra viszont figyelj, hogy egyszerre ne adjon a két oldal (token)!
A hozzászólás módosítva: Nov 20, 2014
(#) kapu48 válasza Massawa hozzászólására (») Nov 20, 2014 /
 
A leg egyszerűbb, ha indulás után megnyomatod a felhasználóval azt a gombot ahol ál a motor.
Vagy felruházhatod a rendszert opto kapukkal, mágneses Red relékkel, mikrokapcsolókkal.
A leg rosszabb esetben mindig eltárolod, hogy éppen hol állt meg a léptető motorod.
(#) Massawa válasza kapu48 hozzászólására (») Nov 20, 2014 /
 
Erre én is gondoltam, de van egy kis bibi, a motor természetesen nem 24 lépésben fordul 360 fokot, hanem ennek a sokszorosával, igy ha ki van kapcsolva bárhol megállhat, vagy kézzel bárhova fordithato. Valoszinü, hogy be kell épiteni egy referenciapontot, amire a bekapcsoláskor fordul (megkeresi) majd itt szinkronizálja magát (ez lehet pl. a 0 állás).
Következő: »»   628 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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