Pe placa este un ATmega8, frecventa externa 16MHz, fara bootloader (am folosit pentru programare un Pololu USB programmer, achizitionat de aici, dar merge la fel de bine si cu vechiul meu programator pe port paralel ;-)
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, HIGH); // set the LED on
delay(1500); // wait for 1.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, HIGH); // set the LED on
delay(500); // wait for 0.5 seconds
digitalWrite(ledPin, LOW); // set the LED off
delay(1500); // wait for 1.5 seconds
}
Restul de programe sunt cam la fel, fara niciun fel de optimizare :D
Rezultate:
Arduino - 782 bytes
BASCOM - 252 bytes
WinAVR - 206 bytes
Urmeaza sa mai incerc in assembler si cu alte medii de dezvoltare pentru care am gasit versiuni demo (IAR C, FastAVR, CodeVision, AVRco, MikroC, MikroPascal, MikroBasic etc.)
Edit: Assembler - 188 bytes (cu cate o rutina pentru 0.5 si una pentru 1.5 secunde... cred ca iesea mai mic daca o apelam de 3 ori pe cea de 0.5)
Edit: IAR Embedded Workbench (programul scris in C din WinAVR transformat pentru IAR) - 158 bytes
Hmmm... se pare ca rutinele mele in limbaj de asamblare aveau nevoie de optimizare...
;-)
In concluzie incepe sa-mi placa din ce in ce mai mult IAR Embedded Workbench, mai ales ca au fost singurii dintre cei la care m-am inregistrat care mi-au trimis email sa afle cum imi place programul si ce intrebari si sugestii am :D
Nu pot sa spun decat UAU ! Eu astept de 2 luni un atmega168-220AU pentru ca am un cod scris pentru un LCD mai mare de 8kbyte si bineinteles nu pot folosi varianta de la AVR ATMEGA88-20AU .
RăspundețiȘtergereDar cum pot compila un cod scris in Arduino in Bascom sau WinAVr ? Nu trebuie scris alt cod ?
Trebuie sa rescrieti codul pentru Bascom, ceea ce e destul de simplu (exista biblioteci pentru multe componente, inclusiv LCD). Problema e cu compilatorul care, in versiunea demo, e limitat la 4KB.
RăspundețiȘtergereCu WinAVR ar fi cel mai simplu, in definitv si Arduino il foloseste pentru compilare. In plus e gratuit si nelimitat!!!
O idee buna pentru amatorii de Pascal SI de ATmega8 sau 88 este E-LAB AVRco mega8, care e gratuit in aceasta versiune care poate utiliza toti cei 8KB.
Se gaseste aici: http://e-lab.de/AVRco/index_en.html si exista si un forum aici: http://forum.e-lab.de/
Au si versiune gratuita pentru celelalte controllere, limitata la 4KB.
Buna ziua,
RăspundețiȘtergerenu pot sa spun decat jos palaria pentru acest blog si pentru informatiile postate aici. sunt putini programatori, romani care fac asa ceva.
sunt foarte novice in ale programarii, desi am terminat AC-ul cu multi ani in urma (lucru pentru care mi-e rusine sa spun ca am aterminat AC-ul) dar imi doresc atat de mult sa invat. drept pentru care m-am apucat sa-mi readuc pe hartie cateva idei mai vechi.
Nu de multa vreme am gasit aceste minunate placute de la Arduido si vrand sa-mi automatizez un sistem de irigatii, am si sarit pe cautari.
si uite asa din pagina in pagina am dat de acest superb blog.
din cate inteleg, acest "Arduido de criza" este facut si nu "cumparat de gata". se pot gasi pe undeva schemele pentru a putea fi refacut acest model? multumesc mult!
Multumesc pentru aprecieri!
RăspundețiȘtergereSchema... hmmm... trebuia sa fac o schema?
;-)
N-a prea avut o schema anume dar voi incerca sa desenez una si sa pun si o lista de materiale si cateva indicatii, in caz ca intereseaza pe cineva.
Singurele avantaje sunt pretul (cam 1/5 din pretul unei placi de fabrica) si faptul ca am mai invatat cate ceva.
Mult succes!
Un cod de 154Bytes format din macrouri din SDK-ul meu:
RăspundețiȘtergere;************************************************************
.Org 0
Rjmp M_Init
.Org INT_VECTORS_SIZE
;************************************************************
_CreateDelayMs 500
_CreateDelayMs 1500
M_Init:
_StivaInit SRAM_START
_SetPortBit DirPortLed,PinLed;Set pin led as output
Loop:
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 500
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 1500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 500
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 1500
Rjmp Loop
;************************************************************
//Cele doua rutine de delay, 500ms si 1500ms sunt separate.
Si un cod de 104bytes cu o singura rutina de 500ms:
;************************************************************
.Org 0
Rjmp M_Init
.Org INT_VECTORS_SIZE
;************************************************************
_CreateDelayMs 500
M_Init:
_StivaInit SRAM_START
_SetPortBit DirPortLed,PinLed;Set pin led as output
Loop:
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 500
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 500
_DelayMs 500
_DelayMs 500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 500
_SetPortBit OutPortLed,PinLed// set the LED on
_DelayMs 500
_ClrPortBit OutPortLed,PinLed// set the LED off
_DelayMs 500
_DelayMs 500
_DelayMs 500
Rjmp Loop
;************************************************************
Best regards!!
Foarte interesant! Am descarcat si eu SDK-ul tau acum si-l voi incerca dupa ce citesc documentatia.
RăspundețiȘtergereMultumesc!
Acesta este headerul ce trebuie pus inainte de .Org 0
RăspundețiȘtergere;************************************************************
.Include "m8def.inc"
.Include "Lib/Util.inc"
.Include "Drivers/IO_Port.inc"
.Equ CoreFrequ = 8000000
.Equ OutPortLed = PORTC
.Equ InPortLed = PINC
.Equ DirPortLed = DDRC
.Equ PinLed = 0
;************************************************************
O documentatie detaliata nu am facut in schimb am introdus o parte din documentatie in fiecare fisier declarate cu ".message".
Folderul SDK-ului poate fi inclus in AVR Studio: Project/Assembler Option/ La Additional include path.
Multumesc din nou!
RăspundețiȘtergereM-am uitat in PDF-uri si in surse, urmeaza sa si incerc rutinele cand scap de bilant, declaratii etc.
;-)