Il DNA evoluto in miliardi di anni, mentre l'assembly è un prodotto relativamente recente dell'ingegno umano.
Pero ecco alcune analogie che possiamo tracciare:
Livelli di astrazione:
Genetica: Il DNA è il "codice sorgente" della vita, ma la sua lettura e modifica richiedono una profonda comprensione dei meccanismi molecolari e cellulari.
Informatica: Il codice assembly è un livello di astrazione più basso rispetto ai linguaggi di alto livello. Modificare una riga di assembly significa interagire direttamente con l'hardware, e richiede una conoscenza dettagliata dell'architettura del computer.
Effetti a catena:
Genetica: Una piccola modifica al DNA può avere conseguenze imprevedibili sull'intero organismo, alterando la produzione di proteine e innescando una cascata di reazioni biologiche.
Informatica: Un errore in una riga di assembly può causare un malfunzionamento dell'intero programma, generando bug difficili da individuare e correggere.
Ambiente complesso:
Genetica: Il genoma è immerso in un ambiente cellulare complesso, e le modifiche genetiche devono interagire con numerosi altri fattori per produrre l'effetto desiderato.
Informatica: Un programma è eseguito in un ambiente operativo complesso, con interazioni con il sistema operativo, altri programmi e l'hardware.
Le sfide sono simili:
Precisione: Sia in genetica che in informatica, è fondamentale operare con la massima precisione per evitare errori che potrebbero avere conseguenze gravi.
Complessità: Entrambi i domini richiedono una profonda conoscenza dei sistemi in gioco e una capacità di analisi e risoluzione dei problemi.
Effetti collaterali: Le modifiche apportate possono avere effetti collaterali indesiderati, difficili da prevedere e mitigare.
Le differenze principali:
Scopo: In genetica, l'obiettivo è spesso quello di curare malattie, mentre in informatica si mira a migliorare le prestazioni o a sviluppare nuove funzionalità.
Scala: Le modifiche genetiche hanno un impatto su organismi viventi, mentre le modifiche al codice si limitano al funzionamento di un programma.
In conclusione, sia la terapia genica che la programmazione a basso livello sono discipline che richiedono una grande precisione e una profonda comprensione dei sistemi in gioco.
Nonostante le differenze, le sfide e gli obiettivi sono in molti casi simili, e le conoscenze acquisite in un campo possono essere utili anche nell'altro.
Nell'era dei linguaggi di programmazione ad alto livello e delle librerie sofisticate, dove si costruiscono interi software impilando layer di astrazioni, rischia di perdersi di vista il cuore pulsante dell'informatica: il microprocessore. Come un edificio imponente, il software moderno poggia su fondamenta spesso nascoste alla vista. Eppure, comprendere queste fondamenta è essenziale per diventare un programmatore veramente competente.
Immagina di voler costruire una casa senza conoscere le proprietà dei mattoni. Potresti riuscirci, ma non avresti il controllo sulla struttura e sulla resistenza dell'edificio. Allo stesso modo, programmare senza conoscere l'assembly è come costruire software senza comprendere come funziona il "cervello" del computer.
L'assembly AVR per l'ATmega328 rappresenta un'eccellente porta d'ingresso nel mondo dell'informatica di base. Questo microcontrollore, ampiamente diffuso e ben documentato, è come un laboratorio ideale per sperimentare e imparare. Programmando in assembly, avrai l'opportunità di:
Capire a fondo l'architettura di un microprocessore: Registri, stack, interruzioni, I/O: questi concetti fondamentali diventeranno chiari e intuitivi.
Ottimizzare il codice: Imparerai a scrivere codice efficiente, sfruttando al massimo le risorse del microcontrollore.
Risolvere problemi complessi: Avrai gli strumenti per affrontare sfide di programmazione che vanno oltre le capacità dei linguaggi di alto livello.
Apprezzare i linguaggi di alto livello: Comprendendo come funziona l'assembly, sarai in grado di apprezzare meglio la potenza e la semplicità dei linguaggi come C e C++.
Un'analogia: è come un ingegnere biomedico che, invece di somministrare farmaci generici, decide di intervenire direttamente sul DNA per correggere un difetto genetico. Certo, è un'operazione complessa, ma offre un controllo e una precisione incomparabili. Allo stesso modo, programmando in assembly, hai la possibilità di "manipolare" direttamente il microcontrollore, ottenendo risultati sorprendenti.
In conclusione, imparare l'assembly AVR è un investimento nel tuo futuro professionale. Ti permetterà di acquisire una comprensione profonda dell'informatica, di risolvere problemi con maggiore efficacia e di aprire le porte a nuove e stimolanti opportunità.
Sei pronto a iniziare questo affascinante viaggio?
Nell'era dei linguaggi di programmazione di alto livello, delle librerie precostituite e delle piattaforme di sviluppo sempre più intuitive, potrebbe sembrare anacronistico dedicarsi allo studio di un linguaggio assembly come l'AVR per il microcontrollore ATmega328. Eppure, immergersi nel mondo dell'assembly rappresenta un'opportunità unica per comprendere a fondo i meccanismi che governano il funzionamento di un computer, dalle basi hardware fino alla logica più complessa dei software.
Perché imparare l'assembly AVR?
L'ATmega328, cuore pulsante di molte schede Arduino, è uno dei microcontrollori più diffusi e documentati al mondo. La sua architettura relativamente semplice lo rende un punto di partenza ideale per chi desidera esplorare il mondo dell'assembly.
Il paradosso dell'informatica moderna
Oggi, molti programmatori utilizzano linguaggi di alto livello e framework sofisticati per sviluppare applicazioni complesse. Tuttavia, questa facilità d'uso nasconde una complessità sottostante, spesso basata su una pila di librerie che si appoggiano l'una sull'altra. Questa stratificazione può rendere difficile comprendere il funzionamento interno del software e risolvere problemi complessi.
L'analogia con la biologia
Possiamo paragonare la programmazione in assembly alla bioingegneria. Un bioingegnere che conosce a fondo la biologia molecolare può manipolare il DNA per creare organismi con caratteristiche specifiche. Allo stesso modo, un programmatore che conosce l'assembly può manipolare direttamente l'hardware, creando sistemi embedded personalizzati e altamente performanti.
In conclusione
Imparare l'AVR assembly è un investimento nel tuo futuro professionale. Ti permetterà di affrontare le sfide dell'informatica con una maggiore consapevolezza e flessibilità. E, soprattutto, ti darà la soddisfazione di creare qualcosa di veramente tuo, partendo dalle fondamenta.
Sei pronto a immergerti nel mondo dell'assembly e a scoprire una nuova dimensione della programmazione?
L'Arduino Nano è un modulo completo che, oltre al microcontrollore ATmega328, include tutta l'elettronica necessaria per funzionare autonomamente. Tra i componenti chiave troviamo un convertitore USB-TTL, che consente la comunicazione con un computer tramite usb, e altri circuiti di supporto per l'alimentazione e la protezione.
Questo e il microntrollere atmega328
E questa e la struttura interna
Sono entusiasta di annunciare la creazione di una piccola pagina web https://www.costycnc.it/avr1 che semplifica notevolmente l'inizio della programmazione con Arduino Nano. Grazie alla libreria https://github.com/LingDong-/avrlass , potrai compilare e caricare il tuo codice direttamente dal browser, senza installare software aggiuntivi. Inoltre, la funzione di decompilazione ti permetterà di analizzare il codice compilato e comprendere meglio il funzionamento interno del microcontrollore.
Partiamo da un esempio semplicissimo di codice in assembly per AVR:
Snippet di codice
.org 0x60
init:
sbi 4,5
sbi 5,5
rjmp init
Vediamo insieme cosa fa riga per riga questo piccolo programma.
Spiegazione del codice
.org 0x60:
Questa direttiva indica al compilatore assembly a partire a scrivere il codice dalla locazione di memoria 0x60. Questa è una pratica comune per posizionare il programma a un indirizzo specifico nella memoria flash del microcontrollere.
init::
Questa è un'etichetta che definisce l'inizio del programma. Quando il microcontrollore viene resettato, l'esecuzione inizia da questa etichetta.
sbi 4,5:
Questa istruzione imposta il quinto bit del registro 4 a 1, configurando pin connesso al LED on-board di Arduino come uscita.In altre parole, impostiamo il pin connesso al LED on-board di Arduino in modo che possa controllare un dispositivo esterno.
sbi 5,5:
Questa istruzione imposta il quinto pin del registro 5 a 1.In altre parole, attiviamo il pin connesso al LED on-board di Arduino per accendere il LED.
rjmp init:
Questa istruzione significa "Relative Jump". Indica al microcontrollore di saltare incondizionatamente all'etichetta "init". In altre parole, il programma eseguirà in loop queste tre istruzioni all'infinito.
Comportamento del programma
Questo semplice programma, quando caricato su un microcontrollore AVR, farà in modo che il pin specifico (connesso al LED on-board di Arduino) sta sempre in stato alto. In pratica, se questo pin e a LED, i LED resta sempre accesso.
Conclusioni
Questo codice, pur essendo molto semplice, illustra alcuni concetti fondamentali della programmazione in assembly:
Utilizzo delle etichette: Per definire punti di riferimento nel codice.
Manipolazione dei registri: Per controllare l'hardware del microcontrollore.
Istruzioni di salto: Per creare loop e controllare il flusso del programma.
Applicazioni pratiche:
Accensione di LED: Come già detto, questo codice può essere utilizzato per accendere un LED collegato al pin corrispondente.
Creazione di un segnale di riferimento: I pin in stato alto possono essere utilizzati come segnale di riferimento per altri circuiti.
Base per programmi più complessi: Questo semplice esempio può essere esteso per creare programmi più sofisticati, come leggere sensori, controllare motori o comunicare con altri dispositivi.
Sviluppi possibili:
Includere un ritardo: Utilizzare un timer per creare un ritardo tra le istruzioni.
Invertire lo stato dei pin: Utilizzare l'istruzione cbi (Clear Bit) per spegnere i LED.
Leggere un ingresso: Utilizzare le istruzioni di input per leggere lo stato di un pulsante o di un sensore.
Generare un segnale PWM: Utilizzare i timer per generare un segnale PWM per controllare la luminosità di un LED o la velocità di un motore.
In conclusione, questo codice, seppur basilare, rappresenta un punto di partenza eccellente per chi vuole approfondire la programmazione in assembly per microcontrollori AVR.
rc_car1 I put D2 signal to ground and working good
upload to arduino rc_car1.ino
welding wire from arduino to rc car (ground,power and D2) same as rc_car1.jpg photo
send command letter under serial ... the car need to rispond with moving
a Forward
b Forward Turbo
c Forward & Left
d Forward & Right
e Backward
f Backward & Right
g Backward & Left
h Left
i Right
This page was created for upload hex code to arduino nano ( for upload grbl firmware to arduino nano used in my costycnc foam cutter costycnc https://www.costycnc.it) ... but i added some functions (after tons of hours and google search and tests) that permit you not only upload your firmware to arduino but also create your small code in asm , compile it and upload to arduino!
Inkscape create document svg with height and with in mm ... my old transformed potrace to gcode ... create a gcode in mm but svg in pixels ... so now i try to produce also the svg file in mm not in pixel.
The dpi of my system is 96 (also the inkscape use 96 dpi ) so the old svg produce 378 for 10 mm ... so I did not understand because this 378 ... but here explain better
Since the convention is that all monitors have 96 pixels per inch, and by definition 1 inch == 25.4 mm, we have that 0.1 mm == 0.1 mm * 96 (px / inch) * (1 inch / 25.4 mm) == 0.378 pixels (approximately).
Is many ways to acces via web in esp12 wifi module ... but i find a easy mode to comunicate with esp12 module.
When esp12 is powered ... in wifi stations appear your wifi module . For example for my module i set name to "Jersinio" with few lines codes in Arduino ide:
In zilele noastre este uimitor cat de mult se aseamana "judecata" unui om cu un computer. Si omul si computerul "citeste" datele care intra , le "interpreteaza" si executa anumite "functii".
La om se numeste caracter si un rol important i-l are subconstientul,el este sitemul de operare de baza care ia decizii. Numai ca acest sistem de operare este invechit si nu mai acopera necesitatile din ziua de azi.
Daca ne uitam la sistemele de operare de la computer ,ele mereu se "upgradeaza" pentru a face fata la noiile necesitati, dorindu-se ca totul sa se desfasoare cu cat mai multe erori, si in mare parte se reuseste.
Sa luam un exemplu:
Acum cativa ani buni, se putea usor sparge o parola,trimitand la server mii de parole pe secunda (bruteforce) iar in scurt timp se afla parola.
Astazi se utilizeaza criptari,, plus ca la cateva incercari gresite serverul nu mai ia in calcul parolele trimise, insa nu te anunta, tu nu stii ... si tu trimitand chiar parola buna serverul nu o va lua in considerare.
In schimb la om cu un sistem de operare vechi si ineficient, aceste "parole" se pot sparge usor... si se numeste in limbaj uman "influentare".
Pot usor manipula un om astazi, pentru ca el nu are nici un "program" nou in "sistemul de operare" de depistare a incercarilor de intrari frauduloase.
Cand te escrocheaza o persoana , este ca si cum ar sparge parola de e-mail sau contul bancar, are acces la toate informatiile tale.
Asa te poate purta emotional unde vrea.
Computerul nu poate fi "pacalit" asa de usor...
In aplicatiile mele ,cea mai mai importanta "piesa" este adaptorul usb-serial.Acest adaptor ofera posibilitatea computerului de a comunica cu exteriorul(cu diferite module),de asemenea are si o sursa de 3,3v utila pentru cateva module.
Eu am realizat un kit de instalare care face aproape totul in locul incepatorului...nu mai trebuie sa cauti driverul si apoi un program (cu source code inclus) ca sa testezi daca driverul e instalat corect,totul e inclus in acel kit,doar faci click pe buton si un sir de caractere este trimis catre port... kit instalare usb-serial
Daca kitul este instalat corect ,atunci cand se introduce adaptorul in portul usb...computerul i-l recunoaste si instaleaza driverul...
Apoi putem testa daca datele ajung la adaptor...daca ledul smd lumineaza pentru un scurt timp ,inseamna ca totul a decurs normal.
Arduino este un modul compus dintr-un microcontroler,un adaptor usb-serial,un regulator de tensiune,un cuartz...
Putini stiu ca poti face ceea ce face platforma arduino doar cu un microcontroler,in cazul exeprimentelor mele...un atmega8 ,in care poate fi incarcat un bootloader.
Pe scurt,bootloaderul este un programel care raspunde primul dupa un reset(dupa ce pinul de reset i-si schimba ptr un mic timp starea),el are rolul de a incarca program in microcontroler doar cu doua fire,pe seriala...
Pentru incepatori este ideal,costa foarte putin,tot ce e nevoie este un adaptor usb serial si un atmega8 cu bootloaderul preincarcat.
Deci ca incepator ,cand vei face primele aplicatii,vei avea nevoie sa comunici cu microcontrolerul,sa citesti date de la el,etc...
Ei bine ,modulul usb-serial va fi folosit si pe post de programare si pe post de comunicare cu microcontrolerul,deci toate aplicatiile comunitatii arduino vor putea fi experimentate de tine la un pret minim.
Cosduino este de fapt un microcontroler (atmega8)incarcat cu bootloader...microcontrolerul lucreaza pe oscilatorul intern(deci nu e nevoie de quartz extern)...resetul se va face manual deci fara buton de reset(in acest mod va fi mai interactiv,utilizatorul va intelege mai bine functionarea microcontrolerului).
Acum sta la indemana oricui sa puna Cosduino intr-un soclu pe o placa te test,sa mai puna niste pini conectori,etc...sau sa lipeasca direct pe Cosduino pini ptr a conecta fire de legatura,sau direct fire cum am mai postat pe aici...
Cosduino e special facut ca nu poate "arde" fusebits ,raspunzatori cu setarile "intime" ale mcu,in acest fel la fiecare incarcare de program nu veti fi preocupati ca din greseala ati blocat microcontrolerul...cum des se intampla cu incepatorii,ca seteaza din fusebit inconstient clock-ul sau alti parametri care blocheaza microcontrolerul...
Este 100% compatibil cu Platforma Arduino ...dar puteti programa si cu Bascom,avrdude,etc...
Cel mai simplu mod de a folosi Cosduino e de a "infinge" niste fire de legatura direct in pinii Cosduino (microcontrolerului).
Mult discutatul Arduino este bazat pe un microcontroler din seria Atmega. Arduino Duemilanove ,de exemplu,este bazat pe microcontrolerul Atmega328.
Microcontrolerele din seria Atmel se pot programa(...incarca program in cip),in mai multe moduri,una din cele mai ieftine metode este aceea cu programatorul Avr Isp ,varianta chinezeasca,care costa la ei pe ebay aproximativ ...2,50 euro
si la noi pe okazii.ro aproximativ 40 RON.
Unele microcontrolere au o zona de memorie,numita BOOTLOADER,care este o zona de memorie separata de cea in care se scrie programul propriu zis...In cazul lui Arduino ,In acest BOOTLOADER se incarca un program,care are functia de a putea incarca date in format serial ,adica de la binecunoscutul COM1...
In acest mod scade putin costul componentei(doar la chinezi,la noi vad ca nu!) cu care se face incarcarea programului in microcontroler...
La chinezi,aproximativ...2 euro
si la noi pe okazii.ro aproximativ...35 ron+10 ron posta
Daca in cazul primului programator aveam nevoie de 6 fire(2 alimentare,3 programare +reset) in cazul celui de-al doilea avem nevoie de 5 fire(2 alimentare+RX+TX+RESET)
Avantajul ultimului este ca-l putem folosi si ca programator si ca interfata seriala(atunci cand este nevoie de schimb de date intre pc si microcontroler,de exemplu citirea anumitor parametri din microcontroler si afisarea la pc),dezavantajul este ca microcontrolerul trebuie sa aiba incarcat un program in zona de boot,compatibil...
Zic compatibil,pentru ca aparent este usor in general,dar in particular apar multe probleme,mai ales ca ,din experienta,am vazut ca la fiecare incarcare e posibil sa schimbe fusebits,adica ...daca de exemplu microcontrolerul era setat pe oscilator intern ,dupa programare observam ca este setat pe oscilator extern si se blocheaza ...pana nu punem un oscilator...
Eu am lucrat la un program de boot(doar ptr atmega8),inca nu este finalizat,dar este functional,l-am testat pe bascom si arduino.
Programul este aici:https://code.google.com/p/un-mic-bootloader-atmega8/downloads/list
El poate fi incarcat doar cu un programator usbisp.
Puteti cumpara si de pe site-ul meu daca doriti...detalii...si va pot incarca in prealabil un bootloader in microcontroler...acest bootloader poate fi sters cu usurinta la o noua incarcare de boot cu un programator usb isp...