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

ATmega8 brak zasilania na układzie max232.

15 Paź 2008 22:48 3640 14
  • Poziom 10  
    Mam taki układ podłączenia maxa232 z ATmegą https://obrazki.elektroda.pl/45_1206123468.jpg ,z tą różnicą że linia 14 z Maxa idzie na Pin 2 DB9 a 13 na Pin 3 DB9 .Układ jako tako działa, ale zamiast wysyłać to co napisałym w programie:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Do
    Print "Hello"
    Loop
    End
    Wysyła do komputera to co zamieściłem w załączniku.
    Mam kwarc 8MHz, sprzężony z 2 kondensatorami 27pF, kabel normalny (nie skrosowany!) do RS. Wymieniałem już maxa i ATmega8 na inne układy, ale nadal bez zmian. Na liniach 2 i 6 przy maxie jest odpowiednio 8,8V i -8,8V. Pomocy!!!

    Proszę poprawić tytuł - regulamin p.11.1
    [zumek]
  • Poziom 17  
    a co z fuse bitami?? pozmieniałeś??

    spróbuj to wszystko zrobić 1MHz bo może twoj procek nadal korzysta z 1MHz generatora wewnętrznegi
  • Poziom 10  
    W sumie to ustawiam na początku programu $crystal = 8000000, więc wydaj mi się że tą komendą przełączam się na zewnętrzny kwarc. Ale zmieniłem $crystal na $crystal = 1000000 i teraz zamiast tamtego mam to https://obrazki.elektroda.pl/18_1224106400.jpg więc to może dobry trop, ale nadal nie idealny
  • Poziom 17  
    a dobrze masz skonfigurowany w procku usart? tzn bity parzystości itp. a poza tym to co wysyłasz tym portem?
  • Poziom 28  
    Wolter85 napisał:
    W sumie to ustawiam na początku programu $crystal = 8000000, więc wydaj mi się że tą komendą przełączam się na zewnętrzny kwarc.

    Masz rację, wydaje Ci się. Niestety tylko wydaje. Kolejny przykład co z człowiekiem robi Bascom.
  • Poziom 10  
    W sumie to maiłem tylko w książce od bascom'a napisany taki mały programik który wyżej podałem do RS i tam jest napisane że powinno chodzić na nim, więc nawet nie wiem czy mam dobrze skonfigurowany Usart, a na terminalu powinien pojawić się napis "Hello"

    Dodano po 2 [minuty]:

    Czyli w tym przypadku najlepiej zrezygnować z Bascoma i przejść na C?
  • Poziom 32  
    nie wiem jakiego programatora uzywasz i oprogramowania ale sama instrukcje crystal 8000000 nie zmienia fusebitow , np w pony prog sa programowane osobno.
    poza tym musisz miec dobrana czestotliwosc transmisji np dla 1 MHz powinno pojsc na 1200 , 2400 , 31 250 bd ale dla 8 MHz tylko na 31 250.
  • Poziom 10  
    Używam do pisania programu Bascom AVR ver. 1.11.7.4 i pony prog'a ver 205 do ładowania na procesor
  • Poziom 32  
    wiec pony prog ma osobno programowane fuse bity , popatrz w opisie procka jak je ustawic w opcji comand jest security and configuration bits albo ikonka z klodeczka :) w zalaczniku tabelka kwarcow do czestotliwosci rs oczywiscie roznice maja byc minimalne lub 0%
  • Poziom 10  
    Powiem tak, zmieniłem crystal na 1000000 i Baudrate na 2400 i wszystko chodzi jak powinno :), ale potrzebuje wykorzystać zewnętrzny kwarc na 8MHz, a ta tabela wyżej od submariner'a na razie nic mi nie mówi, więc ponawiam pytanie, jak zmienić żeby procek był taktowany z zewnętrznego kwarc
    W sumie to już rozgryzłem tą tabele, ale w HyperTerminalu nie mam wyboru liczby bitów na sekundę aż 31250
  • Poziom 32  
    zaptaszkuj cksel3 w klodce pony prog i daj write... w klodce


    w tabeli u gory masz transfery pod rs a pionowo po lewej czest kwarcu na przecieciu roznice % odbiegajace od idealnego transferu jak jest 0,0% to jest idealnie ale jak bedzie do 1% to tez bedzie chodzic zwlaszcza przy wolnych transmisjach.
  • Poziom 10  
    To już rozgryzłem ale np dla 8MHz nie mam możliwości ustawienia w HyperTerminalu transferu 31250, czyli pozostaje mi zmienić chyba kwarc
    W klodce mam zaptaszkowane: BOOTSZ1, BOOTSZ0, SUT0, CKSEL3, CKSEL2, CKSEL1

    OK, wszystko już działa jak powinno :), dziękuje wszystkim za pomoc, aha przy 8MHz na 9600 też chodzi :)
  • Poziom 10  
    Witam, mam duży problem z RS, mianowicie mam taki prosty rogram:

    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <avr/wdt.h>
    #include <stdio.h>

    #define FOSC 12000000// Clock Speed
    #define BAUD 38400
    #define MYUBRR FOSC/16/BAUD-1

    /////////////////
    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, 2stop bit */
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
    }

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

    /////////////////////
    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }

    ////////////////////////
    void main( void )
    {

    USART_Init ( MYUBRR ) ;
    while (1)
    {
    USART_Transmit('a');
    }

    }

    Chcę żeby mi wyświetlał "a" w terminalu i tutaj jest klops bo nic nie wyświetla. Dodam, że fuse bity mam dobrze skonfigurowane, żeby używał zewnętrznego kwarcu (12MHz) Czyli CLK0..3 mam 1111 (LowFuse 0xEF HighFuse 0xD9). Wszystko robie na ATmedze8, używam AVRStudio i programuje STK500. Dodam jeszcze że program do wysyłania "a" przez RS napisany w bascomie działa bez zarzutu z tymi prędkościami nadawania (38400 i 12MHz).
    Ma ktoś jakiś pomysł?
    Pozdrawiam
  • Poziom 10  
    OK, już wszystko chodzi, porostu praca do późna znowu dała się we znaki i zapominałem maxa232 zasilić. Pozdrawiam