Casa / Avatar / Firmware mk. Il processo di flashing di un mini pc. Attrezzatura per firmware MK

Firmware mk. Il processo di flashing di un mini pc. Attrezzatura per firmware MK

dicembre 2015

1. Vantaggi del metodo proposto

I circuiti dei dispositivi basati su microcontrollori (MC) si distinguono solitamente per una combinazione di due qualità difficili da combinare: massima semplicità ed elevata funzionalità. Inoltre, la funzionalità può essere modificata ed ampliata in futuro senza apportare modifiche al circuito, semplicemente sostituendo il programma (lampeggiante). Queste caratteristiche sono spiegate dal fatto che i creatori dei moderni microcontrollori hanno cercato di posizionare su un chip tutto ciò di cui uno sviluppatore di dispositivi elettronici potrebbe aver bisogno, almeno il più possibile. Di conseguenza, c'è stato uno spostamento dell'enfasi dai circuiti e dall'assemblaggio al software. Con l'uso di MK, ora è meno necessario "caricare" il circuito di dettagli, ci sono meno connessioni tra i componenti. Questo, ovviamente, rende il circuito più interessante da ripetere sia per gli ingegneri elettronici esperti che per i principianti. Ma, come al solito, devi pagare tutto. Anche qui non è stato esente da difficoltà. Se acquisti un nuovo MK, installalo in un circuito correttamente assemblato da parti riparabili e applica l'alimentazione, non funzionerà nulla: il dispositivo non funzionerà. Il microcontrollore ha bisogno di un programma.

Sembrerebbe che anche tutto sia semplice con questo: su Internet puoi trovare molti schemi con firmware gratuito. Ma qui c'è un inconveniente: il firmware deve in qualche modo essere "riempito" nel microcontrollore. Per qualcuno che non l'ha mai fatto prima, un compito del genere diventa spesso un problema e il principale fattore ripugnante, costringendolo spesso ad abbandonare il fascino dell'utilizzo di MK e cercare schemi basati su logiche "sciolte" e rigide. Ma non tutto è così difficile come potrebbe sembrare a prima vista.

Dopo aver analizzato le pubblicazioni su Internet, puoi vedere che questo problema viene spesso risolto in due modi: acquistare un programmatore già pronto o realizzarne uno fatto in casa. Allo stesso tempo, gli schemi pubblicati dei programmatori fatti in casa sono molto spesso irragionevolmente complessi, molto più complicati del necessario. Naturalmente, se dovrebbe far lampeggiare l'MK ogni giorno, è meglio avere un programmatore "cool". Ma se la necessità di una tale procedura si presenta di rado, di tanto in tanto, generalmente puoi fare a meno di un programmatore. No, certo, non si tratta di imparare a farlo con la forza del pensiero. Ciò significa che comprendendo come il programmatore interagisce con il microcontrollore durante la scrittura e la lettura delle informazioni nella sua modalità di programmazione, possiamo cavarcela con gli strumenti disponibili per uno scopo più ampio. Questi strumenti dovranno sostituire sia il software che l'hardware del programmatore. La parte hardware deve fornire una connessione fisica al chip MK, la capacità di fornire livelli logici ai suoi ingressi e leggere i dati dalle sue uscite. La parte software deve garantire il funzionamento dell'algoritmo che controlla tutti i processi necessari. Notiamo anche che la qualità delle informazioni di registrazione nell'MK non dipende da quanto sia "cool" il tuo programmatore. Non esiste il "migliore" o il "peggiore". Ci sono solo due opzioni: "iscritto" e "non iscritto". Ciò è dovuto al fatto che l'MC stesso controlla il processo di registrazione all'interno del cristallo. È solo necessario fornirgli un'alimentazione di alta qualità (nessuna interferenza e increspatura) e organizzare correttamente l'interfaccia. Se, in base ai risultati della lettura del controllo, non sono stati rilevati errori, è tutto in ordine: è possibile utilizzare il controller per lo scopo previsto.

Per scrivere un programma sull'MK senza un programmatore, abbiamo bisogno di un convertitore di porta USB-RS232TTL e anche. Il convertitore USB-RS232TTL consente di creare una porta COM utilizzando la porta USB, che differisce da quella "reale" solo per il fatto che ai suoi ingressi e uscite vengono utilizzati livelli logici TTL, ovvero tensioni comprese tra 0 e 5 volt (per maggiori dettagli, vedere l'articolo " "). In ogni caso è utile avere un tale convertitore in “casa”, quindi se non lo avete ancora dovreste assolutamente acquistarlo. Per quanto riguarda i livelli logici, nel nostro caso TTL è addirittura un vantaggio rispetto a una normale porta COM, perché gli ingressi e le uscite di tale porta possono essere collegati direttamente a qualsiasi microcontrollore alimentato a 5 V, inclusi ATtiny e ATmega. Ma non provare a utilizzare una normale porta COM: lì vengono utilizzate tensioni comprese tra -12 e +12 V (o -15 ... + 15 V). La connessione diretta al microcontrollore in questo caso è inaccettabile!!!

L'idea di creare uno script per il programma "Perpetuum M", che implementa le funzioni di un programmatore, è nata dopo aver letto una serie di pubblicazioni su Internet che offrono determinate soluzioni per il firmware MK. In ogni caso sono state riscontrate gravi carenze o eccessive complessità. Ci siamo spesso imbattuti in circuiti di programmatori contenenti un microcontrollore e, allo stesso tempo, ci sono stati dati consigli abbastanza seri come: "... e per programmare il microcontrollore per questo programmatore, abbiamo bisogno ... esatto, un altro programmatore!" . Inoltre, è stato proposto di andare da un amico, cercare un servizio a pagamento, ecc. Anche la qualità del software distribuito in rete per questi scopi non è stata impressionante: sono stati rilevati molti problemi sia con la funzionalità che con la "torbidità" dell'interfaccia utente. Spesso ci vuole molto tempo per capire come utilizzare il programma: deve essere appreso anche per eseguire le azioni più semplici. Un altro programma può fare qualcosa per molto tempo e diligentemente, ma l'utente saprà che nulla viene scritto sull'MK solo dopo che l'intero firmware è stato completato e la successiva lettura del controllo è stata completata. C'è anche un problema del genere: l'utente cerca di selezionare il suo MK dall'elenco dei cristalli supportati, ma non è nell'elenco. In questo caso, non sarà possibile utilizzare il programma: di norma, non viene fornita l'inclusione nell'elenco dei MK mancanti. Inoltre, selezionare manualmente un controller dall'elenco sembra strano, dato che in molti casi il programmatore può determinare lui stesso il tipo di MK. Tutto questo non viene detto per gettare fango sui prodotti esistenti, ma per spiegare il motivo della comparsa dello script per il programma "Perpetuum M" descritto in questo articolo. Il problema esiste davvero, e riguarda in primis i principianti che non sempre riescono a superare questo "muro" per fare il primo passo nel mondo dei microcontrollori. Lo script proposto tiene conto delle carenze riscontrate in altri programmi. E' stata implementata la massima "trasparenza" dell'algoritmo, un'interfaccia utente estremamente semplice che non richiede studio e non lascia scampo a confondersi e "cliccare nel posto sbagliato". In assenza dell'MK richiesto tra quelli supportati, è possibile aggiungerne tu stesso la descrizione, prelevando i dati necessari dalla documentazione scaricata dal sito web dello sviluppatore MK. E, soprattutto, la sceneggiatura è aperta per lo studio e la modifica. Chiunque può, dopo averlo aperto in un editor di testo, studiarlo e modificarlo a propria discrezione, modificando a proprio gusto le funzioni esistenti e aggiungendo quelle mancanti.

La prima versione dello script è stata creata nel giugno 2015. Questa versione supporta solo gli MCU ATtiny e ATmega di Atmel con le funzioni di scrittura/lettura della memoria flash, impostazione dei bit di configurazione e rilevamento automatico del tipo di controller.La scrittura e la lettura della EEPROM non sono implementate.C'erano piani per integrare la funzionalità dello script: add scrivere e leggere EEPROM, implementare il supporto ai controller PIC, ecc. Per questo motivo lo script non è stato ancora pubblicato. Ma per mancanza di tempo, l'attuazione del piano è stata ritardata, e affinché i migliori non diventino nemici del bene, si è deciso di pubblicare la versione esistente. le funzioni implementate non saranno sufficienti, per favore non ti arrabbiare. In questo caso, puoi provare ad aggiungere tu stesso la funzione desiderata. Non lo nascondo: l'idea di ​​​​la creazione di questo script inizialmente ha anche un significato educativo. Avendo compreso l'algoritmo e aggiunto qualcosa di tuo, sarai in grado di comprendere meglio il lavoro di MK in modalità programmazione, così che in futuro lo farai non essere nella posizione di una ragazza davanti al livello macchina in movimento, guardando pensieroso all'interno e non capendo perché "non va".

2. Interfaccia MK in modalità programmazione

Esistono diversi modi per mettere il controller in modalità di programmazione e utilizzarlo in questa modalità. Il più semplice da implementare per i controller della serie ATtiny e ATmega è probabilmente SPI. Li useremo.

Ma, prima di procedere alla considerazione dei segnali necessari alla formazione della SPI, faremo alcune riserve. Il microcontrollore ha bit di configurazione. Questo è qualcosa come gli interruttori a levetta, la cui commutazione consente di modificare alcune proprietà del microcircuito in base alle esigenze del progetto. Fisicamente si tratta di celle di memoria non volatile, come quelle in cui è scritto il programma. La differenza è che ce ne sono pochissimi (fino a tre byte per ATmega) e non sono inclusi nello spazio degli indirizzi di nessuna memoria. La scrittura e la lettura dei dati di configurazione viene eseguita da comandi separati della modalità di programmazione MK. Ora è importante notare che alcuni bit di configurazione influiscono sulla capacità stessa di utilizzare SPI. Con alcuni dei loro valori, potrebbe risultare che SPI non può essere utilizzato. Se ti imbatti in un tale microcontrollore, il metodo proposto in questo articolo non ti aiuterà. In questo caso, dovrai modificare le impostazioni dei bit di configurazione nel programmatore, che supporta una modalità di programmazione diversa, oppure utilizzare un microcontrollore diverso. Ma questo problema riguarda solo gli MK usati, o quelli con cui qualcuno ha già "giocato" senza successo. Il fatto è che i nuovi MK sono dotati di impostazioni dei bit di configurazione che non impediscono l'uso di SPI. Ciò è confermato dai risultati del test dello script del programmatore per il programma "Perpetuum M", durante il quale è stato eseguito il flashing di quattro diversi MK (ATmega8, ATmega128, ATtiny13, ATtiny44). Erano tutti nuovi. L'impostazione iniziale dei bit di configurazione era coerente con la documentazione e non interferiva con l'uso di SPI.

Dato quanto sopra, dovresti prestare attenzione ai seguenti bit. Il bit SPIEN abilita o disabilita esplicitamente l'uso di SPI, quindi, nel nostro caso, il suo valore deve essere permissivo. Il bit RSTDISBL è in grado di trasformare una delle uscite del microcircuito (predeterminato) nell'ingresso del segnale di "reset", oppure di non trasformarlo (a seconda del valore scritto in questo bit). Nel nostro caso è necessario l'ingresso "reset" (se assente non sarà possibile trasferire l'MK in modalità programmazione tramite SPI). Ci sono anche bit del gruppo CKSEL che specificano la sorgente del segnale di clock. Non impediscono l'uso di SPI, ma devono anche essere tenuti a mente, perché se non ci sono impulsi di clock o se la loro frequenza è inferiore a quella consentita per una determinata velocità SPI, non ne deriverà nulla di buono. Di solito, i nuovi MCU che hanno un oscillatore RC interno hanno i bit del gruppo CKSEL impostati per usarlo. Siamo abbastanza soddisfatti di questo: il clock viene fornito senza alcuno sforzo aggiuntivo da parte nostra. Non è necessario saldare il risonatore al quarzo, né collegare un generatore esterno. Se i bit specificati contengono un'impostazione diversa, dovrai occuparti del clock in base all'impostazione. In questo caso, potrebbe essere necessario collegare all'MK un risonatore al quarzo o un generatore di clock esterno. Ma nell'ambito di questo articolo, non considereremo come ciò avvenga. Gli esempi di collegamento di MK per la programmazione contenuti in questo articolo sono progettati per il caso più semplice.

Riso. 1. Comunicazione SPI in modalità programmazione

Passiamo ora alla Figura 1, tratta dalla documentazione per MK ATmega128A. Mostra il processo di invio di un byte all'MCU e la ricezione simultanea di un byte dall'MCU. Entrambi questi processi, come si vede, utilizzano gli stessi impulsi di clock provenienti dal programmatore al microcontrollore al suo ingresso SCK - uno dei pin del microcircuito, per il quale questo ruolo è assegnato nella modalità di programmazione SPI. Altre due linee di segnale forniscono la ricezione e la trasmissione dei dati un bit per clock. Attraverso l'ingresso MOSI, i dati entrano nel microcontrollore e i dati letti vengono presi dall'uscita MISO. Nota le due linee tratteggiate disegnate da SCK a MISO e MOSI. Mostrano in quale momento il microcontrollore "inghiottisce" il bit di dati impostato sull'ingresso MOSI e in quale momento imposta il proprio bit di dati sull'uscita MISO. Tutto è abbastanza semplice. Ma per far entrare l'MK in modalità di programmazione, abbiamo ancora bisogno di un segnale di RESET. Non dimentichiamoci inoltre del comune filo GND e dell'alimentatore VCC. In totale, si scopre che solo 6 fili devono essere collegati al microcontrollore per farlo lampeggiare tramite SPI. Di seguito lo analizzeremo più nel dettaglio, ma per ora aggiungeremo che lo scambio di dati con l'MK nella modalità di programmazione tramite SPI avviene in pacchetti da 4 byte. Il primo byte di ogni pacchetto è fondamentalmente completamente riservato per la codifica del comando. Il secondo byte, a seconda del primo, può essere una continuazione del codice di comando, o parte dell'indirizzo, oppure può avere un valore arbitrario. Il terzo byte viene utilizzato principalmente per la trasmissione di indirizzi, ma in molti comandi può avere un valore arbitrario. Il quarto byte di solito contiene dati o ha un valore arbitrario. Contemporaneamente al trasferimento del quarto byte, alcuni comandi ricevono dati provenienti dall'MK. I dettagli su ciascuna istruzione possono essere trovati nella documentazione del controller in una tabella denominata "Set di istruzioni per la programmazione seriale SPI". Per ora, notiamo solo che l'intero scambio con il controller è costruito da una sequenza di pacchetti a 32 bit, in ognuno dei quali non viene trasmesso più di un byte di informazioni utili. Questo non è molto ottimale, ma in generale funziona bene.

3. Collegamento dell'MK per la programmazione

Per garantire che tutti i segnali necessari siano forniti agli ingressi del microcontrollore per organizzare l'interfaccia SPI e leggere i dati dalla sua uscita MISO, non è necessario creare un programmatore. Questo è facile da fare con il convertitore USB-RS232TTL più comune.

Su Internet, puoi spesso trovare informazioni sul fatto che tali convertitori sono inferiori, che non si può fare nulla di serio con loro. Ma per la maggior parte dei modelli di convertitori, questa opinione è errata. Sì, ci sono convertitori in vendita che non hanno tutti gli ingressi e le uscite disponibili rispetto alla porta COM standard (ad esempio solo TXD e RXD), pur avendo un design non separabile (il microcircuito è riempito di plastica - è impossibile arrivare alle sue conclusioni). Ma non vale la pena acquistarli. In alcuni casi, è possibile ottenere gli ingressi e le uscite mancanti della porta saldando il cablaggio direttamente al microcircuito. Un esempio di un tale convertitore "migliorato" è mostrato nella Figura 2 (microcircuito PL-2303 - maggiori informazioni sullo scopo dei suoi pin nell'articolo ""). Questo è uno dei modelli più economici, ma ha i suoi vantaggi se utilizzato in progetti fatti in casa. Sono diffusi anche cavi adattatori con funzionalità complete con un connettore standard a nove pin all'estremità, come una porta COM. Differiscono da una normale porta COM solo nei livelli TTL e nell'incompatibilità con software obsoleti e alcuni vecchi hardware. Si può anche notare che i cavi basati sul chip CH34x in vari test estremi si dimostrano molto più affidabili e stabili rispetto ai convertitori basati sul PL-2303. Tuttavia, nell'uso normale, la differenza non è evidente.

Quando si sceglie un convertitore USB-RS232TTL, prestare attenzione anche alla compatibilità del suo driver con la versione del sistema operativo utilizzato.

Consideriamo più in dettaglio il principio di connessione del microcontrollore e del convertitore USB-RS232TTL utilizzando l'esempio di quattro diversi modelli MK: ATtiny13, ATtiny44, ATmega8 e ATmega128. La figura 3 mostra lo schema generale di tale connessione. Potrebbe sorprendervi che i segnali RS232 (RTS, TXD, DTR e CTS) siano utilizzati in modo improprio. Ma non preoccuparti: il programma Perpetuum M è in grado di lavorare direttamente con loro - impostare i valori di output e leggere gli stati di input. In ogni caso, i convertitori USB-RS232TTL ampiamente utilizzati basati su chip CH34x e PL-2303 offrono tale opportunità - questo è stato verificato. Anche altri convertitori popolari non dovrebbero essere un problema, dal momento che le funzioni standard di Windows vengono utilizzate per accedere alla porta.

I resistori mostrati nello schema generale, in linea di principio, non possono essere installati, ma è comunque meglio installarli. Qual è il loro scopo? Utilizzando gli ingressi e le uscite TTL "del convertitore e l'alimentazione a cinque volt del microcontrollore, ci liberiamo così della necessità di abbinare i livelli logici - tutto è comunque abbastanza corretto. Ciò significa che le connessioni possono essere dirette. Ma durante gli esperimenti può succedere di tutto. Ad esempio, secondo la legge della meschinità, un cacciavite può cadere proprio nel punto in cui non potrebbe cadere in alcun modo, e chiudere qualcosa che in nessun caso dovrebbe essere chiuso. Nel ruolo di un " cacciavite", ovviamente tutto può risultare. Le resistenze in questo caso a volte riducono le conseguenze. Uno dei loro scopi è più quello di eliminare un possibile conflitto di uscite. Il fatto è che al termine della programmazione il microcontrollore va in normale funzionamento, e può capitare che la sua uscita collegata all'uscita del convertitore (RTS, TXD o DTR) diventi anche un'uscita, secondo quanto appena registrato nel programma MK. In questo caso, sarà molto male se due uscite direttamente collegate " combatti" - prova a impostare diversi livelli logici. In una tale "lotta" qualcuno può "perdere", ma non ne abbiamo bisogno.

I valori dei tre resistori sono selezionati al livello di 4,3 kOhm. Questo vale per le connessioni tra l'uscita del convertitore e l'ingresso del microcontrollore. La precisione dei resistori non gioca un ruolo: puoi ridurre la loro resistenza a 1 KΩ o aumentarla a 10 KΩ (ma nel secondo caso, il rischio di interferenze aumenta quando si utilizzano fili lunghi sulla strada per l'MC). Per quanto riguarda il collegamento tra l'ingresso del convertitore (CTS) e l'uscita del microcontrollore (MISO), qui viene utilizzata una resistenza da 100 Ohm. Ciò è dovuto alle peculiarità dell'ingresso del convertitore utilizzato. Durante i test, è stato utilizzato un convertitore su un chip PL-2303, i cui ingressi, a quanto pare, sono portati alla potenza più con una resistenza relativamente bassa (dell'ordine di diverse centinaia di ohm). Per "uccidere il pull-up" ho dovuto mettere un resistore con una resistenza così piccola. Tuttavia, non puoi metterlo affatto. Sul convertitore, questo è sempre l'ingresso. Non può diventare un'uscita, il che significa che non ci sarà alcun conflitto di uscite in qualsiasi sviluppo degli eventi.

Se l'IC ha un pin AVCC separato per alimentare un convertitore A/D (come ATmega8 o ATmega128), dovrebbe essere collegato al pin di alimentazione comune VCC. Alcuni circuiti integrati hanno più di un pin di alimentazione VCC o più di un GND. Ad esempio, l'ATmega128 ha 3 pin GND e 2 pin VCC. In un design permanente, è meglio collegare tra loro conclusioni con lo stesso nome. Nel nostro caso, al momento della programmazione, è possibile utilizzare un'uscita di VCC e GND.

Ed ecco come appare la connessione ATtiny13. La figura mostra le assegnazioni dei pin utilizzate durante la programmazione tramite SPI. Accanto alla foto: come appare nella realtà una connessione temporanea.


Qualcuno potrebbe dire che questo non è grave: collegamenti elettrici. Ma siamo persone assennate. Il nostro obiettivo è programmare il microcontrollore con un minimo di tempo e altre risorse, e non metterci in mostra davanti a qualcuno. La qualità non ne risente. Il metodo "sui post" in questo caso è abbastanza efficace e giustificato. Il firmware del controller è una procedura una tantum, quindi non ha senso appenderlo con "strass". Se si prevede di modificare il firmware in futuro senza rimuovere il controller dal circuito (nel prodotto finito), questo viene preso in considerazione nell'installazione durante la produzione del dispositivo. Solitamente, viene installato un connettore per questo scopo (RESET, SCK, MOSI, MISO, GND) e l'MK può essere flashato anche dopo essere stato installato sulla scheda. Ma queste sono già delizie creative. Consideriamo il caso più semplice.

Passiamo ora all'ATtiny44 MK. Tutto è più o meno lo stesso qui. Secondo il disegno e la foto, anche un principiante non sarà difficile da capire la connessione. Come ATtiny44, puoi collegare MK ATtiny24 e ATtiny84: l'assegnazione dei pin per questa trinità è la stessa.


Un altro esempio di connessione temporanea del controllore per la sua programmazione è ATmega8. Ci sono più conclusioni qui, ma il principio è lo stesso: diversi fili e ora il controller è pronto per "riempire" le informazioni al suo interno. Il filo nero extra in foto, proveniente dal pin 13, non partecipa alla programmazione. È progettato per rimuovere un segnale sonoro da esso dopo che l'MK è uscito dalla modalità di programmazione. Ciò è dovuto al fatto che durante il debug dello script per "Perpetuum M" il programma del carillon è stato scaricato su MK.


Spesso un controller è disponibile in casi diversi. In questo caso, l'assegnazione delle conclusioni per ciascun caso è distribuita a modo suo. Se il case del tuo controller non è come quello mostrato in figura, specifica lo scopo dei pin secondo la documentazione tecnica, che può essere scaricata dal sito Web dello sviluppatore MK.

Per completare il quadro, diamo un'occhiata alla connessione del chip MK con un gran numero di "gambe". Lo scopo del filo extra nero nella foto proveniente dal pin 15 è esattamente lo stesso del caso dell'ATmega8.


Probabilmente hai già visto che tutto è abbastanza semplice. Chi sa contare le conclusioni dei microcircuiti (dal segno in un cerchio in senso antiorario), lo scoprirà. E non dimenticare di stare attento. I microcircuiti amano il pulito e non perdonano l'atteggiamento negligente nei confronti di se stessi.

Prima di procedere alla parte software, assicurarsi che il driver del convertitore USB-RS232TTL sia installato correttamente (verificare Gestione dispositivi di Windows). Ricorda o annota il numero della porta COM virtuale che appare quando colleghi il convertitore. Questo numero dovrà essere inserito nel testo dello script, di cui puoi leggere di seguito.

4. Script - programmatore per "Perpetuum M"

Abbiamo scoperto la parte hardware del "programmatore". È già metà della battaglia. Ora resta da affrontare la parte software. Il suo ruolo sarà svolto dal programma "Perpetuum M" sotto il controllo di uno script, in cui sono implementate tutte le funzioni necessarie per interagire con il microcontrollore.

L'archivio con lo script deve essere decompresso nella stessa cartella in cui si trova il programma perpetuum.exe. In questo caso, quando si esegue il file perpetuum.exe, sullo schermo verrà visualizzato un menu con l'elenco degli script installati, tra i quali sarà presente la riga "Programmatore MK AVR" (potrebbe essere l'unico). Questa è la linea di cui abbiamo bisogno.

Lo script si trova nella cartella PMS nel file "MK Programmer AVR.pms". Questo file può essere visualizzato, studiato e modificato secondo necessità in un comune editor di testo come Blocco note di Windows. Prima di utilizzare lo script, molto probabilmente dovrai apportare modifiche al testo relativo all'impostazione della porta. Per fare ciò, verificare il nome della porta utilizzata in Gestione dispositivi di Windows e, se necessario, apportare l'opportuna modifica alla riga "PortName="COM4";" - al posto del numero 4 può esserci un altro numero. Inoltre, quando si utilizza un modello di convertitore USB-RS232TTL diverso, potrebbe essere necessario modificare le impostazioni di inversione del segnale (linee di script che iniziano con la parola "Alto"). È possibile verificare l'inversione dei segnali dal convertitore USB-RS232TTL utilizzando uno degli esempi contenuti nelle istruzioni del programma Perpetuum M (sezione delle funzioni per lavorare con la porta).

La sottocartella MK_AVR contiene file con le descrizioni dei controller supportati. Se il controller desiderato non è tra questi, puoi aggiungere tu stesso quello richiesto, agendo per analogia. Prendi uno dei file come esempio e, utilizzando un editor di testo, inserisci i dati necessari, prelevandoli dalla documentazione del tuo microcontrollore. L'importante è fare attenzione, inserire i dati senza errori, altrimenti l'MK non verrà programmato o verrà programmato in modo errato. La versione originale supporta 6 microcontrollori: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 e ATmega128. Lo script implementa il riconoscimento automatico del controller collegato: non è necessario specificarlo manualmente. Se non c'è un identificatore letto dall'MK tra le descrizioni disponibili, viene visualizzato un messaggio che indica che il controller non può essere riconosciuto.

L'archivio con lo script contiene anche informazioni aggiuntive. La cartella "AVR controllers inc files" contiene una raccolta molto utile ed estesa di file di descrizione del controller. Questi file vengono utilizzati quando si scrivono i propri programmi per MK. Altre quattro cartelle "MusicBox_..." contengono file con un programma assembler e firmware pronti per essere scaricati in MK separatamente per ATtiny13, ATtiny44, ATmega8 e ATmega128. Se hai già collegato uno di questi MK per la programmazione, come suggerito in questo articolo, puoi eseguirne il flashing in questo momento: otterrai un carillon. Altro su quello di seguito.

Quando si seleziona la riga "Programmer MK AVR" nel menu dello script, lo script inizia ad essere eseguito. Allo stesso tempo, apre la porta, invia un comando per passare alla modalità di programmazione all'MC, riceve conferma dall'MC di una transizione riuscita, richiede l'identificatore MC e ricerca una descrizione di questo MC tramite il suo identificatore tra i file disponibili con le descrizioni. Se non trova la descrizione richiesta, emette un messaggio appropriato. Se viene trovata la descrizione, si apre il menu principale del programmatore. Puoi vedere la sua schermata nella Figura 8. Non è difficile capirlo ulteriormente: il menu è molto semplice.

Nella prima versione dello script, alcune funzioni di un programmatore completo non sono implementate. Ad esempio, non c'è modo di leggere e scrivere su EEPROM. Ma se apri lo script in un editor di testo, vedrai che ha dimensioni molto ridotte, nonostante la cosa principale sia già implementata in esso. Ciò suggerisce che l'aggiunta delle funzionalità mancanti non è così difficile: il linguaggio è molto flessibile, consente di implementare funzionalità avanzate in un piccolo programma. Ma per la maggior parte dei casi, anche le funzioni esistenti saranno sufficienti.

Alcune limitazioni di funzionalità sono descritte direttamente nel testo dello script:
//record implementato solo dall'indirizzo zero (il record di indirizzo del segmento esteso viene ignorato, lo è anche LOAD OFFSET)
//l'ordine e la continuità dei record nel file HEX non sono verificati
//il checksum non è controllato
Questo vale per lavorare con un file HEX, da cui viene preso il codice firmware per MK. Se questo file non è danneggiato, il controllo del checksum non influirà su nulla. Se è distorto, non sarà possibile rilevarlo tramite lo script. Le restanti restrizioni nella maggior parte dei casi non danneggeranno, ma devi comunque tenerle a mente.

5. Carillon: artigianato facile per i principianti

Se possiedi uno di questi microcontrollori: ATtiny13, ATtiny44, ATmega8 o ATmega128, puoi facilmente trasformarlo in un carillon o in una scheda musicale. Per fare ciò, è sufficiente scrivere il firmware appropriato nell'MK, uno dei quattro che si trovano nelle cartelle "MusicBox_..." in un archivio con lo script. I codici firmware sono memorizzati in file con estensione ".hex". L'uso dell'ATmega128 per un tale mestiere è, ovviamente, "grasso", proprio come l'ATmega8. Ma può essere utile per il test o la sperimentazione, in altre parole, per scopi didattici. In allegato anche i testi del programma Assembler. I programmi non sono stati creati da zero: il programma del carillon dal libro di A.V. Belov "Microcontrollori AVR nella pratica radioamatoriale" è stato preso come base. Il programma originale ha subito una serie di modifiche significative:
1. adattato per ciascuno dei quattro MK: ATtiny13, ATtiny44, ATmega8 e ATmega128
2. i pulsanti vengono eliminati: non è necessario collegare nulla al controller, tranne l'alimentazione e un emettitore di suoni (le melodie vengono riprodotte una dopo l'altra in un ciclo infinito)
3. la durata di ciascuna nota viene ridotta della durata della pausa tra le note per eliminare i disturbi del ritmo musicale
4. l'ottava melodia è collegata, non utilizzata nella versione del libro
5. soggettivo: alcuni "miglioramenti" per l'ottimizzazione e una più facile percezione dell'algoritmo

In alcune melodie si possono sentire falsità e persino errori, specialmente in "Smile" - nel mezzo. I codici melodici sono presi dal libro (più precisamente scaricati dal sito dell'autore insieme al file asm originale) e non sono stati modificati. Apparentemente, ci sono errori nella codifica delle melodie. Ma questo non è un problema: coloro che sono "amici" con la musica lo capiranno facilmente e risolveranno tutto.

In ATtiny13, a causa della mancanza di un contatore a 16 bit per suonare le note, era necessario utilizzarne uno a 8 bit, il che ha comportato una certa diminuzione della precisione del suono delle note. Ma a orecchio è appena percettibile.

Informazioni sui bit di configurazione. La loro impostazione deve corrispondere allo stato del nuovo microcontrollore. Se la tua MCU è stata utilizzata in precedenza da qualche parte, devi controllare lo stato dei suoi bit di configurazione e, se necessario, portarli in linea con le impostazioni del nuovo microcontrollore. Puoi scoprire lo stato dei bit di configurazione del nuovo microcontrollore dalla documentazione di questo MK (sezione "Bit fusibili"). L'eccezione è l'ATmega128. Questo MCU ha un bit M103C che abilita la modalità di compatibilità con il vecchio ATmega103. L'attivazione del bit M103C riduce notevolmente le capacità dell'ATmega128 e questo bit è attivo sul nuovo MK. È necessario ripristinare l'M103C allo stato inattivo. Per manipolare i bit di configurazione, utilizzare la sezione corrispondente del menu dello script del programmatore.

Non ha senso dare uno schema del carillon: ha solo un microcontrollore, un alimentatore e un emettitore di suoni piezoelettrici. L'alimentazione viene fornita esattamente nello stesso modo in cui abbiamo programmato l'MK. L'emettitore sonoro è collegato tra il filo comune (uscita GND del controller) ed una delle uscite dell'MK, il cui numero si trova nel file con il codice assembler del programma (*.asm). All'inizio del testo del programma per ogni MK nei commenti c'è una riga: "il segnale sonoro viene generato all'uscita XX". Quando lo script-programmatore termina, il microcontrollore esce dalla modalità di programmazione e passa alla modalità di funzionamento normale. La riproduzione del brano inizia immediatamente. Collegando un emettitore di suoni, puoi verificarlo. Lasciare la sirena collegata durante la programmazione del chip solo se il suono viene captato da un pin che non è utilizzato in SPI, altrimenti la capacità aggiuntiva sul pin potrebbe interferire con la programmazione.

Come eseguire il flashing di un microcontrollore AVR? Questo è ciò che faremo in questo articolo.

Che cos'è "flash" e "firmware"?

Definiamo prima cosa significa la parola "veloce"? Penso che tu abbia sentito spesso frasi come "flash il telefono", "firmware è volato", "firmware storto" eccetera. Cos'è "firmware"?

Il firmware è, grosso modo, un sistema operativo per piccoli dispositivi come telefoni cellulari, lettori MP3, fotocamere digitali e così via. Cioè, è un piccolo programma che controlla questo dispositivo. Spesso puoi anche sentire questo: "Il mio cellulare è "buggy", ne ho bisogno urgentemente “riflesso“.

In questo caso, ciò significa che è necessario reinstallare il sistema operativo sul telefono cellulare. Significa, "flash MK" significa caricare un programma al suo interno che controlli questo MK e il MK controllere già alcuni dispositivi. Cioè, in teoria, MK è un intermediario tra il programma e qualche dispositivo che deve essere controllato ;-)


Attrezzatura per firmware MK

Quindi, di cosa abbiamo bisogno per eseguire il flashing dell'MK?

  1. Il microcontrollore stesso.
  2. Un computer con software (SW) preinstallato.
  3. Programmatore.
  4. Diversi maglioni.
  5. Tagliere per il pane. Consiglierei di acquistare subito un kit AVR per principianti. Questo set è alimentato tramite USB.
  6. Braccia dritte che crescono dal posto giusto.

Abbiamo deciso di utilizzare Atiny2313 MK nel pacchetto DIP-20:

Preparazione di MK per il firmware

Negli articoli precedenti, abbiamo considerato il programmatore Gromov. Il suo principale svantaggio è che abbiamo bisogno di una porta COM, che ora è difficile trovare in un computer, ma c'è un connettore USB su ogni computer. Pertanto, è stato deciso di acquistare il programmatore USB più economico per AVR MK. Un tale programmatore viene chiamato e assomiglia a questo


Se scavi bene su Ali, puoi trovare un prezzo molto conveniente per un tale programmatore. Per esempio, . Potresti anche trovarlo più economico. Se prendi da un altro venditore, guarda attentamente le sue iscrizioni e gli elementi radio erano esattamente come nella mia foto. In media, il suo prezzo al momento della scrittura è di circa 120 rubli. Un tale programmatore nel caso costerà un po' di più.

Ecco la sua vista posteriore:


Il suo connettore funzionante assomiglia a questo:


Il programmatore viene fornito con un cavo


che ad un'estremità si aggrappa al connettore funzionante del programmatore:


Aggancieremo l'altra estremità del cavo all'MK.


Se guardi da vicino, puoi scoprire quale pin nel connettore è il primo. La freccia punterà al primo pin del connettore:


Una volta che sai dove si trova il primo pin, puoi facilmente identificare il resto dei pin:


Quindi, il nostro compito è collegare le uscite dell'MK alle uscite del programmatore.

Per fare ciò, inseriamo i cavi nelle prese MOSI, RST, SCK, MISO, VTG (VCC), GND nel connettore del cavo. GND Ho preso il decimo socket, è possibile e un altro, dove è scritto GND. Un totale di 6 cavi di collegamento:


VTG (aka VCC) ci aggrappiamo alla 20a tappa del MK

SCK(UCSK) ci aggrappiamo alla 19 gamba MK

MISO ci aggrappiamo alla 18a tappa del MK

MOSI per 17 gambe

GND per 10 gambe

RST sull'andata

Dovrebbe risultare qualcosa del genere:


Dopo aver collegato per la prima volta il programmatore alla porta USB del PC, Gestore dispositivi ci verrà fornito un nuovo dispositivo:

Non abbiamo paura, scarica l'archiviatore qui, decomprimilo e indica il percorso durante l'installazione della "legna da ardere". Quando la "legna da ardere" è installata sul programmatore, vedremo qualcosa del genere:

Va tutto bene, il programmatore è pronto per la battaglia.

Nello stesso archivio troviamo la cartella “avrdudeprog”, aprila, trova lì il file eseguibile AVRDUDEPROG ed eseguilo. Questa è la shell del software per eseguire il flashing di MK utilizzando il nostro programmatore.

Sembra così. Non dimenticare di selezionare il nostro MK nell'elenco.

Per eseguire il flashing di MK, dobbiamo selezionare un file con estensione HEX. Quindi ecco il mio file. Prima di tutto, premo il pulsante "Cancellare tutto". Cosa succede se qualcuno ha già usato MK e qualche programma è già stato caricato lì? Pertanto, prima di lampeggiare, cancelliamo la memoria dell'MK. Se il "lavaggio" ha avuto successo, il programma ci darà qualcosa di simile a questo messaggio:

AVR MK lampeggiante

Fare clic sul pulsante di selezione file:

E ora selezioniamo il nostro file "Lezione 1.hex". Questo è il nostro programma.

E ora premiamo il pulsante "Programmazione"

Dopo che tutto è andato bene, verrà visualizzato qualcosa del genere:

Ma non è tutto! Come ricorderete, nell'ultimo articolo abbiamo impostato la frequenza a 8 megahertz. Per evitare confusione, ora dobbiamo dividere questa frequenza per 8. Per questo, c'è un fusibile che divide la frequenza di clock per 8. Mettiamo il marker su "direct fuses", quindi selezioniamo la casella CKDIV.

Dopo aver eseguito questi due passaggi, fare clic sul pulsante "Programmazione":

Controllo di MK nell'hardware

Ora assembliamo il nostro circuito, menzionato nell'ultimo articolo:


e goditi il ​​risultato:

Con questo post voglio iniziare a pubblicare un ciclo in cui verranno approfondite le tecniche di base per lo sviluppo, il flashing e la configurazione dei dispositivi su microcontrollori. I post saranno utili anche per coloro che ripeteranno solo i dispositivi finiti senza preoccuparsi del loro sviluppo e debug. Noi (io e l'amministrazione del sito) speriamo che la pubblicazione di questo ciclo aiuti molti principianti e non così radioamatori ad iniziare a sviluppare e (o) ripetere apparecchiature basate su un microcontrollore. Questo articolo raccoglierà e sistematizzerà materiali da varie fonti aperte, inclusa la nostra rivista Radio preferita. Vedremo brevemente cos'è MK e con cosa viene mangiato, perché sono necessari i compilatori e che tipo di animali terribili si trovano nei file con *. ESADECIMALE , *. bidone , *. asm , ecc., tuffiamoci un po' nella storia e finalmente creiamo il nostro primo programmatore SI-Prog (a mio avviso molto semplice, affidabile, universale e non meritatamente dimenticato) e faremo flashare l'MK, inoltre, utilizzando un esempio specifico, ci occuperemo delle shell del software RopuRgo g 2000 e IS-Prog . E quindi iniziamo. Non è un segreto che, tra i circuiti integrati digitali, gli MK oggi occupano all'incirca lo stesso posto degli amplificatori operazionali tra quelli analogici. Questi sono dispositivi universali, il loro utilizzo in dispositivi elettronici di vari scopi è in continua espansione. Quasi tutte le grandi e molte medie imprese specializzate nel campo dell'elettronica dei semiconduttori sono impegnate nello sviluppo e nella produzione di MC. L'elenco e i parametri principali di MK di alcune famiglie popolari possono essere trovati, ad esempio, su Internet.

I moderni microcomputer (erano chiamati microcomputer a chip singolo) combinano nel loro caso un potente core del processore, dispositivi di memoria per archiviare il programma eseguibile e i dati, dispositivi per ricevere input e generare segnali di output e numerosi nodi ausiliari. La tendenza generale della moderna "costruzione di microcontrollori" è una diminuzione del numero di elementi esterni necessari per il normale funzionamento. Su un chip del microcircuito, non sono posizionati solo comparatori, convertitori analogico-digitale e digitale-analogico, ma anche tutti i tipi di resistori di carico e "pull-up", circuiti di ripristino.

I buffer di uscita dell'MK sono progettati per collegare direttamente i carichi più tipici, come gli indicatori LED. Quasi tutte le uscite dell'MK (ad eccezione, ovviamente, delle uscite del cavo comune e dell'alimentazione) possono essere utilizzate dallo sviluppatore a sua discrezione come input o output. Di conseguenza, un dispositivo piuttosto complesso in termini di funzioni può spesso essere eseguito su un solo microcircuito.

La costante riduzione del costo dei microcontrollori e l'ampliamento delle loro funzionalità ha abbassato la soglia della complessità dei dispositivi che è consigliabile costruire sulla base di essi. Oggi ha senso progettare su MK anche tali dispositivi, la cui implementazione con metodi tradizionali richiederebbe meno di una dozzina di microcircuiti logici di medio e basso grado di integrazione. Forse l'ostacolo principale su questo percorso è il conservatorismo degli sviluppatori, molti dei quali considerano ancora MK qualcosa di incomprensibilmente complesso.

Nel frattempo, i processi di sviluppo di un programma per MK e uno schema circuitale convenzionale di un dispositivo digitale sono per molti versi simili. In entrambi i casi si costruisce un "edificio" della forma desiderata da "mattoni" elementari, solo che i "mattoni" sono diversi: nel primo caso - un insieme di elementi logici, nel secondo - un insieme di comandi del microcontrollore .

Invece di interagire tra gli elementi utilizzando lo scambio di segnali su fili, il trasferimento di dati da una cella di memoria all'altra all'interno dell'MK. Il processo di trasferimento "schizza" quando l'MK comunica con i sensori, gli indicatori, gli attuatori e la memoria esterna ad esso collegati. Anche gli strumenti sono diversi. La matita, la carta, il saldatore e l'oscilloscopio vengono sostituiti da un computer e un programmatore, sebbene nell'ultima fase del debug di un prodotto non sia ancora possibile fare a meno di un oscilloscopio e di un saldatore.

Un'altra difficoltà è la mancanza di documentazione tecnica completa e letteratura di riferimento in russo. La maggior parte delle pubblicazioni di questo tipo su periodici e soprattutto su Internet in lingua russa spesso non sono altro che traduzioni interlineari degli originali inglesi. Inoltre, i traduttori, a volte poco familiari con l'argomento e la terminologia, interpretano i luoghi "oscuri" a modo loro e loro (i luoghi) si rivelano piuttosto lontani dalla verità. Praticamente non ci sono strumenti software in lingua russa per lo sviluppo e debug dei programmi MK.

Per molti, la prima conoscenza di MK inizia con la ripetizione di uno dei design basati su di essi pubblicati nella stessa rivista Radio o in un'altra pubblicazione. E qui si manifesta immediatamente la principale differenza tra un MC e un microcircuito convenzionale: non è in grado di fare nulla di utile fino a quando non viene inserito un programma nel suo dispositivo di archiviazione interno (a volte esterno), ad es. un insieme di codici che specifica la sequenza di operazioni da eseguire. La procedura per scrivere i codici nella memoria dell'MK si chiama programmazione o firmware (da non confondere con il precedente processo di sviluppo del programma stesso con lo stesso nome).

La necessità del firmware, a prima vista, può sembrare uno svantaggio. Questo infatti è il principale vantaggio, grazie al quale, realizzando, ad esempio, una sola scheda con un MK e diversi indicatori LED e pulsanti ad essa collegati, se lo si desidera, si trasforma tutto in un frequenzimetro, contaimpulsi, orologio elettronico , contatore digitale di qualsiasi grandezza fisica , controllo e monitoraggio a distanza e molto altro.

La capacità di mantenere segreti i codici di programma aiuta i produttori di apparecchiature sull'MK nella lotta contro i concorrenti. È vero, l'eccessiva segretezza dei programmi crea spesso ulteriori difficoltà nella riparazione o nel miglioramento dei dispositivi sull'MK di un design "estraneo". Ma questa è un'altra questione.

Fino a poco tempo, quando ha iniziato a progettare una struttura su un MC, lo sviluppatore ha affrontato il problema se fosse possibile risolvere il problema utilizzando dispositivi di uno o due tipi a lui noti. Oggi la situazione è radicalmente cambiata. Dall'insieme di MC disponibili, si dovrebbe scegliere quello con l'aiuto del quale il problema verrà risolto in modo ottimale. Purtroppo non tutti lo fanno. C'è stata perfino una certa "moda" per prodotti di vario tipo, si formano raggruppamenti peculiari di sostenitori di MK di famiglie certe. Giustificano la loro scelta, di regola, a livello di "mi piace - non mi piace". Spesso, un'opinione negativa su un dispositivo si spiega con un solo tentativo fallito di utilizzarlo, spesso senza un tentativo di analizzare ed eliminare le cause del guasto Alcune aziende distribuiscono documenti chiamati "The Truth About..." con un confronto "oggettivo" dei loro dispositivi con i prodotti della concorrenza e, di regola, a favore del primo. Non dovresti fidarti particolarmente di tali pubblicazioni, ci sarà sempre un rapporto di confronto con risultati e conclusioni posteriori.

Voglio dire che, come in molti altri casi, non ci sono MK ovviamente buoni o cattivi, e non possono esserci. Ognuno di loro è in grado di mostrare ottimi risultati nella risoluzione di problemi di una certa classe e difficilmente affronta gli altri. Da qui la varietà dei tipi. Di norma, un guadagno in un parametro è accompagnato da un deterioramento negli altri. Gli esempi più semplici: un MK progettato per la riprogrammazione multipla è sempre più costoso di un analogo programmabile una tantum e un dispositivo più veloce è più sensibile di uno lento al rumore impulsivo e più esigente per il tracciamento del PCB. Naturalmente, ci sono dispositivi universali che sono sufficientemente adatti per risolvere un'ampia classe di problemi. Tuttavia, se è solo necessario ripetere l'uno o l'altro design, non c'è un'opportunità speciale per scegliere MK, è necessario utilizzare quello indicato nella descrizione o il suo analogo completo, ad esempio, tra quelli prodotti da altre aziende su licenza . Alla domanda se è possibile sostituire un MK di un tipo con un altro, spesso si deve dare una risposta negativa, anche se in teoria esiste una tale possibilità: basta rielaborare il programma, e se il numero e lo scopo dei pin dell'MK sostituito e in sostituzione sono diversi, quindi il circuito stampato.

Quando si tratta di sostituire i microcontrollori con una struttura simile e appartenenti alla stessa famiglia, o di sostituire un prodotto obsoleto con un analogo moderno, di norma, è possibile adattare il programma. Microchip e ATMEL include anche raccomandazioni per tale adattamento nei dati di riferimento del suo MC. Nel caso generale, un trasferimento completo di un programma a un altro MK richiede la presenza non solo del "firmware" solitamente pubblicato della EPROM, ma anche del testo completo, preferibilmente con i commenti del programmatore. L'elenco ottenuto a seguito dello smontaggio del "firmware" è tutt'altro che un equivalente a tutti gli effetti. Il programmatore avrà bisogno di una qualifica significativamente più alta di quella sufficiente per lo sviluppo da zero e il costo del lavoro non sarà inferiore.

Si consiglia di avviare lo sviluppo indipendente del dispositivo sull'MK e, naturalmente, il programma per esso dallo studio e la stesura di uno schema a blocchi dell'algoritmo per il suo funzionamento. Solo in base ai risultati di questa fase, puoi fare la scelta giusta di MC.

Costruiremo la nostra ulteriore storia su un esempio specifico. In qualche modo, recentemente, è stato richiesto un contatore che potesse contare le intersezioni di un certo oggetto di un certo confine in una direzione e nell'altra. Sfogliando i numeri della rivista Radio, ho trovato un dispositivo adatto, ma sembrava troppo complicato (11 microcircuiti, inclusa una EPROM di grande capacità) e, inoltre, non aveva alcune funzioni necessarie, in particolare la capacità di pre- impostare le letture del contatore e ricordare il suo stato dopo aver spento l'alimentazione. C'era un'idea per realizzare il dispositivo necessario sull'MK. Per i motivi indicati di seguito, è stato scelto l'MK PIC16F84 (PIC16F84А). Di conseguenza, lo schema del dispositivo è stato Nato ( Riso. uno),


contenente solo due microcircuiti. Il dispositivo può utilizzare microcontrollori PIC16F84 e PIC16F84 UN con qualsiasi frequenza limite, tipo di custodia e intervallo di temperatura di esercizio (questi parametri sono indicati da indici numerici e alfabetici dopo il trattino nella designazione del chip, ad esempio -101 / R). E se non è previsto il miglioramento del programma, puoi anche utilizzare un analogo programmabile una tantum economico del PIC16CR84, se, ovviamente, riesci a trovarlo.

Sensori di movimento degli oggetti - fotoaccoppiatori a transistor con un canale aperto AOT147B (U1, U2). Il carico dei loro fototransistor sono i resistori interni disponibili nell'MK. È consentito utilizzare fotoaccoppiatori costituiti da luce e fotodiodi separati (fototransistor). I sensori ottici, se necessario, sono sostituiti da qualsiasi altro: magnetico, a contatto, induttivo. È importante solo che quando vengono attivati, i livelli logici cambiano agli ingressi corrispondenti dell'MK.

Il dispositivo utilizza un indicatore LED CA56-11SR a quattro cifre e sette segmenti di Kingbright. È anche possibile utilizzare qualsiasi indicatore LED a sette segmenti con un comuneanodo, ad esempio, quattro ALS324B domestici. Un set di resistori DR1 può sostituire una famigliaresistori convenzionali da 300 ohm.Viene fornito il programma che deve essere inserito nella memoria di MK DD2 per trasformare il dispositivo in un contatorein tavola. 1. All'accensione, gli zeri sono accesi in tutte le cifre dell'indicatore. Dopo ogni esecuzione del ciclo “U1 è ombreggiato” - “U1 e U2 sono ombreggiati” - “U1 non è ombreggiato” - “U2 non è ombreggiato”, le letture aumentano di uno, il contatore è quindi reversibile quando i sensori vengono attivati ​​nell'ordine inverso, le letture diminuiscono dello stesso importo - 9999 seguito da zero.

Il prossimo articolo del ciclo parlerà di come sono stati creati e sottoposti a debug il circuito e il programma del contatore, il suo miglioramento e l'introduzione di funzioni aggiuntive. Questo esempio illustrerà le caratteristiche principali del PIC16F84 MK e come lavorare con strumenti gratuiti di programmazione e debug. Sono combinati nel pacchetto MPLAB, la cui ultima versione può essere "scaricata" dai siti Internet www.microchip.com o www.microchip.ru. Oppure dalla pagina del forum ALESSANDRA Descrive anche in dettaglio come installarlo.

Per inserire i codici dalla tabella. 1 alla memoria interna dell'MK, è necessario un programmatore. Tuttavia, non "sa come" leggere i codici dalle pagine Internet, quindi, prima di tutto, è necessario creare un file con questi codici in un computer in un formato "comprensibile" dal programmatore. In tavola. 1 sono presentati nel cosiddetto formato HEX sviluppato da Intel e divenuto di fatto lo standard per la programmazione di ROM per vari scopi. (Devo dire che altri formati con lo stesso nome, ad esempio Microchip HEX, non esistono, tali nomi sono usati solo per malinteso). Formati simili sviluppati da altre società non hanno trovato ampia applicazione e sono destinati, di norma, solo ad hardware e software di propria concezione, la maggior parte dei quali "comprende" il formato Intel HEX.

I codici vengono inseriti nel computer utilizzando un qualsiasi editor di testo, incluso Microsoft Word, esattamente nella forma in cui sono stati forniti scheda. uno.


Se hai uno scanner e un programma di riconoscimento del testo come FineReader, puoi usarli. Ma in quest'ultimo caso, i dati letti dovranno essere confrontati con l'originale, poiché il riconoscimento automatico non è perfetto (sono possibili errori). Si prega di notare che in HEXfile, vengono utilizzati solo i due punti, i numeri e le lettere latine A - F. Ogni riga inizia con i due punti nella prima posizione e termina premendo il tasto INVIO. Non sono ammessi spazi. Quando hai finito di digitare e controllato i codici, salva il file in modalità "Text DOS" o "Text Only", assegnandogli un nome qualsiasi con estensione *.hex.

Abbastanza spesso, i codici di programma vengono pubblicati sotto forma di un cosiddetto "dump di memoria". Questa è una tabella più visiva (rispetto al formato HEX). È costituito da righe che iniziano con un indirizzo esadecimale (di solito quattro cifre) seguito da spazi separati da codici esadecimali a due cifre memorizzati in celle di memoria successive (byte). L'indirizzo all'inizio della riga si riferisce alla prima delle celle e di solito sono 16 in totale. Per confronto, in scheda. 2 ecco un dump contenente gli stessi dati di scheda. uno. HEX e dump possono essere facilmente convertiti dall'uno all'altro come segue (vedi scheda. 3).

I primi due caratteri dopo i due punti sono il numero di byte di informazioni nella stringa. In questo caso sono 16 (10 H ). Segue l'indirizzo del primo byte (0020H), seguito da un codice di assegnazione riga a due cifre:

0 - la riga contiene dati;

1 - l'ultima riga del file (:00000001 FF); non contiene dati, il numero di byte e l'indirizzo in esso contenuti sono zero. In molti casi bastano zero byte per riconoscere una stringa come terminante;

2 - nell'area dati è presente l'indirizzo del segmento di memoria, relativo all'inizio del quale vengono contati gli indirizzi indicati nelle righe successive. Si noti che i due byte dell'indirizzo del segmento sono in ordine alto-basso. Il numero da sommare agli indirizzi attuali si ottiene spostando verso sinistra di quattro cifre binarie il codice binario dell'indirizzo del segmento, cioè moltiplicandolo per 16;

3 - nell'area dati sono presenti quattro byte dell'indirizzo iniziale del programma nel consueto formato IBM PC CS:IP;

4 - nell'area dati sono presenti (in ordine dal più alto al più basso) quattro byte dell'indirizzo assoluto, il cui valore, senza trasformazioni, va sommato agli indirizzi indicati nelle righe seguenti;

5 - uguale a 04, ma specifica il valore assoluto dell'indirizzo di inizio del programma.

Le righe con i codici di destinazione 02 e 04 vengono utilizzate se è necessario specificare indirizzi maggiori di 0FFFFH. Per la programmazione di MCU con poca memoria (come PIC16F84) non sono necessari. Tuttavia, a volte una stringa simile che specifica un indirizzo iniziale zero viene inserita all'inizio del file HEX. Può essere rimosso indolore.

Le righe con i codici 03 e 05 sono molto rare, poiché l'indirizzo iniziale del programma MK è spesso determinato dall'architettura di quest'ultimo e non può essere modificato. Per MK della famiglia PICmicro è zero.

Il codice di destinazione è seguito da un'area dati del numero di byte specificato all'inizio della riga. La stringa viene terminata con un byte di controllo. L'algoritmo per calcolarne il valore è abbastanza semplice: gli otto bit meno significativi della somma di tutti i byte della stringa, compresa la sua lunghezza, due byte dell'indirizzo, codice di destinazione, dati e controllo, devono essere uguali a zero.

Il formato HEX è stato originariamente progettato per memorizzare dati a 8 bit. I codici di maggiore capacità sono suddivisi nel corrispondente numero di byte, che vengono scritti nel file in ordine dal basso verso l'alto. Ad esempio, a ciascuna delle istruzioni a 14 bit dell'MK IS16F84 vengono assegnati due byte e i due bit più significativi del secondo byte rimangono liberi (il codice in questo byte non supera 3FH).

Di conseguenza, gli indirizzi nel file HEX vengono raddoppiati rispetto agli indirizzi effettivi delle istruzioni del programma. Ad esempio, la linea

:080008008C0003088D000408C0 descrive una tale sequenza di codici di programma;

Codice indirizzo

4008C

5 0803

6008D

7 0804

Alcuni strumenti software (di norma, guidando la loro genealogia non da computer compatibili con IBM) scrivono su un file e percepiscono i byte di dati nell'ordine inverso: quello più vecchio, poi quello più giovane. Dovresti prestare attenzione a questo se il programmatore è "cattivo", non volendo leggere il file correttamente.

Il formato di rappresentazione dei dati multi-bit descritto viene spesso definito unito. Di tanto in tanto c'è un'altra opzione: il file HEX è diviso in due, uno dei quali contiene tutti i byte inferiori e il secondo - tutti i byte superiori delle parole del programma. Questo formato è chiamato Diviso.

Si noti che il file potrebbe non specificare una sequenza continua di codici. Ad esempio, tra i codici nelle prime due righe scheda. uno rimane vuoto uno spazio di sei byte (tre istruzioni di programma). Il formato HEX non fornisce alcuna informazione sul loro contenuto. A seconda dell'algoritmo del programmatore, rimangono in uno stato iniziale non programmato o memorizzano i codici precedentemente registrati. A scheda. 2 le celle inutilizzate vengono riempite con zero codici.

Come sapete, l'MK contiene una memoria permanente per vari scopi: FLASH o programmabile una tantum per il programma, EEPROM per i dati, celle speciali per la configurazione e l'identificazione dell'MK. Le informazioni destinate a queste aree sono spesso archiviate in file separati e

programmazione, è necessario specificare manualmente dove scriverlo esattamente. Ma nella famiglia PICmicro è stata presa la decisione di combinare tutto in un unico file HEX. Le aree sopra menzionate, che si trovano per il processore MK in spazi di indirizzi diversi, sono combinate in una dal punto di vista del programmatore. Per PIC16F84, la distribuzione è la seguente (tra parentesi - indirizzi "byte"):

0-3FFH (0-7FFH) - codici di programma; per MK con memoria maggiore, quest'area può essere espansa a 1FFFH (3FFFH);

2000N-2003N (4000N-4007N) - codici di identificazione;

2007H (400EN, 400FH) - parola di configurazione;

2100H-213FH (4200H-427FH) - codici scritti negli indirizzi 0-3FH EEPROM.

Nonostante l'organizzazione della EEPROM sia a otto bit, in questo caso a ciascuno dei codici ad esso destinati nel file HEX vengono assegnati due byte, il più alto dei quali è a contenuto zero

CONTINUA >>>>>

TUTTE LE DOMANDE SU

Quindi, se il programma è installato, iniziamo a esplorare le sue capacità.

Installiamo il microcontrollore nel pannello di programmazione, colleghiamo il programmatore al computer ed eseguiamo "PICkit 2 Programmer".

All'avvio, il programma interroga il programmatore e determina automaticamente il tipo di microcontrollore da programmare mediante bit di identificazione (il cosiddetto ID dispositivo). Attenzione! I chip della famiglia Baseline, così come i chip EEPROM e KeeLOG, non hanno un ID dispositivo. Affinché il programma funzioni con questi microcircuiti, è necessario selezionare un prodotto specifico tramite il menu "Famiglia di dispositivi".

Se invece di un'immagine così amichevole, appare questa ...

Quindi è necessario verificare se il cavo USB è collegato correttamente e, tramite il menu "Strumenti" - "Verifica comunicazione", ricollegare il dispositivo.

Apertura di un file del firmware.

Per scrivere il programma MK nella sua memoria, è necessario selezionare la voce di menu "File" - "Import Hex".

Quindi seleziona il file del firmware desiderato nella finestra che si apre.

Successivamente, la finestra della memoria del programma (Program Memory) e dei dati (EEPROM Data) visualizzerà il contenuto del file .hex.

Registrazione del programma in MK.

Ora puoi programmare l'MK. Per fare ciò, fai clic sul pulsante "Scrivi". Il processo di registrazione dura 3 - 5 secondi.

La scritta "Programmazione riuscita" ti avviserà del buon esito della procedura di registrazione.

Per maggiore certezza, puoi condurre una procedura di verifica. Quando si fa clic sul pulsante "Verifica", il programma confronta i dati del file esadecimale con i dati registrati nell'MK. Se la verifica è andata a buon fine, la finestra di messaggio visualizzerà "Verifica riuscita".

Attenzione! Se stai eseguendo il flashing di PIC12F675, PIC12F629 e microcontrollori simili con un generatore di clock interno, è possibile che venga visualizzato un errore durante la verifica. Il fatto è che il programmatore PICkit2 (versione 6.21) salva la costante di calibrazione, quindi la scrive nell'ultima cella di memoria dell'MK. Resta inteso che il file del firmware originale e i dati registrati in memoria saranno diversi. La costante di calibrazione verrà discussa in seguito.

Pulsanti rapidi.

Il pulsante "Auto Import Hex + Write Device" si rivolge a coloro che desiderano "guidare il firmware" nell'MK con il clic di un solo pulsante. Un clic e il programma ti chiederà di selezionare il file del firmware, quindi scriverlo immediatamente sull'MK.

Il pulsante "Leggi dispositivo + Esporta file esadecimale" esegue la funzione opposta: legge i dati dall'MK e offre di salvare il file del firmware in un file .hex.

Modifica dei bit di configurazione.

I bit di configurazione impostano i parametri di base per il funzionamento dell'MK. Questo è il tipo di generatore (quarzo, circuito RC), che abilita / disabilita il cosiddetto "timer watchdog", che imposta la protezione contro la lettura della memoria dei programmi e alcuni altri. Di norma, quando si scrive un algoritmo per il funzionamento di un MK (programma), vengono scritti valori che devono essere scritti nei bit di configurazione. Durante il flashing, la shell prende i dati di configurazione dal file del firmware stesso e non ha bisogno di essere forzata a specificare questi dati.

Ma, come principianti, non sarebbe superfluo per noi sapere come visualizzare o modificare bit di configurazione specifici. Per fare ciò, fare clic sulla scritta "Configurazione". Si apre la finestra Modifica bit di configurazione.

Se è necessario modificare da 0 a 1, quindi modificare - fare clic su "Salva". Naturalmente, è necessario cambiare consapevolmente. Ripeto, quando si utilizza un file firmware già pronto, non è necessario modificare nulla, il programma farà tutto automaticamente.

Selezione di un modello di microcontrollore.

I microcontrollori sono diversi. Pertanto, durante la programmazione dell'MK, potrebbe essere necessario specificare un modello specifico del microcontrollore. Selezionando la voce di menu "Famiglia di dispositivi", viene visualizzato un elenco di famiglie di microcontrollori. Ci sono anche chip di memoria EEPROM in questo elenco.

A differenza dei microcontrollori, i chip di memoria EEPROM non vengono rilevati automaticamente dal comando "Strumenti" - "Verifica comunicazione". Pertanto, durante la lettura/scrittura di chip EEPROM nel programma, è necessario specificare la marcatura del chip.

Nel menu, seleziona la voce "Device Family" - "EEPROMS" - "24LC".

Costante di calibrazione.

Come sapete, il microcontrollore richiede un generatore di clock per funzionare. L'elemento che imposta la frequenza di questo generatore può essere un risuonatore al quarzo esterno, circuito RC. Ma tra i microcontrollori PIC, ci sono quelli che contengono i circuiti di pilotaggio necessari all'interno del microcircuito stesso. Tali MK includono, ad esempio, PIC12F629, PIC12F675.

In fabbrica, nella memoria di tali microcontrollori viene scritta una costante speciale, che imposta i parametri dell'oscillatore integrato a 4 MHz. Questa costante di calibrazione 34xx viene scritta nell'ultima posizione di memoria del programma a 0x3FF.

Durante la programmazione del microcontrollore, questa costante facile da cancellare. E sebbene PICkit2 Programmer versione 2.61 salvi automaticamente questa costante e poi la trascriva durante la programmazione, non sarà superfluo annotare il valore della costante OSCCAL.

Se necessario, la costante può essere facilmente specificata manualmente. Per fare ciò, selezionare la voce di menu "Strumenti" - "OSCCAL" - "Imposta manualmente".

Nel campo "Valore OSCCAL" specificare il valore della costante precedentemente registrato. Fare clic sul pulsante "Imposta".

Ora che hai familiarità con le funzionalità di base del programmatore PICkit2, puoi iniziare tranquillamente ad assemblare alcuni dispositivi su un microcontrollore, ad esempio,

Microcontrollori per principianti. Videolezione. Scriviamo il programma sul microcontrollore (lampeggiamo il chip)

________________________________________________________________________________________________________

Il primo semplice programma che controlla la tensione ai pin del microcontrollore. Programmazione nell'editor CodeVisionAVR. Trasferimento del programma nella memoria del microcontrollore (firmware del chip). Scarica(36 MB)


Contenuto

Se il video non viene registrato, impostareFlash Player e controlla la scheda audio, oScarica materiale (36 MB). Se c'è uno schermo verde invece di un video, reinstallare il flash player (basta scaricare ultima versione). Se il video "si contrae", mettilo in pausa e lascialo caricare un po'. Player per la visualizzazione di video flash su un computer domestico. Espandi il video a schermo intero. Se scrivono "Video non trovato", "Video non trovato" - riavvia nuovamente il video.

Editore CodeVisionAVR - sito ufficiale

Se il microcontrollore non è flash, allora:
1) Non agitarti. Metti da parte il design, fai una pausa, prendi una tazza di tè e rilassati. I progetti reali raramente iniziano a funzionare la prima volta - questo è normale, soprattutto per i principianti (perché ci sono troppi fattori non spiegati che il cervello non è in grado di comprendere immediatamente).
Gli sviluppatori professionisti ripetono i loro progetti diverse dozzine di volte :)))
Una proprietà interessante del cervello: Come diceva Mark Twain: "Non rimandare a domani ciò che puoi rimandare a dopodomani". A volte è impossibile scrivere un programma a bruciapelo, inventare un circuito elettronico, ecc. In questo caso, non devi fare uno sforzo extra. Metti il ​​compito nella mente subconscia e aspetta un paio di giorni. Dopo una pausa, spesso tutto si risolve da solo. E molto più velocemente e meglio che se soffrissi lo stesso paio di giorni dalla mattina alla sera.

2) Dopo il riposo, ricontrollare attentamente:
Cibo - non inferiore a 4,5 volt, si consiglia di prelevarlo dalla USB del computer a cui è collegato il programmatore (per escludere eventuali correnti di equalizzazione). Verificare la tensione con un tester;
I cavi dal computer al programmatore sono troppo lunghi? I cavi lunghi sono disturbati e la probabilità di un errore di trasmissione dei dati aumenta;
Potrebbe essersi rotto il cavo all'interno? Suona tutti i fili con un tester.
I fili sono stati confusi? MOSI, MISO, SCK, Ripristina, GND, nel posto giusto bloccato?
Il programmatore è impostato correttamente Impostazione >> Programmatore;
Progetto >> Configura >> Compilatore C;
Il tipo di cristallo è corretto? Strumenti >> Programmatore di chip;

Fuzy non ha toccato? Se toccato, dovrai mettere un quarzo esterno.
Hai pulito il chip prima di lampeggiare? Strumenti >> Programmatore chip >> Programma >> Cancella chip;
A volte la pulizia del chip aiuta. Strumenti >> Programmatore di chip grande k
Pulsante Reset Chip (equivalente all'invio di un impulso al pin RESET);
Mettilo in fondo alla finestra Strumenti >> Programmatore di chip tre zecche Controlla la firma, Controlla la cancellazione , Verificare ;
O viceversa - deseleziona queste caselle. Prova in questo modo e in quello.
Se tutto il resto fallisce, allora ordina un nuovo chip. Un chip estratto da qualche parte potrebbe risultare bruciato e sintonizzato su un generatore esterno, con pin bruciati e simili.
Sì, e nei negozi a volte sono aspirati difettosi, tk. tengono chissà dove. A volte è più facile acquistare un nuovo chip che pensare a cosa è successo a quello vecchio (ma non buttarlo via, quando acquisisci esperienza - ricostruisci).
Se trovi un vecchio computer, prova
e lo faccio programmatore LPT(Improvvisamente un programmatore USB difettoso è scivolato?). Non c'è niente di più semplice di un programmatore LPT; L'ho fatto su una dozzina di computer: ha sempre iniziato a funzionare subito e non si sono mai verificati guasti.
Ricorda prima dell'installazione batti le mani o una batteria, un rubinetto o una massiccia struttura in acciaio (recinzione, libreria), oppure acquistare un cinturino da polso o un tappetino antistatico (l'elettricità statica delle mani può danneggiare i microcircuiti fragili).
Infine, il modo più perverso - prova con un altro computer. Succede che le schede madri siano difettose, le porte su di esse si bruciano, i fili dei contatti si allontanano, ecc.

Impara i microcontrollori non solo dai video di questo sito. Il cervello ha bisogno di varietà. Leggi libri, forum, Wikipedia, altri siti. Chiedi consiglio ai tuoi amici di elettronica. Esercitati e sperimenta da solo. Accumula conoscenza ed esperienza.