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   794 / 837
(#) Sick-Bastard válasza alita hozzászólására (») Máj 19, 2018 /
 
Üdv!

Feltételezem, hogy egy SPI/ISP-s felprogramozásra gondolsz.

Fuse Bit Low: 0xE1 ; Fuse Bit High: 0xD9 - gyári konfiguráció. SPI/ISP-n keresztül (is) programozható, de el ne felejtsd, hogy alacsony frekvenciás (~50kHz - javítást kérek ha tévedek) módban kell felprogramoznod.

A két legfontosabb Fuse Bit ez esetben a(z) SPIEN és a RSTDISBL.

SPIEN bit legyen 0 (programmed)
RSTDISBL bit legyen 1 (unprogrammed)

Ha ezek módosulnak (legalább az egyik), akkor SPI/ISP-n keresztül már nem lehet újra programozni, csak más típusú(HVPP - High Voltage Parallel Programmer) programozóval.

SB
(#) alita válasza Sick-Bastard hozzászólására (») Máj 19, 2018 /
 
Köszönöm a tanácsot.Szép napot kívánok.
(#) Szasza9668 válasza pont hozzászólására (») Máj 19, 2018 /
 
Köszönöm!

Sajnos nem vagyok egy lángelme ezen a téren. Tanulgatom ahogy időm energiám engedi.
A kitűzött cél egy idő kapcsoló amivel lehet a fogyasztót ki és be kapcsolgatni meghatározott idő intervallumban. Azonban ha úgy hozza kedvem bármikor ki és be tudjam kapcsolni a programtól függetlenül. Majd ha eljön az ideje akkor a beállított időkapcsolás vegye át a ki és be kapcsolgatást.

Remélem érthető voltam.

(#) Szasza9668 hozzászólása Máj 19, 2018 /
 
Sziasztok!

Közben felmerült még egy kérdés. Ha az avr lábat külső felhúzóval felemelem vcc-re akkor az beolvasáskor 1 lesz, ha lehúzom gnd-re akkor az 0 lesz? Vagy hardveresen hogyan tudnék 1 és 0 eredményt kapni a láb beolvasásakor?
Bascom demót használok.

Bocsánat ha hülyeséget kérdeztem!
(#) kapu48 válasza Szasza9668 hozzászólására (») Máj 20, 2018 /
 
Itt 1 demo:
  1. '-----------------------------------------------------------------------------------------
  2. 'name                     : port.bas
  3. 'copyright                : (c) 1995-2011, MCS Electronics
  4. 'purpose                  : demo: PORT access
  5. 'micro                    : Mega88
  6. 'suited for demo          : yes
  7. 'commercial addon needed  : no
  8. '-----------------------------------------------------------------------------------------
  9. '$RegFile = "m88def.dat"
  10. '$RegFile = "m8def.dat"
  11.  
  12. $regfile = "m48def.dat"                                     ' specify the used micro
  13. $crystal = 8000000                                          ' used crystal frequency
  14. '$baud = 19200                                               ' use baud rate
  15. $hwstack = 32                                               ' default use 32 for the hardware stack
  16. $swstack = 10                                               ' default use 10 for the SW stack
  17. $framesize = 40                                             ' default use 40 for the frame space
  18.  
  19.  
  20. Dim A As Byte , Count As Byte
  21.  
  22. 'configure PORT D for input mode
  23. Config Portd = Input
  24.  
  25. 'reading the PORT, will read the latch, that is the value
  26. 'you have written to the PORT.
  27. 'This is not the same as reading the logical values on the pins!
  28. 'When you want to know the logical state of the attached hardware,
  29. 'you MUST use the PIN register.
  30. A = PIND
  31.  
  32. 'a port or SFR can be treated as a byte
  33. A = A And Portd
  34.  
  35. Print A                                                       'print it
  36.  
  37. Bitwait Pind.7 , Reset                                        'wait until bit is low
  38.  
  39.  
  40. 'We will use port B for output
  41. Config Portb = Output
  42.  
  43. 'assign value
  44. Portb = 10                                                    'set port B to 10
  45. Portb = Portb And 2
  46.  
  47. Set Portb.0                                                   'set bit 0 of port B to 1
  48.  
  49. Incr Portb
  50.  
  51. 'Now a light show on the STK200
  52. Count = 0
  53. Do
  54.  Incr Count
  55.  Portb = 1
  56.  For A = 1 To 8
  57.    Rotate Portb , Left                                       'rotate bits left
  58.     Wait 1
  59.   Next
  60.   'the following 2 lines do the same as the previous loop
  61.  'but there is no delay
  62.   Portb = 1
  63.   Rotate Portb , Left , 8
  64. Loop Until Count = 10
  65. Print "Ready"
  66.  
  67. 'Again, note that the AVR port pins have a data direction register
  68. 'when you want to use a pin as an input it must be set low first
  69. 'you can do this by writing zeros to the DDRx:
  70. DDRB =&B11110000  'this will set portb1.0,portb.1,portb.2 and portb.3 to use as inputs.
  71.  
  72. 'So : when you want to use a pin as an input set it low first in the DDRx!
  73. '     and read with PINx
  74. '     and when you want to use the pin as output, write a 1 first
  75. '     and write the value to PORTx
  76.  
  77. End

PORTD a bemenet.
Kimenetek: Kössél 8 LEDet a PORTB-re.

Bővebben: Input
A hozzászólás módosítva: Máj 20, 2018
(#) kapu48 válasza kapu48 hozzászólására (») Máj 20, 2018 /
 
Rossz lett a link. Keres rá a: CONFIG PORT-ra.

Bővebben: gombok
A hozzászólás módosítva: Máj 20, 2018
(#) pont válasza Szasza9668 hozzászólására (») Máj 20, 2018 /
 
Szia!

A külső felhúzós eset úgy van ahogy mondod, ha utána gnd-t viszel közvetlenül a pin-re akkor meg nullának méri. Lehet belső felhúzót is használni, csak az nem olyan "erős", de normál esetekben teljesen megfelel, tehát ha egy inputként definiált portnak 1-et adsz azzal kapcsolod be a belső felhúzót.

config pinb.1= input
pinb.1=1
(#) Massawa hozzászólása Máj 20, 2018 /
 
Egy kérdésem lenne. Alapbol egy ATmega328P irok egy programot, amihez egy meglehetösen bonyolult HW környezetet épitettem. Ekkor jöttem rá, hogy sajnos a 328P-nek nincs JTAG inteface. Anélkül meg közel lehetetlen összehangolni a hardwarrel mert nem tudom a pricesszorban szimulálni a müködést.
Ezért szereztem egy ATmega128-s procit, ami joval nagyobb mint a 328-s és van rajta JTAG csati igy sok konfliktus nem lehet.
Sajnos mégis lett.
Az m128def.inc-ben többek között a TCCR3A=0x8b vel van definiálva mig a 328-ban nincs, azaz ott én határozom meg a TCCR3A tartalmát.
Nos ez most nekem gondot okoz, mert természetesen konfliktus van a programban. Ez a része a 328-snak viszont a megszakitásokat kezeli igy nagyon nem szeretném változtatni. Az esetleg még meglehetne, hogy egy masik TCCRn-t használok, de nem vagyok benne biztos, hogy az menne-e.
Mit javasoltok az ilyen esetben?
Olyan megoldás kellene ami majd egyszerüen visszavonatkoztathato a 328P-re, mert a cél az, hogy a 128-n kifejlesztett programot majd visszairom a 328-ba.

Kösz
(#) kapu48 válasza Massawa hozzászólására (») Máj 20, 2018 /
 
Csak azt nem jelezted, hogy milyen program nyelven akarod ín?

Mivel előzőleg itt Bascomról volt szó, keres rá a help-ben a feltételes fordítás kifejezésekre:
Syntax:
  1. #IF condition
  2.  
  3. #ELSEIF condition
  4.  
  5. #ELSE
  6.  
  7. #ENDIF


Ugyanez C-ben: Bővebben: Link
(#) Massawa válasza kapu48 hozzászólására (») Máj 20, 2018 /
 
Kösz.

Én csak sajnos ASM-ben tudok irni.
(#) rolandgw válasza Massawa hozzászólására (») Máj 20, 2018 /
 
Ott nincs preprocessor?
Bővebben: Link
Egyébként debugWIRE is van a 328-on.
(#) Massawa válasza rolandgw hozzászólására (») Máj 20, 2018 /
 
Nincs.

Az AVR Studio olyan hibát jelez, hogy "Illegal to re-use the TCCR3 as label" és emiatt nem megy az IRQ.

A programban egyszer kell a TCCR3 ,byte 1
(#) rolandgw válasza Massawa hozzászólására (») Máj 20, 2018 /
 
Mi nincs? Most linkeltem, hogy van feltételes fordítás ASM-ben. Ott a példaprogram is. Neked kell megírnod, a Studio nem fogja.
(#) Massawa válasza rolandgw hozzászólására (») Máj 20, 2018 /
 
Bocs ez természetesen már régen meg van irva. És itt van a konfliktus, mert a 128-sban valahogy máskép kell használni a TCCR3-t. Azt nem tudom, hogy hogyan.. a program maga chip független, eredetileg egy 644-n futott. Onnan vettem át a 328-ra, és már akkor megirtam a feltételes forditást és a 328a-n megy.
(#) Szasza9668 hozzászólása Máj 21, 2018 /
 
Sziasztok!

Köszönöm a segítséget mindenkinek!

Bascom szimulátorban tökéletesen fut a programocskám. Már csak a hardware teszt van hátra.

Üdv!
(#) kapu48 válasza Massawa hozzászólására (») Máj 21, 2018 /
 
Ezt nem értem, Nem is lehet benne TCCR3A!:
Idézet:
„328-ban nincs, azaz ott én határozom meg a TCCR3A tartalmát.”


A 328-ban csak 3 timer van:
8-bit Timer/Counter0, 16-bit Timer/Counter1, 8-bit Timer/Counter2.
Nem is lehet benne TCCR3A
(#) Massawa válasza kapu48 hozzászólására (») Máj 21, 2018 /
 
Az is igaz, ezért mondja, hogy duplán van használva a TCCR3A.
Valoban nincs is használva csak definiálva volt. Azt már kivettem. (A 328ban a definicio nem okozott gondot, mert ott nincs TCCR3A).
Most már csak a TCCR0A/B meg a TIMSK0 okoz gondot, ami van a 328ban is és ott nincs vele gond.

Itt az egész programrész ami megy a 328ban meg a 644-ben, de a 128-ban hibát jelez.
A setbio, outio parancsok jol müködö makrok.

Kösz

IMG_3275.PNG
    
(#) Istvanpisti válasza Massawa hozzászólására (») Máj 21, 2018 /
 
Azért van baj a TCCR0A/B-vel, mert a 328 TIMER0 és a 128 TIMER0 nem egyforma funkcionalitású. A 128-nak csak 4 üzemmódja van (Normal, Phase correct PWM, CTC, FAST PWM) és ezek beállításához nem kell két TCCR0 regiszter, mint a 328 esetén, ahol a TIMER0-nak 8 üzemmódja van, amihez kell TCCR0A, és TCCR0B regiszter. A TIMSK is kicsit más a két kontrolleren, a 328-nál mind a három TIMER-hez van egy-egy TIMSK regiszter (TIMSK0,TIMSK1,TIMSK2), míg a 128-nál TIMSK regiszter, a TIMER0,TIMER1, és a TIMER2-höz, és ETIMSK regiszter, a TIMER3-hoz. A 644 és a 328 ebből a szempontból kompatibilisek.
(#) Massawa válasza Istvanpisti hozzászólására (») Máj 21, 2018 /
 
Kösz, már én is itt kezdtem pedzegetni a dolgot. Most meg elrontottam az IRQ-t a 328-ban is, igy elöször azt kell rendbe tennem.
Itánna meg kitalálni valamit a 128-ra.
(#) Massawa válasza Istvanpisti hozzászólására (») Máj 21, 2018 /
 
Lehetne olyan kapcsolokodot irni ami felismerné, hogy melyik prociban fut a program és az ahhoz valo TIMER rutint választaná (a 328P vagy a 128ashoz irottat)?

Kösz.
(#) Istvanpisti válasza Massawa hozzászólására (») Máj 21, 2018 /
 
Azt nem tudom, hogy futás közben magától fel tudja-e ismerni a kontroller típusát, de amit rolandgw fórumtárs belinkelt aszerint lehet, ha a fordításkor megadod neki melyik kontrolleren kellene futnia.

  1. //a háromból kettőt ki kell kommentelni, csak az maradjon, amelyik éppen kell
  2. #define __ATmega328__
  3. //#define __ATmega644__
  4. //#define __ATmega128__
  5.  
  6. #if defined(__ATmega328__) || defined(__ATmega644__)
  7. // ide kellene az a kódrészlet, ami a 328 és 644-nek megfelelő TIMER-eket tartalmazza
  8. #elif defined (__ATmega128__)
  9. // ide kellene az a kódrészlet, ami a 128-nak megfelelő TIMER-eket tartalmazza
  10. #endif

Futásidőben is eldönthető melyik kontrolleren fut a program (én még ilyet nem csináltam), csak a 3 byte-os signature-t kell lekérdezni. Bővebben: Link
(#) Massawa válasza Istvanpisti hozzászólására (») Máj 21, 2018 /
 
Köszönöm megprobálok valamit kiötleni. Az egyes rutinokban van olyasmi, hogy megkülönbözteti milyen a processzor ( természetesen manuálisan kell megadni) és az szerint kezeli a rutint.

Lehet, hogy azt használhatnám, hogy a proci defincios adatában keresek olyan változot ami a másikban nincs és ez szerint futna majd a program. De ilyet még soha sem csináltam.
A hozzászólás módosítva: Máj 21, 2018
(#) Massawa válasza Massawa hozzászólására (») Máj 22, 2018 /
 
Az átkapcsolást már sikerült megoldanom, és az IRQ is megy.
(#) kala1982a hozzászólása Jún 6, 2018 /
 
Sziasztok, azt szeretném kérdezni tőletek, hogy az AVR működésében okozhat-e rendellenességet, hogyha a 325V negatív pólusa és az AVR táp negatív pólusa össze van kötve? Nem áll rendelkezésemre két külön szekunderes transzformátor az optocsatolós megoldáshoz.
(#) Massawa válasza kala1982a hozzászólására (») Jún 6, 2018 /
 
Elvben nem, csak hozzányulni, mérecsgélni lehet meglehetösen veszélyes.
(#) borsozo válasza kala1982a hozzászólására (») Jún 6, 2018 /
 
1. A mérés tényleg kockázatos egy ilyen áramköri megoldásnál. Nagyon meg kell gondolni ha védőföldes (pláne ha fémházas) műszert használsz. Mellesleg a PC is, a védőföldes hálózati csatlakozó miatt össze van kötve a földdel.
2. A zavarról. Transzformátoros leválasztás nélkül, az egyenirányított táppal összekötve az AVR tápját: azt eredményezi (kétutas egyenirányítás esetén), hogy a környezethez (földhöz) képest az AVR minden egyes áramköri pontja 50Hz-cel leng (230V-tal) a földponthoz képest. A földkapacitások miatt a 325V-os csúcsfeszültség a portokon, illetve a nagyimpedanciás áramköri pontokon okozhat zavart.
Egyutas egyenirányítás esetén, ha az egyenirányító dióda a fázisvezetőre csatlakozik, és a 230V-os hálózat 0 (nulla vezetőjét!!!) kötöd össze az AVR tápjával, akkor a földhöz (nulla vezető) képest nem jelentkezik zavarfesz. De mi a garancia arra, hogy nem dugod be fordítva a villásdugót a konnektorba?!?
3. Az előbbi probléma elkerülhető. Ha kis fogyasztású áramkört (néhány mA) akarsz táplálni tr nélkül, akkor kis kapacitású kondikon keresztül tápláld az egyenirányítót a fázis- és a nulla vezető felől is. Ekkor a soros reaktanciák miatt kisebb egyenfeszültséget kapsz az optohoz. Biztonsági okokból ezt zénerrel célszerű megfogni. De a zavarfesz is kisebb lesz, ha ennek a kondenzátoros tápnak pl a minusz kapcsát földeled, illetve összekötöd az AVR GND-vel. (lásd: védőföld)
4. Nekem már füstölt el PC USB tápja AVR külső kapcsolat miatt.
Az egyik AVR programozón keresztül a PC USB portjáról kapta az 5V-os tápot, a vele kommunikáló másik AVR egy transzformátoros (5V-os) tápról működött. (azaz működött volna) Pedig csak a GND-k voltak összekötve.
A földhurok, illetve a hálózati zavarszűrő kondik mindig okozhat meglepetést...
(#) csatti2 válasza borsozo hozzászólására (») Jún 7, 2018 /
 
Minden ilyen jellegű áramkör programozásakor (pl. programozó, serial to usb, stb.) használjatok USB leválasztót. Ezzel komoly költségeket megspórolhattok (pl. nem durran el a számítógép alaplapja), ha bármi nem úgy sikerül mint gondoltátok.
pl.: USB leválasztó
(#) csatti2 válasza kala1982a hozzászólására (») Jún 7, 2018 /
 
Ha publikus a terv és meg tudod nekünk mutatni, miért is kell összekötni a kettőt, lehet tud valaki olyan megoldást javasolni, hogy mégse kelljen direktben összekötni.
(#) Massawa hozzászólása Jún 9, 2018 /
 
Egy kérdés.

Egy nagyobb ASM programon dolgozom vagy 12-14 alkönyvtárral, macrokkal, subroutinokkal stb. Van az AVR Studioban olyan lehetöség, hogy kilistázza lépésröl lépésre a kodot. Most gyakran van, hogy egyik sor az egyik szubrutinban van, innen a másikba ugrik, majd a megszakitásra stb. Néha elvesztem a fonalat az élesztéskor, hogy honnan is ugrott az adott sorra a program?

Kösz
(#) kapu48 válasza Massawa hozzászólására (») Jún 9, 2018 /
 
Mi a kérdés?
Mert, hogy honnan jöttél, arra mi sem tudjuk a választ!
Következő: »»   794 / 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