Strumenti Utente

Strumenti Sito


simon

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
Prossima revisioneEntrambe le parti successive la revisione
simon [2021/01/11 21:31] – [Software] adminsimon [2021/01/31 16:05] – [Software] admin
Linea 250: Linea 250:
  
 Prerequisiti: Prerequisiti:
-  * sapere come funzionano gli [[wpi>Operazione_bit_a_bit|operatori bitwise]], il [[wp>Mask_(computing)|bit masking]], lo shift a destra (>>) e sinistra (<<)+  * sapere come funzionano gli [[wpi>Operazione_bit_a_bit|operatori bitwise]], il [[wp>Mask_(computing)|bit masking]], lo shift a destra (''%%>>%%'') e sinistra (''%%<<%%'')((vedi anche [[https://playground.arduino.cc/Code/BitMath/|questo tutorial]] dal sito di Arduino))
   * essere in grado di trovare le informazioni nel datasheet di un microcontrollore, in particolare la parte che riguarda i registri, il nome dei bit nei registri e la funzione svolta (in questo caso è utile il sommario a pagina 158 del datasheet dell'ATtiny13A)   * essere in grado di trovare le informazioni nel datasheet di un microcontrollore, in particolare la parte che riguarda i registri, il nome dei bit nei registri e la funzione svolta (in questo caso è utile il sommario a pagina 158 del datasheet dell'ATtiny13A)
   * saper programmare in C   * saper programmare in C
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 riprodurre +  e una sequenza di luci e suoni da memorizzare e riprodurre. 
-  la sequenza casuale è generata quando il pulsante start/reset avvia +  La sequenza casuale è generata quando il pulsante start/reset avvia 
-  il gioco e si allunga ogni volta che il giocatore la riproduce +  il gioco e si allunga ogni volta che il giocatore la riproduce. 
-  il gioco si interrompe quando si commette un errore +  Il gioco si interrompe quando si commette un errore. 
-  il punteggio massimo viene salvto su EEPROM (per cancellare l'high- +  Il punteggio massimo viene salvto su EEPROM (per cancellare l'high- 
-  score tenere premuto il pulsante del LED rosso durante lo start)  +  score tenere premuto il pulsante del LED rosso durante lo start) 
-  il watchdog timer viene usato per il debouncing, lo sleep mode e all' +  Il watchdog timer viene usato per il debouncing, lo sleep-mode e all' 
-  avvio per il random generator +  avvio per il random generator. 
-  il timer viene usato per generare il segnale PWM per il buzzer+  Il timer viene usato per generare il segnale PWM per il buzzer.
    
   PREREQUISITI   PREREQUISITI
-  generalità sui microcontrollori e programmazione in C, saper leggere +  generalità sui microcontrollori e programmazione in C 
-  un datasheet lungo e complessobitwise operation e bit masking per  +  - saper leggere un datasheet lungo e complesso 
-  la gestione dei registri+  - bitwise operation e bit masking per la gestione dei registri
    
   CONFIGURAZIONE   CONFIGURAZIONE
-  Il MCU va configurato per andare a 1.2MHz (usando i "fuses" per +  Il MCU va configurato per andare a 1.2MHz o l'esecuzione non sarà 
-  scegliere una delle due frequenze e il valore del prescaler) o +  corretta come tempi.
-  l'esecuzione non sarà corretta come tempi+
    
   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'ATtiny13A (rev. 8126F-AVR-05/12). Nella pagina "Register Summary"    dell'ATtiny13A (rev. 8126F-AVR-05/12). Nella pagina "Register Summary" 
-  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   
-  questi valori di default: +  default: 
-  DDRB   0b00000000 -> tutti ingressi +  DDRB   0b00000000 -> tutti ingressi 
-  PORTB  0b00000000 -> pull-up disabilitato (tri-state)+  PORTB  0b00000000 -> pull-up disabilitato (tri-state)
   ADCSRA = 0b00000000 -> ADC spento   ADCSRA = 0b00000000 -> ADC spento
-  ADMUX  0b00000000 -> ADC0 selezionato+  ADMUX  0b00000000 -> ADC0 selezionato
    
-  INGRESSI E USCITE+  GESTIONE 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 di start (RESET attivo basso)+  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 (una volta sola all'avvio)+  il seed del random generator.
   Il pin 6 (PB1/OC0B) è usato per pilotare il buzzer con un'onda    Il pin 6 (PB1/OC0B) è usato per pilotare il buzzer con un'onda 
-  quadra generata col timer/counter in modalità waveform generator+  quadra generata col timer/counter in modalità waveform generator.
    
   Per la gestione del timer/counter si usano i registri:   Per la gestione del timer/counter si usano i registri:
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. 
-  ha più modi di funzionamento che dipendono da WGM0[2:0] e COM0x[1:0]:+  Ha più modi di funzionamento che dipendono da WGM0[2:0] e COM0x[1:0]:
   - 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 <avr/sleep.h> #include <avr/sleep.h>
    
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 (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'ISR ogni 16ms volatile uint16_t time; // conteggio incrementato dall'ISR ogni 16ms
                         // usato per il debouncing dei pulsanti e per                         // usato per il debouncing dei pulsanti e per
Linea 800: Linea 798:
   * altro   * altro
     * [[https://hackaday.io/project/18952-simon-game-with-attiny13|progetto ispiratore]] su hackaday.io     * [[https://hackaday.io/project/18952-simon-game-with-attiny13|progetto ispiratore]] su hackaday.io
 +    * [[https://playground.arduino.cc/Code/BitMath|Bit Math Tutorial]] dal playground Arduino
     * [[https://www.instructables.com/id/ATTiny-Port-Manipulation/|port manipulation per ATtiny]]     * [[https://www.instructables.com/id/ATTiny-Port-Manipulation/|port manipulation per ATtiny]]
     * [[http://mightyohm.com/files/soldercomic/translations/FullSolderComic_IT.pdf|fumetto tutorial sulla saldatura]]     * [[http://mightyohm.com/files/soldercomic/translations/FullSolderComic_IT.pdf|fumetto tutorial sulla saldatura]]
simon.txt · Ultima modifica: 2023/10/27 18:02 da admin