Problem z RS w AVR ATmega16
Problem z RS w AVR ATmega16
Czesc, mam procka ATmega16, dolaczylem transciever rs 232 max220, ale nie mam komunikacji z kompem. Jak krzyzuje za maxem TXD RXD to jest przejscie danych natomiast sygnal nie dochodzi do kompa. Kabel napewno jest dobry port tez. Co moze byc przyczyna kabel w rs moze byc 15 m ja mam 2 wiec prosze o pomoc bo juz mam brak pomyslow. Moze mase mam podlaczyc nie od zasilania? Aha mam jeden kondensatro ceramiczny zamista elektrolitu, ale to chyba nie robi roznicy skoro procek sam siebie widzi.
Może baś tak jakiś rysuneczek, czy coś ... innego, bo ... wóżki to ... są ... w innym miejscu.
PS
Długość kable oczywiście ma znaczenie, ale dla 9600 poniżej 0,5 km to nie ma czym się przejmować. Wiem, wiem, zaraz usłyszę, że dla 9600 to 15 m, bo norma... a praktyka ... swoją drogą.
to moj program
#include <avr\io.h>
// inicjalizacja rs 232
#define FOSC 11059200 //clock speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void init_rs(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
//UCSRB = (1<<RXEN) | (1<<TXEN);
//UCSRC = (1<<USBS) | (3<<UCSZ0);
//UCSRC |=0xC0;
//UCSRA &= 0x0FD;
UCSRB |=0x18;
UCSRB &=0xfB;
UCSRC =0x8E ;
}
void wyslij(int dane)
{
while ( !(UCSRA & (1<<UDRE) ) );
UDR=dane;
}
int odbierz(void)
{
while ( !(UCSRA & (1<<RXC) ) );
return UDR;
}
main()
{
int a;
init_rs(71);
DDRD=0xff; // ustawienie pordu D jako wyjscie
PORTD=0xff;
while(1)
{
//for(a=0;a<10000;a++);
//PORTD=0x00;
//if (PORTD==0)
//for(a=0;a<10000;a++);
// PORTD=0xff;
//a=odbierz();
// wyslij(23);
//for(a=0;a<10000;a++);
//PORTD=0xff;
if (a==68) PORTD=0x00;
}
}
moze max jest walniety bo na wyjsciu jak nic nie wysyla na txd jest tylko 5,5v a jak wysyla to tez okolo tyle
#include <avr\io.h>
// inicjalizacja rs 232
#define FOSC 11059200 //clock speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void init_rs(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
//UCSRB = (1<<RXEN) | (1<<TXEN);
//UCSRC = (1<<USBS) | (3<<UCSZ0);
//UCSRC |=0xC0;
//UCSRA &= 0x0FD;
UCSRB |=0x18;
UCSRB &=0xfB;
UCSRC =0x8E ;
}
void wyslij(int dane)
{
while ( !(UCSRA & (1<<UDRE) ) );
UDR=dane;
}
int odbierz(void)
{
while ( !(UCSRA & (1<<RXC) ) );
return UDR;
}
main()
{
int a;
init_rs(71);
DDRD=0xff; // ustawienie pordu D jako wyjscie
PORTD=0xff;
while(1)
{
//for(a=0;a<10000;a++);
//PORTD=0x00;
//if (PORTD==0)
//for(a=0;a<10000;a++);
// PORTD=0xff;
//a=odbierz();
// wyslij(23);
//for(a=0;a<10000;a++);
//PORTD=0xff;
if (a==68) PORTD=0x00;
}
}
moze max jest walniety bo na wyjsciu jak nic nie wysyla na txd jest tylko 5,5v a jak wysyla to tez okolo tyle
Witam!
Narysuj schemat, jak masz to podpięte, rozwiejesz wątpliwości...
Pozdrawiam!
Marcin "Max" G.
Z tego wynika, że masz źle podpiętego tego MAX'a - 5,5V to jest, ale na wyjściu odbiornika do uP... A nie od strony komputera...Majey pisze:moze max jest walniety bo na wyjsciu jak nic nie wysyla na txd jest tylko 5,5v a jak wysyla to tez okolo tyle
Narysuj schemat, jak masz to podpięte, rozwiejesz wątpliwości...
Pozdrawiam!
Marcin "Max" G.
Oj, Majey, przecież wcześniej sam pisałeś, że program działa na zapętleniu, to dlaczego pokazujesz program? Pokaż schemat, połączenie do kompa, określ jak jest zrobiony kabelek, tj. jaki pin gdzie idzie ... itp.Majey pisze: moze max jest walniety bo na wyjsciu jak nic nie wysyla na txd jest tylko 5,5v a jak wysyla to tez okolo tyle