Ecco a voi un nuovo tutorial didattico su un piccolo circuito utilizzando l’integrato AtMega328 in standalone.
Lista componenti:
- 1 batteria da 9 Volt
- 1 Regolatore di carica 7805
- 1 condensatore ceramico da 0,33 uF (oppure elettrolito da 100 uF)
- 1 condensatore ceramico da 0,1 uF (oppure elettrolito da 10 uF)
- 2 condensatori ceramici da 22 pF
- 3 resistenze da 10 Kohm (marrone, nero, arancione)
- 1 quarzo da 16 MHz
- 2 switch
- 6 led
- 6 resistenze da 220 ohm (rosso, rosso, marrone)
Ecco lo schema:
PCB:
Se non sai come fare un circuito stampato leggi il mio tutorial clicca qui!
Ecco il file in pdf del circuito stampato: Circuito Stampato
Sketch da caricare sull’atmega328:
Se non sai come caricare uno sketch su un atmega328 in standalone clicca qui!
// Gioco di luci con atmega328 www.giuseppecaccavale.it // Written by Giuseppe Caccavale const int puls1 = 10; const int puls2 = 12; int pulsante1 = 0; int pulsante2 = 0; const int led1 = A5; const int led2 = A3; const int led3 = A1; const int led4 = 13; const int led5 = 11; const int led6 = 9; int tempo = 300; void setup(){ pinMode(puls1, INPUT); pinMode(puls2, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); } void loop(){ pulsante1 = digitalRead(puls1); pulsante2 = digitalRead(puls2); if((pulsante1 == LOW) && (pulsante2 == LOW)){ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); } if((pulsante1 == LOW) && (pulsante2 == HIGH)){ digitalWrite(led6, LOW); digitalWrite(led1, HIGH); delay(tempo); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); delay(tempo); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(tempo); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(tempo); digitalWrite(led4, LOW); digitalWrite(led5, HIGH); delay(tempo); digitalWrite(led5, LOW); digitalWrite(led6, HIGH); delay(tempo); } if((pulsante1 == HIGH) && (pulsante2 == LOW)){ digitalWrite(led1, LOW); digitalWrite(led6, HIGH); delay(tempo); digitalWrite(led6, LOW); digitalWrite(led5, HIGH); delay(tempo); digitalWrite(led5, LOW); digitalWrite(led4, HIGH); delay(tempo); digitalWrite(led4, LOW); digitalWrite(led3, HIGH); delay(tempo); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(tempo); digitalWrite(led2, LOW); digitalWrite(led1, HIGH); delay(tempo); } if((pulsante1 == HIGH) && (pulsante2 == HIGH)){ digitalWrite(led2, LOW); digitalWrite(led5, LOW); digitalWrite(led1, HIGH); digitalWrite(led6, HIGH); delay(tempo); digitalWrite(led1, LOW); digitalWrite(led6, LOW); digitalWrite(led2, HIGH); digitalWrite(led5, HIGH); delay(tempo); digitalWrite(led2, LOW); digitalWrite(led5, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(tempo); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led2, HIGH); digitalWrite(led5, HIGH); delay(tempo); } }
Funzionamento:
Ora illustro brevemente il funzionamento del circuito (molto banale) :
I due switch corrispondono a due bit binari (0,1). Con due bit è possibile fare 4 diverse combinazioni come:
n° Comb. | switch 1 | switch 2 |
1 | 0 | 0 |
2 | 0 | 1 |
3 | 1 | 0 |
4 | 1 | 1 |
e per ogni combinazione faccio corrispondere una sequenza di luci.
- Combinazione 1 i led rimangono spenti.
- Combinazione 2 i led si accendono da sinistra verso destra.
- Combinazione 3 i led si accendono da destra verso sinistra.
- Combinazione 4 i led si accendono dall’esterno verso l’interno.
Ecco un video dimostrativo: