60 nap alatt Arduino #42 - A legkisebb LED villogó

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
Robert
Elektronbűvölő
Hozzászólások: 9906
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

60 nap alatt Arduino #42 - A legkisebb LED villogó

HozzászólásSzerző: Robert » 2012. szeptember 13. csütörtök, 8:46

Alapprogram: LED villogó.

Kódméretben a legkisebbet keressük. ASM, C, Bascom-AVR, MicroC, micropascal és Arduino játszik.

A pályaműben a következők kellenek:
- Elkövette :
- Nyelv:
- Fordítóprogram:
- Fordítóprogram verziószám:
- Méret (byte)

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 884
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. szeptember 13. csütörtök, 10:09

És ide kell beírni vagy hova kell küldeni?
JAni

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

HozzászólásSzerző: Robert » 2012. szeptember 13. csütörtök, 11:01

A cikk kedden v. szerdán megy majd ki és ide kell a megoldást beírni...

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 884
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. szeptember 13. csütörtök, 13:58

Akkor elkezdem...
Mivel semmilyen paraméter nem volt megadva, így:
1. (Pl. T45) FUSE biteknél OSC OUT bekapcs, rá LED, villog,igaz elég gyorsan (0 byte)
2. Bascom:

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

$regfile = "attiny45.dat"
$noinit
$noramclear
Incr Ddrb                                     
'38Hz/PB4/1.2MHz CLK

Ez 64 byte, mivel a fordító az alsó INT táblákat befordítja.
Ha kiengedjük a RESET lábat akkor 19Hz, de a belső oszcillátort 128kHz-re állítva már lassú villogás is van (csak akkor én nem tudom újraprogramozni a chip-et, így kihagytam).
3: ASM mondjuk...de majd kijavítjátok
IN R24,DDRB
INC R24
OUT DDRB,R24
(lehet, az IN meg LD nem helyes, de a lényeg érthető, gondolom.)

Egyik "program" végén sincs END, minek, majd körbekerüli az egész ROM-ot, az is jó időzítés és nyertünk 2 byte-ot.

Igen érdekes, hogy T15-nél nem működik a memória körbefutás, ott a Bascom nullázza a portot, tehát ciklus kell. Viszont a klasszikus Wait szinte alig fogyaszt. Az egész 70 byte

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

$regfile = "attiny15.dat"
$noinit
$noramclear
Do
Toggle Ddrb.1
Waitms 100
Loop

Bascom 2075 elkövette Horváth Jani.
Hirtelen csak ennyi jutott eszembe, de még agyalok.

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

HozzászólásSzerző: Robert » 2012. szeptember 13. csütörtök, 14:38

Külső 555 IC, 10 Hz-vel az AVR Xtal lábára.
Az AVR ClkOut bekapcsol.
DivCLK8 bekapcsol.
LED a CKOut lábra :)..
0 byte, de csúnya az AVR-t frekvenciaosztónak használni.


De lehet Timer-t is, és prescale. Csak az INIT kell rá és az OCx lűábon LED.

Vagy UART és lassab a 0x55-t kiadni.... (0x55 = &B01010101)

De maradjunk az aklapfeladatnál: szoftverből - lehetőleg járulékos HW alkalmazása nélkül összehozni a digitális láb billegetést...

Arduino rendszer alatt ~600 byte.
Bascom alap (optimalizálás nélkül) ~200-250 byte

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

HozzászólásSzerző: Robert » 2012. szeptember 13. csütörtök, 20:39

Még nyomorítás:

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

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delayMicroseconds(65535);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delayMicroseconds(65535);              // wait for a second
}


A delayMicroseconds() kisebb, mint a delay()! ~50 byte hely....

Sőt az INIT(); is macerálható (de ez rendszerkód-piszkálás!). Itt kivehető az analóg lábakra vonatkozó rész, és itt van benne, hogy a bootloader után a D0 és D1 lábak I/O lábak legyenek, ne pedig a bootloader által inicializált Tx/Rx (soros) vonalak... Ha nem hazsnálsz időzítést, akkor annak kezelése is kivehető.

Erről jut eszembe: delay() helyett egy for ciklus? Esetleg több do-while() egymásba ágyazva?

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

HozzászólásSzerző: Robert » 2012. szeptember 13. csütörtök, 20:40

Villogó LED a tápra? Nem is kell AVR hozzá... :P

Avatar
eroth
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2012. március 21. szerda, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: eroth » 2012. szeptember 13. csütörtök, 22:11

egyszerű LED előtét ellenálattal egy óccó kínai tápra és villog az magától is...! :) Lehetőleg a LED más forrásból származzon, különben a villogást a redőny húzogatásával lehet csak előidézni! :D

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

HozzászólásSzerző: Robert » 2012. szeptember 14. péntek, 3:41

A kódméretek függnek az áramkörtől is amire készítjük (chiptől és órajeltől)!

A bonyolultabb, komplexebb chipek esetén nagyobb az állomány (Mega8 vs Mega2560)

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 884
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. szeptember 14. péntek, 8:17

Csak elméleti alapon, nem tudom kipróbálni:
Piros LED a uC +5V táppal sorban.
Watchdog beállítva mondjuk 1Hz-re
1 byte incrementálása, legalsó bit figyel.
0=Go SLEEP (majd a WD resetel)
1=zártciklus, folyamatos működés (WD majd lelövi)
Sleepben a fogyasztás pár uA, aktív módban pár
mA, tehát a tápfelvétel változásától villog a LED.
Na, ennél birkábbat már nem tudok kiagyalni :)
JAni

happy555
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2013. augusztus 16. péntek, 12:45
Tartózkodási hely: Budapest

Re: 60 nap alatt Arduino #42 - A legkisebb LED villogó

HozzászólásSzerző: happy555 » 2014. április 15. kedd, 20:26

Arduino 1.0.5-el 498 byte, hmm :?:

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

void setup ()
  {
 DDRB |= 1<<5;
  }
 
void loop ()
  {
  PINB |= 1<<5;
  delayMicroseconds(65535);
  }

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

Re: 60 nap alatt Arduino #42 - A legkisebb LED villogó

HozzászólásSzerző: Robert » 2014. április 15. kedd, 20:53

Ez már inkább C, mint Arduino ....

Avatar
csabeszq
Bitfaragó
Hozzászólások: 670
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 60 nap alatt Arduino #42 - A legkisebb LED villogó

HozzászólásSzerző: csabeszq » 2014. április 17. csütörtök, 11:24

És legkisebbnek sem nevezhető, ha sikerül 20-30 byte körülire lenyomni, akkor érdemes visszalátogatni.

Ennyiből ki kellene tudni hozni, akár C-ben is. A trükk az interrupt vektor tábla / libc / Arduino kikapcsolása, mert semmi szükséged sincs rá, ha csak villogtatni akarsz. 0-n indul a kódod és villogtatja a LED-et.

Sok küzdelem vár még a végső megoldásig, de biztosan felemelő érzés lesz látni, ahogy a 32k-s IC-re sikerült felvarázsolni egy 30 byte-os programot. :)


Vissza: “60 nap alatt Arduino - Házi feladatok”

Ki van itt

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