RTV forum PL | NewsGroups PL

Nieprawidłowe dane z USART w ATmega8 co może być nie tak?

avr usart problem ? albo niewiedza,

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Nieprawidłowe dane z USART w ATmega8 co może być nie tak?

pit202
Guest

Tue Oct 24, 2006 9:44 am   



witam ponownie, mam taki drobny problem a atmega8
niby wszystko mam dobrze poustawiane , predkosci,
bity, oscylatory zewn. i wewnetrzne a i nie dziala.
wysylam z procka liczne 0x31 a w PC otrzymuje 7 liczb 0x00
sprawdzalem z zewn. i wewn. oscylatorem, sprawdzalem na
tranzystorowym konwerterze napiec i na max`ie , wszedzie
to samo , juz nie mam wiecej pomysłow , funkcje przepisane
z podrecznika atmegi , ktos moze ma jakis pomysl ? pewnie
to jakas glupota albo nie wiem.z gory dziękuje.



moj prosty program :


#define AVR_ATmega8
#include <avr/io.h>
#include <avr/interrupt.h>

#define FOSC 8000000
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1

void USART_Init(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>Cool;
UBRRL = (unsigned char) ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);
};

void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) ) ;
UDR = data;
};

unsigned char USART_Receive( void )
{
while ( !(UCSRA & (1<<RXC)) );
return UDR;
};


int main ( void ) {
cli();
USART_Init (MYUBRR);
sei();

USART_Transmit(0x31);
while (1) {
USART_Transmit(USART_Receive());
};
};

Pawel
Guest

Tue Oct 24, 2006 10:25 am   



Witam.

UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);

Czy oby na pewno transmisja ma być SYNCHRONICZNA?

Pozdrawiam
Paweł

Quote:
moj prosty program :


#define AVR_ATmega8
#include <avr/io.h
#include <avr/interrupt.h

#define FOSC 8000000
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1

void USART_Init(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>Cool;
UBRRL = (unsigned char) ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);
};

void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) ) ;
UDR = data;
};

unsigned char USART_Receive( void )
{
while ( !(UCSRA & (1<<RXC)) );
return UDR;
};


int main ( void ) {
cli();
USART_Init (MYUBRR);
sei();

USART_Transmit(0x31);
while (1) {
USART_Transmit(USART_Receive());
};
};


pit202
Guest

Tue Oct 24, 2006 10:36 am   



Pawel napisał(a):
Quote:
Witam.

UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);

Czy oby na pewno transmisja ma być SYNCHRONICZNA?

nie, ale juz zmieniałem wszystko na czuja :(

moze mam bity jakies zle ustawione ??
http://img205.imageshack.us/img205/7783/clipboard02ri8.png


--
Piotr

Pawel
Guest

Tue Oct 24, 2006 11:00 am   



Quote:

UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);

Czy oby na pewno transmisja ma być SYNCHRONICZNA?

nie, ale juz zmieniałem wszystko na czuja Sad

Hm. Moim zdaniem to niepotrzebnie ustawiasz bit UMSEL w powyższej
linijce. USMSEL=1 to transmisja synchroniczna. Może przy przepisywaniu
przykładu z książki pomyliłeś go z URSEL.

Pozdrawiam
Paweł

Piotrek Sz.
Guest

Tue Oct 24, 2006 1:41 pm   



Pawel <paw1976@poczta.onet.pl> napisał(a):

Quote:

UCSRC = (1<<UMSEL)|(1<<USBS)|(1<<UPM1)|(1<<UCSZ1);

Czy oby na pewno transmisja ma być SYNCHRONICZNA?

nie, ale juz zmieniałem wszystko na czuja Sad

"Na czuja" jest 256 możliwości , czy sprawdziłeś wszystkie Wink
Spróbuj UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
czyli ustawienia domyślne , po power reset.

Piotrek


--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

pit202
Guest

Tue Oct 24, 2006 4:02 pm   



Piotrek Sz. napisał(a):
Quote:
"Na czuja" jest 256 możliwości , czy sprawdziłeś wszystkie Wink
Spróbuj UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
czyli ustawienia domyślne , po power reset.

ciagle same zera, moze mam cos zle na schemacie ?
a moze jest jakies logiczne wytlumaczenie ze ciagle
dostaje zera ? wysylam 1 bajt a dostaje czasami 3 czasem
4 bajty w PC ;-/

--
Piotr

dziadek Ben
Guest

Tue Oct 24, 2006 4:05 pm   



Quote:
...wysylam 1 bajt a dostaje czasami 3 czasem
4 bajty w PC ;-/

To wygląda, jakbyś miał ustawiony baudrate w PC 4 razy szybszy, niż w uP !

--
dziadek Ben
[z adresu wytnij co trzeba]

pit202
Guest

Tue Oct 24, 2006 4:08 pm   



pit202 napisał(a):
Quote:
ciagle same zera, moze mam cos zle na schemacie ?

schemat, na wszelki wypadek bo juz naprawde nie wiem
o co tu biega , do tej pory z AT90 nie mialem klopotu
a tu nagle jakis usart i jaja.

http://www.piter.mily.pl/untitled.sch

--
Piotr

pit202
Guest

Tue Oct 24, 2006 4:20 pm   



dziadek Ben napisał(a):
Quote:
...wysylam 1 bajt a dostaje czasami 3 czasem
4 bajty w PC ;-/

To wygląda, jakbyś miał ustawiony baudrate w PC 4 razy szybszy, niż w uP !

sprawdzilem to w praktyce , wysylam z uC 2 bajty i o dziwo przy

wiekszych predkosciach 9600-115200 zawsze dostaje 9 bajtów w PC ;-/

natomiast zaczyna to chodzic ale nie do konca jak ustawie predkosci
rzedu 110-300 bps - cos mam pewnie nadal zle ustawione w procku ,
co jeszcze trzeba ustawic ? moze procek zepsuty ?

http://img55.imageshack.us/img55/4079/clipboard01qg2.png

--
Piotr

Marcin Stanisz
Guest

Tue Oct 24, 2006 5:31 pm   



Dnia Tue, 24 Oct 2006 18:08:47 +0200, pit202 napisał(a):

Quote:
pit202 napisał(a):
ciagle same zera, moze mam cos zle na schemacie ?

schemat, na wszelki wypadek bo juz naprawde nie wiem
o co tu biega , do tej pory z AT90 nie mialem klopotu
a tu nagle jakis usart i jaja.

http://www.piter.mily.pl/untitled.sch

Bu. Tranzystory zamiast maxa ;)

Oscyloskopem sprawdzałeś, co wychodzi z procka i za układem?

A jeśli nie masz oscyloskopu, zapodaj w kółko nadawanie 0xaa i zmierz
miernikiem.

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

pit202
Guest

Tue Oct 24, 2006 5:55 pm   



Marcin Stanisz napisał(a):
Quote:
Bu. Tranzystory zamiast maxa Wink
Oscyloskopem sprawdzałeś, co wychodzi z procka i za układem?
A jeśli nie masz oscyloskopu, zapodaj w kółko nadawanie 0xaa i zmierz
miernikiem.

hehe, max to kobyla a do tego cala gromadka kondzioli , wole takie,
dziala mi na ukladzie 1200 , co ciekawsze teraz znowu zablokowalem
sobie procka a ciekawsze jest to, ze znowu nie wiem jak , nie reaguje
na polecenia ISP , program dziala , ooo juz nie dziala nic , to juz
2gi procek ? co robie zle ? wgralem nowy flash ponaciskalem pare razy
reset , kurde co z tymi megami ?

--
Piotr

Marcin Stanisz
Guest

Tue Oct 24, 2006 6:02 pm   



Dnia Tue, 24 Oct 2006 19:55:22 +0200, pit202 napisał(a):
Quote:
hehe, max to kobyla a do tego cala gromadka kondzioli , wole takie,
dziala mi na ukladzie 1200 , co ciekawsze teraz znowu zablokowalem
sobie procka a ciekawsze jest to, ze znowu nie wiem jak , nie reaguje
na polecenia ISP , program dziala , ooo juz nie dziala nic , to juz
2gi procek ? co robie zle ? wgralem nowy flash ponaciskalem pare razy
reset , kurde co z tymi megami ?

Nie wiem, chłopie, nigdy mi się to nie zdarzyło :(

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

grze
Guest

Tue Oct 24, 2006 6:54 pm   



Moze nie do konca umiesz uzywac swojego kompilatora C.
Napisz kilka linijek w ASM i zobacz czy pojdzie

pit202
Guest

Wed Oct 25, 2006 5:55 pm   



Marcin Stanisz napisał(a):
Quote:
Nie wiem, chłopie, nigdy mi się to nie zdarzyło Sad
najdziwniejsze jest dla mnie to, ze po przelutowaniu procka

zaczelo dzialac Sad i na 1Mhz i na 8Mhz ;-/
dziękuję wszystkim za chęci i pomoc.

--
Piotr

elektroda NewsGroups Forum Index - Elektronika Polska - Nieprawidłowe dane z USART w ATmega8 co może być nie tak?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map