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

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hozzászólás Szerző: Robert »

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
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Hozzászólás Szerző: winnerbt »

És ide kell beírni vagy hova kell küldeni?
JAni
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A cikk kedden v. szerdán megy majd ki és ide kell a megoldást beírni...
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Hozzászólás Szerző: winnerbt »

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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

Hozzászólás Szerző: eroth »

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Hozzászólás Szerző: winnerbt »

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

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

Hozzászólás Szerző: happy555 »

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hozzászólás Szerző: Robert »

Ez már inkább C, mint Arduino ....
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

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

Hozzászólás Szerző: csabeszq »

É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. :)
Válasz küldése