[ dakinet @ 22.01.2013. 10:56 ] @
ima li neko ideju kako da umrežim dva procesora da pričaju preko 485, da na jednom bude taster a na drugom led, pa kad kliknem na taster "ovde" da se upali led "tamo".
Pozdrav
[ ZAS011 @ 22.01.2013. 11:17 ] @
Zna čika Toma
[ dakinet @ 22.01.2013. 11:41 ] @
U to nema sumnje :)
[ micromatic @ 22.01.2013. 13:59 ] @
Malo nejasno postavljeno pitanje! Probaj svakako bolje pojasniti što želiš.

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.

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. 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). Ovo je najjednostavnije pojašnjenje.Tu sad nastupa sva ostala moguća programska zavrzlama. Npr: želiš li na jedan pritisak tipke upaliti a na sljedeći ugasiti ledicu treba tu logiku ugraditi na prijemnoj strani. Ja bi doduše to odradio rađe na predajnoj ali ako malo bolje pojasniš što ti treba mogu pomoći.
[ dakinet @ 22.01.2013. 23:46 ] @
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
[ Genie_1984 @ 23.01.2013. 00:53 ] @
Ono što ti treba da implementiraš je protokol koji ce razumeti svi "umreženi" mikrokotroleri.
Uobičajan format je adresa (kome su podaci namenjeni), komanda (šta da radi) ,parametri(ako su potrebni za komandu) i CRC.

Pronadji knjigu "Serial Port Complete:Programming and Circuits for Rs-232 and Rs-485 Links and Networks" i u poglavnju "Network programming" ti je lepo objašnjeno šta je obavezno prilikom realizacije

Imaš i primera na netu (npr. Winpenny rs485 ali nije kompletan,možeš da vidiš samo princip,mada bi za led ON/OFF bio ok,pri tome da je tu primer za MASTER/SLAVE konfiguraciju).

Pozdrav








[ m51 @ 23.01.2013. 13:06 ] @
Smatram da je u ovome preskočen jedan korak. Najbolje bi bilo da prvo savladaš RS232 komunikaciju, što je i softversk aosnova RS485 komunikacije. Kada postigneš da ono što si hteo sa RS485 radi sa RS232 lako ćeš preći na napredne teme (izvesni hardverski dodaci, a softver može i da ostane isti).
[ dakinet @ 24.01.2013. 09:54 ] @
@Genie_1984
Slab sam sa engleskim, jel ima neka domaća literatura?

@m51
Može za početak i 232

Ima li neko primer koda kako se definiše rs232 protokol, kako da kontroleru "A" kažem pošalji promenjivu "prekidač", kako da mi kontroler "B" primi poslatu promenjivu.

drugi korak bi bio da kontroler "B" vrati informaciju kontroleru "A" (uspešno sam primio informaciju ili nisam primio informaciju)

Ja bih posle usložnio dodatno i prilagodio izlazima/ulazima.

Hvala
[ ZAS011 @ 24.01.2013. 17:57 ] @
RS-232 i RS-485 su hardverska "podloga" putem koje se vrši komunikacija, protokoli su nešto sasvim drugo.
RS-232 je serijska komunikacija nebalansnim (asimetričnim) linijama, naponskog tipa, RS-485 je serijska komunikacija balansiranim (simetričnim) linijama, naponskog tipa, RS-422 je slična RS-485 samo što je strujnog tipa.
Opet da ti napomenem, protokoli su isključivo softverske prirode.

Što se jezika tiče, potrudi se da naučiš engleski, bez njega ćeš teško da "plivaš" u ovim vodama.
[ dakinet @ 27.01.2013. 08:28 ] @
@micromatic
Druže jel imaš primer za komunikaciju između dva kontrolera?
[ dakinet @ 28.01.2013. 09:20 ] @
evo ga odličan tutorijal za UART komunikaciju u jednom pravcu, moze li mi neko pomoci da ovu komunikaciju prevedem u 485?

http://www.newbiehack.com/UART-OneWay-ChipToChip.aspx

Code:
The Transmitting Chip's Program:

#define numberOfButtons 1

include <avr/io.h>
#include"ButtonPress.h"

int main(void)
{
DDRB |= 1 << PINB1;
DDRB &= ~(1 << PINB0);
PORTB |= 1 << PINB0;

int UBBRValue = 25;

//Put the upper part of the baud number here (bits 8 to 11)
UBRR0H = (unsigned char) (UBBRValue >> 8);

//Put the remaining part of the baud number here
UBRR0L = (unsigned char) UBBRValue; 

//Enable the receiver and transmitter
UCSR0B = (1 << RXEN0) | (1 << TXEN0);

//Set 2 stop bits and data bit length is 8-bit
UCSR0C = (1 << USBS0) | (3 << UCSZ00); 

while (1)
{
if (ButtonPressed(0, PINB, 0, 100))
{
PORTB ^= 1 << PINB1;

//Wait until the Transmitter is ready
while (! (UCSR0A & (1 << UDRE0)) ); 

//Get that data outa here!
UDR0 = 0b11110000;
}
}
}


Code:
The Receiving Chip's Program:

include <avr/io.h>
int main(void)
{
DDRB |= (1 << PINB0);

//Communication UART specifications (Parity, stop bits, data bit length) 
int UBRR_Value = 25; //This is for 2400 baud
UBRR0H = (unsigned char) (UBRR_Value >> 8);
UBRR0L = (unsigned char) UBRR_Value;
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << USBS0) | (3 << UCSZ00);

unsigned char receiveData;
while (1)
{
while (! (UCSR0A & (1 << RXC0)) );

receiveData = UDR0;

if (receiveData == 0b11110000) PORTB ^= (1 << PINB0);
}
}
[ ZAS011 @ 28.01.2013. 10:05 ] @
Ti, izgleda, ne čitaš dobro ono što je napisano.
RS-232, RS-485, RS-422, ... su ELEKRTIČNI načini povezivanja između uređaja/kontrolera.
Ovi snippet-i će raditi na bilo kom hardverskom interfejsu.

Znači, ako hoćeš RS-485, sa svake strane bi trebalo da imaš MAX485 za half-duplex ili MAX488 za full-duplex.
[ micromatic @ 28.01.2013. 12:11 ] @
Evo mala pomoć.

Napravio sam mali tutorial. nadam se da će pomoći.
[ dakinet @ 28.01.2013. 13:36 ] @
@ZAS011
Ukapirao



@micromatic
Odličan tutorijal pogledaću danas posle posla detaljnije.
Hvala.
[ ZAS011 @ 28.01.2013. 15:09 ] @


[ micromatic @ 29.01.2013. 13:09 ] @
Napravljena je još mala dopuna tutoriala

Ako nešto treba dodatno pojasniti tu sam.
[ dakinet @ 31.01.2013. 09:12 ] @
Bravo druže!, svaka ti čast!

Hteo sam te pitati za ovaj slučaj koji si obradio u dopuni:
jedan uređaj na više uređaja i obrnuto.

Genijalno ovako detaljno objašnjenje nisam očekivao.
Hvala ti, puno si pomogao.
Veliki pozdrav
[ micromatic @ 12.02.2013. 07:37 ] @
@dakinet

I kako napreduješ?