simon
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedenteProssima revisioneEntrambe le parti successive la revisione | ||
simon [2021/01/17 18:33] – [Risorse] admin | simon [2021/01/31 16:05] – [Software] admin | ||
---|---|---|---|
Linea 300: | Linea 300: | ||
SCOPO DEL PROGRAMMA | SCOPO DEL PROGRAMMA | ||
Il codice implementa il classico gioco Simon con 4 LED, 4 pulsanti | Il codice implementa il classico gioco Simon con 4 LED, 4 pulsanti | ||
- | e una sequenza di luci e suoni di memorizzar | + | e una sequenza di luci e suoni da memorizzare |
- | | + | |
- | il gioco e si allunga ogni volta che il giocatore la riproduce | + | il gioco e si allunga ogni volta che il giocatore la riproduce. |
- | | + | |
- | | + | |
- | score tenere premuto il pulsante del LED rosso durante lo start) | + | score tenere premuto il pulsante del LED rosso durante lo start). |
- | | + | |
- | avvio per il random generator | + | avvio per il random generator. |
- | | + | |
PREREQUISITI | PREREQUISITI | ||
- | generalità sui microcontrollori e programmazione in C, saper leggere | + | |
- | un datasheet lungo e complesso, bitwise operation e bit masking per | + | |
- | | + | - bitwise operation e bit masking per la gestione dei registri |
CONFIGURAZIONE | CONFIGURAZIONE | ||
- | Il MCU va configurato per andare a 1.2MHz | + | Il MCU va configurato per andare a 1.2MHz o l' |
- | scegliere una delle due frequenze e il valore del prescaler) | + | |
- | | + | |
REGISTRI PIU' IMPORTANTI UTILIZZATI | REGISTRI PIU' IMPORTANTI UTILIZZATI | ||
I numeri di pagina nei commenti fanno riferimento al datasheet | I numeri di pagina nei commenti fanno riferimento al datasheet | ||
dell' | dell' | ||
- | c'è il link alle pagine che descrivono i registri e sono indicati | + | c'è il link alle pagine che descrivono i registri e i loro valori di |
- | | + | default: |
- | DDRB = 0b00000000 -> tutti ingressi | + | DDRB = 0b00000000 -> tutti ingressi |
- | PORTB = | + | PORTB |
ADCSRA = 0b00000000 -> ADC spento | ADCSRA = 0b00000000 -> ADC spento | ||
- | ADMUX = | + | ADMUX |
- | INGRESSI E USCITE | + | |
DDRB imposta come uscite i bit a 1 (pagina 50). I pin sono sempre | DDRB imposta come uscite i bit a 1 (pagina 50). I pin sono sempre | ||
- | usati come ingressi tranne quando viene chiamata play() | + | usati come ingressi tranne quando viene chiamata play(). |
- | Il pin 5 (PB5) viene usato pulsante | + | Il pin 5 (PB5) viene usato come pulsante start (RESET attivo basso) |
e subito dopo come ingresso analogico (ADC0) scollegato per generare | e subito dopo come ingresso analogico (ADC0) scollegato per generare | ||
- | il seed del random generator | + | il seed del random generator. |
Il pin 6 (PB1/OC0B) è usato per pilotare il buzzer con un' | Il pin 6 (PB1/OC0B) è usato per pilotare il buzzer con un' | ||
- | quadra generata col timer/ | + | quadra generata col timer/ |
Per la gestione del timer/ | Per la gestione del timer/ | ||
Linea 345: | Linea 344: | ||
frequenza, e quello in corrispondenza del quale c'è la commutazione | frequenza, e quello in corrispondenza del quale c'è la commutazione | ||
tra livello alto e basso. Il waveform generator usa il risultato | tra livello alto e basso. Il waveform generator usa il risultato | ||
- | della comparazione per produrre un segnale PWM nel pin OC0B del buzzer | + | della comparazione per produrre un segnale PWM nel pin OC0B (buzzer). |
- | Il timer/clock si ferma se non si seleziona una sorgente di clock; | + | Il timer/clock si ferma se non si seleziona una sorgente di clock. |
- | | + | |
- normal: conta in su fino a 0xFF poi genera un interrupt e ricomincia | - normal: conta in su fino a 0xFF poi genera un interrupt e ricomincia | ||
- CTC: conta fino a OCR0A | - CTC: conta fino a OCR0A | ||
- fast PWM: va basso sul match con OCR0A e alto su 0xFF (fig. 11-6) | - fast PWM: va basso sul match con OCR0A e alto su 0xFF (fig. 11-6) | ||
- phase correct PWM: conta in su e in giù | - phase correct PWM: conta in su e in giù | ||
- | Nel programma si usa la modalità phase correct PWM per il buzzer | + | Nel programma si usa la modalità phase correct PWM per il buzzer. |
*/ | */ | ||
Linea 361: | Linea 360: | ||
// sleep mode | // sleep mode | ||
// Al termine di ogni partita, se scade il watchdog timer il MCU va in | // Al termine di ogni partita, se scade il watchdog timer il MCU va in | ||
- | // POWER-DOWN per ridurre il consumo; si risveglia col un reset | + | // POWER-DOWN per ridurre il consumo; si risveglia col un reset. |
#include < | #include < | ||
Linea 402: | Linea 401: | ||
// variabili per pseudo-random generator | // variabili per pseudo-random generator | ||
- | uint16_t seed; // generato con l'ADC su un pin scollegato (e mischiato) | + | uint16_t seed; // generato con l'ADC su un pin scollegato (poi mischiato) |
uint16_t ctx; // valori successivi generati a partire dal seed | uint16_t ctx; // valori successivi generati a partire dal seed | ||
// variabili volatile modificate dalla ISR del watchdog | // variabili volatile modificate dalla ISR del watchdog | ||
volatile uint8_t nrot = 8; // quante volte si mischia il seed nella ISR | volatile uint8_t nrot = 8; // quante volte si mischia il seed nella ISR | ||
- | // usando il valore del timer | ||
volatile uint16_t time; // conteggio incrementato dall' | volatile uint16_t time; // conteggio incrementato dall' | ||
// usato per il debouncing dei pulsanti e per | // usato per il debouncing dei pulsanti e per |
simon.txt · Ultima modifica: 2023/10/27 18:02 da admin