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   736 / 837
(#) Kovidivi válasza FDAssasin hozzászólására (») Máj 17, 2016 / 1
 
Az eredeti UNO lapon is Atmega16u2 van, mint soros-usb illesztő. Nem kell félni, mindegyik működni fog. Egy CH340 driver feltelepítési is kb. 2 perc, nem nagy dolog.
Szerintem lényegtelen, hogy SMD, vagy DIP tokos IC van benne, mert ha veszel is DIP Atmega328-at, még bele kell égetned a bootloadert, amihez programozó kell (valószínűleg nincs), vagy másik Arduino Uno vagy nano. Egyébként nem megy tönkre egykönnyen az IC, nagyon-nagy hibát kell véteni! Én egyébként Arduino nano-t szoktam venni, CH340-nel. Kicsi, olcsó, egyszerű, és kettővel több ADC csatornája van, mint az UNO-nak (az SMD Atmega328 verziókon is elérhető ez a két csatorna, esetleg rá kell forrasztani két lábára az IC-nek, ha nincs kivezetve.).
A hozzászólás módosítva: Máj 17, 2016
(#) FDAssasin válasza Kovidivi hozzászólására (») Máj 17, 2016 /
 
Ebayen bootloaderrel árulják az UNO lapokat? Mert akkor azt lehet használni ISP-ként egy másik chiphez nem? Csak veszek egy tartalék 328p-t, azzal kezdem hogy beégetem a bootloadert Arduino as ISP módszerrel és nem kell félnem, hogy ha esetleg kinyírom az IC-t. Vagy ez túl naiv elképzelés?
(#) rascal hozzászólása Máj 17, 2016 /
 
Nem tudjátok véletlenül, hogy az AtmelStudio-ban assembler módban a .message kiírását hogyan lehet bekapcsolni? Se a 6.2-es, se a most frissen telepített 7.0-ás nem mutatja. .warning, .error működik rendesen. Próbáltam a toolchain-ben a -v2 opciót (ami elvileg a default is és ettől mutatná), de akkor sem mutatja ezeket az üzeneteket.

Azt még leírom, hogy most updateltem win7-ről win10-re és a 6.2-ben a szimulátor eltűnt, mint választható opció. A telepítővel javítást próbáltam, az sem hozta vissza. 6.2 leszedése után már a 6.2 újratelepítésével nem próbálkoztam, a 7.0-t raktam fel egyből. Ha valaki tudja, hogy hogyan lehetett volna "két kattintással" visszahozni, azért szerintem írja le mások okulására.
(#) Kovidivi válasza FDAssasin hozzászólására (») Máj 17, 2016 /
 
Bootloaderrel kapsz minden Arduinot. Megteheted, hogy már az első nap készítesz egy tartalékot, jó ötlet. De tényleg valami brutálisat kell tenned, ha ki akarod nyírni az AVR-t (12V rákapcsolása közvetlenül az egyik lábra, fordított tápfeszültség).
Ha további kérdésed van, az Arduino topicban tedd fel.
A hozzászólás módosítva: Máj 17, 2016
(#) kameleon2 válasza FDAssasin hozzászólására (») Máj 17, 2016 /
 
Szia ! Én még javában XP-t használok - maradtam a Sainsmart verziónál. Olcsó és használható. Nem SMD chipes, DIP tokos változat és teljesen kompatibilis. Az USB-je is Atmel alapú. Pofára teljesen olyan mint az általad linkelt 2-es változat, csak picivel drágább és más a színe a lötstopnak.
(#) csabeszq válasza FDAssasin hozzászólására (») Máj 17, 2016 /
 
Az uno r3 atmega16u2-t használ.

99.9% hogy nem fog neked problémát okozni a ch350g.
Valaki az atmega16u2-t veszi, mert lehet USB-s perifériát csinálni vele, más a ch340g-t, mert 2mbps-sel szereti küldeni az adatokat.

Más a kettő, a kezdőként meg nem fogsz USB-s perifériát írni és a 2 mbps is elméleti probléma.
Magyarul: azt veszed, amelyik tetszik, csak az ft232-t nem javaslom.
A hozzászólás módosítva: Máj 17, 2016
(#) kameleon2 válasza csabeszq hozzászólására (») Máj 17, 2016 /
 
Idézet:
„csak az ft232-t nem javaslom.”
Vicces... Éppen a CH miatt szívtam egy projekten, az FTDI-vel nem volt semmi gondom - de hangsúlyozom W XP....
(#) Moderátor hozzászólása Máj 17, 2016
 
Most akkor az AVR és az Arduino témát összevonjuk? Csak mert két oldalt már teleoffoltatok.
(#) csabeszq válasza kameleon2 hozzászólására (») Máj 17, 2016 /
 
(#) Gj hozzászólása Máj 20, 2016 /
 
Üdv!

Van egy FT232RL IC-m, aminek bekötöttem a az USBDP (D+), USBDM (D-), VCC, AGND, és 3db GND lábát.

A baj az, hogy amit küldök neki jelet PC-ről, azt nem küldi ki a Tx lábán. Az Rx működik (legalábbis annyira teszteltem, hogy amikor fogdostam a drótot az Rx-en, felküldte a zavart a PC-nek).
A Tx lábat szkóppal is megnéztem, semmit nem mutatott küldéskor.

Rossz az IC, vagy valami más oka van ennek?
(#) monxla hozzászólása Máj 21, 2016 /
 
Sziasztok,

Lenne pár kérdésem AVR assembly vel kapcsolatban. (atmega128)

Az SRAM ba egy adott címre (pl. 2100h) hogyan tudok betenni string-et?
az rendben van hogy .org 2100h t használni kellene hogy oda tegye a .dseg szegmensen belül.
Használhatok a .dseg en belül .egy ilyen deklarációt? : .db "Any text"

Bizonyos esetekben erre figyelmeztetést dob:
Warning 1 offset 0x2000 in .dseg is beyond end of memory at 0x10ff

Ill miért van a következő utasításnál "Invalid Number" hiba?
lds port_value, X+
Ahol a port_value az (.def port_value = R17)

A máskik kérdésem az lenne hogyan írok ki egy portra tetszőleges időzítéssel valamit?
Az rendben van hogy inicializálom a portot pl.
ldi port_value, 0xFF
out DDRC, port_value
ldi port_value, 0x00
out PORTC, port_value

Majd használom a következő utasítást pl.
out PORTC, port_value
De a tetszőleges időzítés mit jelent itt?

Előre is köszi.
A hozzászólás módosítva: Máj 21, 2016
(#) vagnerjazon válasza monxla hozzászólására (») Máj 21, 2016 /
 
Szia!
SRAM-ba így nem lehet konstanst írni, csak programból. Mivel RAM, "elfelejtené", ha felprogramozáskor lenne beállítva.
Az lds utasítás konstans címről való olvasásra van, az X által címzett bájt olvasásához az ld utasítás kell(adatlap->Instruction Set Summary).
Ezt a tetszőleges időzítés dolgot nem értem. Mire gondolsz pontosan?
(#) rolandgw válasza monxla hozzászólására (») Máj 21, 2016 /
 
Stringet így kell megadni. Ha szükséged van rá egy pointert ráállítasz és ciklusban beolvasod,figyelve a 0-t.Ram-ba változót foglalhatsz .byte-al de a címet inkább bízd a fordítóra,ha nem lényeges.
A hozzászólás módosítva: Máj 21, 2016
(#) rolandgw válasza rolandgw hozzászólására (») Máj 21, 2016 /
 
Ha flash-be teszed,akkor csak Z-vel tudod beolvasni és lpm utasítással.
(#) monxla válasza vagnerjazon hozzászólására (») Máj 21, 2016 /
 
Helló

Köszi a választ,
Ilyesmit szeretnék:
Ez egy kis programrész amely az SRAM 2100h címétől kezdve egy szöveget # végjelig karakterenként tetszőleges időzítéssel kitesz a C portra.
kb ennyi
A tetszőleges időzítés esetleg olyasmit jelenthet hogy két karakter kiírása közt van valami sleep v. ilyesmi, vagy tetszőleges számú NOP egy ciklusban? Esetleg ha jól sejtem van valami time az atmega128 ban és lehet azt kellene használni?
(#) rolandgw válasza monxla hozzászólására (») Máj 21, 2016 /
 
2100h? Az már external. Saját regiszter kezelése van.
(#) monxla hozzászólása Máj 21, 2016 /
 
Hali
Ezt a warning message-et sem értem, ezt deklarálta:

  1. .dseg
  2.         .org    0x2100          ; Set SRAM address to hex 2100
  3.         sram_2100h:    
  4.         .BYTE 255               ; Reserve 255 bytes at address 2100h of SRAM
  5.  
  6. offset 0x2100 in .dseg is beyond end of memory at 0x10ff


Ha jól sejtem 4096Kbyte az SRAM mérete.

Pl ennél a kövewtkező résznél semmit nem tölt be az R16 regiszterbe ez: "ld port_value, X+" pedig az X megkapja az offsetjét a text nek.

  1. ; Initialize copy text to SRAM
  2. Initialize:
  3.         ; source address
  4.         ldi     XL, low(TextForCopy)    ; load low value into XL
  5.         ldi     XH, high(TextForCopy)   ; load high value into XL
  6.         ; target address
  7.         ldi     ZL, low(sram_2000h)     ; load low value into ZL
  8.         ldi     ZH, high(sram_2000h)    ; load high value into ZL
  9. Init_loop_next:
  10.         clr     port_value                      ; clear R16 content
  11.         ld      port_value, X+                  ; load the value at X into port_value          
  12.         st      Z+, port_value                  ; store and post increment Z
  13.         cpi     port_value, ampersand   ; compare content of R16 with the ampersand (text end sinature)
  14.         brne    Init_loop_next                  ; Init_loop_next if not equal with ampersand
  15.                
  16. A .cseg ben:
  17. TextForCopy:
  18. .db             "This is a sample text&"
A hozzászólás módosítva: Máj 21, 2016
(#) vagnerjazon válasza monxla hozzászólására (») Máj 21, 2016 /
 
Értem. Én sem rég kezdtem assemblyzni, de a következőket gondolom: (nyugodtan javítsatok ki, ha tévednék)
Ha állandó az a szöveg, akkor ahogyan rolandgw írta, vagy a flash-be, vagy az EEPROM-ba írd. Ha mindenképp az SRAM-ban akarod tárolni, akkor a program elején inicializáláskor töltsd be oda bájtonként(szerintem nem elegáns).
Ha futás közben változnia kell a szövegnek, akkor EEPROM (akkor érdemes, ha csak ritkán kell módosítani), vagy SRAM az előbb leírt módon.

Megnéztem az atmeg128 adatlapját, és hacsak nincs pluszban külső SRAM-od a belső 4k mellett, akkor a 2100h cím túl nagy, mert a címtartomány 0100h-tól 10FFh-ig tart.

A várakozást kétféleképpen lehetne megoldani, említetted is mindkettőt.
Szoftveresen úgy lehet, hogy csinálsz egy szubrutint, amelyben van egy ciklus, ami csökkenti egy regiszter értékét, és akkor ér véget, ha nulla a regiszter értéke. A kívánt időtartamot a ciklusban lévő nop-ok számával, a csökkentendő regiszter kezdeti értékével, és esetleg a cikluson kívüli néhány nop-pal lehet beállítani az órajel ismeretében (ha pontosan kell időzíteni, akkor a szubrutinhívás és a visszatérés idejét is bele kell számolni).
Ennek hátránya, hogy lefoglalja a processzort, nem lehet közben mást csinálni.

Hardveresen pedig úgy, hogy beállítasz egy timer-t, hogy kellő időközönként generáljon megszakítást, és a megszakításban írod ki a következő karaktert. Ez azért jobb, mert várakozás közben szabad a processzor.
(#) vagnerjazon válasza monxla hozzászólására (») Máj 21, 2016 /
 
Először is, használd légyszíves a "Kód" gombot, mert így nagyon nehezen olvasható, amit írsz.

Nem 4096Kbyte a mérete, hanem 4Kbyte, vagyis 4096byte! Tehát a 2100h bőven kívül esik.
Tehát pont azt kapod, amit az előző hsz-omban írtam, hogy 10FFh a memória vége.

Az a baj, hogy X-szel nem hivatkozhatsz cseg-beli címre, mert az a flashben van, az X-et csak az SRAM-ban használhatod. Nézz utána a rolangw által írt lpm utasításnak.
(#) rolandgw válasza monxla hozzászólására (») Máj 21, 2016 /
 
Ajánlom olvasásra:
(#) monxla válasza rolandgw hozzászólására (») Máj 22, 2016 /
 
Hali

Igen external, elviekben be kell állítsam 1 be az SRE bitet a MCUCR regiszterben.
(#) monxla válasza rolandgw hozzászólására (») Máj 22, 2016 /
 
Köszi!
Hol lehet ilyen okos kis forráskódot találni?
Mert ahol ez van tuti van olyan is ami External SRAM ba ír.
Bár találtam egy pédát, de nem értem a Port C használatát, mi köze van az External SRAM hoz.
http://www.atmel.com/images/doc2467.pdf
34. oldalon leírja hogy is lehet kiírni valamit az External SRAM ba.
Ill. ez is érdekes:
http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_ext_ram.html
Sajnos nem ismerem kellően az ATmega128 chip-et és időm sincs sok.
(#) kapu48 válasza monxla hozzászólására (») Máj 22, 2016 /
 
Mit nem lehet ezen érteni?

External SRAM = külső SRAM memória!
Aminek a cim és adatvonalait, perifériákon keresztül lehet elérni.

bekötése a 27. oldal: Figure 12. External SRAM Connected to the AVR
A hozzászólás módosítva: Máj 22, 2016
(#) killbill válasza kapu48 hozzászólására (») Máj 22, 2016 /
 
Idézet:
„Aminek a cim és adatvonalait, perifériákon keresztül lehet elérni.”
Nem perifériákon keresztül lehet elérni, mert az ATmega128 nativan kezeli a külső memóriát. Óriási különbség. Rendes címbusz és adatbusz van rajta, ezért a külső memóriát a sima adatírás/adatolvasás utasításokkal lehet elérni, pont ugyanúgy, mint a belső 4k RAM-ot. Egyszerűen a belső 4k-t lehet kibővíteni külső memóriával. De lehet rákötni egyéb dolgokat is, nem csak RAM-ot.
(#) rolandgw válasza monxla hozzászólására (») Máj 22, 2016 /
 
Ezzel az asm kóddal nem égetném magam az AVRFreaks-on .Többször is leírtuk,hogy X-el nem lehet flash-t elérni.
(#) monxla válasza kapu48 hozzászólására (») Máj 22, 2016 /
 
Nem ezzel van a gond!
A gond az, nem tudok oda kiírni egy szöveget pl. a 2100h címre az SRAM ból.
Van aki tudja pontosan?
(#) monxla válasza rolandgw hozzászólására (») Máj 22, 2016 /
 
Sajnos kb. 20 éve volt az a 9 év, amikor napi szinten 8086 assembly-t használtam. atmega ról akkor még nem is hallottam. Valahol el kell indulni, és most nincs időm végigolvasni a 386 oldalas leírást hogy megismerjem a proci architectúrát, mit mire célszerű/kell használni, kénytelen vagyok keresgélni.
pl. itt ez a kód ami arra lenne hivatott hogy a FLASH ból Ext SRAM 2100h tól kezdve másolna byte-okat, debug közben a beolvasást látom hogy jó, de a kiírás az nem jó, nem látom data XRAM Memory view ban hogy kiírna bármit is. Fogalmam sincs miért. Esetleg te tudod?
  1. .def    mpr   = r16                                             ; Multipurpose Register
  2.  
  3. .dseg
  4.         .org    0x2100                                          ; Set External SRAM address to hex 2100
  5.         offset_at_2100h:       
  6.                 .BYTE 255                                               ; Reserve 255 bytes at 2000h in External SRAM
  7.  
  8. .cseg
  9.  
  10. CopyBytesFromFLAASH2ESRAM:
  11.  
  12.                 ; source address
  13.                 ldi             ZL, low(TextForCopy*2)          ; load low value into ZL
  14.                 ldi             ZH, high(TextForCopy*2)         ; load high value into ZL
  15.                 ; target address
  16.                 ldi             XL, low(offset_at_2100h)                ; load low value into ZL
  17.                 ldi             XH, high(offset_at_2100h)       ; load high value into ZL
  18.  
  19.         Init_loop_next:
  20.  
  21.                 lpm             mpr, Z+                                         ; load the value at R0
  22.                 st              X+, mpr
  23.  
  24.                 cpi             mpr, 26h                                ; compare value of R16 with the ampersand (EOT character)
  25.                 brne    Init_loop_next                          ; Init_loop_next if not equal with ampersand
  26.  
  27.                 ret
  28.  
  29. TextForCopy:
  30.                 .db             "This is a sample text&"
(#) rolandgw válasza monxla hozzászólására (») Máj 22, 2016 /
 
(#) freechat hozzászólása Máj 22, 2016 /
 
IR-es távolságérzékelést csináltam ami működik is csak az a baj, hogy a feketét nem érzékeli.
Mivel ping-pont ütőt kellene érzékelni és annak az egyik fele szinte mindig fekete ezért ez kicsit kellemetlen. Meg lehet oldani ezt a problémát valahogy?
tcrT5000-t használtam
(#) monxla válasza rolandgw hozzászólására (») Máj 22, 2016 /
 
Aha ez (External memory is not supported by simulator (#7570, #9442)) meglepett, köszi.
De az hogy nem látom az ok. Viszont ha az oda kiírtat visszaolvasom azt látnom kell, ha jól gondolom, mert a program az lefut csak nem mutatja a Simulator Vagy rosszul gondolom?
Következő: »»   736 / 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