Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Tiny2313][C] Transmisja RS485

wojtek8-7 08 May 2012 21:48 2374 4
  • #1
    wojtek8-7
    Level 12  
    Witam

    Walczę z tym tematem już dość długo i nie mogę sobie sam poradzić, może wy pomożecie... Chcę z komputera za pomocą terminala sterować Attiny2313 za pomocą rs485. Wszystko dział ok po rs232 po 485 już nie. Po niżej pokażę schemat i program. Na schemacie jest podpisany układ MAX3468 ale w rzeczywistości jest tam MAX485 podłączony tak jak na schemacie. Do portu B podłączonych jest 8 diod, jednak na porcie B nic się nie dzieje.

    [Tiny2313][C] Transmisja RS485

    
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define F_CPU 8000000L  
    #define BAUD 9600  
    #define __UBRR ((F_CPU/(16*BAUD)) - 1)
    
    void USART_Init (uint32_t baud)
    {
    	UBRRH = 0;
    	UBRRL = 51;
    	
    	UCSRB = (1<<RXEN)|(1<<TXEN);
    	UCSRC = (1<<UCSZ0)|(1<<UCSZ1)|(1<<USBS);
    	
    }
    
    
    void UART_Transmit (unsigned char data)
    {
    	while (!(UCSRA & (1<<UDRE)));
    	UDR = data;
    }
    
    unsigned char UART_Receive (void)
    {
    	while (!(UCSRA & (1<<RXC)));
    	return UDR;
    }
    
    int main(void)
    {
    	USART_Init(__UBRR);
    	DDRB = 0xff;
    	PORTB = 0xff;
    	unsigned char znak;
    	volatile int i;
        while(1)
        {
    		znak = UART_Receive();
    		PORTB = znak;
    		//UART_Transmit(znak);
    		
    		
           
        }
    }
    


    Dodam jeszcze, że na piny 2i 3 MAX485 podaje raz 5V raz GND, zamieniam miejscami RO z DI ale niczego to nie zmienia...
    Używam przejściówki USB ->RS485 firmy Unitek Y-1081, przejściówka jest wykrywana przez system.
    http://www.aksonet.pl/Unitek_Y_1081_adapter_USB_1x_RS_485-3385.html
  • Helpful post
    #2
    tmf
    Moderator of Microcontroller designs
    Nie sterujesz w programie pinem PD6 (RE/DE), to jak to ma działać? Chcesz coś odebrać to musisz odblokować odbiornik w transceiverze. A jak masz transceiver podłączony pod PC? Co steruje kierunkiem przepływu?

    Dodano po 2 [minuty]:

    A, nie zauważyłem linka do przejściówki pod PC. Trochę mnie niepokoi stwierdzenie, że ma automatyczną kontrolę przepływu, szczególnie w kontekście zmiennego bitrate. Jakie to ma API od strony PC? Przypuszczam, że jednak przepływem musi w jakiś sposób sterować program.

    Dodano po 1 [minuty]:

    No i RS482 potrzebuje rezystorów polaryzujących linie A i B, terminator też by się przydał.
  • #3
    wojtek8-7
    Level 12  
    Piny sterujące RE/DE są na sztywno podłączone do masy lub do 5V. Przejściówka niby powinna działać, mam nadzieje że nie w tym jest problem. Można jakoś sprawdzić przejściówkę?

    Dzięki za podsunięcie pomysłu z polaryzacją, jutro spróbuję. Terminator też podłączałem, niczego to nie zmieniało.
  • Helpful post
    #4
    Krotki
    Level 14  
    Sam terminator niczego Ci nie da ... Aby na liniach było odpowiednie napięcie muszą być wszystkie rezystory, które tworzą 2 potencjały. Patrząc na to inaczej szyna rs485 musi być zasilana (jak wszystko), bo inaczej nie chce działać. A terminatory maja dwojaką rolę. Ta podstawowa to redukcja odbić, ale druga to zrównoważenie napięć na linii. Dzięki terminatorowi lub dwóm (w przypadku długich przewodów konieczność) i 2 rezystorom tworzą się 2 dzielniki napięcia, które ustalają stan linii. Ten stan jest odpowiednio zmieniany przez nadajnik, aby wszystkie odbiorniki go zinterpretowały. I tutaj dochodzimy do tego ze mamy wspólne medium i transmisja jest half-duplex i w danym czasie moze nadawać tylko jedno urządzenie. Stąd sterowanie pinami RE/DE jest koniecznie, chyba ze tylko dobierasz lub tylko wysyłasz dane. Taka teoria rs485 w srócie.
  • #5
    wojtek8-7
    Level 12  
    Dzięki za zainteresowanie i szybką pomoc. Już wszystko działa, uszkodzony był MAX ale nowy nie chciał ruszyć bez rezystorów podciągających.

    Napiszę dla innych szukających odpowiedzi na podobne pytanie, konieczne jest użycie terminatora 120Ω między liniami RS oraz podciągnięcie linii RS+ przez rezystor 680Ω do 5V i podciągnięcie linii RS- przez rezystor 680Ω do masy.