..:: Digital Piano ::..

Iulian Corcoja, 331CA

Introducere

In proiectul dat am dezvoltat si am creat un pian digital simplu cu 3 functionalitati de baza:

  1. Interpretarea melodiilor folosind tastatura ce reprezinta urmatoarele silabe: Do, Re, Mi, Fa, Sol, La, Si, Do.
  2. Inregistrarea melodiei.
  3. Redarea ultimei melodii inregistrate.

Scopul proiectului a fost intelegerea mai aprofundata a functionarii micro-controller-ului ATmega324pa, realizarea placutei, precum crearea PCB-ului si lipirea elementelor, metodele de programare a unui micro-controller. Am ales sa fac anume un pian din motivul ca mi s-a parut ceva mai interesant de creat fata de celelalte proiecte cu o complexitate medie. Scopul pianului este unul pur distractiv =)

Descriere generală

Schema pentru structura pianului am creat-o si simulat-o in Eagle. Toata structura este impartita in 3 circuite de baza:

  • Butoanele pianului.
  • Panoul de control.
  • Difuzorul.

Diagrama schemei

Toate trei circuite interactioneaza direct cu micro-controller-ul, memoria si logica programului fiind asigurata de insusi mirco-controller. Pianul digital are trei stari posibile de functionare, acestea fiind:

  • Starea NORMAL.
    • Este starea initiala la pornirea pianului in care se poate interpreta orice melodie dorita.
  • Starea RECORDING.
    • Similara cu starea NORMAL doar ca fiecare silaba interpretata este inscrisa in memoria interna.
  • Starea PLAYBACK.
    • In starea data se efectueaza redarea ultimei melodii inregistrate (daca aceasta exista).

Butoanele pianului nu functionaza in starea PLAYBACK

Fiecare circuit are urmatoarele elemente cheie:

  1. Butoanele pianului consta din opt butoane de tip Push-Button fiecare reprezentand o silaba anumita.
  2. Panoul de control este format din doua butoane si 2 LED-uri, unul verde si unui rosu.
    • In starea NORMAL LED-ul verde lumineaza incontinuu.
    • In starea RECORDING LED-ul verde nu mai lumineaza, insa LED-ul rosu face blink la fiecare 0.5s.
    • In starea PLAYBACK LED-ul verde face blink la fiecare 0.5s. Led-ul rosu nu lumineaza deloc.
    • Pentru a trece in starea RECORDING sau PLAYBACK se apasa butonul drept, respectiv cel stang din panoul de control.
    • Pentru a se trece din starea RECORDING sau PLAYBACK inapoi la starea NORMAL se apasa inca odata butonul drept/stang.
  3. Difuzorul este cel mai simplu circuit care consta din un condesator si difuzorul propriu zis.

Hardware Design

Design-ul hardware al pianului consta din cablajul imprimat la prima etapa si cablajul personal imprimat cu cele trei circuite. Fiecare circuit este conectat la un anumit port pe cablajul de baza.

Butoanele pianului

Componentele folosite

  • 8 butoane de tip Push-Button
  • 8 rezistente de 100Ω

Toate cele 8 butoane sunt legate la portul A al micro-controller-ului si la masa prin rezistenele de 100Ω.

Panoul de control

Componentele folosite

  • 2 butoane de tip Push-Button
  • 1 LED verde
  • 1 LED rosu
  • 2 rezistente de 100Ω
  • 2 rezistente de 1kΩ

Butoanele si cele 2 LED-uri sunt legate la portul C al micro-controller-ului si la masa prin rezistenele de 100Ω, respectiv 1kΩ. LED-urile sunt conectate la pinii PC6 si PC7, butoanele la pinii PC4 si PC5.

Difuzorul

Componentele folosite

  • 1 difuzor de 8Ω cu puterea de 0.5 Watt
  • 1 condensator de 100μF

Difuzorul este conectat la portul D, pinul PD5 unde se creaza semnalul de tip PWM al timer-ului 1 si la masa prin condesatorul de 100μF.

Schema finala

Software Design

Fisierele sursa

  • main.c - Initializarea programului si tratarea evenimentelor la fiecare perioada setata.
  • timers.c - Initializarea timer-elor folosite pentru evenimente si PWM.
  • utils.c - Memorarea si redarea unei melodii.
  • timers.h - Defineste functiile folostie pentru timer.
  • utils.h - Defineste structurile si datele necesare pentru pian.

Cum functioneaza?

Pentru tratarea evenimentelor, acestea fiind apasarea unui buton de la pian sau panoul de control, inregistrarea notelor sau redarea lor (dupa ce au fost inregistrate) se asigura prin intermediul unui timer. Am utilizat timer-ul 0 format din 8 biti, care este setat cu prescaler-ul si counter-ul pentru a trimite intreruperi la fiecare 10ms.

In interiorul functiei ISR(TIMER0_comp_vect) se calculeaza niste cicli care la randul lor apeleaza functii la un interval anumit. De exemplu pentru logica pianului functia este apelata la fiecare ciclu, adica fiecare 10ms. Pentru blink-urile LED-urilor de pe panoul de control, functia este apelata la ficare al 50-lea ciclu, adica fiecare 500ms.

Pentru difuzor am folosit timer1 setat in modul PWM. Fiecare nota reprezinta o frecventa diferita a PWM-ului.

La apasarea a 2-a sau mai multe butoane de la pian, se face media frecventelor

Inregistrarea si redarea melodiei

O melodie inregistrata reprezinta practic un array din 512 structuri, asta fiind lungimea maxima a unui melodii. Fiecare din aceste 512 elemente inseamna defapt o nota, fie muta, fie una normala. In structura sunt definite doua campuri:

  • Durata unei note
  • Frecventa notei curente (zero pentru o nota muta)

La inregistrarea melodiei acest array este umplut cu date. Daca este atinsa lungimea maxima (512 note), pianul trece in modul NORMAL. La redare se citeste din array si se redau notele inscrise.

Rezultate Obţinute

Rezultatul final

Cablajul

Starile pianului

Concluzii

A fost un proiect destul de interesant si captivant :-) Am invatat multe lucruri noi pe parcursul dezvoltarii pianului. Partea hardware a fost relativ usoara ceea ce n-as zice de partea software.

Proiectul este complet si 100% functional! 8-)

Download

Bibliografie/Resurse

pm/prj2013/amocanu/prj2013/adrian-mocanu/digital-piano.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0