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   809 / 837
(#) Milligram válasza Peti.Janka hozzászólására (») Dec 21, 2019 /
 
Hello.
Nekem is volt hasonló de nekem a táppal volt baj nem volt elég stabil :/ .

Próbapanelon csinálod?

Egyébként én extreme burner használok ott szoktam beállítani a fuse biteket.
A hozzászólás módosítva: Dec 21, 2019
(#) Peti.Janka válasza Milligram hozzászólására (») Dec 21, 2019 / 1
 
Szia, meg találtam a problémát!
A quarzban benne van a kondi, és nem kell neki külön.
Ahogy leforrasztottam elindult!

Köszönöm mindenkinek az ötletelést és a tanácsokat.

Peti
(#) rascal válasza Peti.Janka hozzászólására (») Dec 22, 2019 /
 
Milyen kis trükkös... Ez miért zavarta meg a belső oszcillátort? Vagy lehet, hogy a program ment, de a quartz is hajt valamit, ami a program helyes működéséhez kell?
(#) Peti.Janka válasza rascal hozzászólására (») Dec 22, 2019 /
 
Ha jól értelmeztem akkor induláskor csinál a szoftver egy szinkronizálást, ami pontosítja a belső oszcillátort. Ez nem tudott végbemenni.
(#) rascal válasza Peti.Janka hozzászólására (») Dec 23, 2019 /
 
Értem. Köszi, hogy kibogarásztad.
(#) zsozsoX hozzászólása Dec 24, 2019 /
 
Sziasztok! WS2812 ledszalaggal küzdök. Atmega8-al próbapanelon megy tutin minden. Atmega 644-el nem igazán akar menni. Ha belső órajellel akkor sem, ha külső 14,765Mhz kvarccal akkor sem. A light_ws2812 könyvtárat használom.
(#) Kovidivi válasza zsozsoX hozzászólására (») Dec 24, 2019 /
 
Hibajelenség? Kép az elkészült kütyüről? Betáp? Bármi infó?
(#) pipi válasza zsozsoX hozzászólására (») Dec 24, 2019 /
 
Csak belevau...Ha más kvarccal nyomulsz, újrakalkuláltad az időzítéseket?
(#) Sick-Bastard hozzászólása Dec 30, 2019 /
 
Üdv!

Mivel nincs WinAVR dedikált topic, így itt tenném fel a kérdésem.

A WinAVR-t frissítettem, ami eddig szerintem jól ment.
Mellék "funkcióként" az egészet hordozhatóvá (portable) szeretném tenni. Hogy ha már egyszer kész van, ne kelljen mindent újra csinálni, ha netalántán beüt egy bináris krach.

Hogy hordozható legyen egy batch file-t hoztam létre.

Arra már sikerült rájönnöm (hála google), hogy az avr-gcc toolchain-hez feltétlen szükséges a "PATH" környezeti változó használata, a WinAVR mappa hozzárendelése, hozzáadása.
Ezzel működnek is a ProgrammersNotepadben a parancsok.

Ám a WinAVR-20100110-es telepítésé során a windows registry-ben is történnek apró módosítások.
Kérdésem, hogy ezek mire szolgálnak?

HKEY_LOCAL_MACHINE\Software\Wow6432Node\WinAVR
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Free Software Foundation\WinAVR
-binutils
-g++
-gcc

Ezeket mi használja?
A hiányuk ellenére az általam használt programok (Make, notepad) gond nélkül működnek.
(#) zsozsoX válasza pipi hozzászólására (») Dec 31, 2019 /
 
A light_ws2812 library leírása alapján, csak átírom az F-CPU-ban az értéket és ő kiszámolja magától. Akármilyen szín értéket állítok be mindig fehér fényű lesz a bekapcsolt led. A leírás alapján ez arra utal hogy rossz az időzítés.
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Jan 10, 2020 /
 
Üdv!

Tesztelésre megosztom a WinAVRPortable (Portable Apps) saját készítésű verzióimat.
Aki letesztelné, használná, az kérem, hogy csak megfelelő óvatossággal tegye:
Biztonsági mentés!!! (Nem Windows, hanem header könyvtárak, projektek)

A Full verziókat csak telepíteni kell és mennek is.
A 10.01.10-es az a már jól ismert WinAVR-20100110-es verziós.
A 20.01.10-es az a .zakkemble oldalról letöltött avr-gcc 9.2-t tartalmazza, ill. az avr32 toolchain 3.4.3.820, AVRDudess, Zadig, NotePad 2.4

Mint írtam, én csak a Make és a NotePad részeit használtam, ezek nekem működtek.
Az AVR-Insight és ha jól tudom az AVRice?, valamilyen Debugra is képes lenne... Na ezeket nem tudom, hogy működnek e. (Kérem aki tudja tesztelje).

Aki csak hordozhatóvá szeretné tenni a már meglévő installációját:
A Start_Only_10.01.10-est javaslom.
Kibontás (Telepítés) után a (telepítési_mappa)\App\WinAVR mappába kell átmásolni a már meglévő WinAVR mappa tartalmát.

A(z) \App\WinAVR mappában található pár batch-file, amikkel a Portable Apps platformja nélkül tehetjük hordozhatóvá a WinAVR-t.

A make_shortcuts.bat-el hozhatjuk létre a parancsikonokat, amik alapértelmezett módon a \Start Menu\Programs\WinAVR_Portable-ben jönnek létre...
A delete_shortcuts.bat .... gondolom egyértelmű.
(#) rolandgw válasza Sick-Bastard hozzászólására (») Jan 10, 2020 /
 
Még nem próbáltam, csak kérdezem: van valami előnye a 9.2-nek? Innen szoktam leszedni a megfelelő toolchain-t és CodeBlocks-al is használható linux/win alatt. ( tiny0/1, mega0 sorozatra is). Gondolom itt az volt cél, hogy ne kelljen a Studio-t ezért telepíteni.
(#) Sick-Bastard válasza rolandgw hozzászólására (») Jan 12, 2020 /
 
Egy gyors, felületes, áttekintés után, avr-gcc 9.2-nek, az AVR Toolchain 3.6.2-ben található, avr-gcc 5.4.0-hoz képest nincs méretbeli előnye, sem hátránya. Röviden a két generált hex mérete azonos. (Egy egyszerű LED toggle kód volt a gyors tesztem.)
Hogy melyik (lehet) a gyorsabb (jobban optimalizált?) azt nem tudom.
(#) fifadani hozzászólása Jan 13, 2020 /
 
Sziasztok!
Van esetleg valakinek NRF24L01-hez megszakításos könyvtára?
Próbáltam pár github-osat, de nem bírtam működésre őket.

Nagyon köszönöm!
(#) B.I hozzászólása Jan 14, 2020 /
 
Sziasztok. Belefogtam egy zseblámpa projektbe aminek a lelke egy AtTiny10 lenne, de sajnos elakadtam. Hogyan lehetne megoldani azt hogy ha lemerül az akkumulátor (eléri a kb. 3V-ot) akkor lekapcsoljon. Hely az sajnos nem igazán van. Egy 17x17mm-es panelen lesz 2 FET az AtTiny, egy nyomógomb és egy sot23-5-s tokozású töltésvezérlő. Gondoltam arra hogy a nyomógomb bemenetét analóg bemenetként használnám, vele párhuzamosan figyelné a feszültséget és ha átlépne egy értéket akkor a processzor alvó üzemmódba lépne. De itt az a gond hogy az ADC referencia feszültsége a tápfesz. Így kellene valamilyen külső referencia ha jól gondolom. Bármilyen ötletet vagy tanácsot nagyon szívesen fogadok. Előre is köszönöm.
(#) Bakman válasza B.I hozzászólására (») Jan 14, 2020 / 1
 
Szerintem te az MCP100 vagy MCP101 jelű felügyeleti áramkört keresed.
(#) rascal válasza B.I hozzászólására (») Jan 14, 2020 / 1
 
Csináld fordítva. Ködös emlékeim szerint az ADC referenciájának van valamekkora minimuma, ami alá nem mehetsz. Ha viszont a referencia a táp, te pedig egy külső fix feszültséget mérsz, akkor is meghatározhatod, hogy mikor megy 3V alá. Ez Bővebben: Link pl 10uA áram felett már jól működik, kaphat tápot az uC egyik portjárol is, hogy ha az lekapcsol, akkor ez se fogyasszon.
(#) B.I válasza Bakman hozzászólására (») Jan 14, 2020 /
 
Köszönöm, jó ötletnek tűnik.
(#) asch válasza B.I hozzászólására (») Jan 14, 2020 / 1
 
A legtöbb ATTiny-nek és ATMega-nak van olyan ADC funkciója, hogy a tápfeszültség a referencia, és azzal meg tudod "mérni" a belső kb. 1.2V-os IREF referenciát. Mivel a referencia fix, a leolvasott érték a tápfesz függvénye lesz. Tehát egyetlen alkatrész sem kell hozzá, és egyetlen láb sem. Csináltam már ilyet, nálam is működött.

Itt van leírás róla: https://wp.josh.com/2014/11/06/battery-fuel-guage-with-zero-parts-a...n-avr/

Amire figyelni kell:

* Nem mindegyik csip tudja, végig kell bogarászni az adott csip adatlapját, hogy tudja-e és hogy hogy kell beállítani ezt a konfigurációt.
* A referenciát akkor kapcsolja be amikor használod, ezért az első mérés alatt még instabil lehet, és félremérhet. Adatlapból kiderül, hogy hányat kell mérni, mennyit kell várni hogy jó legyen a mérés.
* Az 1.1V referencia érték csak névleges, valójában elég nagy szórása lehet. Viszont egy adott alkatrész esetén mindig ugyanannyi lesz, tehát elég egyszer bekalibrálni.
* A mérendő érték reciprokát "olvassuk" le. De ha csak egy limitet akarunk figyelni, akkor nem kell reciprokot számolni, csak egy előre bekalibrált limitet megállapítani, tehát tök mindegy, hogy a mérés reciprok.

Ja, és ha a tiny-t low power módon hajtod (Hosszú watchdog alapú sleep-ek között pillanatokra kel fel), akkor lényegében semmit nem fog fogyasztani, tehát önmagát nem is kell lekapcsolnia, csak minden mást.
A hozzászólás módosítva: Jan 14, 2020
(#) B.I válasza rascal hozzászólására (») Jan 14, 2020 /
 
Ilyenen gondolkodtam, csak nem tudom mennyire működne megbízhatóan.
asch sajnos az attiny10-nek nincs belső referencia feszültsége.
(#) B.I válasza asch hozzászólására (») Jan 14, 2020 /
 
A watchdog alapú sleep-et egyenlőre nem ismerem, de később utána nézek. Egyenlőre úgy terveztem, hogy nyomógombbal helyezem alvó módba és INT0 megszakításra ébred fel.
(#) asch válasza asch hozzászólására (») Jan 14, 2020 / 1
 
Megnéztem, az ATTiny10 úgy néz ki nem tudja ezt sajnos, csak a 4 IO lábat lehet ADC inputnak beállítani. Az ATtiny85 például tudja: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf

Itt írja: 17.13.1 ADMUX – ADC Multiplexer Selection Register

Érdemes lehet esetleg emiatt a funkció miatt másik csipre váltani. Csak ez épp 8 lábú 6 helyett. Talán van olyan is, ami 6 lábú és tudja ezt a funkciót, de nem akarom elvenni a kenyered és kikeresni helyetted
(#) rascal válasza B.I hozzászólására (») Jan 14, 2020 / 1
 
A 358 hőkompenzált (az uC-k belső referenciája nem annyira ha jól tudom), az adatlapjából a szórását megnézheted és a legrosszabb esetre számolva határozhatod meg a kapcsolási értéket. Ha a biztonság irányába tévedsz legfeljebb nem meríted le az akkut tökig, csak majdnem.
A hozzászólás módosítva: Jan 14, 2020
(#) asch válasza B.I hozzászólására (») Jan 14, 2020 / 1
 
Ha van gomb, akkor önfelkeltős sleep-re tényleg nincs szükség.

Watchdog alapú sleep üzemmódban, és időnként felkelve, ha minden jól van összerakva, akkor olyan keveset fogyaszt, hogy egy gombelemről is elmegy több mint egy évig. Méregettem: nagyon fontos, hogy az adatlap minden javaslata be legyen tartva, különben megugorhat a fogyasztás: https://hup.hu/node/166252

Autonóm akkuról működő időzítve periódikusan mérő, majd tovább alvó rádiós szenzorokhoz ideális ez a funkció például.
(#) PHARO hozzászólása Jan 19, 2020 /
 
Sziasztok!

ATTiny45 biztosíték bitjeit állítottam és véletlen félre nyomtam. Ezt sikerült beállítani:
WD. Osc. 128kHz...

Hogy lehet visszaállítani, mert így nem ismeri föl a programozó?
(#) asch válasza PHARO hozzászólására (») Jan 19, 2020 /
 
Le kell lassítani a programozó SPI órajelét _nagyon_. Van rá paraméter az avrdude-ban:

-B <bitclock> Specify JTAG/STK500v2 bit clock period (us).

Jó nagy periódusidőt kell beállítani. Így újraprogramozni kínszenvedés volna, de a fuse bitek visszaállításáig csak pár bájtot kommunikál, azt ki lehet várni nagyon nagy B érték mellett is. Próbálgatni kell, hogy milyen B érték mellett kezd működni. (A csip típus ellenőrzést ne kapcsold ki, és akkor látni fogja a programozó, hogy mikor válaszol jól a csip.)

Nekem eddig ez bejött, remélem működni fog.
(#) PHARO válasza asch hozzászólására (») Jan 19, 2020 /
 
Ilyen programozóm van: Bővebben: Link
És Bascom alól állítottam. Ott mit lehet állítani?
A hozzászólás módosítva: Jan 19, 2020
(#) asch válasza PHARO hozzászólására (») Jan 19, 2020 /
 
Elvileg ezt is kezeli az avrdude program. A BASCOM-AVR-t nem ismerem, nem tudom mivel programozza a csipet, és hogy ott hogy lehetne a jelidőt átállítani. Gondolom Windowson dolgozol.

Szerintem parancssori avrdude-dal lehetne megjavítani ezt a csipet. Itt van róla egy leírás, hogy hogy lehet parancssorból indítani: https://www.ladyada.net/learn/avr/avrdude.html

Persze csak akkor, ha telepítve van. Arra tippelnék, hogy a BASCOM-mal együtt telepítve van az avrdude, és a leírás szerint működni fog. Ha nem, akkor telepítheted eszerint: https://www.ladyada.net/learn/avr/setup-win.html

Disclaimer: nem próbáltam ezeket a tutorialokat, lehetnek félrevezetőek is, de belenézve jónak tűnnek. Én Linuxon AVR-ezek, ott csomagból telepítem az avrdude-t, és azt használom.
(#) PHARO válasza asch hozzászólására (») Jan 24, 2020 /
 
Nem sikerült sajnos. Az a baj, hogy SOIC8 tokozású és ki kellett forrasztani. Most egy másik van benne, de így se működik rendesen az áramkör. Miután megcsinálja a feladatot, olyan mintha újra indulna. Kikapcsolok egy kimenetet és pár másodperc múlva visszakapcsolódik, pedig csak egy újabb impulzusra volna neki szabad. A program és az áramkör biztos, hogy jó. Biztosíték bit beállítási probléma van.

A Divide clock by 8, ON - az ugye azt jelenti, hogy a mostani beállított 6,4MHz órajelet leosztja 8-al be van kapcsolva.
A clock output disabled - az a PB4 kimeneten csinál valamit.
Ha ezeket átállítom, hogy kipróbáljam úgy rendesen működik-e az áramkör, akkor ugye nem fogom ismét kizárni magam?

Most így van beállítva:
(#) Sick-Bastard válasza PHARO hozzászólására (») Jan 25, 2020 /
 
Üdv!

Ha eddig a Clock output on PORTB4; [CKOUT=0] nélkül ment a program, akkor azt ne piszkáld szerintem.

Itt az AVRDude-hoz a parancs amivel kiveheted a 8-as órajel osztást.
Idézet:
„-U lfuse:w:0xc3:m”


A screenshoot alapján valóban 6,4Mhz-en megy a tiny és nem a WD 128khz-én.
Következő: »»   809 / 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