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   827 / 837
(#) majkimester válasza jan5650 hozzászólására (») Jan 20, 2022 /
 
Tegyél be egy szintillesztést 2db FET-tel, egyik felét 5V-ra másik felét 3V-ra felhúzva, és mindenki happy.
(#) pipi válasza jan5650 hozzászólására (») Jan 20, 2022 / 1
 
Azért lesz kb 3.8V, mert az i2c bemenet védődiódáján(+0.6V) keresztül folyik a felhúzó ellenállás villanya a 3.3V tápba.... Én nem hagynám így...
(#) asch válasza jan5650 hozzászólására (») Jan 20, 2022 /
 
Ismereteim szerint ... Ez az ATMega csip tudtommal a 3.3V-ot már egyértelmű magasnak érzékeli. Az I2C protokollban a PIN-ek csak lehúzzák a vonalat, sose húzzák fel - azt a felhúzó ellenállás csinálja. Tehát ha a felhúzót a 3.3V tápra teszed az 5V helyett, akkor minden működni fog, és minden a speckón belül marad. és még bonyolultabb sem lesz semmi.
(#) Kovidivi válasza jan5650 hozzászólására (») Jan 20, 2022 /
 
A 3.8V a 3.3V-nak a 115%-ka, tehát 15%-kal magasabb feszültség van lábakon. Minden adatlapon megadott feszültségnek van toleranciája. Ez a 0.5V pedig valószínűleg a dióda, ami a pin-ről a táp felé mutat. Tehát te most kicsit megtáplálod a pin-en keresztül a 3.3V-os tápot (kevesebbet fog a stabilizátor dolgozni). Ha mindig van annyi fogyasztásod, hogy a felhúzó ellenálláson kb. 2V essen (kiszámolhatod az áramot), akkor sosem lesz a 3.3V-os vonalodon 5V. Lehet, hogy egy LED elég, vagy egy kicsi ellenállás. Szerintem nem gond. Amikor le van húzva a vonal GND-re, akkor azonos ellenállásokat összehasonlítva az 5V-os tápból kicsit több áram folyik/folyhat. De alap esetben a pin-en levő védődióda teszi a dolgát. Én így hagynám. Olyan meg nincs, hogy 2 év múlva meg fog pusztulni... Vagy megpusztul gyorsan (mondjuk 1 hónap használat után), vagy nem lesz baja (vagyis más baja lesz).
A hozzászólás módosítva: Jan 20, 2022
(#) vargham válasza jan5650 hozzászólására (») Jan 21, 2022 /
 
Idézet:
„Tisztában vagyok vele hogy az ESP32 alapból 3,3-on megy. De nekem mégis kellett a Mega.”

Azt kérdeztem, hogy a Mega miért nem 3,3 voltról megy.
(#) rolandgw hozzászólása Jan 22, 2022 /
 
Én vagyok a béna vagy levették az Atmel (mikrocsip) Studio-t a letöltésekből?
Gyorsan kellene, nem találom.
(#) vargham válasza rolandgw hozzászólására (») Jan 22, 2022 /
 
Nálam Google első találat. Microchip saját keresőjét nem használom.
https://www.microchip.com/en-us/tools-resources/archives/avr-sam-mcus
(#) rolandgw válasza vargham hozzászólására (») Jan 22, 2022 /
 
Köszi, de ezek a régiek. 7.0.2542 kellene.
Itt lehetne letölteni:
Bővebben: Link
A hozzászólás módosítva: Jan 22, 2022
(#) rolandgw válasza vargham hozzászólására (») Jan 22, 2022 /
 
Köszönöm, megvan. Amit linkeltél, onnan kell a 7.0.2389 és telepítés elején rákérdez, hogy kell-e a frissebb.
(#) lazsi hozzászólása Feb 10, 2022 /
 
Tippet, megoldási ötletet keresek a következő problémámra:
Adott egy STK500 + AVR Studio 4.19-es verzió, amit korábban nagy megelégedésemre használtam. Pár év után most ismét szeretném használni, de rendszeresen lefagy a program. Van, amikor 10 másodperc után, de van, amikor akár 1-2 óráig sincs vele baj.
Most Win 10 alatt használnám, de lehetséges, hogy amikor korábban használtam, még 8.1-es Windows volt a gépemen.
Lehetséges, hogy az AVR Studio és a Win10 összeakad?
Tapasztalt más is ilyet? Van erre megoldás? Esetleg újabb változat az AVR Studio-ból elérhető és működik Win10 alatt?
Találtam egy 5.1-es verziót, de a Windows veszélyre figyelmeztet és nem akarja letölteni...
(A Microchip Studiot telepítettem, de NAGYON szeretném elkerülni a használatát!)
A hozzászólás módosítva: Feb 10, 2022
(#) vargham válasza lazsi hozzászólására (») Feb 10, 2022 /
 
Idézet:
„A Microchip Studiot telepítettem, de NAGYON szeretném elkerülni a használatát!”

Miért? Azzal sem működik?
(#) lazsi válasza vargham hozzászólására (») Feb 10, 2022 /
 
Sikerült letölteni és telepíteni az AVR Studio 5.1-es verzióját, és az pont úgy néz ki, mint a Microchip Studio, és ugyanaz a problémám vele.

Megmondom őszintén: használni szeretném a Studio-t, és nem azzal eltölteni heteket, hogy megtanuljam a kezelését.

A 4.1-es verzióból a következőket használom:
Megírom a programot, lefordítom (ekkor kiderülnek a félregépelések, szintaktikai hibák, amiket javítok), csatlakoztatom az STK500-at (tesztként beolvasom a uC azonosítóját), beégetem a uC-be a programot. Gyakorlatilag 2-3 klikkelés az egész...
Ezzel szemben az 5.1 és a Microchip-esnél:
Már sikerült megtalálnom, hogy hogyan lehet megmondani neki, hogy STK500-at használok. De nem találtam meg azt a részt, ahol megnézni / beállítani tudom pl. a fuse biteket, kiolvasni a uC azonosítóját. Melyik az az 1 (egy) gomb, amire klikkelve megmutatja a gépelési és szintaktikai hibákat? Melyik az a gomb, ami betölti a programot?
Én AVR-t akarok programozni asm-ben. Minek nekem az MPLAB XC8-as, meg a SAM?
"Találomra" próbálkozok dolgokkal, de többnyire megnyit egy webes oldalt, vagy teljesen mást csinál, mint ami (az én elképzelésem szerint) logikus lenne.
Mi az az ASF?
Mi az a Solution? Nem projekt, mert az külön menü. Nem az általam írt program, mert a Build menüben van Build Solution és Build "sajátprogram". De akkor meg mi az?

És akkor még nem beszéltem arról, hogy a korábban megírt dolgaimat nem olvassa be, mert a régi projekt-file formátumát nem ismeri. (Az azért elvárható lenne egy programtól, hogy a korábbi változatával készült tartalmakat tudja kezelni! Végülis ez egy ingyenes program: nincs szüksége arra, hogy rákényszerítsen a kétévenkénti vásárlásra.)

Az a problémám, hogy sokkal többet tud, mint amire nekem szükségem van! (Az MS termékeivel is az a problémám, hogy mindegyik mindent akar csinálni, miközben egy átlagos felhasználónak a töredékére sincs szüksége...)

Valahol láttam utalást egy 4.9-es verzióra, ami talán még a 4.1-es verzióra hasonlít, de amit találtam, bár 4.9-nek hirdeti magát, letöltéskor már az 5.1-es érkezik.


Tudom, hogy úgy hangzik ez az egész, mint egy hisztis gyerek szövege... De már két napja szenvedek a 4.19-es lefagyásaival. Végre rászánom magamat az újabb verzió telepítésére, azt meg nem tudom használni a fentiek miatt. (Az már csak hab a tortán, hogy van 2 db. AT90S2313-es, amiknek a kimenetei nem reagálnak, pedig most vettem elő a tárolócsőből őket... )


Tehát: tapasztalt-e más is olyat, hogy az AVR Studio 4.19-es lefagyogat WIN 10 alatt? Van-e rá megoldás?
(#) kiborg válasza lazsi hozzászólására (») Feb 10, 2022 /
 
Sok próbálkozás után nekem a 4.14 jött be, megvan 4.19-g az összes, de azokat a nem használom címkével jelöltem. 4.14 + 4.14SP1.
Viszont tapasztalatom nem sok van, párszor használtam win10 alatt,de akkor nem volt gond.
Plusz ami nekem fontos volt, hogy még támogatja a JTAG ICE-t is
Ha kell, elérhetővé tudom tenni számodra őket.
(#) lazsi válasza kiborg hozzászólására (») Feb 10, 2022 /
 
Köszi, megpróbálom letölteni ezt a 4.14-est. Az SP1 jól hangzik, hátha az megoldja a gondomat. Ha nem sikerül, kereslek.
(#) fecus hozzászólása Feb 12, 2022 /
 
ATmega328P-vel, a belső oszcillátorról, tudok olyan pontos órát csinálni ami 1 napig nem téved 1 percnél többet?
Kívülről venném a pontos időt, de ha nincs kapcsolat azért ne akadjon már meg az óra feltűnően!
Fél másodpercenként kellene egy megszakítás.
(#) csatti2 válasza fecus hozzászólására (») Feb 12, 2022 /
 
Nem tudsz. A gyári kalibráció az adatlap szerint +/-10%-os, amit akár 1%-ra javíthatsz, ha külön kiméred különböző hőmérsékleteken. Neked 0,07%-nál nagyobb pontosságra van szükséged.
A jó hír, hogy többféle kristályt is használhatsz (kis sebességű órakristályt 32,768kHz vagy 8-16MHz nagy sebességűt is).
(#) Kovidivi válasza fecus hozzászólására (») Feb 13, 2022 /
 
Ha kalibrálod, szerintem az 1mp-nél kisebb hiba/nap is sikerülni fog. Ehhez csak fix hőmérséklet kell a uC körül, meg a tápfesz se ingadozzon nagyon.
(#) lazsi válasza lazsi hozzászólására (») Feb 14, 2022 /
 
Minden keresésre az 5.1-est akarja letölteni... Nem is értem! Na, mindegy...

Végül csak nekiláttam a Microchip-es változatnak. Bár továbbra sem tetszik több minden, de legalább tudom használni.
Pl. ha változtatok a programon és be akarom "égetni", akkor mindig újra ki kell választani az STK500-at, mert nem jegyzi meg, hogy 1 perccel előtte mit használtam - nincs 1 db gomb, amivel égetni lehet (5x kell klikkelni).
És továbbra sem tudom mi az a "solution" és miért jó az nekem, de nem használom és kész...
Valamint több dolognál a netet akarja használni, pedig "ránézésre" az valamilyen funkció lehetne.


Köszönöm, aki segíteni próbált!
A hozzászólás módosítva: Feb 14, 2022
(#) vargham válasza lazsi hozzászólására (») Feb 14, 2022 /
 
Egy solutionon belül több projekt is lehet. Olyasmi, mint az Eclipse workspace.
Nekem eddig mindig megjegyezte, hogy milyen debuggerrel mire akarok feltöteni. És csak 1 klikk. Te hogy csinálod?
(#) lazsi válasza vargham hozzászólására (») Feb 15, 2022 /
 
Elindítom a Microchip Studio-t.
Még semmit sem csináltam, de a nyitó oldalon, alul kiír több sornyi hibát, aminek a vége: "SystemError: Object reference not set to an instance of an object."
Az "Open Project..."-ben megnyitom, amit használni szeretnék: valami.atsln. Betölti a programot, tudom szerkeszteni.
Amikor "készen vagyok", jön a "Build valami" (MS1.jpg képen "1" jelöli).
Ha (miután) sikeresen megcsinálta jön az égetés (MS1.jpg képen "2" jelöli).

Megjelenik a következő ablak ("Device Programming"), ahol 1. ki kell választani a "Tool"-ban az STK500-at, majd 2. "Apply". Ekkor megjelenik az ablakon belül kilenc lehetőség, amiből 3. kiválasztom a "Memories"-t. Itt 4. ráklikkelek a "Program" gombra és ekkor "beégeti".

Ezután be kell rázni ezt az ablakot, különben semmit mást nem tudok csinálni vele.

Viszont miután javítottam a programomon, és ismét "égetni" szeretnék, megint megnyitva az előbbi ablakot ismét ki kell választani a programozót, vagyis végig kell csinálni az előző lépéseket.

Ezzel szemben az AVR Studio 4 esetében a Build (AVRS1.jpg képen "1" jelöli) után behoztam a programozó ablakát (AVRS1.jpg képen "2"jelöli), majd egy gombbal "beérgettem" (AVRS1.jpg képen "3" jelöli).
De itt nem kellett bezárni a programozó oldalát, azalatt is lehetett szerkeszteni a programot. Így amikor újabb próbálkozást akarok "égetni", akkor elég csak arra az egy ikonra klikkelni (AVRS1.jpg képen "3" jelöli).
(#) vargham válasza lazsi hozzászólására (») Feb 15, 2022 /
 
A zöld play gomb a feltöltés, nem az, amire te klikkelsz.
(#) lazsi válasza vargham hozzászólására (») Feb 15, 2022 /
 
Melyikre gondolsz:
Tele zöld háromszög - Start Debugging (F5)
Üres zöld háromszög - Start Without Debugging (Ctrl+Alt+F5)

És ez miért a Debug - hibakeresés menü alatt van??? Én nem hibát akarok keresni, hanem a programomat beletölteni a uC-be! Helyből feltételezi, hogy a programom hibás! (Igen, az... de ezt ne ők döntsék el!)
Ez nem neked szól, hanem a Microchip-nek...

Köszi a segítséget!
(#) vargham válasza lazsi hozzászólására (») Feb 15, 2022 / 1
 
Ha csak feltölteni akarsz, akkor üres zöld.
Az általam ismert összes embedded IDE-ben a run/debug menüben található a run és a debug is. Ez vonatkozik az aktuális projektre.
A device programming az arra való, hogy piszkáld a fuse biteket, és tetszőleges hex állományt tölts fel.
(#) lazsi válasza vargham hozzászólására (») Feb 15, 2022 /
 
Köszi!
(#) cua válasza vargham hozzászólására (») Feb 15, 2022 / 1
 
Jol mondod, a run/debug szinte az osszes ide-ben egyutt van, maskepp nem nagyon lenne ertelme
En eleg sok (java, python, C/C++,JS,php) ide-t hasznalok, tobb gyartotol es mind hasonlo.
(#) lazsi válasza cua hozzászólására (») Feb 16, 2022 /
 
Egy olyan programkörnyezet esetében, ahol a gépen fut a program, vagyis az ide valóban tudja futtatni, lépésenként végrehajtani, szimulálni a programot, ott valóban logikus a run/debug összevonása. De ahol a szimuláció és a tényleges futtatás alapvetően külön van, ott én az elkészült programot nem futtatni szeretném, hanem betölteni egy uC-be, ahol a PC-mtől függetlenül fut. De a megírt programom futását már nem az ide vezérli, hiszen az akkor is fut, amikor megszüntetem a kapcsolatot a PC és a uC között.
Igen, tudom, hogy az STK500 pont képes a lépésenkénti végrehajtásra is... De arra is, hogy SPI-n keresztül egy külső áramkörben lévő uC-t programozzon fel.
Éppen ezért logikusan a run/debug arra lenne való, hogy szimulálva fusson a program, míg az amikor a programot belegyömöszölöm a uC-be, ettől el kellene különülnie. Leginkább azért, hogy egyértelmű legyen: most már az áramkörben lesz a program, nem csak a szimulátorban.

De sajnos a világban egyre több dolog nem logikus, mert a fejlesztőknek mindig ki kell találni valami újat. Ami két éve ugyanolyan, az elavult.


A lényeg, hogy tudom használni!
(#) vargham válasza lazsi hozzászólására (») Feb 16, 2022 /
 
Szerintem ez megszokás kérdése. Nekem például tök logikus.
STM32 CubeIDE-ben például nincs se device programming, se szimulátor. Kizárólag run és debug. Mindkettő feltölti az MCU-ra a programot, és futtatja. A run parancs utána bontja a kapcsolatot, míg a debug nyitva hagyja. MCU programozásra önálló szoftver van CubeProgrammer néven.
De hasonlóan van más gyártóknál is.
(#) lazsi hozzászólása Márc 3, 2022 /
 
Továbbra sem nyűgözött le a Microchip Studio...

Lenne egy kérdésem:
Hogyan tudok kiválasztani régebbi eszközöket? Konkrétan az AT90S2313 érdekelne (de jó lehet tudnom még az AT90S8515 és az AT90S4433 esetében is).
Ha az ATTiny2313-at választom ki, akkor nem fog egyezni a signatura. Attól még más rendben lesz?
(#) Sick-Bastard hozzászólása Márc 7, 2022 /
 
Üdv!

A következő problémába ütköztem.

AVR <> ESP8266 közötti kommunikációt szeretnék implementálni, AT parancsokkal.

A parancsokat az AVR flashben tárolom.

  1. const unsigned char flash_str_msg_report_wait_for_data[] PROGMEM = ">";
  2. const unsigned char flash_str_at[] PROGMEM = "AT";
  3. const unsigned char flash_str_msg_report_busy[] PROGMEM = "busy p...";
  4. const unsigned char flash_str_cifsr[] PROGMEM = "CIFSR";
  5. const unsigned char flash_str_cipclose[] PROGMEM = "CIPCLOSE";
  6. ...


Ez rendben is van. De pár kódhoz nekem ezt valahogy for() ciklusban kéne lefuttatnom.

Itt találtam egy megoldást, ami valahogy így néz ki:

  1. PGM_P const strmx[ESP8266_CFAMAP_CNT] PROGMEM = {
  2.         flash_str_msg_report_wait_for_data,             //      [] PROGMEM = ">";
  3.         flash_str_at,                                                   //      [] PROGMEM = "AT";
  4.         flash_str_msg_report_busy,                              //      [] PROGMEM = "busy p...";
  5.         flash_str_cifsr,                                                //      [] PROGMEM = "CIFSR";
  6.         flash_str_cipclose,                                             //      [] PROGMEM = "CIPCLOSE";
  7. ...


Ha jól értem, így egy pointer tömböt kapok, amit már hasznosíthatnék.

Teszt:
  1. void MXA_Test(void)
  2. {
  3.         for(u8b i = 0; i < 4; i++)
  4.         {
  5.                 DEBUGGER_UART_TXFS((const unsigned char*)strmx[i]);
  6.                 DEBUGGER_UART_TX_String(enter_txt);
  7.         }
  8.        
  9.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[4]);
  10.         DEBUGGER_UART_TX_String(enter_txt);
  11.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[5]);
  12.         DEBUGGER_UART_TX_String(enter_txt);
  13.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[6]);
  14.         DEBUGGER_UART_TX_String(enter_txt);
  15.        
  16.         for(u8b i = 0; i < 10; i++)
  17.         {
  18.                 DEBUGGER_UART_TXFS((const unsigned char*)strmx[i]);
  19.                 DEBUGGER_UART_TX_String(enter_txt);
  20.         }
  21.        
  22.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[11]);
  23.         DEBUGGER_UART_TX_String(enter_txt);
  24.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[12]);
  25.         DEBUGGER_UART_TX_String(enter_txt);
  26.         DEBUGGER_UART_TXFS((const unsigned char*)strmx[13]);
  27.         DEBUGGER_UART_TX_String(enter_txt);
  28. }


A teszt során, azt tapasztalom, hogy a for() ciklus max 4-ig hajlandó jól lefutni. Ha i < 5-t vagy többet írok, be akkor az UART-ot teleszemeteli.

Output:
// for(u8b i = 0; i < 4; i++) start
>
AT
busy p...
CIFSR
// for(u8b i = 0; i < 4; i++) vége
CIPCLOSE // DEBUGGER_UART_TXFS((const unsigned char*)strmx[4]);
CIPDNS // DEBUGGER_UART_TXFS((const unsigned char*)strmx[5]);
CIPDOMAIN // DEBUGGER_UART_TXFS((const unsigned char*)strmx[6]);

// for(u8b i = 0; i < 10; i++)
���޿�Ϳߑϑ�������������'�������'����'�o_O����Q�)�:�K�\�m�~������m&�
(csak részlet)
majd a "szemét" végén:
CIPSTAMAC // DEBUGGER_UART_TXFS((const unsigned char*)strmx[11]);
CIPSTART // DEBUGGER_UART_TXFS((const unsigned char*)strmx[12]);
CIPSTATUS // DEBUGGER_UART_TXFS((const unsigned char*)strmx[13]);


A kérdésem, hogy mi okozhatja ezt?

SB
(#) tufatofu válasza lazsi hozzászólására (») Márc 7, 2022 /
 
Én erre a célre vettem egy p4-es vacak laptopot 3 ezer ft-ért a műhelybe, azon van egy xp, windows7, linux, nyák tervező, szimulációs programok, egy IDE, avr studio 4, pickit, stb
Megy minden mint a szél.
Következő: »»   827 / 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