Citat:
Malo nejasno postavljeno pitanje! Probaj svakako bolje pojasniti što želiš.
Preformulisaću u vidu zadatka:
......................................................................................
U cilju ućenja i savladavanje umrežavanja dva i više kontrolera, potrebno je obezbediti
RS485 komunikaciju između dva kontrolera, u smislu kad prvi nešto kaže
(naveo sam najprostiji primer koga sam se setio jedan je na prekidaču a drugi na ledu),
drugi da ga razume šta je rekao i da izvrši i obrnuto.
........................................................................................
Citat:
Pretpostaviti ću da se radi o testiranju RS485 "umrežavanja" dva kontrolera jer za paljenje ledice najednom kraju parice tipkom na drugom kraju dovoljne su samo žice.
Dobra pretpostavka, cilj je učenje.
Citat:
Dakle imaš dva kontrolera kojima je serijsko sučelje vezano po RS485 standardu. Oba imaju podešene iste brzine i formate prijenosa. Onaj s tipkom na nekom ulazu radi predaju a onaj s ledicom na izlazu prijem serijske komunikacije.
Kako da implementiram ovaj zahtev?
Citat:
Ovisno o stanju tipke šalješ recimo P za pritisnutu tipku ili O za otpuštenu tipku. Kad onaj s ledicom primi P upališ ledicu a ako primi O ugasiš ledicu (ili ako ne primi ništa).
Ovaj deo sam skontao, definišem pin, deklarišem promenjivu i u zavisnosti od pina menja mi se promenjiva. Sad samo treba nekako preneti ovu promenjivu od kontrolera "A" do kontrolera "B". Sa "B" strane treba isčitati dolaznu promenjivu i u zavisnosti od stanja pali ili ne led.
Citat:
Npr: želiš li na jedan pritisak tipke upaliti a na sljedeći ugasiti ledicu treba tu logiku ugraditi na prijemnoj strani.
Za početak bih probao sa klasičnim prekidačem on/off. BTW prošle noći sam pisao kod za ovu zavrzlamu (pritisnem taster upaljeno, ponovo pritisnem ugašeno).
Evo kako sam ja to napisao i odlično mi radi
Code:
#define evacuate_inp PIND.5 //definišem ulazni pin
unsigned int evacuate; //deklarišem promenjivu
if (evacuate&!evacuate_inp){ //proveravam dal je taster pritisnut ponovo
while(evacuate&!evacuate_inp){ //ostajem u petlji dok je pritisnut
delay_ms(50); //debounce vreme
}
evacuate=0; //promenjivoj dodeljujem vrednost 0
}
if (!evacuate_inp){ //proveravam dal je taster pritisnut
while(!evacuate_inp) //ostajem u petlji dok je taster pritisnut
delay_ms(50); //debounce vreme
LED1=0; //palim led
evacuate=evacuate_inp; //promenjivoj dajem vrednost očitanog pina pre izlaska iz petlje
}
if (evacuate>=1) LED1=0; //ako je promenjiva 1 pali led
if (evacuate<1) LED1=1; //ako je promenjiva 0 gasi led
Trudio sam se da uprostim koliko je to moguće.
Hvala na pomoći