avr usart problem ? albo niewiedza,

Oct 24, 2006 13 Replies

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>>8); 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()); }; };


Witam.

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

Czy oby na pewno transmisja ma byæ SYNCHRONICZNA?

Pozdrawiam Pawe³

Pawel napisał(a):

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

moze mam bity jakies zle ustawione ??

formatting link

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³

Pawel snipped-for-privacy@poczta.onet.pl> napisał(a):

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

Piotrek

Piotrek Sz. napisał(a):

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 ;-/

To wygl±da, jakby¶ mia³ ustawiony baudrate w PC 4 razy szybszy, ni¿ w uP !

pit202 napisał(a):

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.

formatting link

dziadek Ben napisał(a):

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 ?

formatting link

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

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

Marcin Stanisz napisał(a):

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 ?

Dnia Tue, 24 Oct 2006 19:55:22 +0200, pit202 napisał(a):

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

Pozdrawiam Marcin Stanisz

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

Marcin Stanisz napisał(a):

najdziwniejsze jest dla mnie to, ze po przelutowaniu procka zaczelo dzialac :( i na 1Mhz i na 8Mhz ;-/ dziękuję wszystkim za chęci i pomoc.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required