Schemi fai-da-te su attiny2313. Colleghiamo il pulsante al microcontrollore ATtiny2313, un programma semplice. Compilazione e flashing del programma in MK

Come assemblare un semplice circuito, come collegare un programmatore ad un microcontrollore ATtiny2313, come scrivere il programma più semplice in linguaggio C e come eseguire il flashing del microcontrollore ATtiny2313 con il nostro programma, troverai tutto questo in questo articolo.

Prima di tutto abbiamo bisogno di un programmatore, ci sono molte varietà di programmatori, quale programmatore scegliere?
Esistono programmatori convenzionali in cui è necessario inserire un microcontrollore, flasharlo, rimuovere il microcontrollore e poi inserirlo nella nostra scheda per vedere il risultato e questa sequenza dovrà essere eseguita centinaia di volte all'inizio, questa opzione non lo è conveniente secondo me.
Il nostro microcontrollore ATtiny2313 supporta la funzione ISP (programmazione in-system) tramite porta SPI, questo caso d'uso per la programmazione in-circuit ISP secondo me il più comodo e veloce, perché. non è necessario rimuovere il microcontrollore dalla nostra scheda dopo ogni firmware, puoi programmare il microcontrollore centinaia di volte e immediatamente senza disconnettere il programmatore dal computer e dalla scheda, vedere il risultato dopo aver lampeggiato il microcontrollore, il processo di debug Software dispositivo radioamatoriale è notevolmente semplificato e il tempo dedicato a questo è ridotto.
Puoi creare tu stesso un programmatore in-circuit ISP, ce ne sono molti su Internet circuiti semplici come si fa tramite LPT, porta COM ad esempio programmatore PonyProg Su Internet puoi trovare schemi su come farlo.

Questo articolo prenderà in considerazione l'utilizzo di un programmatore ISP in-circuit per microcontrollori AVR (PX-400) funziona tramite la porta COM.
Se non disponi di una porta COM sul tuo computer, avrai bisogno anche di un adattatore porta USB alla porta COM ci sono anche molte varietà di tali adattatori, consiglio l'adattatore con cui ho lavorato: Scheda convertitore da porta USB a seriale UCON-232S
Programmatore di foto PX-400, adattatore UCON-232S USB , Scheda tecnica ATTiny2313

Vediamo più da vicino tutti i dettagli di questo schema:
(Per ogni evenienza, ho acquistato tutti i dettagli, programmatore, adattatore (dalla porta USB alla porta COM) su chipdip.ru)

1 - Presa per scheda PBD-20 2,54 mm 2x10 dritta- L'ho fatto per comodità, in modo che fosse più semplice controllare i segnali dai pin del microcontrollore, questo elemento non può essere eseguito.
2 - SCS-20 Pannello DIP 20 pin- il pannello è saldato alla scheda in modo che sia possibile sostituire, se necessario, il microcontrollore sulla scheda,
ATtiny2313-20PU, DIP20, MCU, 5 V, flash 1K, 12 MHz- Il microcontrollore è inserito nel pannello DIP.
3 - Risonatore al quarzo 4.000 MHz (troncato) HC-49S- Risonatore al quarzo 4 MHz
4 - Condensatore ceramico K10-17B imp. 22pF NPO,5%,0805- Due condensatori ceramici da 22pF
5 - 78M05 (+5 V, 0,5 A) TO220- Stabilizzatore di tensione 5 V, fornisce energia stabilizzata al microcontrollore non più di + 5 V, in questo caso ho ottenuto 4,4 V, questo è abbastanza.
6 - Spina di alimentazione NP-116 1,3x3,4x9,5 mm MP-331 (7-0026c)- Spina di alimentazione saldata a quella vecchia caricabatterie da cellulare CC 5,7 V/800 mA
7 - Presa di alimentazione DS-213 sulla scheda- Dov'è la presa di corrente per la spina NP-116, per un facile collegamento all'alimentazione
8 - IDC-10MS (BH-10), spina diritta- Spina per il collegamento di un programmatore ISP in circuito
9 - Costante della resistenza 0,25W 150 Ohm- Tre resistori da 150 Ohm per pin MISO, SCK, MOSI
10 - Costante della resistenza 0,25 W 47 Ohm- Una resistenza da 47 ohm per pin RESET
11 - Pulsante tattile h=5mm, TC-0103 (TS-A2PS-130)- Pulsante RIPRISTINA, dopo aver premuto il pulsante, il programma nel microcontrollore si avvia dall'inizio, non è stato possibile eseguire il pulsante.
12 - LED verde d = 3mm, 2,5V, 2mA - Funziona come indicatore, questa voce non può essere eseguita.
13 - Costante della resistenza 0,25 W 110 Ohm- Resistore per il LED, in modo che il LED abbia 2 V, questo articolo non può essere realizzato
14 - Due fili collegati al LED, per verificare i segnali provenienti dai pin del microcontrollore, questa operazione non può essere eseguita
15 - Tagliere stampato Dip-Rm 100x100mm

I passaggi 3 e 4 funzionano come un'unità, come un generatore di clock esterno, questi passaggi possono essere omessi se non si pongono requisiti elevati alla precisione e alla stabilità dell'oscillatore RC interno, l'oscillatore RC interno ha un errore di circa il 10% e la precisione potrebbe essere influenzata da un cambiamento di temperatura.

Quindi hai scaricato e installato Studio Atmel :
Lancio Studio Atmel e scrivi un semplice programma C per far lampeggiare il LED:
Fare clic su: Nuovo progetto... \ AVR GCC \ C \ Progetto eseguibile C
Specificare la cartella in cui salvare il progetto e il nome del progetto, ad esempio Test1, e fare clic su OK.
Dall'elenco, seleziona il nostro microcontrollore ATtiny2313 e fai clic su OK.
Cancelliamo tutto ciò che è apparso nella finestra e incolliamo il codice del nostro programma che è qui sotto:

#define F_CPU 4000000L // Specifica la frequenza del nostro quarzo esterno 4 MHz
#includere
#includere
int principale(vuoto)
{
//Imposta tutti i pin PORTB come uscite
DDRB=0xFF;//Registro della direzione di trasferimento delle informazioni (1 uscita, 0 ingresso)
mentre(1)
{
//Registro dati PORTB (utilizzato per visualizzare le informazioni)
PORTB=0b00000001;//Fornisci 1 alla porta 12 del MK PB0 - accendi il LED
PORTB=0b00000000;//Invia 0 alla porta 12 del MK PB0 - spegni il LED
_delay_ms(1000);//Ritardo 1 secondo.
}
}

Andiamo al menu Compilazione\Gestione configurazione\Configurazione soluzione attiva\
Scegliere Pubblicazione, premere vicino
Lo abbiamo fatto in modo da avere una cartella nel progetto Pubblicazione, di cui parlerò più avanti.

Clic F7 fatto, la nostra applicazione è stata compilata!
Per eseguire il flashing del microcontrollore ATtiny2313, abbiamo bisogno di un solo file con estensione ESADECIMALE
Si trova nella cartella del nostro progetto: ...
Si prega di notare il file Prova1.hex nuno prendilo dalla cartella Pubblicazione !
Non confondere, perché cartella eseguire il debug c'è anche un fascicolo Prova1.hex, ma questo file contiene anche informazioni di debug e per questo motivo non sarai in grado di eseguire il flashing di questo file. di solito succede grande taglia e non entrerà nella memoria del MK.

È stato trovato il file .hex, ora abbiamo bisogno di un programma per eseguire il flashing del microcontrollore ATtiny2313, ci sono molti programmi simili, ma utilizzeremo il programma: Avr-Osp II
Scaricamento:

Colleghiamo il programmatore al nostro circuito, dobbiamo fornire alimentazione al circuito!

Iniziamo il programma Avr-Osp II, specificare il percorso del file nella sezione FLASH... \Test1\Test1\Release\Test1.hex, impostare le caselle di controllo nel programma e premere il pulsante programma questo è tutto, microcontrollore ATtiny2313 ha lampeggiato!

Qual è il vantaggio dei programmatori in-circuit ISP, ora senza scollegare i fili dal nostro circuito, puoi apportare modifiche al programma e, come descritto sopra, eseguire il flashing del microcontrollore e vedere immediatamente il risultato.

Domande e commenti si prega di lasciare sul nostro forum

Architettura AVR RISC:

RISC (Computer a set di istruzioni ridotto). Questa architettura ha grande insieme istruzioni, la maggior parte delle quali vengono eseguite in 1 ciclo macchina. Ne consegue che rispetto ai precedenti microcontrollori basati su CISC (ad esempio MCS51), i microcontrollori basati su RISC sono 12 volte più veloci.

Oppure, se prendiamo come base un certo livello di prestazione, allora esibirci data condizione I microcontrollori basati su RISC (Attiny2313) necessitano di una frequenza di clock dell'oscillatore 12 volte inferiore, con conseguente riduzione significativa del consumo energetico. Di conseguenza, diventa possibile progettare vari dispositivi su un Attiny2313 utilizzando l'alimentazione a batteria.

Memoria operativa (RAM) e memoria non volatile per dati e programmi:

  • 2 kB di memoria di programma flash autoprogrammabile in grado di fornire 10.000 tentativi di scrittura/cancellazione.
  • 128 byte di memoria dati scrivibili EEPROM che possono fornire 100.000 tentativi di scrittura/cancellazione.
  • 128 byte di memoria SRAM (Read Only Memory).
  • È possibile utilizzare la funzione per proteggere i dati del codice programma e dell'EEPROM.

Proprietà periferiche:

  1. microcontrollore Attiny2313 dotato di timer-contatore a otto cifre con prescaler impostabile separatamente con fattore massimo 256.
  2. È inoltre presente un timer/contatore a 16 bit con prescaler separato, circuiti di acquisizione e confronto. Il timer è cronometrato: il contatore può entrambi fonte esterna segnale e dall'interno.
  3. Due canali. Esiste una modalità operativa di modulazione PWM veloce e PWM con correzione di fase.
  4. Comparatore analogico interno.
  5. Watchdog timer (programmabile) con oscillatore interno.
  6. Interfaccia seriale universale (USI).

Attiny2313 Specifiche speciali:


  • Oziare- Modalità stand-by. In questo caso, solo il processore centrale interrompe il suo lavoro. Lo stato di inattività non influisce sul funzionamento dell'SPI, del comparatore analogico, del convertitore analogico-digitale, del timer/contatore, del timer watchdog e del sistema di interruzione. In effetti, interrompe solo la sincronizzazione del kernel processore e memoria flash. Il ritorno alla modalità operativa normale del microcontrollore Attiny2313 dalla modalità Idle avviene tramite un'interruzione esterna o interna.
  • spegnere- La modalità più economica, in cui il microcontrollore Attiny2313 è effettivamente spento dal consumo energetico. In questo stato, il generatore di clock si ferma, tutte le periferiche sono spente. Resta attivo solo il modulo di gestione degli allarmi provenienti dall'esterno. Quando viene rilevata un'interruzione, il microcontrollore Attiny2313 esce dallo spegnimento e torna al funzionamento normale.
  • Stand-by- Il microcontrollore passa a questa modalità standby di consumo energetico tramite il comando SLEE. È simile allo spegnimento, con l'unica differenza che il generatore di clock continua a funzionare.

Porte I/O del microcontrollore Attiny2313:

Il microcontrollore è dotato di 18 pin I/O programmabili in base alle esigenze che si presentano in fase di progettazione dispositivo specifico. I buffer dei dati di uscita delle porte possono sopportare un carico relativamente elevato.

  • Porta A (PA2 - PA0) - 3 bit. Porta I/O bidirezionale con resistori pull-up programmabili.
  • Porta B (PB7 - PB0) - 8 bit. Porta I/O bidirezionale con resistori pull-up programmabili.
  • Porta D (PD6 - PD0) - 7 bit. Porta I/O bidirezionale con resistori pull-up programmabili.

Intervallo di tensione di alimentazione:

Il microcontrollore funziona con successo con una tensione di alimentazione compresa tra 1,8 e 5,5 volt. Il consumo di corrente dipende dalla modalità di funzionamento del controller:

Modalità attiva:

  • 20 µA con una frequenza di clock di 32 kHz e una tensione di alimentazione di 1,8 volt.
  • 300 µA con clock di 1 MHz e tensione di alimentazione di 1,8 volt.

Modalità di risparmio energetico:

  • 0,5 μA con una tensione di alimentazione di 1,8 volt.

(3,6 Mb, scaricati: 5 934)

Il dispositivo di questo articolo funziona con schede SD. L'argomento è vecchio e abbastanza banale, ma vale la pena riparlarne sull'uso delle schede SD.
In generale, le schede SD (SDC, SD Card) presentano molti vantaggi e sono molto facili e comode da utilizzare in piccoli progetti embedded. A ciò contribuiscono una serie di fattori:
- un'interfaccia molto semplice per interagire con la carta (implementata tramite SPI);
- alta velocità (il microcontrollore è in grado di trasferire dati dalla scheda SD ad una velocità vicina a 10 Mbps);
- basso consumo energetico (letteralmente un paio di milliampere - non di più);
- taglia piccola;
- Disponibilità e basso costo.
Le schede SD non presentano praticamente alcun inconveniente (tranne, forse, le procedure di inizializzazione :)).

1. Introduzione.

Ho chiamato il dispositivo descritto in questo articolo Dispositivo parlante scheda SD. Un po' pretenzioso;), ma dal nome è chiaro che si tratta di un apparecchio parlante. È destinato a dare voce ai tuoi progetti. In breve, funziona così: sulla scheda SD vengono registrati file audio numerati, che il dispositivo riproduce su comando. Il campo di applicazione è piuttosto ampio: sistemi di allarme, giocattoli, robot, casa intelligente eccetera. Le dimensioni del dispositivo sono piuttosto modeste (potrebbe essere più piccolo, ma ho scelto deliberatamente il microcontrollore ATtiny2313, che è più economico e più facile da ottenere). Ho cercato di puntare sulla semplicità e sulla massima funzionalità.
Guardando al futuro, vediamo cosa dovrebbe succedere alla fine:

Un dispositivo del genere funzionerebbe? Poi raccogliamo!

2 Scheda di memoria.

Il dispositivo utilizza una scheda di memoria SD. Ho già scritto sui motivi della scelta, aggiungerò solo che le schede SD stanno diventando quasi lo standard per le schede di memoria dispositivi mobili. Anche i produttori che hanno promosso/promosso fanaticamente il loro tipo di schede di memoria stanno lentamente iniziando a utilizzare le schede SD. La ragione di tale popolarità, probabilmente, era il prezzo basso di queste carte. Per i dispositivi amatoriali, la scheda SD è, infatti, l'unica scheda utilizzabile e il motivo è la semplice interfaccia con cui funziona.

La scheda SD ha percorso una lunga strada di evoluzione e dispone di diverse opzioni per la sua implementazione (MMC - come variante della scheda SD, SD ver1, SD ver2, SDHC, SDXC). La procedura per comunicare con la carta è semplice e universale per tutti i tipi di carte, ma il lancio (inizializzazione della carta) è un processo piuttosto ambiguo e confuso, con rituali di "giocoleria" della carta, invio di comandi "fittizi" vuoti e altri incomprensibili cose (insomma, ballare con i tamburelli è obbligatorio:)). Le specifiche del protocollo SDC stesso descrivono il processo di inizializzazione in modo abbastanza ampio, è comprensibile, ci sono molti produttori di schede, ognuno ha il proprio hardware, con le proprie caratteristiche ... Di cosa sto parlando? - Ho cercato di rendere la procedura di inizializzazione il più universale possibile, ma sii preparato al fatto che alcune carte non funzioneranno. Pertanto, se qualcosa va storto con il tuo dispositivo, prova un'altra scheda di memoria: questo potrebbe essere il motivo.

Questo dispositivo supporta schede SD fino a 2 GB inclusi. Tutto quanto sopra (SDHC e SDXC) non è supportato.
Per il dispositivo non c'è differenza nel formato della scheda (SD, MiniSD o MicroSD), ma è necessario collegarla correttamente, in base alla piedinatura della scheda.

3 Sistema di archiviazione.

Il dispositivo funziona con schede che hanno il file system FAT16. Questo sistema è il più adatto per dispositivi come il nostro, in quanto è semplice e facile da implementare (anche FAT12 e FAT32, in linea di principio, non sono difficili da implementare, ma questo non è pratico, a causa della mancanza di vantaggi rispetto a FAT16) .

Non ci sono requisiti speciali di formattazione per la scheda: può essere formattata su qualsiasi dispositivo disponibile. Standard Formattazione di Windows abbastanza adatto a questi scopi.

Per il corretto funzionamento del dispositivo, i file audio presenti sulla scheda SD devono soddisfare determinati requisiti:
a) Il formato del file deve essere: WAV non compresso.
I parametri del file sono i seguenti:
- Bitrate - frequenza di campionamento (Frequenza) - 32000 Hz;
- Numero di canali (Canali) - 1 (mono);
- Dimensione (dimensione del campione) - 8 bit.
È anche possibile una tale abbreviazione: WAV PCM 8U

b) Il file deve avere un nome speciale. Affinché il dispositivo possa sapere quale file è il primo, il secondo, il terzo, ecc. il primo carattere del nome del file deve essere una lettera maiuscola dell'alfabeto latino (il resto del nome, così come l'estensione del file, viene ignorato).
Ad esempio, i seguenti nomi di file sarebbero corretti:
A_Lay_dogs.wav - la prima traccia
B-Questa è la seconda traccia.wav - la seconda traccia
Con Attenzione! Errore!.wav - terza traccia

c) Per utilizzare le funzionalità aggiuntive del dispositivo, i file possono essere posizionati in due cartelle denominate "1" e "2". Il dispositivo è dotato di un interruttore per selezionare la cartella attiva, ovvero con lo stesso comando di avvio della riproduzione è possibile avviare i brani dalla cartella "1" o "2", a seconda del livello dell'ingresso di commutazione (una sorta di selezione dello schema audio è un cosa molto utile!) . Se una delle cartelle (o entrambe) non esiste, i file vengono riprodotti dalla directory principale.

Puoi memorizzare qualsiasi altro file insieme alle tracce audio, a condizione che non creino conflitti con i loro nomi (è meglio metterli in una directory separata, quindi non dovrai prestare attenzione a come vengono nominati lì).

d) A causa della piccola quantità di SRAM nell'ATtiny2313, è impossibile creare un buffer per la prelettura dei dati, quindi i dati dal file vengono emessi direttamente per la riproduzione. Di conseguenza non c'è la possibilità (non c'è abbastanza tempo) di cercare frammenti di file nella tabella FAT. In altre parole, i file scritti sulla scheda non devono essere frammentati.

In realtà, questo non è un grosso problema, dal momento che qualsiasi sistema operativo cerca sempre di scrivere il file come un pezzo intero e finché hai spazio sulla mappa, qualsiasi azione con i file (eliminazione, copia, rinomina) non influirà sulla loro integrità. Se avete una mappa molto piccola o ne avete riempita una grande, per essere sicuri dell'integrità dei file, copiateli semplicemente in HDD computer, formattare la scheda e ripristinare i file.

4 Schema. Scheda a circuito stampato.

Lo schema del dispositivo è il più semplice possibile. In effetti, a parte il microcontrollore stesso e la scheda SD, non contiene nulla. Per quanto mi riguarda, ho realizzato un sigillo per i componenti SMD, poiché si prevede di utilizzare questo dispositivo in un luogo di dimensioni limitate. Se le dimensioni non sono critiche per te, puoi assemblare il circuito su breadboard nella versione DIP. Nel caso di una breadboard, l'assemblaggio del dispositivo richiederà al massimo 15 minuti. La tensione di alimentazione consentita per una scheda SD è compresa tra 2,7 e 3,6 volt. In questo intervallo anche il microcontrollore funziona normalmente, quindi non è necessario utilizzare componenti corrispondenti. Ho controllato il funzionamento dell'intero dispositivo e con un alimentatore da 5 volt - tutto ha funzionato bene, ma non consiglio di farlo su basi permanenti, poiché schede diverse possono reagire in modo diverso alla sovratensione. Come titolare della scheda microSD, ho utilizzato un adattatore, saldato direttamente ai suoi contatti. Se avete bisogno di dimensioni più contenute è meglio utilizzare un vero e proprio porta microSD.

Per flashare il microcontrollore si utilizza lo stesso connettore della scheda SD, quindi bisogna pensare a come collegarvi il programmatore (ho realizzato un adattatore apposta).

Dopo che la scheda è stata saldata, è possibile eseguire il flashing del microcontrollore.

Una piccola gallery del dispositivo finito:




Una piccola sfumatura nello schema.
Quando una scheda SD viene inserita nel titolare della scheda (la scheda è collegata a una fonte di alimentazione), viene creato un picco di corrente e, di conseguenza, una caduta di tensione nel circuito (sembra che in questo momento vengano caricate capacità significative nella scheda ). Il prelievo è così significativo che il microcontrollore viene ripristinato. Lo utilizzo per avviare la procedura di inizializzazione della scheda (l'installazione della scheda riavvia il microcontrollore e la prima cosa che fa il firmware è cercare e inizializzare la scheda). Se non si ripristina l'MC durante l'installazione della scheda (un potente alimentatore o grandi capacità di livellamento), è necessario occuparsi del pulsante di ripristino nel circuito per ripristinare manualmente il microcontrollore (questo se si prevede di "caldare" cambiare carta).

5 Funzionamento del dispositivo.

Come ho scritto sopra, lavorare con il dispositivo è molto semplice: copia le tracce con il nome corretto sulla scheda SD, inserisci la scheda nel portascheda, il dispositivo troverà automaticamente la scheda, il LED verde si accenderà - tutto qui, il dispositivo è pronto per riprodurre i brani. Adesso non ti resta che scegliere e avviare la traccia da riprodurre, nel modo che preferisci.

5.1 Pulsanti del dispositivo, loro azione.

Ho cercato di rendere il dispositivo il più funzionale possibile, quindi molte gambe del microcontrollore vengono utilizzate per i cambi di modalità (questo fa sembrare il dispositivo un riccio :)). Se non hai bisogno di alcuna funzione, lascia semplicemente il piede "sospeso" nell '"aria".
Cambia azione:
- "Monster" - consente di rallentare (2 volte) la riproduzione del brano, creando l'effetto di una voce bassa. L'interruttore funziona "al volo": la velocità cambia durante il cambio;
- "Helium" - accelera la riproduzione del brano (di 1/3) - creando l'effetto di una voce alta. L'interruttore funziona "al volo";
- "Ripeti" se questo interruttore è chiuso a massa, la traccia selezionata verrà riprodotta indefinitamente (fino all'apertura dell'interruttore). Ciò può essere utile, ad esempio, se è necessario creare un determinato sottofondo sonoro: il rumore della pioggia, il bruciore di un fuoco, il mormorio di un ruscello...;
- Tasto “Seleziona/Riproduci” che avvia la traccia in riproduzione (descrizione sotto);
- “Seleziona traccia” - impostazione del numero della traccia in riproduzione (descrizione sotto);
- “Dir1 / Dir2” - selezione dello schema sonoro (descrizione sotto).

5.2 Avviare la riproduzione.

Esistono tre modi per avviare la riproduzione di una traccia specifica:
- inviando tramite UART una lettera maiuscola dell'alfabeto latino - si avvia immediatamente la riproduzione del file contenente tale lettera all'inizio del nome;
- se il numero del file viene selezionato utilizzando “Seleziona traccia” (codice binario 0001=”A”, 0010=”B”, ecc. 1- gamba è in cortocircuito al suolo, 0 - “sospeso” in “aria”), quindi il pulsante “Seleziona/Riproduci” avvierà la riproduzione del file corrispondente;
- se non viene selezionato nulla utilizzando "Seleziona traccia" (0000 - le gambe sono "sospese" in "aria"), quindi premendo il pulsante "Seleziona / Riproduci" un certo numero di volte, avviamo la traccia corrispondente (1 volta = “A”, 2 volte ="B", ecc.).

5.3 Schemi sonori.

Una caratteristica molto utile è la possibilità di selezionare uno dei due schemi sonori. Ciò significa che l'interruttore “Dir1 / Dir2” seleziona la cartella sulla mappa da cui verrà riprodotto il brano.

Ci sono molte applicazioni: messaggi in russo e inglese (giocattoli educativi), voci di bambini e adulti, rumori di acqua che scorre e fuoco che brucia, un gatto/cane, un poliziotto buono e uno cattivo :), suoni rilassanti/rinvigorenti e un un sacco di altre opzioni simili.

Ad esempio, hai bisogno che il tuo dispositivo sia in grado di comunicare con voci maschili e femminili. È implementato in questo modo:
- creare due serie di messaggi, rispettivamente nella versione femminile e maschile;
- la numerazione dei file per entrambe le opzioni è la stessa. Non dimenticare che il dispositivo "vede" solo la prima lettera nel nome del file, quindi puoi rendere i nomi più comprensibili per te stesso, ad esempio "C_Waiting for command_male.wav" e "C_Waiting for command_female.wav" sono abbastanza corretti ;
- una serie di messaggi maschili viene copiata nella cartella "1" e i messaggi femminili nella cartella "2".
Ora, a seconda dello stato dell'interruttore “Dir1/Dir2”, lo stesso comando riprodurrà i brani dalla cartella “maschio” o “femmina”.

5.4 Indicazione del funzionamento del dispositivo.

Dato che il tini2313 ha pochissime gambe, e quasi tutte sono usate per gli interruttori, ho dovuto sacrificare un'indicazione normale e attaccare invece qualcosa di NON normale. Per indicare diverse modalità operative, viene utilizzata solo una gamba del microcontrollore, alla quale sono collegati due LED: rosso e verde (beh, o quello che preferisci). Le diverse modalità operative del dispositivo vengono visualizzate con un codice colore specifico:
- il LED rosso lampeggia - non è presente la scheda SD oppure la sua tipologia non è supportata dal dispositivo;
- il LED rosso è acceso - la scheda SD è supportata e inizializzata con successo, ma la scheda non è formattata in FAT16;
- il LED verde è acceso - la scheda SD è stata inizializzata con successo, è stata trovata quella richiesta file system e il dispositivo è pronto per riprodurre la traccia - in attesa del comando;
- il LED verde lampeggia - il dispositivo sta riproducendo il brano;
- è acceso il verde, si accende il rosso per un breve periodo, si accende nuovamente il verde - traccia non trovata;
- la luce verde è accesa, si spegne brevemente e la luce verde si riaccende - viene premuto il tasto di selezione del brano.

5.5 Informazioni di debug.

Per facilitare la ricerca delle aree problematiche (nel caso in cui il dispositivo non voglia funzionare), ho duplicato ogni fase di inizializzazione nel programma con messaggi tramite UART. Dopo ogni passaggio riuscito, il carattere appropriato viene inviato all'UART:
- “S” - (Start) la periferia del microcontrollore viene inizializzata normalmente;
- “C” - (Card Init) Scheda SD inizializzata normalmente e supportata;
- “F” - (FAT Init) Sistema FAT supportato;
- “1” - (No 1 Dir) nessuna cartella “1” verrà letta dalla directory root;
- “2” - (No 2 Dir) nessuna cartella “2” verrà letta dalla directory root;
- “R” - (Pronto) il dispositivo è completamente pronto - è in attesa del comando per avviare la traccia;
- Inoltre, ogni volta che viene avviata una traccia, viene inviata all'UART una lettera maiuscola del nome della traccia.

6 tracce per far suonare i tuoi dispositivi.

6.1 Conversione di tracce

Se nella libreria sopra non è stato trovato nulla di adatto, è possibile ottenere le tracce necessarie in rete (ci sono molti siti speciali per musicisti e editing video, dove sono già raccolte grandi librerie di suoni), in installazioni di giochi (spesso i suoni di i gameplay sono divisi in tracce e ripiegati in una cartella separata). Puoi anche tagliare gli effetti sonori da film e musica. Le tracce trovate devono essere convertite in un formato supportato dal dispositivo. Ti ricordo che il formato del file deve essere WAV non compresso. 32000 Hz, 1 canale, 8 bit (WAV PCM 8U)
Per convertire in questo formato, è adatto qualsiasi editor musicale o, se hai solo bisogno di convertire la traccia senza modificarla,

In molti elettrodomestici e dispositivi di automazione industriale di anni relativamente recenti sono installati contatori meccanici. Si tratta di prodotti sui nastri trasportatori, bobine di filo nelle macchine avvolgitrici, ecc. In caso di guasto non è facile trovare un contatore simile ed è impossibile ripararlo per mancanza di pezzi di ricambio. L'autore propone di sostituire il contatore meccanico con uno elettronico. Un contatore elettronico sviluppato per sostituire uno meccanico risulta essere troppo complicato se costruito su microcircuiti a basso e medio grado di integrazione (ad esempio le serie K176, K561). soprattutto se è necessario un conto inverso. E per salvare il risultato quando l'alimentazione è spenta, è necessario fornire batteria di backup nutrizione.

Ma puoi costruire un contatore su un solo chip: un microcontrollore programmabile universale, che ne ha una varietà periferiche e in grado di risolvere una gamma molto ampia di problemi. Molti microcontrollori hanno un'area di memoria speciale: EEPROM. I dati scritti su di esso (anche durante l'esecuzione del programma), come il risultato del conteggio corrente, vengono conservati anche dopo lo spegnimento.

Il misuratore proposto utilizza un microcontrollore Attiny2313 della famiglia Almel AVR. Il dispositivo attua un conteggio inverso, l'output del risultato con la cancellazione di n

hive su un indicatore LED a quattro cifre, memorizzando il risultato in EEPROM quando l'alimentazione è spenta. Il comparatore analogico integrato nel microcontrollore viene utilizzato per il rilevamento tempestivo di una diminuzione della tensione di alimentazione. Il contatore ricorda il risultato del conteggio allo spegnimento, ripristinandolo alla riaccensione, e, analogamente ad un contatore meccanico, è dotato di pulsante di reset.

Lo schema del contatore è mostrato in figura. Sei linee della porta B (РВ2-РВ7) e cinque linee della porta D (PDO, PD1, PD4-PD6) vengono utilizzate per organizzare l'indicazione dinamica del risultato del conteggio sull'indicatore LED HL1. I carichi del collettore dei fototransistor VT1 e VT2 sono resistori integrati nel microcontrollore e inclusi nel software, che collegano le uscite corrispondenti del microcontrollore al suo circuito di alimentazione.

Un aumento del risultato del conteggio N di uno si verifica al momento dell'interruzione della connessione ottica tra il diodo emettitore VD1 e il fototransistor VT1, che crea una differenza di livello crescente all'ingresso INT0 del microcontrollore. In questo caso il livello all'ingresso INT1 deve essere basso, cioè il fototransistor VT2 deve essere illuminato dal diodo emittente VD2. Al momento del fronte di salita sull'ingresso INT1, con un livello basso sull'ingresso INT0, il risultato diminuirà di uno. Altre combinazioni di livelli e le loro differenze sugli ingressi INT0 e INT1 non modificano il risultato del conteggio.

Quando viene raggiunto il valore massimo di 9999, il conteggio continua da zero. Sottraendo uno dal valore zero si ottiene il risultato 9999. Se il conto alla rovescia non è necessario, è possibile escludere il diodo emettitore VD2 e il fototransistor VT2 dal contatore e collegare l'ingresso INT1 del microcontrollore a un filo comune. Il conto non potrà che aumentare.

Come già accennato, il comparatore analogico integrato nel microcontrollore funge da rilevatore di caduta di tensione. Confronta la tensione non stabilizzata all'uscita del raddrizzatore (ponte a diodi VD3) con la tensione stabilizzata all'uscita del regolatore integrato DA1. Il programma controlla ciclicamente lo stato del comparatore. Dopo che il contatore è stato disconnesso dalla rete, la tensione sul condensatore del filtro del raddrizzatore C1 diminuisce e la tensione stabilizzata rimane invariata per qualche tempo. I resistori R2-R4 sono selezionati come segue. che lo stato del comparatore in questa situazione è invertito. Dopo aver scoperto questo, il programma ha il tempo di scrivere il risultato del conteggio corrente nella EEPROM del microcontrollore anche prima che smetta di funzionare a causa di uno spegnimento. Alla successiva accensione il programma leggerà il numero scritto nella EEPROM e lo visualizzerà sull'indicatore. Il conteggio continuerà da questo valore.

A causa del numero limitato di pin del microcontrollore, per collegare il pulsante SB1, che ripristina il contatore, viene utilizzato il pin 13, che funge da ingresso analogico invertente del comparatore (AIM) e allo stesso tempo - il "digitale" ingresso PB1. Il partitore di tensione (resistori R4, R5) qui imposta il livello percepito dal microcontrollore come logico alto. Quando si preme il pulsante SB1, diventerà basso. Ciò non influirà sullo stato del comparatore, poiché la tensione sull'ingresso AIN0 è ancora superiore a quella su AIN1.

Quando si preme il pulsante SB1, il programma visualizza un segno meno in tutte le cifre dell'indicatore e dopo averlo rilasciato inizia a contare da zero. Se il contatore viene spento mentre si preme il pulsante, il risultato corrente non verrà scritto nella EEPROM e il valore ivi memorizzato rimarrà lo stesso.

Il programma è progettato in modo tale che sia facile adattarsi a un contatore con altri indicatori (ad esempio con catodi comuni), con un cablaggio diverso scheda a circuito stampato ecc. Durante l'utilizzo sarà necessaria anche una leggera correzione del programma risuonatore al quarzo ad una frequenza che differisce di più di 1 MHz da quella specificata.

Con una tensione sorgente di 15 V, la tensione viene misurata sui pin 12 e 13 del pannello del microcontrollore rispetto al filo comune (pin 10). Il primo deve essere compreso tra 4 e 4,5 V e il secondo deve essere maggiore di 3,5 V, ma inferiore al primo. Quindi la tensione della sorgente viene gradualmente ridotta. Quando scende a 9...10 V, la differenza nei valori di tensione sui pin 12 e 13 dovrebbe diventare zero, per poi cambiare segno.

Ora puoi installare un microcontrollore programmato nel pannello, collegare il trasformatore e applicargli la tensione di rete. Dopo 1,5...2 s è necessario premere il pulsante SB1. L'indicatore del contatore mostrerà il numero 0. Se sull'indicatore non viene visualizzato nulla, controllare nuovamente i valori di tensione sugli ingressi AIN0.AIN1 del microcontrollore. Il primo deve essere maggiore del secondo.

Una volta avviato con successo il contatore, resta da verificare la correttezza del conteggio schermando alternativamente i fototransistor con una piastra opaca ai raggi IR. Per maggior contrastoè opportuno chiudere gli indicatori con un filtro luminoso in vetro organico rosso.

Oggi cerchiamo di sfruttare di più microcontrollore semplice ATtiny2313 e collegarsi ad esso simbolicamente display LCD A contenente due righe di 16 caratteri.

Il display che collegheremo in modo standard 4 bit.

Innanzitutto, iniziamo, ovviamente, con il microcontrollore, poiché abbiamo già molta familiarità con il display delle lezioni precedenti.

Apri la scheda tecnica del controller ATtiny2313 e vedere la sua piedinatura

Lo vediamo dato controllore esiste in due tipi di casi, ma poiché mi è capitato tra le mani in un caso DIP, considereremo questa particolare versione del caso e, in linea di principio, non differiscono molto, tranne che nell'apparenza, poiché il numero delle gambe è il lo stesso - secondo 20.

Poiché ci sono 20 gambe rispetto alle 28 gambe del controller ATMega8, su cui abbiamo lavorato per tutto il tempo e continueremo a farlo, di conseguenza ci saranno anche meno opportunità.

In linea di principio, tutto ciò che aveva l'ATmega8 era qui, l'unica cosa è che ci sono meno porte. Ma poiché il compito che ci attende è provare a collegarlo tramite il bus SPI a un altro controller, questo non ci deprime più di tanto.

Ci sono alcune altre differenze, ma sono minori e le conosceremo secondo necessità.

Montiamo qui uno schema del genere (clicca sull'immagine per ingrandirla)

Il display è collegato ai pin della porta D. PD1 e PD2 sono collegati agli ingressi di controllo e il resto ai pin del modulo display D4-D7.

Creeremo un progetto con il nome TINY2313_LCD, trasferiremo tutto ad esso tranne il modulo principale dal progetto per collegare il display ad Atmega8.

Naturalmente alcune cose dovranno essere rifatte. Per fare ciò, devi studiare attentamente quale gamba è collegata a cosa. Il bus E del display è collegato a PD2 e il bus RS è collegato a PD1, quindi apportiamo modifiche al file lcd.h

#definiree1PORT|=0b0000 01 00 // imposta la riga E su 1

#definiree0PORT&=0b1111 10 11 // imposta la riga E su 0

#definirers1PORT|=0b00000 01 0 // imposta la linea RS su 1 (dati)

#definirers0PORT&=0b11111 10 1 // imposta la linea RS su 0 (comando)

Come possiamo vedere dalla selezione in grassetto, non si sono verificati cambiamenti così drastici.

Ora gli input di informazioni. Qui usiamo le gambe PD3-PD6, cioè sono spostate di 1 punto rispetto alla connessione ad Atmega8, quindi sistemeremo anche qualcosa nel file lcd.c in funzione inviamezzobyte

PORT&=0b 1 0000 111; //cancelliamo le informazioni sugli ingressi DB4-DB7, il resto non lo tocchiamo

Ma non è tutto. Prima spostavamo i dati trasmessi di 4 e ora, a causa delle modifiche di cui sopra, dovremo spostarli solo di 3. Pertanto, nella stessa funzione, correggeremo anche la primissima riga

C<<=3 ;

Questi sono tutti i cambiamenti. D'accordo, non sono così fantastici! Ciò è ottenuto dal fatto che cerchiamo sempre di scrivere codice universale e utilizzare esattamente le sostituzioni macro. Se non avessimo dedicato del tempo a questo, dovremmo correggere il codice in quasi tutte le funzioni della nostra libreria.

Nel modulo principale non tocchiamo l'inizializzazione della porta D, lasciamo che il tutto entri nello stato di uscita, come nella lezione 12.

Proviamo ad assemblare il progetto e vediamo prima il risultato in proteus, visto che ho realizzato anche un progetto per quello, che sarà anche nell'archivio allegato con il progetto per Atmel Studio

Per noi funziona tutto alla grande! Ecco come puoi, risulta rifare rapidamente il progetto per un controller sotto un altro.

Proteus è molto buono, ma le parti reali sono sempre più piacevoli da guardare. L'intero circuito è stato assemblato su breadboard, poiché non ho realizzato e non ho assemblato una scheda di debug per questo controller. Collegheremo il programmatore tramite un connettore standard come questo

Ecco l'intero diagramma

Qui è tutto standard. Resistenza pull-up per RESET, ecc.

Ora, prima di eseguire il flashing del controller in avrdude, dobbiamo selezionare il controller e leggere la sua memoria flash

Andare quindi alle schede FUSIBILI e impostare correttamente i fusibili. Poiché non disponiamo di un risonatore al quarzo, impostiamo i fusibili in questo modo




Superiore