Arduino kezdő

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
juhasz
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. február 8. szerda, 22:17

Re: Arduino kezdő

HozzászólásSzerző: juhasz » 2019. november 13. szerda, 17:40

Sikerült megvalósítani az elképzelést, még egyszer köszönöm Robert és kapu48!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3352
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino kezdő

HozzászólásSzerző: kapu48 » 2019. december 5. csütörtök, 17:16

Most fedeztem fel az arduino 1.8.10-ben, hogy már használható a Serial.printf(); utasítás!

Kód: Egész kijelölése

Serial.printf("HTTP error %d\n", httpCode);


Ez nekem újdonság! :D

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 10. péntek, 15:26

Sziasztok. Abban kérném a segítségetek, hogy melyik regiszterek módosításával lehet power down módba helyezni egy atmega328p-t. Vagy egyáltalán ebben a formában megoldható?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 10. péntek, 19:04

Az adatlap ATmega328P - 9.Power Management and Sleep Modes fejezete:
SMCR, MCUCR, PRR.

http://ww1.microchip.com/downloads/en/D ... asheet.pdf
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 10. péntek, 19:20

Megtaláltam, csak sajnos nem igazán egyértelmű számomra. (kezdő vagyok) Az SMCR-t értem hogy azzal állítom be azt hogy milyen üzemmódba lépjen elalváskor és a SE bit kapcsolja be az alvást. Az MCUCR-t viszont nem értem mi köze van hozzá. A PRR-t pedig külön meg kell adni nem elég kiválasztani, hogy milyen alvási módot választok az SMCR-ben, mert pl power down módban elméletileg lekapcsol, akkor is szükséges hogy előtte kikapcsoljam a timer-eket és a többit? Kérhetném hogy elmagyarázd, sajnos az angol nem az erősségem.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 10. péntek, 19:24

Keresztkérdés: Ha arduino akkor nem egyszerűbb a libraryt használni hozzá?

Mondjuk a beépítetteket:
https://www.arduino.cc/en/Reference/LowPowerDeepSleep

Részletesebben:
https://thekurks.net/blog/2018/1/24/gui ... sleep-mode

És még 3 alternatíva:
http://www.engblaze.com/low-power-libra ... ion-calls/


Vagy ha megismerni csak: egyszerűbb a libraryba belesni, és ott vannak a regisztercímzések....

1, Leveszik a válladról a terhet
2, Arduino alatt _TILOS_ kezdőként regisztereket piszkálni. A keretrendszer sokat használ, és ennek logikáját rúgod fel. Következmény: hibásan működő program.

Magyarul fórumban is volt már elég részletesen körüljárva a _külső_ hardwareeszközökön hogy mi múlik : viewtopic.php?t=1194
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 10. péntek, 20:01

Egyszerűbb volna, csak szeretném megismerni egy másik projekt okán amiben attiny10 lesz és ott nem lesz elég memóriám a library-hez. Nem is vagyok biztos benne hogy működne. Egy zseblámpa lesz amiben az attiny kapcsolgatja a LED-eket és szeretném ha kikapcsolt állapotban a minimális fogyasztást lehetne kihozni belőle. Belestem a library-be de nem bírtam értelmezni a programját. Annyit értettem hogy hogy az MCUCR-t állítgatja, csak azt nem hogy melyik biteket és hogyan :) Ja az asm rész meg kínai számomra. Tudom hogy ezzel felrúgom az arduino lényegét, de sajnos a C++ programozást nem ismerem.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 10. péntek, 20:10

Attiny10 és Arduino ????
Öngyilkosság és ősz hajszálak kergetése? -> 1 KByte Flask és 32 Byte! SRAM ????
ASM-ben direktben programozva - esetleg....

A Tiny10-hez MKII programozó kell, AVR-Studioval...
Mielőtt nagyon belemerülnél: A Tiny10-et vágnám ki a fenébe....


Kérdés: melyik utasítás/sor nem megy a Libraryból? (A teljes void fuggveny() részt másold ide - úgy lehet megfogni).
http://www.tavir.hu - a gazda :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 10. péntek, 20:19

Regiszterek step-by-step használata:
https://gist.github.com/bolandrm/af2ea4db1800df2084c5
és a sleep.h:
https://github.com/vancegroup-mirrors/a ... vr/sleep.h

Értelmezéshez:
_BV
Még egy gyakori utasítás, egészen pontosan makró: _BV(x). Ez egyenértékű egy bit balra léptetésével x lépést. Ezzel lehet adott bitet kiválasztani. Pl. a _BV(0) eredménye bináris 00000001 lesz, a _BV(5) eredménye pedig bináris 00100000, azaz decimális 32.
Még néhány hasonló:
http://faragocsaba.hu/arduino-kamera
A programkód alatt a magyarázatoknál.
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 10. péntek, 20:25

Neten találtam arduino-ra feltölthető programozó software-t és hozzá való arduino IDE-t, a program sem lesz bonyolult. A fordító szerint eddig simán elfér. Persze még közel sincs kész. Gyárilag is egy 6 lábú Attiny van benne elég buta programmal amit szeretnék egy kicsit kiokosítani. Persze másikat programoznák fel és forrasztanák a helyére. De könnyen lehet hogy tévedek az egészben de unaloműzésnek jó :D

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 10. péntek, 20:47

Kód: Egész kijelölése

 #define set_sleep_mode(mode) \
    do { \
        MCUCR = ((MCUCR & ~_BV(SM1)) | ((mode) == SLEEP_MODE_IDLE ? 0 : _BV(SM1))); \
        MCUCSR = ((MCUCSR & ~_BV(SM2)) | ((mode) == SLEEP_MODE_STANDBY  || (mode) == SLEEP_MODE_EXT_STANDBY ? _BV(SM2) : 0)); \
        EMCUCR = ((EMCUCR & ~_BV(SM0)) | ((mode) == SLEEP_MODE_PWR_SAVE || (mode) == SLEEP_MODE_EXT_STANDBY ? _BV(SM0) : 0)); \
    } while(0)

Itt pl azt nem értem hogy az MCUCR-t akarja módosítani, de mégis az SMCR-nél lévő bitek (SM2,SM1,SM0) van megadva.

Kód: Egész kijelölése

#define sleep_cpu()                              \
do {                                             \
  __asm__ __volatile__ ( "sleep" "\n\t" :: );    \
} while(0)

#endif

Itt pedig csak annyit látok, hogy alvó módba küldéshez asm kódot használ, ami ha jól értelmezem egyenlő az SMCR regiszter SE bitjének 1-re írásával.

Nézegettem azokat a sleep programokat amiket linkeltél, de ott mindegyik kikapcsolja a megszakításokat és a BOD-ot. Adatlapban nem találtam utalást arra hogy ezeket ki kell kapcsolni alvó módba küldés előtt.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 10. péntek, 21:02

Megszakítások:
- csak azok legyenek aktívak, amik felkeltsék a processzort

BOD:
- kikapcsolod, mert a tápfeszfigyelés is áramot fogyaszt
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 11. szombat, 9:20

Azt hiszem megvan a megoldás :) Csak eddig nem jól értelmeztem a google fordítót :D Nem az SMCR SE bitje kapcsolja alvó üzemmódba, az csak engedélyezi hogy mehet. Mindenképp "sleep" utasítás kell neki

Kód: Egész kijelölése

void setup() {
  pinMode(13, OUTPUT);
  pinMode(2, INPUT_PULLUP);
}



void loop() {
digitalWrite(13, HIGH);
delay(700);
digitalWrite(13, LOW);
delay(700);
    EICRA = _BV(ISC01);
    EIMSK = _BV(INT0);
    cli();
    SMCR = 0B00000101;
    sei();
    asm ("sleep");
    SMCR = 0B00000000;


}

Így működik az alvó üzemmód, persze még ebben nincs benne minden energiatakarékos üzemmód. De azt nem értem, hogy elméletileg csak a lefutó élre kellene felébrednie, de a felfutóra is felébred, de lehet hogy csak a prell miatt. A globális megszakításnak pedig muszáj elalvás előtt bekapcsolva lennie, mert másképp nem ébred fel a külső megszakításra.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10071
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino kezdő

HozzászólásSzerző: Robert » 2020. január 11. szombat, 10:11

A prell az sok (10...30) fel és lefutó él....

Más: Alvó üzemmódban a Pullupokat ki kell kapcsolni (áramfelvételt okoz).
Külső ellenállások nem javasoltak...
http://www.tavir.hu - a gazda :)

borisz
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2016. november 26. szombat, 9:39

Re: Arduino kezdő

HozzászólásSzerző: borisz » 2020. január 11. szombat, 10:25

Ez nem a végleges program :) Csak egyáltalán működésre próbáltam bírni a sleep funkciót. A másik nagyon jó kérdés hogy hogyan lehetne kiszűrni a prellt alvó módban? Kondi a kapcsolón? Mert pl ha a egy gombbal teszem alvó módba, a gomb felengedésekor nem volna jó ha fel is ébredne. De erre biztos találok megoldást az interneten. Köszönöm a segítséget. Majd ha készen leszek vele megosztom a kódot itt :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég