Skip to content

Meshmi2/timer9seconds_pic16f628a

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Timer 9 Secondi - PIC16F628A

PIC16F628A MPLAB X IDE XC8 Compiler License

Progetto MPLAB X IDE per un timer countdown breve (9 → 0 secondi) utilizzando il microcontrollore PIC16F628A con un singolo display a 7 segmenti e buzzer di allarme.

🚀 Caratteristiche

  • Timer countdown: Da 9 secondi (0:09) a 0 secondi (0:00) -- 📺 Display singolo (virtual multiplex): 1 display a 7 segmenti, visualizzazione MM:SS tramite alternanza rapida
  • 🔔 Allarme sonoro: Buzzer ciclico al termine del countdown
  • ⚙️ Avvio automatico: il timer parte all'accensione e si ripete in loop (nessun pulsante richiesto)
  • 🔋 Basso consumo: ~50mA a 5V
  • 📱 Compatto: Circuito minimale con pochi componenti

📋 Specifiche Tecniche

Hardware Richiesto

  • Microcontrollore: PIC16F628A (18-pin DIP)
  • Display: 1x Display 7 segmenti Common Cathode
  • Buzzer: Buzzer passivo o attivo 5V
  • Resistenze: 7x 330-470Ω (una per segmento) + 1 per DP opzionale
  • Pulsante: non richiesto (timer auto-start e loop)
  • Alimentazione: 5V DC

Software

  • IDE: MPLAB X IDE v6.x o superiore
  • Compilatore: XC8 v2.x o superiore
  • Target: PIC16F628A
  • Linguaggio: C (XC8)

🔧 Installazione e Setup

1. Prerequisiti

# Installare MPLAB X IDE dal sito Microchip
# Installare XC8 Compiler
# Connettere programmatore (PICkit 3/4, ICD3, ecc.)

2. Apertura Progetto

# Aprire MPLAB X IDE
# File > Open Project
# Selezionare la cartella Timer60s.X
# Impostare come Main Project

3. Compilazione

# Fare clic su "Build Project" (martello)
# OPPURE
# Utilizzare il comando make dal terminale
make clean
make all

4. Programmazione

# Collegare il programmatore al PIC16F628A
# Fare clic su "Make and Program Device"
# Verificare la programmazione completata con successo

🔌 Schema di Collegamento

Pinout PIC16F628A (principali segnali)

        ┌─────────────────┐
    RA2 ─┤1              18├─ RA1
    RA3 ─┤2              17├─ RA0
    RA4 ─┤3              16├─ OSC1
  MCLR ─┤4              15├─ OSC2
   VSS ─┤5              14├─ VDD  (+5V)
   RB0 ─┤6              13├─ RB7  (Display 1 - Seg G)
   RB1 ─┤7              12├─ RB6  (Display 1 - Seg F)
   RB2 ─┤8              11├─ RB5  (Display 1 - Seg E)
   RB3 ─┤9              10├─ RB4  (Display 1 - Seg D)
        └─────────────────┘

Connessioni Principali (mappatura attuale)

Componente Pin PIC Funzione
Display 7-seg RB1-RB7 Segmenti a..g (via resistenze)
Decimal Point (DP) RA7 Punto decimale (usato per evidenziare la cifra alta)
Buzzer RA4 Uscita per buzzer (use transistor for higher current)
Pulsante (none) Non utilizzato - il timer parte automaticamente
Alimentazione VDD/VSS +5V/GND

📖 Documentazione completa: Vedere docs/circuit_diagram.md per lo schema dettagliato

🎮 Utilizzo

Funzionamento Base

  1. Avvio: All'accensione, il display mostra "0:09" (9 secondi)
  2. Start Timer: Avvio automatico all'accensione (nessun pulsante richiesto)
  3. Countdown: Il display mostra il tempo rimanente in formato MM:SS
  4. Allarme: Al raggiungimento di "00:00", il buzzer suona ciclicamente
  5. Reset: Al termine del buzzer il timer viene resettato automaticamente a 9 secondi

Pattern Display

  • Formato: M:SS (Minuto:Secondi)
  • Esempi:
    • 0:09 = 9 secondi
    • 0:05 = 5 secondi
    • 0:00 = Timer scaduto

Pattern Buzzer

  • Durata Beep: 200ms ON, 200ms OFF
  • Ripetizione: Ciclica fino al reset
  • Volume: Dipende dal tipo di buzzer utilizzato

📁 Struttura Progetto

Timer60s.X/
├── src/
│   └── main.c              # Codice sorgente principale
├── include/                # File header (vuoto)
├── nbproject/              # File configurazione MPLAB X
│   ├── configurations.xml
│   ├── project.xml
│   ├── Makefile-*.mk
│   └── ...
├── docs/                   # Documentazione
│   ├── circuit_diagram.md  # Schema circuito dettagliato
│   └── pin_configuration.md # Configurazione pin
├── Makefile               # Makefile principale
└── README.md              # Questo file

🧠 Algoritmo e Funzionamento

Timer Interrupt (1 secondo)

void __interrupt() isr(void) {
    if (T0IF) {  // Timer0 overflow
        T0IF = 0;
        // TMR0 reloaded with 131, prescaler 1:64 -> overflow ogni 8ms
        // Un contatore software accumula 125 overflow -> 1s esatto
        // Dopo 1s decrementa 'seconds' e alla scadenza attiva 'buzzer_state'.
    }
}

Display Multiplexing

Il codice usa un virtual multiplex su un singolo display alternando la visualizzazione rapidamente:

  • ~5ms: Mostra decine dei secondi con punto decimale
  • ~5ms: Mostra unità dei secondi senza punto decimale

Configurazione Fuses

#pragma config FOSC = INTOSCIO   // Oscillatore interno 4MHz
#pragma config WDTE = OFF        // Watchdog disabilitato
#pragma config PWRTE = ON        // Power-up timer abilitato
#pragma config MCLRE = OFF       // RA5 come I/O digitale
#pragma config BOREN = ON        // Brown-out reset abilitato
#pragma config LVP = OFF         // Low voltage programming OFF
#pragma config CPD = OFF         // Data protection OFF
#pragma config CP = OFF          // Code protection OFF

🛠️ Personalizzazioni

Modificare Durata Timer

// Nel file main.c, modificare la variabile iniziale:
volatile uint8_t seconds = 120;  // Timer da 2 minuti (120 secondi)

Cambiare Pattern Buzzer

// Nella funzione handle_buzzer(), modificare i tempi:
if (buzzer_counter < 5) {        // 100ms ON (era 200ms)
    BUZZER_PIN = 1;
} else if (buzzer_counter < 10) { // 100ms OFF (era 200ms)
    BUZZER_PIN = 0;
}

Aggiungere Display Separati

Per utilizzare 2 display fisici separati invece del multiplexing:

  1. Utilizzare pin aggiuntivi per il controllo enable dei display
  2. Modificare la funzione display_time() per gestire display simultanei
  3. Aggiungere transistor PNP per il controllo common cathode

🔍 Troubleshooting

Problemi Comuni

Problema Possibile Causa Soluzione
Display non si accende Polarità errata o resistenze mancanti Verificare collegamenti e resistenze
Timer non parte Controllare alimentazione / programmazione del PIC Verificare VDD/VSS e programmatore
Buzzer non suona Pin RA4 non collegato Verificare collegamento buzzer
Display lampeggia Frequenza interrupt errata Verificare configurazione Timer0
Compilazione fallisce XC8 non installato Installare compiler XC8

Debug

Verificare Collegamenti

// Aggiungere nel main loop per test LED:
PORTA = 0xFF;  // Tutti i segmenti accesi
__delay_ms(1000);
PORTA = 0x00;  // Tutti i segmenti spenti
__delay_ms(1000);

Test Buzzer

// Nel main(), prima del while loop:
BUZZER_PIN = 1;
__delay_ms(500);
BUZZER_PIN = 0;
__delay_ms(500);

Monitor Variabili

Utilizzare il debugger di MPLAB X per monitorare:

  • seconds (valore attuale del timer)
  • timer_active (stato del timer)
  • buzzer_state (stato del buzzer)

📈 Possibili Miglioramenti

Hardware

  • Aggiungere display LCD 16x2 per visualizzazione migliore
  • Implementare controllo volume buzzer con potenziometro
  • Aggiungere LED di stato per indicazioni visive
  • Utilizzare display a 4 cifre per formato HH:MM

Software

  • Implementare timer multipli (1min, 5min, 10min, custom)
  • Aggiungere modalità stopwatch (count-up)
  • Salvare settings in EEPROM
  • Implementare interfaccia seriale per controllo PC

Funzionalità

  • Controllo via telecomando IR
  • Sincronizzazione con RTC esterno
  • Modalità sleep per risparmio energetico
  • Connettività wireless (ESP8266/ESP32)

📜 Licenza

Questo progetto è rilasciato sotto licenza MIT. Vedere il file LICENSE per i dettagli.

MIT License

Copyright (c) 2024 Timer60s Project

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

🤝 Contributi

I contributi sono benvenuti! Per contribuire:

  1. Fork del repository
  2. Crea un branch per la tua feature (git checkout -b feature/AmazingFeature)
  3. Commit delle tue modifiche (git commit -m 'Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Apri una Pull Request

📞 Supporto

Per supporto, segnalazione bug o richieste di feature:

🙏 Ringraziamenti

  • Microchip Technology per PIC16F628A e MPLAB X IDE
  • Community PIC per esempi e documentazione
  • Contributors per miglioramenti e bug fixes

⭐ Se questo progetto ti è stato utile, lascia una stella su GitHub!

🔝 Torna all'inizio

About

pic16f628a-complete-mplab-project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published