Elektroda.pl
Elektroda.pl
X
Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega 16 + FT232 + Terminal, takie proste i nie rusza

02 Wrz 2011 17:49 3144 5
  • Poziom 9  
    Witam. Próbuję zrobić prostą transmisję Atmega do PC korzystając z układu FT232. Niestety nie chce mi się nic wyświetlić na terminalu. Mam zainstalowane sterowniki D2XX i VCP, terminal widzi magistralę FTDIBUS, zwarłem również nóżki tuż przy uk TXD i RXD, i wysłałem coś i to wróciło do terminala. Nie mam pojęcia co źle robię. Używam terminala byBr@y v1.9b, chyba że coś mogę mieć w nim źle ustawione.
    tutaj kod programu
    Code:

    #include <avr/io.h>
    #include <util/delay.h>


    #define FOSC 1000000// Clock Speed
    #define BAUD 9600
    #define MYUBRR FOSC/16/BAUD-1




    void USART_Transmit( unsigned char data )
    {
       /* Wait for empty transmit buffer */
       while ( !( UCSRA & (1<<UDRE)) );
       /* Put data into buffer, sends the data */
       UDR = data;
    }



    void USART_Init( unsigned int ubrr)
    {
       /* Set baud rate */
       UBRRH = (unsigned char)(ubrr>>8);
       UBRRL = (unsigned char)ubrr;
       /* Enable receiver and transmitter */
       UCSRB = (1<<RXEN)|(1<<TXEN);
       /* Set frame format: 8data, 1stop bit */
      UCSRC = (1<<URSEL)|(3<<UCSZ0);
    }


    int main( void )
    {
      USART_Init ( MYUBRR );
       while(1)
       {
        USART_Transmit(0x55);
        _delay_ms(900);
       }
       return 0;
    }

    tutaj schemat
    Atmega 16 + FT232 + Terminal, takie proste i nie rusza
    tutaj zrzut terminalu
    Atmega 16 + FT232 + Terminal, takie proste i nie rusza
    z góry dziękuję za pomoc.
  • Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
  • Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
  • Poziom 42  
    snnaap napisał:
    #define MYUBRR FOSC/(16*BAUD)-1

    Dodano po 22 [sekundy]:

    a nie #define MYUBRR FOSC/16/BAUD-1


    to jest jedno i to samo akurat - więc nie w tym problem.

    Problemów za to możesz mieć sporo - bo widać że sam próbujesz sob ie definiować jakieś FOSC - skoro powinieneś mieć F_CPU w programie - a to powoduje że warto zadać pytanie czy w ogóle masz dobrze fusebity ustawione.
  • Poziom 9  
    Cytat:
    Problemów za to możesz mieć sporo - bo widać że sam próbujesz sob ie definiować jakieś FOSC - skoro powinieneś mieć F_CPU w programie - a to powoduje że warto zadać pytanie czy w ogóle masz dobrze fusebity ustawione.

    Nie zmieniałem nic w fusebitach, ogólnie uk hasa. Sterując sobie portem A mierze woltomierzem i raz mam 0v a raz4,3V
    Code:
    #include <avr/io.h>
    
    #include <util/delay.h>


    #define F_CPU 1000000// Clock Speed
    #define BAUD 9600
    #define MYUBRR F_CPU/16/BAUD-1




    void USART_Transmit( unsigned char data )
    {
       /* Wait for empty transmit buffer */
       while ( !( UCSRA & (1<<UDRE)) );
       /* Put data into buffer, sends the data */
       UDR = data;
    }



    void USART_Init( unsigned int ubrr)
    {
       DDRD |=  _BV(1); //Pin 3 w port D jako wyjście - Chip select, TXD jako wyjście
       /* Set baud rate */
       UBRRH = (unsigned char)(ubrr>>8);
       UBRRL = (unsigned char)ubrr;
       /* Enable receiver and transmitter */
       UCSRB = (1<<RXEN)|(1<<TXEN);
       /* Set frame format: 8data, 1stop bit */
       UCSRC |= _BV (URSEL)  | _BV(UCSZ1) | _BV(UCSZ0);
    }


    int main( void )
    {
      USART_Init ( MYUBRR );
      DDRA=0xFF;
       while(1)
       {
       PORTA=0xFF;
       USART_Transmit(0x55);
        _delay_ms(900);
        _delay_ms(900);
        PORTA=0x00;
        _delay_ms(900);
        _delay_ms(900);
       }
       return 0;
    }


    po raz pierwszy używam terminalu, może coś od strony PC mam źle ustawione?
  • Pomocny post
    Poziom 42  
    Skoro procek hasa ci jak mówisz na 1MHz to spójrz sobie łaskawie na ostatnią stronę rozdziału USART noty PDF swojego albo dowolnego procka AVR. Tam gdzie masz tabelki z częstotliwościami taktowania i błędami dla poszczególnych prędkości RS232.

    I spójrz sobie na pierwszą tabelę z brzegu dla 1MHz właśnie bo ona cię interesuje oraz na prędkość 9600 którą sobie wybrałeś

    i teraz sprawdź jaki jest % błędu !!!!!! dla 9600

    dopiero gdy procent błędu jest mniejszy niż 2% można używać spokojnie danej prędkości - zatem będziesz wiedział jaką musisz wybrać.

    Albo przeprogramujesz sobie jednak fuski od razu na 8MHz tak jak ja to zawsze robię żeby procek mi się nie ślimaczył na 1mHz ;) .....
  • Poziom 9  
    Dzięki mirekk36 za pomoc. Nie będę się tłumaczyć czemu tam było 9600, ale dałem 2400 i dalej nic. Problem jest w tym że w terminalu nic mi się nie wyświetla, nawet żadne krzaki. Naciskam connect ( na dole pisze connected) i nic. :( Chodzi mi oto, żeby mi cos terminal złapał. potem będzie kwarc właśnie 8M, i może nawet bardziej gazu dodam niż 9600, ale teraz chce się skomunikować do PC.

    Udało mi się skołować laptop, mam nna nim vistę, przy uruchomieniu terminala wyskakuje błąd I/O error 103, ale się uruchamia. podczas skanowania portów wyskakuje błąd odmowy dostępu. Realterm się wcale nie włącza. Miał ktoś taki problem? Może to terminal lub sterwoniki w windzie robią jakieś cyrki?
    Z góry dziękuję za zainteresowanie.


    Układ ruszył, miałem źle podpięte linie txd i rxd, okazało się że txd z ft ma być połączony z rxd z uk i vice versa. Niestety intuicyjnie podłączyłem txd z txd itd. Nie zauważyłem tego w nocie z ft, (szczerze to nawet nie wiem czy jest :P), ale juz jest ok :)

    Temat do zamknięcia, dziękuję wszystkim zainteresowanym :) Pozdrawiam