logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega128] [Atmega128][C] - UART nie wysyła znaków, rejestr UDR0 pusty, rezonator 8MHz

Bubu_PL 26 Lip 2012 23:19 3887 37
REKLAMA
  • #1 11147508
    Bubu_PL
    Poziom 11  
    Witam!
    Próbuję odpalić prosty kod aby wysłać (i odebrać na PC) znak 'A'.
    Jednak nic nie działa.. przy próbie debugowania zauważam że rejestr UDR0 jest cały czas pusty.. czy to normalne? Rezonator 8MHz

    Pozdrawiam
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11147535
    excray
    Poziom 41  
    Czemu cały czas w pętli inicjujesz USART? Czemu nie wysterowałeś pinu Tx jako pinu wyjściowego?
  • #3 11147654
    LordBlick
    VIP Zasłużony dla elektroda
    Brakuje konwersji do uint16_t dla _UBRR. Pokaż plik lss, to powróżę więcej...;)
    Bym się martwił o odłączanie programatora ISP po zaprogramowaniu, ale:
    Bubu_PL napisał:
    przy próbie debugowania zauważam że rejestr UDR0 jest cały czas pusty
    Czym debugujesz ?
  • #4 11148219
    xamrex
    Poziom 28  
    excray napisał:
    Czemu nie wysterowałeś pinu Tx jako pinu wyjściowego?

    Chyba domyślnie po resecie uC wszystkie piny są jako wyjście

    Bubu_PL napisał:
    Jednak nic nie działa.

    Czyli nawet żadnych 'śmieci' nie dostajesz na terminal?

    Inicjalizacje wyrzuć przed pętle while
  • #5 11148226
    Bubu_PL
    Poziom 11  
    debuguje jtag-ice, probowalem tez emulatorem...

    plik lss:
    
    inz.elf:     file format elf32-avr
    
    Sections:
    Idx Name          Size      VMA       LMA       File off  Algn
      0 .text         0000011a  00000000  00000000  00000054  2**1
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
      1 .debug_aranges 00000020  00000000  00000000  0000016e  2**0
                      CONTENTS, READONLY, DEBUGGING
      2 .debug_pubnames 0000003d  00000000  00000000  0000018e  2**0
                      CONTENTS, READONLY, DEBUGGING
      3 .debug_info   000001e5  00000000  00000000  000001cb  2**0
                      CONTENTS, READONLY, DEBUGGING
      4 .debug_abbrev 0000010e  00000000  00000000  000003b0  2**0
                      CONTENTS, READONLY, DEBUGGING
      5 .debug_line   000001ba  00000000  00000000  000004be  2**0
                      CONTENTS, READONLY, DEBUGGING
      6 .debug_frame  00000040  00000000  00000000  00000678  2**2
                      CONTENTS, READONLY, DEBUGGING
      7 .debug_str    000000d5  00000000  00000000  000006b8  2**0
                      CONTENTS, READONLY, DEBUGGING
      8 .debug_loc    00000018  00000000  00000000  0000078d  2**0
                      CONTENTS, READONLY, DEBUGGING
      9 .debug_ranges 00000090  00000000  00000000  000007a5  2**0
                      CONTENTS, READONLY, DEBUGGING
    
    Disassembly of section .text:
    
    00000000 <__vectors>:
       0:	0c 94 46 00 	jmp	0x8c	; 0x8c <__ctors_end>
       4:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
       8:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
       c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      10:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      14:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      18:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      1c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      20:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      24:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      28:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      2c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      30:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      34:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      38:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      3c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      40:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      44:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      48:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      4c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      50:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      54:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      58:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      5c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      60:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      64:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      68:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      6c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      70:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      74:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      78:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      7c:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      80:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      84:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
      88:	0c 94 5d 00 	jmp	0xba	; 0xba <__bad_interrupt>
    
    0000008c <__ctors_end>:
      8c:	11 24       	eor	r1, r1
      8e:	1f be       	out	0x3f, r1	; 63
      90:	cf ef       	ldi	r28, 0xFF	; 255
      92:	d0 e1       	ldi	r29, 0x10	; 16
      94:	de bf       	out	0x3e, r29	; 62
      96:	cd bf       	out	0x3d, r28	; 61
    
    00000098 <__do_copy_data>:
      98:	11 e0       	ldi	r17, 0x01	; 1
      9a:	a0 e0       	ldi	r26, 0x00	; 0
      9c:	b1 e0       	ldi	r27, 0x01	; 1
      9e:	ea e1       	ldi	r30, 0x1A	; 26
      a0:	f1 e0       	ldi	r31, 0x01	; 1
      a2:	00 e0       	ldi	r16, 0x00	; 0
      a4:	0b bf       	out	0x3b, r16	; 59
      a6:	02 c0       	rjmp	.+4      	; 0xac <__do_copy_data+0x14>
      a8:	07 90       	elpm	r0, Z+
      aa:	0d 92       	st	X+, r0
      ac:	a0 30       	cpi	r26, 0x00	; 0
      ae:	b1 07       	cpc	r27, r17
      b0:	d9 f7       	brne	.-10     	; 0xa8 <__do_copy_data+0x10>
      b2:	0e 94 5f 00 	call	0xbe	; 0xbe <main>
      b6:	0c 94 8b 00 	jmp	0x116	; 0x116 <_exit>
    
    000000ba <__bad_interrupt>:
      ba:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>
    
    000000be <main>:
        }
    }
    
    void USART_Init( uint16_t baud )
    {
    	UBRR0H = (uint8_t) (baud>>8);
      be:	10 92 90 00 	sts	0x0090, r1
    	UBRR0L = (uint8_t) baud;
      c2:	83 e3       	ldi	r24, 0x33	; 51
      c4:	89 b9       	out	0x09, r24	; 9
    
    	UCSR0B = (1<<RXEN0)|(1<<TXEN0);
      c6:	88 e1       	ldi	r24, 0x18	; 24
      c8:	8a b9       	out	0x0a, r24	; 10
    	UCSR0C = (1<<UMSEL0)|(3<<UCSZ0);
      ca:	86 e4       	ldi	r24, 0x46	; 70
      cc:	80 93 95 00 	sts	0x0095, r24
    
    
    void USART_Transmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
    	UDR0=data;
      d0:	61 e4       	ldi	r22, 0x41	; 65
        milliseconds can be achieved.
     */
    void
    _delay_loop_2(uint16_t __count)
    {
    	__asm__ volatile (
      d2:	5d e0       	ldi	r21, 0x0D	; 13
      d4:	4a e0       	ldi	r20, 0x0A	; 10
      d6:	28 ec       	ldi	r18, 0xC8	; 200
      d8:	30 e0       	ldi	r19, 0x00	; 0
    }
    
    
    void USART_Transmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
      da:	5d 9b       	sbis	0x0b, 5	; 11
      dc:	fe cf       	rjmp	.-4      	; 0xda <main+0x1c>
    	UDR0=data;
      de:	6c b9       	out	0x0c, r22	; 12
    }
    
    
    void USART_Transmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
      e0:	5d 9b       	sbis	0x0b, 5	; 11
      e2:	fe cf       	rjmp	.-4      	; 0xe0 <main+0x22>
    	UDR0=data;
      e4:	5c b9       	out	0x0c, r21	; 12
    }
    
    
    void USART_Transmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
      e6:	5d 9b       	sbis	0x0b, 5	; 11
      e8:	fe cf       	rjmp	.-4      	; 0xe6 <main+0x28>
    	UDR0=data;
      ea:	4c b9       	out	0x0c, r20	; 12
      ec:	80 e1       	ldi	r24, 0x10	; 16
      ee:	97 e2       	ldi	r25, 0x27	; 39
      f0:	f9 01       	movw	r30, r18
      f2:	31 97       	sbiw	r30, 0x01	; 1
      f4:	f1 f7       	brne	.-4      	; 0xf2 <main+0x34>
    		__ticks = (uint16_t) (__ms * 10.0);
    		while(__ticks)
    		{
    			// wait 1/10 ms
    			_delay_loop_2(((F_CPU) / 4e3) / 10);
    			__ticks --;
      f6:	01 97       	sbiw	r24, 0x01	; 1
    		__ticks = 1;
    	else if (__tmp > 65535)
    	{
    		//	__ticks = requested delay in 1/10 ms
    		__ticks = (uint16_t) (__ms * 10.0);
    		while(__ticks)
      f8:	d9 f7       	brne	.-10     	; 0xf0 <main+0x32>
      fa:	ef cf       	rjmp	.-34     	; 0xda <main+0x1c>
    
    000000fc <USART_Init>:
        }
    }
    
    void USART_Init( uint16_t baud )
    {
    	UBRR0H = (uint8_t) (baud>>8);
      fc:	90 93 90 00 	sts	0x0090, r25
    	UBRR0L = (uint8_t) baud;
     100:	89 b9       	out	0x09, r24	; 9
    
    	UCSR0B = (1<<RXEN0)|(1<<TXEN0);
     102:	88 e1       	ldi	r24, 0x18	; 24
     104:	8a b9       	out	0x0a, r24	; 10
    	UCSR0C = (1<<UMSEL0)|(3<<UCSZ0);
     106:	86 e4       	ldi	r24, 0x46	; 70
     108:	80 93 95 00 	sts	0x0095, r24
    }
     10c:	08 95       	ret
    
    0000010e <USART_Transmit>:
    
    
    void USART_Transmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
     10e:	5d 9b       	sbis	0x0b, 5	; 11
     110:	fe cf       	rjmp	.-4      	; 0x10e <USART_Transmit>
    	UDR0=data;
     112:	8c b9       	out	0x0c, r24	; 12
    }
     114:	08 95       	ret
    
    00000116 <_exit>:
     116:	f8 94       	cli
    
    00000118 <__stop_program>:
     118:	ff cf       	rjmp	.-2      	; 0x118 <__stop_program>
    
  • #6 11148227
    xamrex
    Poziom 28  
    Co to takiego:
    Bubu_PL napisał:
    UCSR0C = (3<<UCSZ0);


    Nie powinno być czasem: UCSR0C = (1<<UCSZ0);
  • #7 11148234
    Bubu_PL
    Poziom 11  
    8bitowe ramka:)
  • #8 11148239
    mirekk36
    Poziom 42  
    xamrex napisał:
    excray napisał:
    Czemu nie wysterowałeś pinu Tx jako pinu wyjściowego?

    Chyba domyślnie po resecie uC wszystkie piny są jako wyjście

    Zajrzyj do noty PDF, po resecie praktycznie wszystkie rejestry mają wartość = 0, a na pewno rejestry pinów, portów i kierunków. Czyli DDRx także jest = 0 a zatem domyślnie wszystkie piny procka po resecie są WEJŚIAMI.

    Ale wcale nie trzeba ręcznie ustawiać pinu Tx na wyjście gdy się korzysta z USART ponieważ inicjalizując nadajnik i odbiornik USART jednocześnie ten moduł przechwytuje kontrolę nad tymi pinami i nie jest wymagane ustawianie ich kierunków



    Dodano po 1 [minuty]:

    xamrex napisał:
    Co to takiego:
    Bubu_PL napisał:
    UCSR0C = (3<<UCSZ0);


    Nie powinno być czasem: UCSR0C = (1<<UCSZ0);


    3<<UCSZ0

    to najnormalniejsza operacja przesunięcia bitowego - wygląda tak

    3<<0

    co oznacza że liczba 3 (dziesiętnie 0b00000011) będzie przesunięta na zerową pozycję czyli pozostanie tak jak jest ;)

    gdyby miało być tak jak mówisz: UCSR0C = (1<<UCSZ0) to zamiast dwóch bitów zostałby ustawiony tylko jeden 0b00000001 a to już nie byłaby ramka 8 bitów
  • REKLAMA
  • #9 11148294
    LordBlick
    VIP Zasłużony dla elektroda
    mirekk36 napisał:
    3<<UCSZ0

    to najnormalniejsza operacja przesunięcia bitowego - wygląda tak

    3<<0

    co oznacza że liczba 3 (dziesiętnie ? 0b00000011) będzie przesunięta na zerową pozycję czyli pozostanie tak jak jest
    Nie wiem o co chodzi, ale chyba nikomu do noty katalogowej nie chce się zaglądać - UCSZ0 nie występuję w tylko jednym rejestrze, najstarszy bit jest w UCSR0B. Należy konfigurować każdy bit oddzielnie(UCSZ00, UCSZ01, UCSZ02), tak jak to podpowiada xamex. Najmłodszy bit w UCSR0C to UCPOL0, więc to co napisał mirekk36 jest nieprzystające do prawidłowej podpowiedzi.
  • #10 11148324
    xamrex
    Poziom 28  
    LordBlick napisał:
    mirekk36 napisał:
    3<<UCSZ0

    to najnormalniejsza operacja przesunięcia bitowego - wygląda tak

    3<<0

    co oznacza że liczba 3 (dziesiętnie 0b00000011) będzie przesunięta na zerową pozycję czyli pozostanie tak jak jest
    Nie wiem o co chodzi, ale chyba nikomu do noty katalogowej nie chce się zaglądać - UCSZ0 nie występuję w tylko jednym rejestrze, najstarszy bit jest w UCSR0B. Należy konfigurować każdy bit oddzielnie(UCSZ00, UCSZ01, UCSZ02), tak jak to podpowiada xamex. Najmłodszy bit w UCSR0C to UCPOL0, więc to co pisze mirekk36 jest nie przystające do prawidłowej podpowiedzi.

    To teraz ja sie nie zgodze:
    na 176 stornie jest duklanie taka inicjalizacja:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Więc coś takiego:
    (3<<UCSZ0) to chyba nic zlego
  • REKLAMA
  • #11 11148368
    LordBlick
    VIP Zasłużony dla elektroda
    xamrex napisał:
    o teraz ja sie nie zgodze:
    na 176 stornie jest duklanie taka inicjalizacja:
    W tym procesorze USART jest podwójny, a nie jest to zawarte w przykładzie, więc należy do niego podchodzić z dystansem, bo jest tylko kopiuj-wklej ze starszych not. Nadal będę utrzymywał, że w tym przypadku z tą trójką to jest niedopatrzenie - wystarczy zerknąć do opisów rejestrów.
    Prawidłowo powinno być dla transmisji asynchronicznej 8N1:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Dopiero teraz jest to prawidłowy zapis operacji na bitach.
    Wcześniejszy zapis włącza transmisję asynchroniczną 6 bitów i ustawia opadające zbocze zegarowe dla transmisji synchronicznej.
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Czy to było zamierzeniem celowym autora tematu ?
    P.S. :arrow: Bubu_PL : Dlaczego w pliku lss występuje jeszcze inna wersja, włączająca dodatkowo transmisję synchroniczną ? :
    Kod: text
    Zaloguj się, aby zobaczyć kod
    RS232 w PC jest asynchroniczny...
  • #12 11148417
    mirekk36
    Poziom 42  
    LordBlick napisał:

    Prawidłowo powinno być
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Dopiero teraz jest to prawidłowy zapis operacji na bitach.
    Wcześniejszy zapis włączał transmisję synchroniczną 6 bitów i ustawiał opadające zbocze zegarowe dla transmisji synchronicznej. Czy to było zamierzeniem celowym autora tematu ?


    Tak może być owszem, ale wcale nie musi. Za to kolega MUSI sobie odświeżyć wiedzę z zakresu przesunięć bitowych, chociaż to dziwne bo w asemblerze ich tak samo się używa - a kolega tu nieprzystające do rzeczywistości rzeczy opowiada

    W pliku nagłówkowym procesora ATmega128 bit UCSZ0 posiada wartość = 1

    zatem wyrażenie

    (3<<UCSZ0)

    w przypadku operacji na rejestrze UCSR0C jest jak najbardziej poprawne i to wcale nie jest żadna wina starych not. Tu kolega czepia się mnie zamiast np dopytać albo stwierdzić że moim zdaniem jest inaczej. No ale to ostatnio typowe na elektrodzie - szkoda. Dlatego przypominam że powyższe wyrażenie można rozpisać tak - wyjaśnię to koledze to na drugi raz może nie będzie się czepiał mnie.

    ponieważ UCSZ0 = 1 to:

    (3<<1)

    a zatem wartość rejestru UCSR0C po takiej operacji

    UCSR0C = (3<<UCSZ0);

    będzie równa

    0b0000 0110

    ponieważ liczba 3 czyli 0b0000 0011 zostanie przesunięta w lewo na pozycję pierwszego bitu - osiągnie więc wartość 0b0000 0110

    i nich kolega nie opowiada takich rzeczy - spokojnie domyślną ramkę 8bitów można tak ustawiać i niech kolega nie miesza.

    Dodano po 1 [minuty]:

    pomijam oczywiście konieczność prawidłowego ustawienia innych bitów - to normalne - jeśli się chce skorzystać z niestandardowej ramki. Bo standardowa panie kolego to będzie właśnie nic innego jak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #13 11148426
    xamrex
    Poziom 28  
    LordBlick napisał:
    Wcześniejszy zapis włączał transmisję synchroniczną 6 bitów i ustawiał opadające zbocze zegarowe dla transmisji synchronicznej.

    Masz na myśli ten zapis:

    UCSRC = (1<<USBS)|(3<<UCSZ0);

    a dokladniej:
    UCSRC = (3<<UCSZ0);


    To w takim razie, co ustawia
    UCSRC = (3<<UCPOL0);
  • #14 11148437
    mirekk36
    Poziom 42  
    LordBlick napisał:
    Nadal będę utrzymywał, że w tym przypadku z tą trójką to jest niedopatrzenie - wystarczy zerknąć do opisów rejestrów....


    Taaaak niedopatrzenie we wszystkich notach PDF dla praktycznie każdego AVR posiadającego UART/USART.

    taka konstrukcja występuje w niemalże każdej nocie PDF ale co tam - to nie chodzi o notę PDF tu chodzi o zrozumienie przesunięć bitowych panie.

    [Atmega128] [Atmega128][C] - UART nie wysyła znaków, rejestr UDR0 pusty, rezonator 8MHz

    i to jest niby pomyłka w każdej nocie ? dobre sobie.

    Dodano po 1 [minuty]:

    LordBlick napisał:

    Wcześniejszy zapis włącza transmisję asynchroniczną 6 bitów i ustawia opadające zbocze zegarowe dla transmisji synchronicznej.
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Czy to było zamierzeniem celowym autora tematu ?..


    Autor miał i ma prawidłowe zamierzenie tylko to wyjaśnienie jest do niczego.
  • #15 11148445
    xamrex
    Poziom 28  
    Sie długawy temat zrobił :P
    Mi wydaje się że kod na 99% jest prawidłowy, (tylko tą inicjalizacje prze whila wyrzucić)
    Najlepiej niech autor się wypowie, czy w ogóle mu cos przychodzi, czy mu przychodzą śmieci, czy mu jednak nic nie przychodzi.
    Ja bym szukał winy w połączeniu :PP
  • #17 11148452
    mirekk36
    Poziom 42  
    xamrex napisał:

    Mi wydaje się że kod na 99% jest prawidłowy, (tylko tą inicjalizacje prze whila wyrzucić)


    Akurat ta inicjalizacja w pętli nie powinna przeszkadzać w transmisji - ale oczywiście masz 100% racji że tak się po prostu nie robi.
  • #18 11148457
    xamrex
    Poziom 28  
    Bubu_PL
    Symulator to tylko symulator
    Podłączałeś układ w rzeczywistości??
  • #19 11148466
    Bubu_PL
    Poziom 11  
    xamrex: oczywiście, powyżej podane screeny są nie z symulatora, lecz z jtag ice. :)
  • #20 11148483
    LordBlick
    VIP Zasłużony dla elektroda
    Skoro nie używasz ISP, tylko JTAG, to proponuję na razie wyłączyć, bo to są te same wyprowadzenia, a w kodzie masz włączone RxD.
  • #22 11148606
    LordBlick
    VIP Zasłużony dla elektroda
    Wyłącz w obu przypadkach RxD i spróbuj porównać bo UDRX jest wspólny dla nadawania i odbioru.
    Porównaj też oba pliki lss.
    Na ekranach nie widać punktu, w którym jest krok debugowania - zakładałeś pułapki ?
  • #23 11148614
    xamrex
    Poziom 28  
    A ja powiem tak, wgraj ten program co jest, wyłącz fusami jtaga, podłącz uc pod max232 i wydaje mi się, że wszystko zadzaiała tak jak ma
  • #24 11148620
    LordBlick
    VIP Zasłużony dla elektroda
    xamrex napisał:
    A ja powiem tak, wgraj ten program co jest, wyłącz fusami jtaga
    Skoro program jest wgrywany przez JTAG, to będzie problem... ;)
  • REKLAMA
  • #25 11148657
    Bubu_PL
    Poziom 11  
    dobra :)
    uruchomilem:)

    tak czy siak, po podlaczeniu do PC dostaje krzaczki.. wewnetrzny oscylator 8MHz i baud rate na poziomie 9600.. powinno dzialac. prawda?
  • #27 11148684
    Bubu_PL
    Poziom 11  
    problem był w połączeniu.. nie zwierały piny... huh

    ale krzaki sa nadal :)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #29 11148728
    Bubu_PL
    Poziom 11  
    Zrobione:) Przy debugowaniu w UBRR0L jest poprawna wartosc 51 (0x33) zarowno po zmianie jak i przed zmiana... jakies inne idee?:)
  • #30 11148737
    mickpr
    Poziom 39  
    Bubu_PL napisał:
    tak czy siak, po podlaczeniu do PC dostaje krzaczki.. wewnetrzny oscylator 8MHz i baud rate na poziomie 9600.. powinno dzialac. prawda?

    http://appnote.avrportal.com/calculator/avr-usart-baud-rate

    Pamiętaj, że w UK przecinek jest separatorem tysięcy, zaś kropka - separatorem dziesiętnym.

    Albo to:
    http://www.wormfood.net/avrbaudcalc.php

    Bez problemu uruchamiałem transmisję z prędkością 38400 na takim zegarze.
REKLAMA