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).
| Listă componente |
|---|
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) |
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.