Re: Dziwny problem z RS485 + AVR



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Tomek =?ISO-8859-2?Q?G=B3uch?= <adres_at_nospam_w.stopce>
Subject: Re: Dziwny problem z RS485 + AVR
Date: Thu, 4 Aug 2005 20:01:48 +0200


Był czw, 04. sierpień 2005 19:29 gdy "dziadek Ben" <ja44_at_nospam_op.pl>
napisał(a):

Od dłuższego czasu męczę się z uruchomieniem transmisji po RS-485
pomiędzy PC a ATtiny2313.
Udostępnij pełny schemat, może coś wypatrzymy ;)
dziadek Ben
Od strony PC jest:
http://home.scarlet.be/~dc11cd/tekening/figuur2.gif

Od strony AVRa:
http://home.scarlet.be/~dc11cd/tekening/figuur2A.gif
tylko procek to ATtiny2313, pull-upy obecnie to potencjometry ustawione
na 670omów


program którym to testuje uprościłem już na maksa jak się dało i przy
włączonym cały czas nadajniku wysyła stały znak non-stop:

#define F_CPU 8000000UL
#define delay_us(x) for (loop=0; loop<x; loop++) delay_loop2(1000);

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/eeprom.h>
#include <avr/sfr_defs.h>
#include "bits.c"

typedef unsigned char u08;

void usart_init();
void USART_Transmit(u08 data);
volatile int data=0;
volatile int adr=0;
void usart_init()
{
// set UART options
UBRRH = 0;// 19200 bps dla 8 MHz
UBRRL = 25; //25,51,103 | _BV(RXCIE)
UCSRB |= _BV(TXEN); //| _BV(TXCIE);// Tx Complete Interrupt & EnableTx
// UCSRB |= _BV(RXEN) | _BV(RXCIE);// Rx Complete Interrupt & EnableRx
UCSRC = _BV(UCSZ1) | _BV(UCSZ0);// 8N1}



void USART_Transmit( u08 data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
// s_bit(&PORTD,PD6);
//c_bit(&PORTB,PB2);
UDR = data;
}


int main(void)
{
// Initiate Ports
DDRB = (1<<PB2); //wyjscie na pb2
DDRD = (1<<PD6); //wejscia + wyjscie na pd6
s_bit(&PORTB,PB2); //zgaszone
c_bit(&PORTD,PD6); //wylaczony nadajnik
int loop=0;
usart_init();
sei();// Enable global interrupts

u08 i,pierwszy,drugi;

int licznik = 0;
int interval=50;
u08 bum=180;

c_bit(&PORTB,PB2);
s_bit(&PORTD,PD6); /wlacza nadajnik

while(1)// Loop forever
{
//continue;
// USART_Receive();//(u08)licznik);
// USART_Transmit((u08)0x80);
UDR = 123;
delay_us(14);

UDR = 56;
delay_us(14);

}//main loop
}

--
Z pozdrowieniami, Tomek Głuch [ Linux Registered User #280206 ]
[ tomek_at_nospam_SPAM-FEEwieliczka.int.pl ]


Poprzedni Następny
Wiadomość
Spis treści
From: "dziadek Ben" <ja44_at_nospam_op.pl>
Subject: Re: Dziwny problem z RS485 + AVR
Date: Thu, 4 Aug 2005 22:19:13 +0200


Od strony PC jest:
http://home.scarlet.be/~dc11cd/tekening/figuur2.gif
Od strony AVRa:
http://home.scarlet.be/~dc11cd/tekening/figuur2A.gif
tylko procek to ATtiny2313, pull-upy obecnie to potencjometry ustawione
na 670omów

Sprawdź oscyloskopem, czy aby na pewno DE (po obu stronach) jest poprawnie
sterowane! - ja się kiedyś na tym przewiozłem ;(

dziadek Ben



Poprzedni Następny
Wiadomość
Spis treści
From: Mariusz Dybiec <mardyb_at_nospam_poczta.onet.pl>
Subject: Re: Dziwny problem z RS485 + AVR
Date: Thu, 04 Aug 2005 22:42:56 +0200


Tomek Głuch wrote:
Był czw, 04. sierpień 2005 19:29 gdy "dziadek Ben" <ja44_at_nospam_op.pl>
napisał(a):


Od dłuższego czasu męczę się z uruchomieniem transmisji po RS-485
pomiędzy PC a ATtiny2313.

Udostępnij pełny schemat, może coś wypatrzymy ;)
dziadek Ben

Od strony PC jest:
http://home.scarlet.be/~dc11cd/tekening/figuur2.gif

Od strony AVRa:
http://home.scarlet.be/~dc11cd/tekening/figuur2A.gif
tylko procek to ATtiny2313, pull-upy obecnie to potencjometry ustawione
na 670omów

1. Na schemacie masz 75184 i odwrotnie popodciągane B i A. Ale
zamienione są obie linie w porównaniu do 176 to może jest dobrze.
2. Po stronie PC lepiej połączyć DE z /RE bo będziesz miał echo.
3.Spróbuj wysterowacć linie ręcznie:
Po stronie PC DE/RE na niski po stronie AVR na wysoki i ręcznie wymuszaj
stany na lini D po stronie AVR ( możesz wyjąć procka). Powinno ustawiać
AVR 5V -> RS232 -10V
AVR 0V -> RS232 +10V

--
Pozdrawiam
MD

"Ja nie myślę, ja dyskutuję na pcoa" (c) Artur Karaźniewicz