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   645 / 837
(#) kovacsj válasza kapu48 hozzászólására (») Jan 31, 2015 / 1
 
Bocsáss meg! Te Isten vagy, én pedig egy balfék. Korábban átírtam a függvény visszatérési értékét uint8_t - re. És elfelejtettem. Már jó, bár a mért értékek nem tudom, mennyire valósak. De legalább 16 biten jönnek.
Nagyon szépen köszönöm a segítségedet!
(#) kapu48 válasza kovacsj hozzászólására (») Jan 31, 2015 / 1
 
Szívesen!

Cserébe várjuk az elért mérésteszt eredményeket!
Kíváncsiak vagyunk, mit tud az UC?
(#) kovacsj válasza kapu48 hozzászólására (») Jan 31, 2015 /
 
Rendben. Köszönöm ismét! És ismét. Nem lesz egyhamar kész, mert csak hétvégén van időm ezzel foglalkozni. És lehet, hogy lesznek még kérdéseim. Az ARM-hez vagyok jobban szokva, de abban is van még hová fejlődni.
(#) mucsa válasza kapu48 hozzászólására (») Feb 1, 2015 /
 
Ez csudajó, köszi, majdnem áttértem erre, de az előzővel már az építésnél tartok.
Szerintem ha első kész nekiesek ennek is.
(#) Massawa hozzászólása Feb 1, 2015 /
 
Megnézné valaki, hogy mi a baj ezzel a koddal. Nem akar az interruptra ugrani, s igy nem is megy. Már orákat szorakozok vele, de valamit nem látok amit kellene. Eredetileg egy Atmel mintakod volt,de megprobáltam átirni Mega328-ra)

Kösz


  1. ;******************************************************************
  2. ;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
  3. ;*
  4. ;* Number:AVR360
  5. ;* File Name: "stepmot.asm”
  6. ;* Title :Simple high speed step motor controller
  7. ;***************************************************************
  8. .include "m328Pdef.inc"         ; INCLUDE the def for the chip
  9. ;*************** Define global registers ************************
  10. .def temp = R16         ; general purpose register
  11. .def temph=r16  ; temp registers to write bytes in OCR
  12. .def templ      =r17
  13. ;*************** Define constants ******************************
  14. .equ c_value = 500      ; Compare value for output compare interrupt
  15.                                         ; 500 cycles@5Mhz = 100us
  16.  
  17. ;*************************************************************
  18. ;*
  19. ;* PROGRAM START - EXECUTION STARTS HERE
  20. ;*
  21. ;****************************************************************
  22. .cseg
  23. ;Initialize interrupt vectors
  24. .org 0x00
  25.         rjmp main
  26. .org OC1Aaddr   ;Init Output compare A interrupt vector
  27.         rjmp OC1A
  28.  
  29. OC1A:                           ;IRQ routine
  30.         in temp,SREG
  31.         push temp
  32.         ld temp,X               ;Load temp with X pointer value
  33.         mov XL,temp     ;Move value to X pointer
  34.         andi temp,0x0F  ;Mask away upper nibble
  35.         out PORTB,temp  ;Output lower nibble to step motor
  36.         swap XL                 ;Swap upper and lower nibble
  37.         andi XL,0x0F    ;Mask away upper nibble, address is ready
  38.         pop temp
  39.         out SREG,temp
  40.         reti
  41.  
  42. main:
  43.         ldi r16,high(RAMEND)    ;Intialize stackpointer
  44.         out SPH,r16
  45.         ldi r16,low(RAMEND)
  46.         out SPL,r16
  47.         ldi temp,0x0F                   ;Set PORTB pin3-0 as output
  48.         out DDRB,temp
  49.         ldi temp,0x00
  50.         out PORTB,temp                  ;Write initial value to PORTB
  51.         ldi temph,high(c_value)         ;Load compare high value
  52.         ldi templ,low(c_value)  ;Load compare low value
  53.         sts OCR1AH,temph
  54.         sts OCR1AL,templ
  55.         ldi temp,0x00
  56.         sts TCNT1H,temp         ;Clear timer high byte
  57.         sts TCNT1L,temp         ;Clear timer low byte
  58.         ldi temp,(1<<CS00)
  59.         sts TCCR1A,temp         ;Clear timer control reg A
  60.         ldi temp,0x02
  61.         out TIFR1,temp          ;Clear pending timer interrupt
  62.         sts TIMSK1,temp         ;Enable Timer compare interrupt
  63.         ldi ZH,high(step*2) ;Init Z pointer to step table in flash
  64.         ldi ZL,low(step*2)
  65.         ldi XH,high(0x0100) ;Init X pointer to RAM location
  66.         ldi XL,low(0x0100)
  67.         ldi temp,0x04           ;Load counter value
  68.  
  69. load:
  70.         lpm                     ;Load step value from flash
  71.         st X+,R0                ;Store step value in RAM
  72.         adiw ZL,0x01    ;Increment flash pointer
  73.         dec temp                ;Decrement counter
  74.         brne load               ;Continue until table is loaded
  75.         ldi XH,high(0x0100) ;Initialize X pointer to RAM location
  76.         ldi XL,low(0x0100)
  77.         ldi temp,0x9
  78.         sts TCCR1A,temp ;Clear timer on compare match,CK/1
  79.         sei                     ;Enable global interrupt
  80.  
  81. loop:
  82.         rjmp loop               ;Do something else
  83.  
  84. step:
  85.         .db 0x19,0x2C,0x36,0x03 ;Step motor lookup table
A hozzászólás módosítva: Feb 1, 2015
(#) Istvanpisti válasza Massawa hozzászólására (») Feb 1, 2015 / 1
 
Szia!
Nem igazán értek az asm-hez, de véleményem szerint a TCCR1A, TCCR1B (ezt nem is találtam a kódban) regiszterek nincsenek jól megadva.
Feltéve, hogy CTC módot szeretnél előosztás nélkül, akkor valamilyen ehhez hasonló kód kellene (C-ben)
  1. TCCR1A=0;
  2. TCCR1B|=(1<<WGM12)|(1<<CS10);

Nálad a CS00 a TCCR1A-ba megy, ami nem jó, mert a nullás bit a TCCR1A-ban a WGM10, nem beszélve arról, hogy a TIMER1-nél célszerű a CS10-et használni, bár értéke ugyanaz, mint a CS00-nak.
(#) rolandgw válasza Massawa hozzászólására (») Feb 1, 2015 /
 
58,59 sor nem jó mert a TCCR1A-t nullázni kell,ahogy Istvanpisti is írta,valamint a 78.-ban TCCR1B-re kell átírni,ebbe kerül 9,ami Istvanpisti második sorának felel meg C-ben.
(#) Massawa válasza rolandgw hozzászólására (») Feb 1, 2015 /
 
Kösz mindenkinek, már forog.



Elnéztem azt a 2 sort, pedig azt már van 20x átirtam mert a 328-ban 3 TCCRx van , az eredetiben csak 1 volt.
(#) kovacsj hozzászólása Feb 1, 2015 /
 
Sziasztok!

Szerintetek hogyan lehet az, hogy egy ltc1864-es ADC negatív számot ad a mérésnél, annak ellenére, hogy uint16_t a függvény visszatérési értéke, valamint a változók is.
Itt az ominózus függvény:

  1. uint16_t  ltcRead(void)
  2. {
  3.         uint8_t ertek = 0;
  4.         uint16_t atmenet = 0;
  5.        
  6.         PORTG |= (1<<PG0);
  7.         _delay_us(0.03);
  8.                        
  9.         SPDR = 0x01;   
  10.         while(!(SPSR & (1<<SPIF)));
  11.         ertek = SPDR;
  12.         atmenet =  (ertek<<8) ;
  13.        
  14.         SPDR = 0x01;
  15.         while(!(SPSR & (1<<SPIF)));
  16.         ertek = SPDR;
  17.         atmenet |=  ertek;
  18.        
  19.        
  20.         PORTG &= ~(1<<PG0);
  21.         return atmenet;
  22.        
  23. }


sprintf-fel alakítom át kiíratás előtt, de az itoa is ugyanúgy negatív eredményt hozott. Nagyságrendileg jó a mért érték, csak azt nem értem, hogy lehet negatív, ha egyszer unsigned. Az ltc1864 egy AD22285-ös gyorsulásmérőre van kötve. Ez 2,5 V feszültséget ad alaphelyzetben. Amit utoljára mértem, az -28010 volt. Vajon mi okozhatja ezt? A kontroller Atmega2561.
(#) killbill válasza kovacsj hozzászólására (») Feb 1, 2015 1 /
 
Azert ir ki negativ szamot, mert a sprintf-nek azt mondod, hogy signed-kent ertelmezze az erteket. Ha a szamod legfelso bitje 1, akkor negativkent fogja kiirni. Ha a sprintfnek %d helyett %u-t irsz, akkor unsigned-kent fogja ertekelni, es pl. -1 helyett 65353-ot fog kiirni.

Viszont azt nem tudom, hogy a _delay_us() fuggveny float bemeno parametert var-e, de nem hiszem. 0.03us az 30ns, annyit sw-bol nem igy kell varni. Ez nagyjabol 5 orajel.
(#) Koleus hozzászólása Feb 3, 2015 /
 
Sziasztok.

A cégben hányódik egy pár felesleges frekiváltó kijelző. Szétkaptam az egyiket, ATmega 169P + UMNH-7909JN-2F van benne. Ez egy 5x3 cm grafikus kijelző, sárga háttérvilágítással. Találkozott már valaki ilyen LCD-vel?
Sok guglizás után csak annyi derült ki, hogy jelölés alapján U.R.T. lehet a gyártó, de ezt a konkrét modelt nem találtam. Hogy lehetne kideriteni, milyen vezérlője lehet ennek a panelnak?
A hozzászólás módosítva: Feb 3, 2015

LCD.jpg
    
(#) szabi95 hozzászólása Feb 3, 2015 /
 
Üdv!
Bár nem pic be lesz hanem avr-be, de ha le tudná valaki fordítani ezt a c nyelvű progit hex-be úgy hogy a cell num-ot átirja 6-ra azt nagyon megköszönném.
Üdv!
A hozzászólás módosítva: Feb 3, 2015
(#) enree hozzászólása Feb 4, 2015 /
 
Sziasztok!
Építettem a Tuxgraphic oldalról egy NPT órát. A leírás szerint, égetéskor át kell állítani;
"Change the low fuse byte from: 0x62 to 0x60 avrdude -p m168 -c stk500v2 -u -v -U lfuse:w:0x60:m"
Ennek megfelelően, átírtam a LOW 0x62-t ----> LOW 0x60-ra (amíg ezt nem tettem meg, nagyon pontatlan volt, ugyan minden egész órakor újra szinkronizálta magát, de a végére kb10 percet késett). Utána már semmit se tudtam csinálni az AVR studióval rajta. Egyébként, tökéletesen működik maga az óra, csak a portot át akartam írni benne és akkor vettem észre. Valamit én szúrtam el, vagy ezt már csak fusebit doctor tudja helyrehozni?
A hozzászólás módosítva: Feb 4, 2015
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Figyu szabi95!

Ha szeretnéd, hogy működjön is neked a dolog?
Közölnöd kellene, mi az AVR pontos típusa és milyen óra jelel van meghajtva?


Jobbat mondok! Ez ingyenes, töltsd le és megcsinálhatod magadnak:
Atmel Studio 6
A hozzászólás módosítva: Feb 4, 2015
(#) szabi95 válasza kapu48 hozzászólására (») Feb 4, 2015 /
 
Az avr típusa attiny 13.Pontosan ez.
A program innen van.
A gond csak az hogy én nem értek ezekhez a dolgokhoz(suliban még csak az analóg elektro-t vesszük)úgyhogy nem tudok programot írni.Kérdeztem suliban tanárt és azt mondta hogy nem ártana tudni azt is hogy melyik programmal írták ezt a progit mert ha rosszal fordítom le akkor nem fog működni.
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Az általad idézett Cikkek » Nyolc lábbal AVR IV. rész
De!
A tanulást az elejéről kellene kezdened, mert ha nem érted az alapokat.
Hiába van meg a *.hex, nem tudod feltölteni, fuse biteket beállítani …!

Kezd a sorozat többi részével:

• 1. Nyolc lábbal AVR I. rész
• 2. Nyolc lábbal AVR II. rész
• 3. Nyolc lábbal AVR III. rész
Javaslom, kezd az elejétől, és szépen lépésenként


A számolást sem a gyökvonással kezdték neked tanítani!
(#) szabi95 válasza kapu48 hozzászólására (») Feb 4, 2015 /
 
Félreértesz,én nem akarom még megtanulni se a programozást se a többi digitális cuccot csak meg akarom építeni azt az akkutöltőt.
A beprogramozást meg suliban meg tudom oldani.
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Megkaptad az Atmel Studio 6 linkjét!
Ugyan ott vannak bemutató videók a használatról!
Végignézed és mindent megtudsz belőlük!

Azt a kritikus 4-est, meg csak kitudod javítani 6-osra!
(#) szabi95 válasza kapu48 hozzászólására (») Feb 4, 2015 /
 
Bemásoltam a programot és megpróbáltam hex-et csinálni de nem sikerült.(a zöld vonal feletti rész nélkül is próbáltam)
A hozzászólás módosítva: Feb 4, 2015

asd.jpg
    
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Nem elég csak bemásolni!
Ajánlom:
Bővebben: Link
Megtekinteni:
1.:Create a New C Project for GCC in Atmel Studio 6

2.: Build a Project in Atmel Studio 6
3.: In-System Programming in Atmel Studio 6
A hozzászólás módosítva: Feb 4, 2015
(#) szabi95 válasza kapu48 hozzászólására (») Feb 4, 2015 /
 
Az első kettöt néztem a harmadikat nem is találtam.
Idézet:
„Nem elég csak bemásolni!”

Miért nincs megírva a program?? WTF
Megnéztem a harmadikat de nekem nem is olyan a properties menüben a cucc.
Ennyi alapján nem fogom tudni megcsinálni.
Hagyjuk is abba.
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Elöször az elsőt nézd!

Leírom röviden amit mutogat:
File > New Project > GCC C Executable Project > OK > Device Family > tinyAVR8 > attiny13 > OK
Most CopyPaste a forrás > Build!
??
A hozzászólás módosítva: Feb 4, 2015
(#) kapu48 válasza enree hozzászólására (») Feb 4, 2015 / 1
 
"átírtam a LOW 0x62-t ----> LOW 0x60-ra"
Ezzel külső órajelre állítottad az AVR-t.
Valószínűleg nem építettedbe a megfelelő külső Kristályt a működéshez?
Ezért nem indul el neked!

Bővebben: Link
(#) szabi95 válasza kapu48 hozzászólására (») Feb 4, 2015 /
 
Ugyan ezt csináltam az előbb is és ahogy akkor, most is errorokat dobott ki.Korábban azt irtad hogy nem elég csak bemásolni most meg azt mondod hogy csak másoljam be.Akkor most mi van??
Fogtam és a program mellett megnyitottam a mappát amibe benne van a c file és áthúztam a programba és működött a build.
ilyen lett a hex file:
:1000000009C00EC00DC00CC00BC00AC009C008C09A
:1000100007C006C011241FBECFE9CDBF02D002C069
:08002000EFCFFFCFF894FFCFF2
:00000001FF
Ennek ilyen kevésnek kell lennie?
(#) kapu48 válasza szabi95 hozzászólására (») Feb 4, 2015 /
 
Ne jó!

Nem egészen ezt mondtam!

Itt elmutogatják az első 1 percben:
Bővebben: Link
1.:Create a New C Project for GCC in Atmel Studio 6
Bővebben: Link

Neked ezeket a menüket kel megkeresned, kiválasztani, beállítani, balgombot nyomni az egéren!
File > New Project > GCC C Executable Project > OK > Device Family > tinyAVR8 > attiny13 > OK

Megnyílik 1 üres project lap. Oda copipaste a te listádat, felülírva az automata szöveget.
A hozzászólás módosítva: Feb 4, 2015
(#) enree válasza kapu48 hozzászólására (») Feb 5, 2015 /
 
Nagyon köszönöm a válaszod!
Megvilágosodtam. Legalább is, úgy gondolom. Itt az alapkapcsolás, ahol látható, hogy az ENC28J60-as CLKout kimenete az AVR XTAL1 bemenetére van kötve, tehát onnan kap órajelet. Viszont, ha kiveszem az AVR-t és berakom az égető foglalatába, akkor gondom azért nem működik, mert nincs órajele, jól sejtem?
(#) szabi95 válasza kapu48 hozzászólására (») Feb 5, 2015 /
 
Áhhh.Pontosan ezt csináltam:
File > New Project > GCC C Executable Project > OK > Device Family > tinyAVR8 > attiny13 > OK
És ez után a program mellett megnyitottam a mappát amiben a c file van,áthúztam a proramozói felületre, kitörlődött az alap szöveg és megjelent a proram.Ezután build,megkerestem a hex filet és bemásoltam a tartalmát ide.Csak ennek ilyen kevésnek kell lennie?
(#) kapu48 válasza szabi95 hozzászólására (») Feb 5, 2015 /
 
Valamit még mindég elrontasz!
Build előtt mindig nyomjál Save-t.

Jó könyvtárban keresed az eredményt?
Nálam ez jött létre:
  1. :1000000009C021C020C01FC01EC01DC01CC01BC015
  2. :100010001AC019C011241FBECFE9CDBF10E0A0E661
  3. :10002000B0E0E8EEF0E002C005900D92A636B10710
  4. :10003000D9F710E0A6E6B0E001C01D92A636B107E0
  5. :10004000E1F71FD04FC0DCCF009741F0E3ECF9E0BF
  6. :100050003197F1F700C000000197C1F708958BE0D8
  7. :1000600087BB17B887E886B9089597B19C7F97B981
  8. :1000700097B1892B87B9369A3699FECF84B195B15D
  9. :100080000895EDDF82E0F1DF8159904023E0843B69
  10. :10009000920718F0C19AC098F5CFC19AC09AC39838
  11. :1000A00088E592E0D1DFC39A81E090E0CDDFC29A8B
  12. :1000B00084E690E0C9DF82E0D8DFC29882569340A0
  13. :1000C000833E9105F8F6C39AC198C09A82E0CDDFCD
  14. :1000D000EC0181E090E0B8DFC256D340C33ED105C9
  15. :0800E00090F3D0CFF894FFCF9C
  16. :0600E800910045046203D3
  17. :00000001FF
A hozzászólás módosítva: Feb 5, 2015
(#) kapu48 válasza enree hozzászólására (») Feb 5, 2015 / 1
 
Igen!

Kösdát az CLKout-ot.
A hozzászólás módosítva: Feb 5, 2015
(#) enree válasza kapu48 hozzászólására (») Feb 5, 2015 / 1
 
Ok, köszönöm az okítást!
Következő: »»   645 / 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