Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Radio pomoću arduina

[es] :: Elektronika :: Mikrokontroleri :: Radio pomoću arduina

Strane: 1 2

[ Pregleda: 2527 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
*.dynamic.a1.rs.



+1 Profil

icon Radio pomoću arduina15.03.2026. u 21:02 - pre 2 meseca
Napravio bi arduino radio. Tuner koji bi koristio ima kontrole
1-DI
2-CL
3-DI
4-CE
5-VCC
6-L OUT
7-GND
8-R OUT
Sad mi treba kod sa kojim bi radio. Ic na tuner u su la1837 i LC72131.
Tuner sam izvadio iz dvd-a.
 
Odgovor na temu

mpx

Član broj: 97043
Poruke: 41
*.static.isp.telekom.rs.



+1 Profil

icon Re: Radio pomoću arduina16.03.2026. u 07:33 - pre 2 meseca
Evo ovde imas ceo projekat:

https://www.youtube.com/watch?v=AijApAxOZ6w

https://github.com/firew4lker/AVR_Radio/tree/master
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina16.03.2026. u 11:36 - pre 2 meseca
To je sjajan projekat za iskorištavanje starih komponenti. LC72131 je Sanyo PLL (Phase-Locked Loop) sintetizator frekvencije koji kontroliše tuner, dok je LA1837 zadužen za samu obradu AM/FM signala (IF i MPX dekoder).

Da bi Arduino komunicirao sa LC72131, koristi se CCB protokol (Sanyo Computer Control Bus), koji je vrlo sličan SPI komunikaciji, ali sa specifičnim načinom adresiranja.

1. Povezivanje (Pinout)
Vjerovatno je na vašem tuneru pin 3 zapravo DO (Data Out), a ne DI, jer je to standard za LC72131 module iz DVD-ova.

Tuner Pin Funkcija Arduino Pin (Primjer)
1 - DI Data In D10
2 - CL Clock D13
4 - CE Chip Enable D12
5 - VCC Napajanje (obično 5V ili 9V) 5V (provjerite napon sa DVD ploče)
7 - GND Masa GND
6 & 8 Audio Out L/R Na pojačalo

2. Arduino Kod (Skeč)
Ovaj kod koristi "bit-banging" metodu za slanje podataka tuneru jer CCB protokol ima specifičnu 8-bitnu adresu pre slanja kontrolnih bajtova.

C++

// Pinovi
const int CE_PIN = 12;
const int CL_PIN = 13;
const int DI_PIN = 10;

// Konstante za FM (10.7 MHz Intermediate Frequency)
const long IF_FREQ = 10700;
const int REF_FREQ = 50; // Referentna frekvencija 50kHz

void setup() {
pinMode(CE_PIN, OUTPUT);
pinMode(CL_PIN, OUTPUT);
pinMode(DI_PIN, OUTPUT);
digitalWrite(CE_PIN, LOW);
digitalWrite(CL_PIN, LOW);
digitalWrite(DI_PIN, LOW);

Serial.begin(9600);
delay(100);

// Primjer: Postavi na 98.0 MHz
setFrequency(98000);
}

void loop() {
// Ovdje možete dodati kontrolu preko potenciometra ili tastera
}

void setFrequency(long freqKhz) {
// Izračunavanje N djelitelja: N = (F_target + F_if) / F_ref
unsigned int n = (freqKhz + IF_FREQ) / REF_FREQ;

// Slanje adrese za LC72131 (0x82 je standard za IN1)
sendCCB(0x82, n, 0x821); // 0x821 su kontrolni bitovi za FM, 50kHz step
}

void sendCCB(byte address, unsigned int divisor, unsigned int control) {
// 1. Slanje adrese (Lsb First)
digitalWrite(CE_PIN, LOW);
for(int i=0; i<8; i++) {
digitalWrite(DI_PIN, bitRead(address, i));
digitalWrite(CL_PIN, HIGH);
digitalWrite(CL_PIN, LOW);
}

// 2. Slanje podataka (CE mora biti HIGH tokom slanja podataka)
digitalWrite(CE_PIN, HIGH);
delayMicroseconds(2);

// Slanje 24 bita (N-djelitelj i kontrolni bitovi)
// Prvih 16 bita je N
for(int i=0; i<16; i++) {
digitalWrite(DI_PIN, bitRead(divisor, i));
digitalWrite(CL_PIN, HIGH);
digitalWrite(CL_PIN, LOW);
}

// Sljedećih 8 bita su kontrolni (npr. biranje opsega, step)
for(int i=0; i<8; i++) {
digitalWrite(DI_PIN, bitRead(control, i));
digitalWrite(CL_PIN, HIGH);
digitalWrite(CL_PIN, LOW);
}

digitalWrite(CE_PIN, LOW);
}
Na šta obratiti pažnju:
Napon napajanja (VCC): Mnogi ovi tuneri rade na 9V, dok PLL (LC72131) radi na 5V. Ako povežete 5V na VCC, a tuner je predviđen za 9V, dobićete samo šum ili vrlo slab signal.

VT (Varicap Tension): Tuner unutar sebe treba visok napon (često do 12V ili 30V) za "tuning" diodu. Ako je taj napon bio generisan na matičnoj ploči DVD-a, moraćete ga obezbijediti eksterno da bi tuner mogao mijenjati stanice.

Adresa: LC72131 obično koristi adresu 0x82 za pisanje u glavni registar (IN1).

Sledeći koraci
Da bi ovo postao pravi radio, trebaće vam način da mijenjate frekvenciju. Želite li da vam napišem dopunu koda za dodavanje potenciometra za traženje stanica ili možda LCD ekrana da vidite na kojoj ste frekvenciji?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina17.03.2026. u 21:00 - pre 2 meseca
Jel ovaj kod što je dao kolega samuki. Upisao sam kod u arduino i ništa se nedešava. Ali kad spojim sa gnd preko 4k7 na pin 13 ic-a LA1837 čuje se da šušti,a trebalo bi da dobije informaciju od ic-a LC72131.
Sad me zanima koji kod se koristi iz onoga što je postavio kolega mpx?
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina18.03.2026. u 12:11 - pre 2 meseca
Koji arduino koristis. Koji program ?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina18.03.2026. u 12:13 - pre 2 meseca
Činjenica da čuješ šuštanje kada povučeš pin 13 (Mute/ST-Indikator) na LA1837 prema masi je dobar znak — to znači da je audio stepen (L/R Out) ispravan i da LA1837 radi. Problem je što LC72131 (PLL) ne zaključava frekvenciju ili ne komunicira sa Arduinom, pa tjuner ostaje "gluv" na nuli.

Evo glavnih razloga zašto se ništa ne dešava i kako da to rešiš:

1. Provera napona za "Tuning" (VT pin)
Ovo je najčešći problem kod tjunera izvađenih iz DVD-ova. Digitalni tjuneri ne rade samo na 5V.

VCC (5V) napaja digitalni deo (LC72131).

VT (Varactor Tension) napaja diode za biranje stanica. Ovaj napon mora biti između 12V i 33V.

Ako na tvom konektoru nema pina za 12V/30V, on se verovatno pravi unutar same kutije tjunera, ali mu treba napon na VCC-u. Proveri da li na ploči DVD-a odakle si ga izvadio postoji linija od 12V koja je išla prema tjuneru. Bez tog napona, PLL ne može da pomeri frekvenciju sa početne tačke.

2. Sanyo CCB Protokol i adresa
LC72131 koristi specifičnu adresu pre slanja podataka. U CCB protokolu (koji koristi biblioteka), adresa za ovaj čip je obično 0x82 (za upis podataka).
Ako koristiš biblioteku, proveri u dokumentaciji da li je adresa ispravno postavljena.

3. Problem sa Pinom 3 (DO vs DI)
U tvom prvom postu si naveo pinove 1-DI i 3-DI. To je verovatno greška u obeležavanju na ploči.

Pin 1 (DI) je Data Input (ulaz podataka u LC).

Pin 3 bi trebalo da bude DO (Data Output) (izlaz iz LC ka Arduinu).

Probaj sledeće: Ako si u kodu koristio Pin 3 kao DI, zameni ga. Arduinu za slanje frekvencije zapravo treba samo CE, CL i DI (Pin 1). Pin 3 (DO) služi samo da bi Arduino očitao da li je stanica "uhvaćena" (Station Detect), ali nije neophodan za samo menjanje frekvencije.

4. Kristal (Referentna frekvencija)
LC72131 mora imati kristal (obično 7.2 MHz) spojen na svoje pinove. Proveri da li je on ostao na ploči tjunera. Bez njega, čip je "mrtav" i ne reaguje na komande sa Arduina.

Testni kod bez biblioteke (Direct Control)
Ako sumnjaš na biblioteku, probaj ovaj jednostavan "bit-banging" test da vidiš hoće li PLL uopšte reagovati (postavljanje na 100.0 MHz):

C++

// Pinovi prema tvojoj listi
#define CE 10
#define CL 13
#define DI 11

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE, LOW);
digitalWrite(CL, LOW);

delay(100);
send_frequency(100.0); // Test na 100 MHz
}

void send_frequency(float freq) {
// Proračun za 100MHz (FM, 50kHz step, 10.7 IF)
unsigned long divider = (freq + 10.7) * 20;

digitalWrite(CE, HIGH); // Aktivacija čipa

// Slanje adrese za LC72131 (0x82 - binarno 01000001 obrnutim redosledom)
shiftOut(DI, CL, LSBFIRST, 0x82);

// Slanje 24 bita kontrole (ovo je uprošćeno, zavisi od konfiguracije čipa)
// Ovde se šalje divider i mod rada (FM)
shiftOut(DI, CL, LSBFIRST, (divider & 0xFF));
shiftOut(DI, CL, LSBFIRST, ((divider >> 8) & 0xFF));
shiftOut(DI, CL, LSBFIRST, 0xB0); // FM mod, 50kHz korak

digitalWrite(CE, LOW);
}

void loop() {}
Šta dalje da proveriš:
Instrumentom izmeri napon na Pin 5 (VCC) dok je sve spojeno. Mora biti stabilnih 5V.

Pogledaj oznaku na kristalu unutar tjunera (mali metalni deo). Ako piše 4.5 ili 7.2, to moraš definisati u kodu jer od toga zavisi proračun frekvencije.

Mute funkcija: Pin 13 na LA1837 koji si dirao je "Mute". Ako LC72131 ne pošalje signal da je "zaključao" stanicu, on će držati zvuk isključenim.

Da li imaš unimer da proveriš koliki je napon na pinu 1 (DI) i 2 (CL) dok Arduino radi? Trebalo bi da vidiš neko "mrdanje" napona ako podaci prolaze.
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina18.03.2026. u 23:47 - pre 2 meseca
Citat:
samuki: Koji arduino koristis. Koji program ?


Imam i arduino uno i arduino nano. Program za arduino.

,, Samuki,,

Kada je bio tuner na dvd-u koristio je 3 žice
Data
CL
CE
Pošto je u samom tuner u bilo ktatko spojen DI i DO. Napajanje je koristio 12v. Kristal u tu eru je 4.5MHz.
Na LA1837 napaja se sa 5v pošto ima zener diodu, a LC72131 ima napajanje oko 9v. Samo ima jedan pin za napajanje.
Raspored prinova na konektoru:
1-DO (LC72131 Pin 6)
2-CL (LC72131 Pin 5)
3-DI (LC72131 Pin 4)
4-CE (LC72131 Pin 3)
5-VCC
6-L OUT (LA1837 Pin 17)
7-GND
8-R OUT (LA1837 Pin 16)
9- sa LA1837 Pin 23 koji se nije koristio
Evo i slika
Prikačeni fajlovi
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina19.03.2026. u 09:51 - pre 2 meseca
https://www.facebook.com/share/r/1Ckv8twyc8/
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina19.03.2026. u 11:02 - pre 2 meseca
To je veoma bitan podatak – to što su DI i DO kratko spojeni znači da tjuner koristi trosmernu (3-wire) sabirnicu, gde se podaci šalju i primaju preko iste linije (DI). To je česta pojava kod Sanyo CCB protokola da bi se uštedela jedna žica.

Takođe, to što se LC72131 napaja sa 9V je u redu, ali pazi na Arduino: Arduino radi na 5V logici. Ako mu pošalješ 9V sa DO pina nazad na Arduino pin 12, možeš oštetiti mikrokontroler. Srećom, za samo slanje frekvencije DO nam i ne treba.

Evo kako da prilagodiš sve za 4.5 MHz kristal i tu specifičnu konfiguraciju:

1. Hardversko prilagođavanje
Pošto su DI i DO spojeni na samom tjuneru, poveži ih ovako:

Arduino Pin 11 (MOSI) -> Spoji na tvoj Pin 3 (DI) na konektoru tjunera.

Arduino Pin 10 (SS) -> Spoji na tvoj Pin 4 (CE).

Arduino Pin 13 (SCK) -> Spoji na tvoj Pin 2 (CL).

VCC: Dovedi stabilnih 9V (ili 12V ako je tako bilo u DVD-u, ali proveri da li se pregreva).

2. Prilagođeni Kod (za 4.5 MHz kristal)
Standardne biblioteke često pretpostavljaju 7.2 MHz kristal. Kod 4.5 MHz kristala, referentni delioci u PLL-u su drugačiji.

C++

#include <SPI.h>

// Pinovi prema tvom rasporedu
#define CE_PIN 10
#define CL_PIN 13
#define DI_PIN 11

void setup() {
pinMode(CE_PIN, OUTPUT);
pinMode(CL_PIN, OUTPUT);
pinMode(DI_PIN, OUTPUT);

digitalWrite(CE_PIN, LOW);
digitalWrite(CL_PIN, LOW);

Serial.begin(9600);
delay(500);

// Postavljamo na 100.0 MHz za test
postaviFrekvenciju(100.0);
}

void postaviFrekvenciju(float freq) {
// Proračun za kristal 4.5 MHz:
// FM korak 50kHz, IF 10.7MHz
// Divider = (Frekvencija + 10.7) / 0.05
unsigned int divider = (unsigned int)((freq + 10.7) / 0.05);

digitalWrite(CE_PIN, HIGH);

// 1. Slanje ADRESE za LC72131 (Address 0x82)
// U CCB protokolu adresa se šalje sa LSB first
shiftOut(DI_PIN, CL_PIN, LSBFIRST, 0x82);

digitalWrite(CE_PIN, LOW); // Kratak prekid CE je specifičan za CCB adresu
delayMicroseconds(5);
digitalWrite(CE_PIN, HIGH);

// 2. Slanje CONTROL DATA (24 bita)
// Prvih 16 bita je divider (LSB first)
shiftOut(DI_PIN, CL_PIN, LSBFIRST, lowByte(divider));
shiftOut(DI_PIN, CL_PIN, LSBFIRST, highByte(divider));

// Trećih 8 bita su kontrolni (Reference freq, mod, itd.)
// Za 4.5MHz kristal i FM: 0xD0 (zavisi od tačne konfiguracije tvojih pinova na čipu)
shiftOut(DI_PIN, CL_PIN, LSBFIRST, 0xD0);

digitalWrite(CE_PIN, LOW);

Serial.print("Frekvencija postavljena na: ");
Serial.println(freq);
}

void loop() {
// Ovde možeš dodati skeniranje kasnije
}
Zašto i dalje može biti tišina?
Napon na Pin 5 (VCC): Ako dovedeš 12V na VCC, proveri da li LA1837 dobija svojih 5V preko te zener diode. Ako je napon preniski, IC za zvuk neće raditi.

Referentni delilac (R0-R3 bita): Kod LC72131, bita R0-R3 određuju referentnu frekvenciju na osnovu kristala. Za 4.5 MHz kristal da bi dobio korak od 50 kHz (standard za FM), ti bitovi moraju biti ispravno postavljeni u onom trećem bajtu koji šaljemo (0xD0 u primeru).

Šum (Mute): Pin 23 na LA1837 koji si pomenuo je često povezan sa Stereo/Mono prebacivanjem ili Mute kontrolom. Pošto se "nije koristio", ostavi ga slobodnog, ali ako i dalje nema zvuka, probaj ga preko otpornika spojiti na 5V ili GND (zavisi od logike).

Pokušaj sledeće: Izmeri unimerom napon na samom tjuneru na pinu koji ide na varikap diode (unutar tjunera, obično označen sa VT ili PD). Ako se taj napon menja kada u kodu promeniš frekvenciju (npr. sa 88.0 na 108.0), to znači da Arduino i LC72131 savršeno komuniciraju!

Da li imaš pristup tim unutrašnjim tačkama na ploči tjunera da izmeriš taj napon (VT)?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
109.175.38.*



+101 Profil

icon Re: Radio pomoću arduina20.03.2026. u 10:55 - pre 2 meseca
Slika je odlična, sad se sve jasno vidi. Ovo je klasični "old-school" digitalni tjuner. Na slici se jasno vide oba čipa, kristal od 4.5 MHz (onaj metalni duguljasti pored LC72131) i induktori (zavojnice) za RF i oscilatorni deo sa desne strane.

Pošto ti je DI/DO spojen na samom konektoru, a čipovi imaju specifična napajanja, moramo biti jako precizni sa tajmingom slanja podataka.

Ključna stvar: Napon podešavanja (VT)
Vidiš li onu narandžastu zener diodu blizu LC72131? Ona verovatno služi za stabilizaciju napona. Međutim, za FM opseg, napon na varikap diodama (koje su u desnom delu tjunera) mora da ide od oko 2V do desetak volti. Ako tjuner napajaš samo sa 5V sa Arduina, on nikada neće uspeti da "povuče" frekvenciju na 100 MHz. Moraš mu dovesti 9V ili 12V na VCC pin.

Poboljšani kod za 4.5 MHz kristal i 3-wire mod
Ovaj kod koristi "ručno" slanje bita (bit-banging) jer je CCB protokol vrlo izbirljiv oko toga kako CE (Chip Enable) radi u odnosu na CL (Clock).

C++

#define CE 10
#define CL 13
#define DI 11

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE, LOW);
digitalWrite(CL, LOW);
digitalWrite(DI, LOW);

Serial.begin(9600);
delay(1000);

// Test: Postavi na 94.0 MHz (ili neku tvoju lokalnu stanicu)
postaviFreq(94.0);
}

void postaviFreq(float mhz) {
// Proračun za FM (10.7 MHz IF, 50 kHz korak)
// Divider N = (Freq + 10.7) / 0.05
unsigned int N = (unsigned int)((mhz + 10.7) / 0.05);

// 1. SLANJE ADRESE (0x82 za LC72131)
digitalWrite(CE, LOW);
shiftOut(DI, CL, LSBFIRST, 0x82);
// Kod CCB-a, CE ide visoko NAKON adrese
digitalWrite(CE, HIGH);
delayMicroseconds(2);

// 2. SLANJE PODATAKA (24 bita)
// Prva dva bajta su delilac N (LSB first)
shiftOut(DI, CL, LSBFIRST, lowByte(N));
shiftOut(DI, CL, LSBFIRST, highByte(N));

// Treći bajt: Kontrolni bajt
// Za 4.5MHz kristal, FM mod, i korak od 50kHz:
// Bitovi: SNS, DVS, R3, R2, R1, R0, XS, CTE
// Probaćemo 0x10 ili 0x30 (XS bit definiše kristal 4.5 vs 7.2)
shiftOut(DI, CL, LSBFIRST, 0x10);

digitalWrite(CE, LOW);

Serial.print("Poslato za: ");
Serial.println(mhz);
}

void loop() {}
Šta da uradiš sledeće (Dijagnostika):
Merenje napona: Poveži sve, upali Arduino i izmeri napon na onom kondenzatoru koji je najbliži onim zelenim zavojnicama sa desne strane. Ako je tamo napon 0V ili fiksno 5V, PLL nije zaključao.

Pin 9 (LA1837): Video sam na tvojoj listi da pin 9 vodi na pin 23 od LA1837. Taj pin je "Vcc for FM". Ako na tom pinu nemaš 5V, FM deo čipa uopšte ne dobija struju i zato čuješ samo tišinu ili blagi šum. Proveri da li taj pin treba biti spojen na 5V.

DI/DO spoj: Pošto su DI i DO spojeni na tjuneru, onaj "šum" koji si čuo može biti i digitalni šum sa Arduina. Probaj staviti otpornik od 1k do 4k7 između Arduina (Pin 11) i tjunera (Pin 3) da malo "omekšaš" signal.

Pitanje: Da li imaš unimer da izmeriš napon na pinu 5 (VCC) dok je sve upaljeno? Interesuje me da li je pao ispod 5V zbog opterećenja.

Želiš li da probamo da dodamo mali skener, pa da Arduino sam vrti frekvencije dok nešto ne "ubode"?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina20.03.2026. u 20:12 - pre 2 meseca
Dali treba da prekinem vezu između DI i DO?
Pin 9 na konektoru što ide na pin 23 sa LA1837 nije se koristio u dvd-u bio je prazan bez kabla na konektoru.
,,Pitanje: Da li imaš unimer da izmeriš napon na pinu 5 (VCC) dok je sve upaljeno? Interesuje me da li je pao ispod 5V zbog opterećenja"
na pinu 5 od la1837 je 0v.
napajanje lc72131 je 5,15v, a la1837 je 8,7v.
gde se nalazi ta varikap dioda?
pin 23 la1837 je preko otpornika spojen na pin 8 lc72131.
Jel misliš na kondezator c64 na kome je 11v.
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina20.03.2026. u 21:09 - pre 2 meseca
Sjajno si izmerio, ovi podaci nam otkrivaju tačno gde je "zapelo". Idemo redom da rešimo problem napajanja i komunikacije:

1. Napajanje (VCC i Pin 5)
Izmerio si da je na Pinu 5 od LA1837 napon 0V. To je glavni razlog zašto nema zvuka! Pin 5 na LA1837 je VCC za FM/AM deo čipa. Ako je tu 0V, IC je "ugašen".

Rešenje: LA1837 na tom pinu (5) obično radi na 5V. Pošto si rekao da LA1837 dobija 8.7V, negde na ploči mora biti otpornik i zener dioda koji spuštaju taj napon na 5V za Pin 5. Proveri da li je neka staza u prekidu. Slobodno probaj dovesti čistih 5V sa Arduina direktno na Pin 5 od LA1837 da ga "probudiš".

2. Veza DI i DO (Pin 4 i 6 na LC72131)
Nemoj prekidati vezu. Ako je u DVD-u radilo sa 3 žice, to znači da je sistem dizajniran tako. LC72131 šalje podatke nazad (DO) samo kada mu Arduino to zatraži, inače taj pin "ćuti". Bitno je samo da u kodu koristiš ispravnu proceduru slanja (onaj CE prekid koji sam ti napisao u prošloj poruci).

3. Gde su varikap diode i napon podešavanja?
Varikap diode nisu klasične diode, one izgledaju kao mali tranzistori sa dva ili tri pina u SMD kućištu ili kao obične staklene diode (zavisi od modela). Nalaze se u desnom delu tjunera, blizu onih zelenih zavojnica i induktora koje vidiš na slici.

C64 (11V): To je odličan napon! To je verovatno glavni napon napajanja koji ide na PLL (LC72131).

Ključno merenje: Pronađi pin na LC72131 koji se zove AOUT (Pin 11) ili potraži negde blizu zavojnica tačku označenu sa VT (Varactor Tension). Kada u kodu promeniš frekvenciju sa 88 MHz na 108 MHz, taj napon mora da se menja (npr. sa 2V na 9V). Ako stoji zakucan na jednoj vrednosti, komunikacija Arduina i LC čipa ne radi.

4. Pin 23 (LA1837) i Pin 8 (LC72131)
To što su povezani je ispravno. Pin 8 na LC72131 je Izlazni port (IO). DVD plejer je preko njega kontrolisao LA1837 (verovatno prebacivanje Mono/Stereo ili Mute). Za sada to ne diraj, fokusiraj se na to da dobiješ 5V na Pin 5 od LA1837.

Šta sada da uradiš:
Dovedi 5V na Pin 5 (LA1837): Bez ovoga nećeš čuti ništa osim tišine, čak i ako je tjuner na stanici.

Proveri Pin 4 i 5 na LC72131: To su tvoji DI i CL. Dok kod radi, unimerom (na DC opsegu) izmeri ima li ikakvog napona na njima. Trebalo bi da "igra" oko 2-3V dok se šalju podaci.

Probaj ovaj "Unlock" trik:
Nekada LC72131 zahteva da se prvo pošalju kontrolni bitovi pa tek onda frekvencija. U kodu koji sam ti dao, proveri onaj zadnji bajt 0x10. Ako ne radi, probaj 0x50 (to menja osetljivost IF brojača).

Sledeći korak:
Dovedi tih 5V na Pin 5 i javi mi da li se šuštanje pojačalo ili si počeo da hvataš bar neku stanicu dok "šetaš" žicu od antene.

Da li želiš da ti napišem kod koji će svakih 5 sekundi menjati frekvenciju (88, 90, 92...) tako da možeš unimerom pratiti da li se menja napon na varikap diodama?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina22.03.2026. u 18:09 - pre 2 meseca
na kratko je bio napon od 4,97v pa je nestao i dovedem na pin 5 sa arduina kao što ste rekli nista se nedešava.. Blizu zavojnice L7 sa druge strane ima dva smd tanzistora.
Kod donjeg naponi su 1-gnd:10,37v; 2-gnd:10,95v; 3-gnd:11,15.
Kod gornjeg su 1-gnd:4,86v; 2-gnd:9,8v; 3-gnd:4,58v.
gornji je sa druge strane pored zavojnice,a pored tog smd tranistora ima smd dioda na kojoj je napon 11,13v.
Sa pina 5 od la1837 ide na otpornik od 1k pa na konektor.i probao da direktno dovedem 5v sa arduina otkačio sa pina12 sa arduina i prebacio na 5v i ništa.
na pinu 23 od lc72131 nedobija gnd zato drži mutiranog.
Sa kondezatora C64 gde je 11,15v ide na otpornik 5k6 pa se odatle grana na dve strane jedna ide na 10k i kondezator koji je na gnd pa se na tu granu dodaje još jedan od 10k isto sa kondezatorom na gnd i sa otpšornika ide na diodu sigurno varikap,dok drugi kraj sa 5k6 ide na 22k koji ide na neki tranzistor 1348 na srednju nožicu dok 3 nožica ide naotpornik od 47k na gnd,a prva nožica ide ferutnu prigušnicu.
Spojim pin 23 od lc72131 na gnd dobijem šuštanje,a potenciometar od 10k spojim između gnd i tačke gde se grana sa 5k6 i okretanjem nalazim stanice. Postavljam i slike pa ću obeležiti kuda ide i do kojih delova.

[Ovu poruku je menjao Bogdan-carr dana 22.03.2026. u 19:42 GMT+1]

[Ovu poruku je menjao Bogdan-carr dana 22.03.2026. u 19:46 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina22.03.2026. u 20:10 - pre 2 meseca
Odličan posao sa dijagnostikom! Činjenica da si spajanjem potenciometra uspeo da pronađeš stanice potvrđuje dve ključne stvari:

RF i Audio deo (LA1837) su ispravni.

PLL (LC72131) trenutno ne kontroliše napon podešavanja, pa je on "plivao" dok mu ti nisi zadao napon preko potenciometra.

To što pin 23 na LC72131 drži "mute" (ne spušta na GND) znači da čip ili nije dobio komandu, ili misli da nema stanice (nije zaključao frekvenciju).

Zašto PLL ne "zaključava"?
S obzirom na tvoja merenja, najverovatniji problem je redosled bajtova ili konfiguracija referentne frekvencije za kristal od 4.5 MHz. LC72131 je veoma specifičan – on zahteva adresu, pa podatke, a CE (Chip Enable) linija mora tačno da prati taj proces.

Evo "agresivnijeg" koda koji direktno gađa registre za 4.5 MHz kristal i pokušava da isključi Mute preko softvera.

Poboljšani kod (Direct Register Access)
C++

#define CE 10
#define CL 13
#define DI 11

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE, LOW);
digitalWrite(CL, LOW);
digitalWrite(DI, LOW);

Serial.begin(9600);
delay(1000);

// Testiramo na 97.0 MHz (ili upiši frekvenciju stanice koju si našao potenciometrom)
postaviFrekvenciju(97.0);
}

void postaviFrekvenciju(float mhz) {
// N = (Freq + 10.7) / 0.05
unsigned int N = (unsigned int)((mhz + 10.7) / 0.05);

// --- PRVI KORAK: ADRESA 0x82 ---
digitalWrite(CE, LOW);
shiftOut(DI, CL, LSBFIRST, 0x82);
digitalWrite(CE, HIGH);
delayMicroseconds(5);

// --- DRUGI KORAK: PODACI (24 bita) ---
// Bajt 1 i 2: Divider N (16 bita)
shiftOut(DI, CL, LSBFIRST, lowByte(N));
shiftOut(DI, CL, LSBFIRST, highByte(N));

// Bajt 3: Kontrolni (Reference freq i ostalo)
// Za 4.5MHz kristal (XS=1), FM mod (DVS=1)
// Binarno: 10110000 (0xB0) -> 50kHz korak
shiftOut(DI, CL, LSBFIRST, 0xB0);

digitalWrite(CE, LOW);
delayMicroseconds(5);

// --- TREĆI KORAK: ADRESA 0x92 (Za kontrolu Portova/Mute) ---
digitalWrite(CE, LOW);
shiftOut(DI, CL, LSBFIRST, 0x92);
digitalWrite(CE, HIGH);
delayMicroseconds(5);

// Slanje port kontrola (da "otkači" Mute ako je vezan na IO port)
// Šaljemo sve nule ili jedinice da vidimo promenu na pinu 23
shiftOut(DI, CL, LSBFIRST, 0xFF);
shiftOut(DI, CL, LSBFIRST, 0xFF);
shiftOut(DI, CL, LSBFIRST, 0xFF);

digitalWrite(CE, LOW);

Serial.print("Frekvencija poslata: ");
Serial.println(mhz);
}

void loop() {}
Šta dalje da proveriš na ploči:
Komunikacija (Napon na DI/CL): Dok Arduino radi, izmeri napon na Pin 3 (DI) i Pin 2 (CL) konektora. Pošto su u tvom slučaju DI i DO spojeni na samom tjuneru, Arduino pokušava da "nadjača" izlaz iz LC-a. Ako vidiš da je napon stalno 0V ili stalno 5V (bez titranja), komunikacija ne prolazi.

Otpornik na DI liniji: Pošto su DI/DO spojeni, probaj da staviš otpornik od 1k između Arduina (Pin 11) i ulaza u tjuner. To će sprečiti da se Arduino i LC72131 "svađaju" oko toga ko drži liniju visokom ili niskom.

Merenje na Tranzistoru 1348: Taj tranzistor koji si opisao je verovatno "Active Filter" ili pojačavač za napon podešavanja (VT). Srednja nožica (Baza) dobija signal iz PLL-a (Pin 11 od LC72131).

Izmeri napon na Pinu 11 (AOUT) od LC72131.

Ako je taj napon oko 0.6V ili se menja kada menjaš frekvenciju u kodu, znači da PLL radi!

Savet: Pošto si već uspeo da "uhvatiš" stanicu potenciometrom, zadrži taj napon unimerom i vidi koliko iznosi (npr. 4.5V). Onda učitaj kod za tu istu frekvenciju i vidi da li PLL sam postavlja približno isti napon na varikap diodi.

Čekam slike sa tvojim oznakama da preciznije vidimo putanju signala!

Bi li hteo da ti napišem kod koji ispisuje na Serial Monitoru da li LC72131 uopšte odgovara (šalje ACK)?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina23.03.2026. u 18:36 - pre 2 meseca
Otkačio sa potenciometar i žicu za mute i povezao sam sa arduinom kao što ste rekli DI/DO preko 1k i tu je napok oko 5v na samom tunetu,a na pinu 11 od lc72131 je 8,71v bilo koju frekvenciju da stavim i potpuna je tišina.Ubacio sam kod taj zadnji koji si dao i ništa. napon ns pinu 3 DI je 4,95v,a na pinu 2 CL je 0v.

Čekam slike sa tvojim oznakama da preciznije vidimo putanju signala! koje?

Bi li hteo da ti napišem kod koji ispisuje na Serial Monitoru da li LC72131 uopšte odgovara (šalje ACK)? može
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina23.03.2026. u 19:50 - pre 2 meseca
Evo koda koji ima ugrađenu "ACK" (Acknowledge) dijagnostiku. Pošto su kod tebe DI i DO kratko spojeni, Arduino može pokušati da "pročita" stanje linije odmah nakon što pošalje adresu. Ako čip LC72131 prihvati adresu, on će na kratko povući liniju (DI/DO) u određeno stanje.

Ovaj kod će ti na Serial Monitoru (9600 baud) ispisati da li čip uopšte reaguje na tvoje komande.

Arduino Dijagnostički Kod
C++

#define CE 10
#define CL 13
#define DI 11 // DI i DO su spojeni na strani tjunera

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);

digitalWrite(CE, LOW);
digitalWrite(CL, LOW);

Serial.begin(9600);
while (!Serial);
Serial.println("--- LC72131 Dijagnostika Pokrenuta ---");

// Testiramo komunikaciju slanjem adrese
proveriKomunikaciju();
}

void proveriKomunikaciju() {
Serial.println("Pokusavam kontakt sa LC72131 (Adresa 0x82)...");

// 1. Slanje adrese 0x82 (10000010 binarno)
digitalWrite(CE, LOW);
shiftOut(DI, CL, LSBFIRST, 0x82);

// 2. Prebacujemo DI pin u INPUT mod da vidimo sta LC kaze
pinMode(DI, INPUT);
digitalWrite(CE, HIGH); // Aktiviramo cip
delayMicroseconds(10);

int stanje = digitalRead(DI);

if (stanje == LOW) {
Serial.println("ODGOVOR: Cip je povukao liniju LOW. Verovatno je PRISUTAN!");
} else {
Serial.println("ODGOVOR: Linija je HIGH. Cip NE ODGOVARA ili nema napajanja.");
}

// Vracamo pin u OUTPUT mod za dalji rad
digitalWrite(CE, LOW);
pinMode(DI, OUTPUT);

// 3. Pokusaj postavljanja frekvencije (npr. 98.0 MHz)
Serial.println("Saljem test frekvenciju 98.0 MHz...");
postaviFrekvenciju(98.0);
}

void postaviFrekvenciju(float mhz) {
unsigned int N = (unsigned int)((mhz + 10.7) / 0.05);

// Adresa
digitalWrite(CE, LOW);
shiftOut(DI, CL, LSBFIRST, 0x82);
digitalWrite(CE, HIGH);
delayMicroseconds(2);

// Divider (16 bita)
shiftOut(DI, CL, LSBFIRST, lowByte(N));
shiftOut(DI, CL, LSBFIRST, highByte(N));

// Kontrolni bajt (4.5MHz kristal, FM)
// XS bit (bit 1) mora biti 1 za 4.5MHz
shiftOut(DI, CL, LSBFIRST, 0xB2);

digitalWrite(CE, LOW);
Serial.println("Podaci poslati.");
}

void loop() {
// Ponavljaj test svakih 10 sekundi
delay(10000);
proveriKomunikaciju();
}
Šta da pratiš na Serial Monitoru?
"Cip NE ODGOVARA":

Proveri napajanje na Pinu 4 (VCC) samog LC72131 čipa. Mora biti iznad 4.5V.

Proveri GND vezu između Arduina i tjunera.

Proveri da li su žice na DI, CL i CE dobro zalemljene (hladan lem je čest problem kod ovih tjunera).

"Cip je PRISUTAN", ali i dalje nema zvuka:

Ovo znači da komunikacija radi, ali PLL ne zaključava.

Izmeri napon na Pinu 11 (AOUT) od LC72131. Ako je tamo zakucano na 0V ili na maksimum (npr. 9V), PLL ne uspeva da stabilizuje frekvenciju.

Probaj u kodu promeniti zadnji bajt 0xB2 u 0xB0 ili 0x32. Ovi bitovi (XS i kontrolni) govore čipu koji je kristal unutra.

Savet za hardver:
Pošto si rekao da si potenciometrom uspeo da nađeš stanicu, to znači da je onaj tranzistor (1348) i varikap dioda 100% ispravna. Problem je isključivo u tome što LC72131 ne preuzima kontrolu nad tom linijom.

Probaj i ovo: Između Arduina Pin 11 i tvog Pin 3 na tjuneru ubaci otpornik od 1 kOhm. To će pomoći ako se Arduino i LC72131 "svađaju" oko napona na toj zajedničkoj DI/DO liniji.

Hoćeš li da ti obeležim na tvojoj slici gde tačno da meriš napon dok ovaj kod radi?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina23.03.2026. u 19:53 - pre 2 meseca
To što je na Pinu 2 (CL) napon 0V je jasan znak problema. Clock (CL) linija je "srce" komunikacije – bez nje LC72131 uopšte ne zna da mu šalješ podatke. Čak i ako DI linija radi, bez CL impulsa čip samo "spava".

Takođe, 8.71V na Pinu 11 (AOUT) znači da je PLL "pobegao" u gornji ekstrem (maksimalni napon) jer ne dobija instrukcije da se zaključa na određenu frekvenciju.

Evo šta moramo uraditi da pokrenemo komunikaciju:

1. Rešavanje CL (Clock) linije
Ako je na Pinu 2 tjunera stalno 0V, a Arduino Pin 13 je ispravan, nešto "guši" taj signal.

Proveri fizičku vezu: Isključi napajanje i unimerom na opsegu za otpor (ohm) proveri da li postoji kontakt između Arduina Pin 13 i samog nožice broj 5 na LC72131 čipu.

Testiraj Arduino pin: Otkači žicu sa Arduina Pin 13 i izmeri napon na njemu dok radi kod. Trebalo bi da vidiš bar mali napon (oko 1-2V) koji titra dok se šalju podaci. Ako je tu 0V, probaj u kodu promeniti CL na neki drugi pin, npr. Pin 9.

2. Prilagođeni kod za spori "Bit-Bang"
Pošto standardni shiftOut može biti prebrz za stare tjunere, probaćemo "ručno" da mrdamo pinove. Ovo je najsigurniji način da nateramo čip da nas čuje.

C++

// Promeni pinove ako sumnjaš na neki kvar na Arduinu
#define CE 10
#define CL 13 // Proveri ovaj pin!
#define DI 11

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);

digitalWrite(CE, LOW);
digitalWrite(CL, LOW);
digitalWrite(DI, LOW);

Serial.begin(9600);
delay(1000);

// Postavljamo 100.0 MHz
posaljiFrekvenciju(100.0);
}

void manualShiftOut(byte podatak) {
for (int i = 0; i < 8; i++) {
digitalWrite(DI, (podatak & (1 << i)) ? HIGH : LOW);
delayMicroseconds(10); // Sporije slanje radi sigurnosti
digitalWrite(CL, HIGH);
delayMicroseconds(10);
digitalWrite(CL, LOW);
delayMicroseconds(10);
}
}

void posaljiFrekvenciju(float mhz) {
unsigned int N = (unsigned int)((mhz + 10.7) / 0.05);

// 1. ADRESA (0x82)
digitalWrite(CE, LOW);
manualShiftOut(0x82);

// 2. CE mora biti HIGH tokom slanja podataka
digitalWrite(CE, HIGH);
delayMicroseconds(50);

// Bajt 1 i 2: Divider N
manualShiftOut(lowByte(N));
manualShiftOut(highByte(N));

// Bajt 3: Kontrola (FM mod, 4.5MHz kristal)
// XS=1 (4.5MHz), DVS=1 (FM), ostalo po potrebi
manualShiftOut(0xB0);

digitalWrite(CE, LOW);
Serial.println("Frekvencija poslata rucno.");
}

void loop() {}
3. Zašto je tišina? (Mute problem)
Pošto si otkačio žicu za mute, LA1837 je verovatno ostao u stanju "ugašenog zvuka".

Ako na Pinu 23 od LA1837 (tvoj Pin 9 na konektoru) nemaš masu (GND), on će biti mutiran.

Privremeno rešenje: Spoji Pin 9 konektora tjunera direktno na GND. Trebalo bi da čuješ bar šum. Ako čuješ šum, onda znamo da je audio deo "živ".

4. Šta izmeriti sada:
Pin 2 (CL) ponovo: Dok radi ovaj novi kod, unimer mora pokazati bar neki napon (ne 0V).

Pin 11 (AOUT) na LC72131: Ako komunikacija proradi, ovaj napon bi trebalo da padne sa 8.7V na neku nižu vrednost (npr. 4-5V za 100 MHz).

VCC na LA1837 (Pin 5): Rekao si da si dovodio 5V i nije bilo ništa. Proveri ponovo da li taj čip ima napajanje na Pinovima 5 i 23 (koji su često VCC ulazi).

Moj predlog: Probaj ovaj "manualShiftOut" kod. On je sporiji i daje čipu vremena da "svari" bite. Ako i dalje imaš 0V na CL pinu, zameni žicu ili proveri da nema negde kratkog spoja sa masom na samoj ploči tjunera.

Želiš li da ti nacrtam tačnu šemu kako da spojiš te kontrolne pinove preko otpornika da budemo 100% sigurni da ne gušimo signal?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina23.03.2026. u 22:19 - pre 2 meseca
I na pinu 2 je stalno 3-3,4mV i kad otkačim sa arduina ni na arduinu nema napona.postoji veza između arduina i pina 5 od lc72131 koji ide preko otpornika od 1k koji je na samom tuneru.
na pinu 11(AOUT) drži stalno 8,71v i ne pomera se.
LA1837 njemu je pin 5 na gnd,a na pinu 23 je 3,75v.
Kod la1837 pinovi za naoajanje su 5 i 8.
VCC na LA1837 (Pin 5): Rekao si da si dovodio 5V i nije bilo ništa.--Možda kod ovog drugog lc72131.
Na la1837 pin 13 je za mute,a ne pin 23 jet je pin 23 fm det.
sve je dobro zalemljeno i provereno.Dok se tuner napaja ima oko 5v na pinu1/3 konektora,a čim isključim nema iako arduimo ostane na napajanju.
na konektoru pin 9 je bio prazan i nije se koristio u samom dvd-u.
postavio sam i otpornik između di/do i arduina i ništa.
sa lc72131 njegovi pinovi za DO;DI;CL;CE idu preko otpornika od 1k pa na konektor.

Prikačeni fajlovi
 
Odgovor na temu

samuki
💻🇧🇦
🅱🅰
BiH Sarajevo🇧🇦

Član broj: 322399
Poruke: 1663
*.dynamic.telemach.ba.



+101 Profil

icon Re: Radio pomoću arduina23.03.2026. u 22:48 - pre 2 meseca
Sve ukazuje na to da imamo problem sa nivoima napona ili samim tajmingom. Ako na Arduinu nema napona na CL pinu čak i kada je otkačen, to znači da kod nije pokrenuo taj pin ili je pin na Arduinu pregoreo.

Hajde da rešimo ovo korak po korak, jer je tvoja šema (iako je na slici LC72136, oni su funkcionalno skoro isti kao LC72131) potvrdila da postoje otpornici od 1k u seriji, što je dobro.

1. Testiranje CL (Clock) linije
Ako na Arduinu (izlazni pin 13) nema napona dok kod radi, komunikacija je nemoguća.

Promeni pin: U kodu koji sledi, postavićemo CL na Pin 9, a DI na Pin 8 Arduina. Poveži ih tako na konektor tjunera.

Provera: Dok kod radi, unimer na Pin 9 Arduina mora pokazati bar 1-2V (srednja vrednost impulsa). Ako je i dalje 0V, nešto softverski ne valja ili je taj primerak Arduina problematičan.

2. LA1837 Napajanje (KRITIČNO)
Rekao si: "LA1837 njemu je pin 5 na gnd".
OVO JE GREŠKA. Pin 5 na LA1837 MORA imati napon (Vcc). Ako je on na GND, čip je u kratkom spoju ili je spržen.

Prema datasheet-u, Pin 8 je takođe Vcc, ali Pin 5 je napajanje za FM/AM blok.

Ako je na ploči Pin 5 direktno vezan na GND, proveri da li je to neka greška u merenju ili je neki kondenzator u kratkom spoju. Bez napona na Pinu 5, ne možeš imati zvuk.

3. Kod za "Forsiranu" komunikaciju (Bit-Bang na novim pinovima)
Ovaj kod koristi Pin 9 (CL), Pin 8 (DI) i Pin 10 (CE). Tako ćemo izbeći Pin 13 koji je možda opterećen LED diodom na Arduinu.

C++

#define CE 10
#define CL 9 // Novo: Pin 9
#define DI 8 // Novo: Pin 8

void setup() {
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);

digitalWrite(CE, LOW);
digitalWrite(CL, LOW);
digitalWrite(DI, LOW);

Serial.begin(9600);
delay(1000);
Serial.println("Slanje na 100.0 MHz...");
}

void manualSend(byte data) {
for (int i = 0; i < 8; i++) {
digitalWrite(DI, (data & (1 << i)) ? HIGH : LOW);
delayMicroseconds(50); // Veoma sporo radi stabilnosti
digitalWrite(CL, HIGH);
delayMicroseconds(50);
digitalWrite(CL, LOW);
delayMicroseconds(50);
}
}

void loop() {
float freq = 100.0;
unsigned int N = (unsigned int)((freq + 10.7) / 0.05);

// KORAK 1: ADRESA 0x82
digitalWrite(CE, LOW);
manualSend(0x82);

// KORAK 2: AKTIVACIJA CE (mora biti HIGH za prenos podataka kod LC72131)
digitalWrite(CE, HIGH);
delayMicroseconds(10);

// KORAK 3: PODACI
manualSend(lowByte(N));
manualSend(highByte(N));
manualSend(0xB0); // FM, 4.5MHz kristal

digitalWrite(CE, LOW);

delay(5000); // Ponovi svakih 5 sekundi da mozes meriti
}
Šta meriti dok ovaj kod radi:
Pin 9 Arduina (CL): Moraš imati napon. Ako nemaš, Arduino ne izvršava digitalWrite.

Pin 11 (AOUT) na LC72131: Ako komunikacija "prođe", ovaj napon mora da padne sa 8.7V. Ako stoji na 8.7V, PLL i dalje ne vidi Arduino.

LA1837 Pin 13 (Mute): Ako na njemu izmeriš napon, spoji ga kratko na GND žicom da vidiš hoće li "probiti" šum.

Moj savet za LA1837: Ponovo proveri Pin 5. Ako je on stvarno na GND, tu leži razlog tišine. Izmeri otpor između Pina 5 i GND dok je sve isključeno. Ako je 0 oma, čip je mrtav ili je negde zalemljen "most" koji ne treba da bude tu.

Da li želiš da probam da ti napišem kod koji će samo "blinkati" CL i DI pinove brzinom od 1 sekunde, kako bi unimerom bio 100% siguran da Arduino šalje signal?
Imam multimetar i lemilicu ! 🇧🇦
 
Odgovor na temu

Bogdan-carr
Belgrade

Član broj: 265509
Poruke: 105
95.180.123.*



+1 Profil

icon Re: Radio pomoću arduina24.03.2026. u 00:37 - pre 2 meseca

/*

The YST93x (YST936, YST939, etc.) is an AM/FM tuner module used on some cheap
Chinese home theaters and sound systems. It is made by a company named Winever
(http://www.winever.cn/) - and maybe some others. It is very cheap and of a
a reasonable quality. It is easy to find on eBay and Alibaba.com

The module is based on a Sanyo LC72131 PLL and a tuner IC. The tuner chip varies
from model to model: YST939 uses the Sanyo LA1823 (or clone) radio-on-chip and
YST936 uses a Chinese-branded "CS1000" tuner.

The PLL can communicate with a microcontroller via the Sanyo CCB bus, and have
5 I/O pins which controls the tuner:

PLL pin Direction Function
BO0 PLL -> Tuner Not used
BO1 PLL -> Tuner Band selector (0 = FM; 1 = AM)
BO2 PLL -> Tuner Mute / IF output (0 = Mute / IF counter mode
1 = Normal tuner mode)
BO3 PLL -> Tuner Audio mode (0 = Stereo; 1 = Mono)
BO4 PLL -> Tuner Not used
IO0 Tuner -> PLL Not used (pulled high. Reads "1")
IO1 Tuner -> PLL Stereo indicator (0 = Stereo; 1 = Mono)

Note: BO0 must be set to "0" for the tuner to output the IF signal to the PLL.
This means the tuner will have to be muted every time one want the PLL to count
the IF frequency.

YST93x module Pinout:

FM
Antenna +------------------------+
+---| |- RDS out (not all models have this pin)
+---| |- Out-L
| YST93x |- GND
| |- Out-R
| |- VDD (12V)
| |
AM | |
Antenna | |- DO
+---| |- CL
| | |- DI
| | |- CE
+---| |- GND
+------------------------+

YST93x to Arduino connections:
Arduino YST93x
A5 (DO) DI
A4 (CL) CL
A3 (DI) DO
A2 (CE) CE
GND GND

Note: This example uses an analog keypad with the following schematics:

A0
|
2k2 | 330R 620R 1k 3k3
VCC -----\/\/\---+---\/\/\---+---\/\/\---+---\/\/\---+---\/\/\-----+----- GND
| | | | |
X SCAN_UP X UP X DOWN X SCAN_DOWN X BAND
| | | | |
GND GND GND GND GND

X = keys (N.O.)

*/

#include <inttypes.h>
#include <LiquidCrystal.h>
#include <SanyoCCB.h>

// This example uses an analog 5-key keypad tied to A0
#define KEYPAD_PIN A0

// Keypad keys
#define KEY_BAND 5
#define KEY_SCAN_DOWN 4
#define KEY_DOWN 3
#define KEY_UP 2
#define KEY_SCAN_UP 1
#define KEY_NONE 0

// LC72131 IN1, byte 0
#define IN10_R3 7
#define IN10_R2 6
#define IN10_R1 5
#define IN10_R0 4
#define IN10_XS 3
#define IN10_CTE 2
#define IN10_DVS 1
#define IN10_SNS 0

// LC72131 IN2, byte 0
#define IN20_TEST2 7
#define IN20_TEST1 6
#define IN20_TEST0 5
#define IN20_IFS 4
#define IN20_DLC 3
#define IN20_TBC 2
#define IN20_GT1 1
#define IN20_GT0 0

// LC72131 IN2, byte 1
#define IN21_DZ1 7
#define IN21_DZ0 6
#define IN21_UL1 5
#define IN21_UL0 4
#define IN21_DOC2 3
#define IN21_DOC1 2
#define IN21_DOC0 1
#define IN21_DNC 0

// LC72131 IN2, byte 2
#define IN22_BO4 7
#define IN22_BO3 6
#define IN22_BO2 5
#define IN22_BO1 4
#define IN22_IO2 3
#define IN22_IO1 2
#define IN22_IOC2 1
#define IN22_IOC1 0

// LC72131 DO0, byte 0
#define DO0_IN2 7
#define DO0_IN1 6
#define DO0_UL 4

// For function YST93xSetMode
#define YST93x_MONO 1
#define YST93x_STEREO 2
#define YST93x_MUTE 3
#define YST93x_UNMUTE 4
#define YST93x_BAND_FM 5
#define YST93x_BAND_AM 6

// Acceptable IF frequency deviation window (for the PLL) when searching for radio stations
// You may need to tweek these values to have a reliable "scan" mode
#define FM_TUNED_WINDOW 180
#define AM_TUNED_WINDOW 20

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

SanyoCCB ccb(A5, A4, A3, A2); // Pins: DO CL DI CE

byte pll_in1[3];
byte pll_in2[3];

// Initial frequencies
uint16_t FMFrequency = 880; // MHz * 10
uint16_t AMFrequency = 53; // KHZ / 10

uint8_t band = YST93x_BAND_FM;
uint8_t tuned = 0;


/************************************************\
* YST93xInit() *
* Initialize the PLL settings vectors with *
* parameters common to booth AM and FM modes *
\************************************************/
void YST93xInit() {
memset(pll_in1, 0, 3);
memset(pll_in2, 0, 3);
bitSet(pll_in2[0], IN20_IFS); // IF counter in normal mode
bitSet(pll_in2[1], IN21_UL0); // Phase error detection width = 0us
bitSet(pll_in2[2], IN22_BO2); // Mute off / normal tuner mode
}


/************************************************\
* YST93xSetMode() *
* Some predefined setups for the YST93x module *
\************************************************/
void YST93xSetMode(uint8_t mode) {
switch(mode) {
case YST93x_STEREO:
bitClear(pll_in2[2], IN22_BO3);
break;

case YST93x_MONO:
bitSet(pll_in2[2], IN22_BO3);
break;

case YST93x_MUTE:
bitClear(pll_in2[2], IN22_BO2);
break;

case YST93x_UNMUTE:
bitSet(pll_in2[2], IN22_BO2);
break;

case YST93x_BAND_FM:
band = YST93x_BAND_FM;
bitWrite(pll_in1[0], IN10_R0, 1); // Reference frequency = 50kHz
bitWrite(pll_in1[0], IN10_R3, 0); //
bitWrite(pll_in1[0], IN10_DVS, 1); // Programmable Divider divisor = 2
bitWrite(pll_in2[0], IN20_GT0, 0); // IF counter mesurement period = 32ms
bitWrite(pll_in2[0], IN20_GT1, 1); //
bitWrite(pll_in2[1], IN21_DZ0, 1); // Dead zone = DZB
bitWrite(pll_in2[1], IN21_DZ1, 0); //
bitWrite(pll_in2[2], IN22_BO1, 0); // FM mode
break;

case YST93x_BAND_AM:
band = YST93x_BAND_AM;
bitWrite(pll_in1[0], IN10_R0, 0); // Reference frequency = 10kHz
bitWrite(pll_in1[0], IN10_R3, 1); //
bitWrite(pll_in1[0], IN10_DVS, 0); // Programmable Divider divisor = 1
bitWrite(pll_in2[0], IN20_GT0, 1); // IF counter mesurement period = 8ms
bitWrite(pll_in2[0], IN20_GT1, 0); //
bitWrite(pll_in2[1], IN21_DZ0, 0); // Dead zone = DZC
bitWrite(pll_in2[1], IN21_DZ1, 1); //
bitWrite(pll_in2[2], IN22_BO1, 1); // AM mode
break;
}
ccb.write(0x82, pll_in1, 3);
ccb.write(0x92, pll_in2, 3);
}



/************************************************************\
* YST93xTune() *
* Set the tuner frequency and return 1 if it is tuned *
* or 0 otherwise. *
* *
* The frequency divisors was chosen in a way the frequency *
* representation can be directly sent to the PLL and is *
* easy to represent: *
* - FM mode (divisor = 100): frequency (MHz) * 10 *
* - AM mode (divisor = 10): frequency (kHZ) / 10 *
\************************************************************/
uint8_t YST93xTune(uint16_t frequency) {
uint16_t fpd = 0;
uint8_t i = 0;
uint8_t r[3];
unsigned long IFCounter = 0;

switch(band) {
case YST93x_BAND_FM:
// FM: fpd = (frequency + FI) / (50 * 2)
fpd = (frequency + 107);
break;

case YST93x_BAND_AM:
// AM: fpd = ((frequency + FI) / 10) << 4
fpd = (frequency + 45) << 4;
break;

default: return 1;
}

YST93xSetMode(YST93x_MUTE); // YST93x only injects FI signal into the PLL when in MUTE mode

// Reset the IF counter and program the Frequency Programmable Divider (fpd)
bitClear(pll_in1[0], IN10_CTE);
pll_in1[1] = byte(fpd >> 8);
pll_in1[2] = byte(fpd & 0x00ff);
ccb.write(0x82, pll_in1, 3);

// Start the IF counter
bitSet(pll_in1[0], IN10_CTE);
ccb.write(0x82, pll_in1, 3);

// Wait for PLL to be locked (DO0_UL == 1)
while(i < 20) {
delay(50);
ccb.read(0xa2, r, 3); // Discard the 1st result: it is latched from the last count (as said on the datasheet)
ccb.read(0xa2, r, 3); // The 20 rightmost bits from r[0..2] are the IF counter result
i = (bitRead(r[0], DO0_UL)) ? 100 : i + 1;
}

YST93xSetMode(YST93x_UNMUTE); // Mute off / normal tuner mode

if(i == 100) {
// PLL is locked. If the IF deviation is within the defined (window) interval,
// the radio is likely to be tuned.
// Note: this "tuned" detection method is not recommended on the LC72131 datasheet as
// it can give false positive results. A better approach would be to get the "tuned"
// flag from a RDS decoder with signal quality detection (e.g.: PT2579 or Philips SAA6588)
// connected to the YST93x tuner module "RDS Output" pin. SAA6588 is more powerful/popular,
// but PT2579 looks a lot easier to use as it is not programmable and has a dedicated
// signal quality output pin.
IFCounter = (r[0] & 0x0f);
IFCounter = (IFCounter << 16) | (unsigned long)(r[1] << 8) | (r[2]);
Serial.println(IFCounter);
switch(band) {
case YST93x_BAND_FM:
// Expected value: IF (10.7MHz) * Mesurement period (32ms, as set via GT[1..0]) = 342400
if((IFCounter > 342400) && ((IFCounter - 342400) < FM_TUNED_WINDOW)) return 1;
if((IFCounter < 342400) && ((342400 - IFCounter) < FM_TUNED_WINDOW)) return 1;
break;
case YST93x_BAND_AM:
// Expected value: IF (450kHz) * Mesurement period (8ms, as set via GT[1..0]) = 3600
// Note: scan mode in AM is really poor. I have done my best in tweaking it, but it barely works
if((IFCounter > 3600) && ((IFCounter - 3600) < AM_TUNED_WINDOW)) return 1;
if((IFCounter < 3600) && ((3600 - IFCounter) < AM_TUNED_WINDOW)) return 1;
break;
}
}
return 0;
}


/**************************************************\
* YST93xIsStereo() *
* Returns 1 if the tuned radio station is stereo *
\**************************************************/
uint8_t YST93xIsStereo() {
uint8_t r[3];

ccb.read(0xa2, r, 3);
return(bitRead(r[0], DO0_IN2) ? 0 : 1);
}


/*******************************************************\
* getKey() *
* Read the (analog) keypad. *
* If you are using an digital (one key per input pin) *
* keypad, just this function to return the correct *
* values *
\*******************************************************/
uint8_t getKey(uint8_t keypadPin) {
uint16_t keypad;
uint8_t key = KEY_NONE;

keypad = analogRead(keypadPin);

if(keypad < 870) key = KEY_BAND;
if(keypad < 600) key = KEY_SCAN_DOWN;
if(keypad < 390) key = KEY_DOWN;
if(keypad < 220) key = KEY_UP;
if(keypad < 60) key = KEY_SCAN_UP;

return key;
}


/*******************\
* Arduino setup() *
\*******************/
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
ccb.init();
delay(1000);
YST93xInit();
YST93xSetMode(YST93x_BAND_FM);
tuned = YST93xTune(FMFrequency);
}


/******************\
* Arduino loop() *
\******************/
void loop() {
uint8_t scan = 0;
int8_t delta = 0;
uint8_t key = getKey(KEYPAD_PIN);

lcd.setCursor(0, 0);
switch(band) {
case YST93x_BAND_FM:
lcd.print("FM ");
lcd.setCursor((FMFrequency < 1000) ? 4 : 3, 0); lcd.print((float)FMFrequency / 10, 1);
lcd.print("MHz ");
break;
case YST93x_BAND_AM:
lcd.print("AM ");
lcd.setCursor((AMFrequency < 100) ? 4 : 3, 0); lcd.print(AMFrequency * 10);
lcd.print("KHz ");
break;
}

// Updates the Stereo indicator
lcd.setCursor(12, 0);
if(YST93xIsStereo())
lcd.print("[ST]");
else
lcd.print("[ ]");

// The "Tuned" indicator is updated only when the station changes
lcd.setCursor(2, 1);
if(tuned)
lcd.print(" Tuned ");
else
lcd.print(" ");

// Processo keypad inputs
if(key != KEY_NONE) {
switch(key) {
case KEY_UP: scan = 0; delta = +1; break;
case KEY_DOWN: scan = 0; delta = -1; break;
case KEY_SCAN_UP: scan = 1; delta = +1; break;
case KEY_SCAN_DOWN: scan = 1; delta = -1; break;
case KEY_BAND:
switch(band) {
case YST93x_BAND_FM:
YST93xSetMode(YST93x_BAND_AM);
tuned = YST93xTune(AMFrequency);
break;

case YST93x_BAND_AM:
YST93xSetMode(YST93x_BAND_FM);
tuned = YST93xTune(FMFrequency);
break;
}
}

if(scan) {
lcd.setCursor(2, 1);
lcd.print("Scanning...");
}

// Change the station
switch(band) {
case YST93x_BAND_FM:
do{
FMFrequency += delta;
if(FMFrequency > 1080) FMFrequency = 880;
if(FMFrequency < 880) FMFrequency = 1080;
tuned = YST93xTune(FMFrequency);

lcd.setCursor(3, 0);
if(FMFrequency < 1000) lcd.print(' ');
lcd.print((float)FMFrequency / 10, 1);
} while(scan && (! tuned));
break;

case YST93x_BAND_AM:
do{
AMFrequency += delta;
if(AMFrequency > 170) AMFrequency = 53;
if(AMFrequency < 53) AMFrequency = 170;
tuned = YST93xTune(AMFrequency);

lcd.setCursor(3, 0);
if(AMFrequency < 100) lcd.print(' ');
lcd.print(AMFrequency * 10);
} while(scan && (! tuned));
break;

} // switch

} // if(key)

}


https://github.com/soltia48/SanyoCCB/tree/main odavde sam skinuo program za arduino.
https://omrin-file.blogspot.com/2022/ odavde sam video i po toj šemi hoću da odradim
Probao sam ovaj kod i radi.On je zahtevao da se odvoji DO i DI.Displej sve pokazuje kako treba.Dali može ovaj kod da se nadogradi da ostane u memori zadnja stanica koju nađem da ne svaki put počinje od 88mhz.I još nemutira dok traži stanice čuje se kako pretražuje.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Radio pomoću arduina

Strane: 1 2

[ Pregleda: 2527 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.