This is an old revision of the document!
Proiectul constă în realizarea unui terminal de comunicații mobil și independent, cu o estetică retro, pe care rulează un sistem de operare dezvoltat de la zero.
Scopul lui: replicarea funcționalității de bază a unui telefon mobil clasic.
Ideea de la care am pornit: Mi-am dorit să recreez experiența telefoanelor fiabile de la începutul anilor 2000, explorând în același timp la nivel bare-metal, pe un microcontroller cu memorie foarte limitata.
Utilitate: demonstrează capacitatea de a construi o arhitectură software avansată (multitasking, gestiune PROGMEM) și de a integra senzori, protocoale și un management de putere eficient într-un singur sistem portabil. Pentru alții, ar putea fi un dispozitiv de comunicație de urgență / rezervă destul de interesant.
1. Schema bloc
2. Descrierea Modulelor Hardware
Microcontroller (ATmega328P): Unitatea centrală de procesare a sistemului — gestionează intrările de la tastatură, comunicația cu rețeaua mobilă, afișarea interfeței și generarea semnalelor audio.
Modul GSM (SIM800L): Asigură conectivitatea la rețeaua celulară pentru apeluri vocale și SMS-uri. Comunică cu microcontrolerul prin UART.
Display (Nokia 5110 PCD8544): Ecran LCD monocrom pentru afișarea meniurilor, mesajelor și stării sistemului. Controlat prin SPI pentru un refresh fluid.
Modul RTC (DS3231): Menține data și ora exactă independent de microcontroler, inclusiv în modul repaus. Comunică prin I²C.
Tastatură multiplexată analogic: Mai multe butoane conectate printr-un divizor de tensiune la un singur pin ADC. Butonul apăsat este identificat prin nivelul de tensiune măsurat.
Senzor de lumină ambiantă (LDR): Fotorezistență pe un pin ADC. Valoarea citită ajustează automat luminozitatea ecranului prin PWM.
Buzzer pasiv: Redă tonuri de apel și sunete de sistem. Controlat de Timer 2 (mod CTC/PWM) pentru frecvențe precise fără a solicita procesorul.
Modul de alimentare: Acumulator Li-Ion (3.7V) cu circuit de încărcare și protecție, urmat de un convertor Boost ce stabilizează tensiunea la 5V.
3. Descrierea Modulelor Software
Scheduler cooperativ: Planifică execuția task-urilor (audio, display, senzori) pe baza unui tick generat de Timer 1 la fiecare milisecundă, eliminând funcțiile blocante de tip delay().
Driver grafic (GUI): Translatează text și date de stare într-un frame buffer de pixeli. Fonturile compacte (4×6, 3×5) sunt stocate în Flash (PROGMEM) pentru a conserva RAM-ul.
Motor audio: Redă structuri muzicale (frecvențe și durate din MIDI) stocate în PROGMEM, cu suport pentru legato/staccato și control al frecvenței prin Timer 2.
Controller de evenimente (Input & Power Management): Procesează intrările de la LDR și tastatură, gestionează intrarea în repaus la inactivitate și trezirea prin întreruperi (PCINT).
Parser AT: Formatează comenzile pentru SIM800L și interpretează răspunsurile rețelei (ex: RING, +CMTI).
Componente și rolul lor ^ Componentă ^ Referință ^ Rol principal ^
| ATmega328P | U5 | Microcontroler central — execută codul, controlează toate perifericele |
| SIM800L | U1 | Modul GSM — apeluri, SMS, comunicație celulară |
| Nokia 5110 | LCD1 | Afișaj grafic 84×48px — interfața utilizator |
| Li-Ion 18650 | U6 | Sursă de energie principală 3.7V |
| TP4056 | — | Încărcator baterie Li-Ion (integrat în modulul Power Bank U7) |
| MT3608 | U7 | Step-up 5V (integrat în modulul Power Bank U7) |
| Buzzer pasiv | BF1 | Audio GSM (SPKP/SPKN) și tonuri generate de MCU (OC2B) |
| DS3231 | U2 | RTC — păstrează ora exactă cu compensare termică |
| Tranzistor NPN | Q1 | Driver backlight LCD — comutare PWM pe pinul BL |
| Fotorezistență LDR | RP1 | Senzor lumină ambientală — reglaj automat backlight |
| Butoane tactile | S1–S5 | Tastatura analogică citită pe un singur pin ADC |
| Condensator 1000µF | C1 | Decuplare alimentare SIM800L — absoarbe vârfurile de curent GSM |
| Condensatori 100nF | C2, C3 | Decuplare VCC și AREF pe ATmega |
| Rezistențe | R2–R14 | Divizoare tensiune, limitare curent, pull-down, pull-up |
| Cuarț 16MHz | Y1 | Referință de timp precisă pentru ATmega |
Pini ATmega328P ^ Pin fizic ^ Semnal ^ Periferic ^ Motivul alegerii ^
| PD0 (30) | GSM_RX | SIM800L TX | Pin hardware UART RX — nu poate fi schimbat |
| PD1 (31) | GSM_TX | SIM800L RX | Pin hardware UART TX — nu poate fi schimbat |
| PD2 (32) | WAKE_INT0 | Buton wake-up | Suportă întrerupere externă INT0 — trezire din sleep |
| PD3 (1) | OC2B | Buzzer pasiv | Ieșire PWM hardware Timer2 — generare frecvențe audio |
| PD5 (9) | OC0B | Backlight LCD | Ieșire PWM hardware Timer0 — control luminozitate |
| PD6 (10) | DC | Nokia 5110 | Linie Data/Command SPI |
| PD7 (11) | RST | Nokia 5110 | Reset display |
| PB2 (14) | CS/CE | Nokia 5110 | Chip Select SPI |
| PB3 (15) | MOSI | Nokia 5110 | Date SPI hardware — pin fix |
| PB5 (17) | SCK | Nokia 5110 | Clock SPI hardware — pin fix |
| PC4 (27) | I2C_SDA | DS3231 | Linie date I2C hardware — pin fix |
| PC5 (28) | I2C_SCL | DS3231 | Linie clock I2C hardware — pin fix |
| PC0 (23) | ADC0 | Tastatura S1–S5 | Canal ADC — citire tensiuni diferite per buton |
| PC1 (24) | ADC1 | LDR | Canal ADC — citire divizor fotorezistență |
| PC6 (29) | RESET# | Circuit reset | Pin dedicat reset hardware |
| PB6 (7) | XTAL1 | Cuarț 16MHz | Pin dedicat oscilator extern |
| PB7 (8) | XTAL2 | Cuarț 16MHz | Pin dedicat oscilator extern |
| 3, 5 | GND | — | Mase separate digital și analog |
| 4, 6 | VCC | — | Alimentare 5V digital |
| 18 | AVCC | — | Alimentare 5V referință ADC |
| 20 | AREF | — | Referință tensiune ADC (100nF la GND) |
Blocuri funcționale
1. Alimentare Bateria Samsung Li-Ion 18500 alimentează întregul sistem. Modulul Power Bank U7 are trei roluri simultane: încarcă bateria când e conectat la USB, protejează bateria la supradescărcare, și generează 5V stabili prin step-up intern pentru logică. SIM800L este alimentat direct din baterie la 3.7–4.2V, separat de restul circuitului, deoarece are nevoie de curenți mari la transmisie GSM care ar destabiliza linia de 5V.
2. Microcontroler ATmega328P Este creierul sistemului. Rulează la 16MHz datorită cuarțului extern, ceea ce îi permite timinguri precise pentru SPI, UART și PWM simultan. Coordonează toate celelalte module: citește butoanele și senzorul de lumină prin ADC, afișează informații pe LCD prin SPI, comunică cu modulul GSM prin UART, sincronizează ora cu RTC-ul prin I2C, și generează sunete prin PWM.
3. Comunicație GSM — SIM800L Modulul primește comenzi AT de la MCU prin UART și execută operații GSM: înregistrare în rețea, apeluri, SMS. Linia de transmisie de la MCU spre SIM trece printr-un divizor de tensiune din R2 și R3 (10kΩ/10kΩ) care coboară nivelul logic de la 5V la 2.5V, compatibil cu intrarea SIM800L. În sens invers, semnalul de 2.8V al SIM800L este suficient pentru a fi recunoscut ca nivel logic 1 de ATmega, deci nu necesită adaptare. Ieșirea audio diferențială SPKP/SPKN merge direct la buzzerul BF1 pentru redarea vocii în timpul apelurilor.
4. Afișaj Nokia 5110 Ecranul grafic de 84×48 pixeli afișează interfața utilizator — ore, meniuri, stare rețea. Comunicația se face prin SPI folosind 5 linii: clock, date, chip select, data/command și reset. Luminozitatea backlight-ului este controlată prin PWM de pe pinul PD5, care comandă tranzistorul NPN Q1. Acesta funcționează ca un întrerupător electronic — MCU-ul modulează rapid curentul prin LED-ul de backlight fără să disipe putere inutil.
5. Ceas RTC — DS3231 Modulul păstrează ora exactă independent de MCU. Are un oscilator intern cu compensare termică, extrem de precis, și o baterie proprie pe modul care îi permite să funcționeze chiar și când alimentarea principală e deconectată. MCU-ul îl citește și îl setează prin I2C pe pinii PC4 și PC5. DS3231 este ales în locul unui RTC simplu tocmai pentru precizia sa — deriva temporală este sub 2 minute pe an.
6. Interfață utilizator — tastatura și senzorul de lumină Cele 5 butoane tactile sunt conectate pe un singur pin ADC0 printr-o rețea de rezistențe în serie. Fiecare buton apăsat conectează nodul de măsură la GND printr-un număr diferit de rezistențe, producând o tensiune distinctă pe care MCU-ul o identifică. Rezistența de pull-down R12 (10kΩ) asigură o tensiune definită când niciun buton nu e apăsat, împiedicând flotarea pinului ADC. Fotorezistența LDR formează un divizor de tensiune cu R14 (10kΩ) pe pinul ADC1. Pe lumină puternică rezistența LDR scade, tensiunea pe ADC crește, și MCU-ul reduce luminozitatea backlight-ului. La întuneric procesul se inversează. Astfel dispozitivul se adaptează automat la condițiile de iluminare.
7. Audio Sistemul are două surse de sunet distincte. Buzzerul BF1 este conectat direct la ieșirea diferențială audio a SIM800L și redă vocea interlocutorului în timpul apelurilor. Al doilea canal audio, pe pinul PD3 prin Timer2 hardware, generează tonuri și melodii de apel fără să încarce procesorul — timerele hardware produc semnalul PWM autonom.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.