Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C]USART(RS232)-przekłamania.

_StinG_ 01 Paź 2008 20:38 3465 41
  • #1 01 Paź 2008 20:38
    _StinG_
    Poziom 13  

    Już nie mam pomysłów... Próbowałem już różnych rzeczy.
    Problem wygląda tak:
    Chciałem skomunikować się z kompem i...
    Doszedłem do momentu w którym jak wysyłam jakiś znaczek z uC to na terminalu otrzymuję inny (za każdym razem ten sam)

    Tu wygenerowałem listę znaków A-Z i po przesłaniu zobaczyłęm:

    Code:

    znaczki odebrane     |  znaczki wysłane
      bin  | hex  |znak  |znak  |     bin
    1011111 [5F]    _       A       1000001
    0101111 [2F]    /       B       1000010
    1011110 [5E]    ^       C       1000011
    0010111 [17]            D       1000100
    1011101 [5D]    ]       E       1000101
    0101110 [2E]    .       F       1000110
    1011100 [5C]    \       G       1000111
    0001011 [0B]            H       1001000
    1011011 [5B]    [       I       1001001
    0101101 [2D]    -       J       1001010
    1011010 [5A]    Z       K       1001011
    0010110 [16]            L       1001100
    1011001 [59]    Y       M       1001101
    0101100 [2C]    ,       N       1001110
    1011000 [58]    X       O       1001111
    0000101 [05]            P       1010000
    1010111 [57]    W       Q       1010001
    0101011 [2B]    +       R       1010010
    1010110 [56]    V       S       1010011
    0010101 [15]            T       1010100
    1010101 [55]    U       U       1010101
    0101010 [2A]    *       V       1010110
    1010100 [54]    T       W       1010111
                            X       1011000




    1010011 [53]    S       Y       1011001
    0101001 [29]    )       Z       1011010


    Mój kod programu wygląda mniej więcej tak:

    Code:

    #define F_CPU      8000000
    #define BAUD      9600
    #define MUBRR  F_CPU/16/BAUD-1

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

    //definicje funkcji
    void init_USART(unsigned int);
    void send_USART(unsigned char);
    unsigned char receive_USART(void);

    int main(void)
    {
      unsigned char c;
      init_USART(MUBRR);
      DDRB = 0xFF;
      asm( "nop" );

      PORTB = (1<<PB0);
      _delay_ms(1000);
      PORTB = 0;
      _delay_ms(1000);

      for (unsigned char i=65; i<91; i++)
      {
        send_USART(i);
        PORTB = (1<<PB0);
         _delay_ms(50);
         PORTB = 0;
         _delay_ms(50);
      }
      while (1)
      {
       c=receive_USART();
       PORTB=0xFF;
       _delay_ms(1000);
       PORTB=0x00;

       send_USART(c);
      }

      return 0;
    }


    //deklaracje funkcji

    void init_USART(unsigned int ubrr)
    {
    /* Ustawianie prędkości transmisji */
    UBRRH = (unsigned char)(ubrr>>8);
    UBRRL = (unsigned char)ubrr;
    /* włączenie wysyłu i odbioru danych */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    //UCSRB = _BV(TXCIE)|_BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
    /* Format ramki danych: 8data, 2bity stopu */
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
    }

    //------------------------------------------------

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

    //------------------------------------------------

    unsigned char receive_USART( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) );

    /* Get and return received data from buffer */
    return UDR;
    }



    proszę o pomoc.

    Poprawiłem tytuł - regulamin p.11.1

    0 29
  • #2 02 Paź 2008 02:15
    fazolek
    Poziom 12  

    Funkcje spisane żywcem jak się nie mylę z dokumentacji. Generalnie wysyłasz i na terminalu się pojawia więc jest prawie git. Poważnie brakuje synchronizacji, zapewne masz 8MHz z wewnętrznego rezonatora i to na 99% ten powód.
    Nic więcej nie przychodzi mi do głowy. Niestety UART ma dość duże wymagania jeśli chodzi o czasy.

    0
  • #3 02 Paź 2008 06:53
    _StinG_
    Poziom 13  

    Zgadza się... To z wewnętrznego rezonatora, a funkcje żywcem ściągnięte z dokumentacji, bo gdzie znajdę lepsze, niż u producenta ;)... Dziś pójdę po nowy kwarc, bo ostatnio na 14,7456MHz próbowałem, ale mi szalał i nie chciał poprawnie wystartować. Ale czy jak by był problem z częstotliwością, to czy zawsze zwracał by mi ten sam znak?
    A tak BTW... Może ktoś ma jakiś pomysł, dlaczego mi na 14,...MHz szaleje?

    0
  • #4 02 Paź 2008 07:21
    chudybyk
    Poziom 26  

    Rezonatory kwarcowe działają dość pewnie, więc przychodzi mi na myśl, że częstotliwość jest zbyt duża na ten model ATMegi (zakładam, że używasz Atmela z tej serii). Można dostać je w wersji 16 MHz oraz 8 MHz - sprawdź końcówkę symbolu. Drugim powodem problemów z kwarcem może być pomyłka z wartością kondensatorów obok kwarcu - nano zamiast piko itp. Poprawnie powinny działać od 22 pF do 47 pF.

    0
  • #5 02 Paź 2008 07:25
    skynet_2
    Poziom 26  

    usart_c.h

    Code:
    #include   <avr/io.h>
    

    void USART_Init( unsigned int );

    void USART_Transmit( unsigned char );

    usart_c.c
    Code:
    #include "usart_c.h"
    

    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH=(unsigned char)((F_CPU/(16ul*baud)-1)>>8);
    UBRRL=(unsigned char)(F_CPU/(16ul*baud)-1);
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL)/*|(1<<USBS)*/|(3<<UCSZ0);//odkomentować dla 2 bitów stopu
    }

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


    używasz tak
    Code:
    USART_Init(9600);//ustawiasz tyle samo co w kompie, częstotliwość proca nie na znaczenia
    
    USART_Transmit(0b00000001);//albo poprostu zmienną int char czy cokolwiek, jeżeli zmienna>8 bitów to utnie wszystko co po lewej


    do odbioru używam Realterm.

    Na podstawie tego popraw

    Cytat:
    a funkcje żywcem ściągnięte z dokumentacji, bo gdzie znajdę lepsze, niż u producenta

    zmodyfikowane funkcje producenta :D

    Pozdrawiam

    0
  • #6 02 Paź 2008 09:20
    fazolek
    Poziom 12  

    Tak jak pisze chydybyk przy kwarcu 14,...MHz mogło się sypać bo albo złe kondensatory albo atmega16L która ma max taktowanie 8MHz. Co do pytania o rozstrojenie się nadajnika z odbiornikiem to tak, zawsze pokazuje to samo. C,zęsto w pewnych sekwencjach widać to np w terminalu jak zaczniesz zmieniać prędkość transmisji w odbiorniku (kompie).

    0
  • #7 02 Paź 2008 11:00
    hotdog
    Poziom 26  

    Czy odpowiedzi są deterministyczne? To znaczy czy za każdym razem jak wyślesz 'A' dostajesz '_'? Jeżeli tak to raczej błąd programu. Z kwarcami nie powinno być problemu. Dla idealnej poprawności powinieneś zastosować 7.3728 MHz. Przy częstotliwości 8MHz (czy to z kwarcu czy to z oscylatora wewnętrznego) przy prędkości transmisji prawdopodobieństwo błędnej transmisji to 0,2% (strona 170 datasheeta od megi16).

    pozdrawiam

    0
  • #8 02 Paź 2008 13:01
    mm_pawel
    Poziom 10  

    Witam

    Masz problem z hardwarem. Komputer odbiera zanegowane bity...

    Bajty nadawane są w RSie od najmłodszego bitu, przy czym najpierw nadawany jest bit startu (logiczne0). Ponieważ komputer odbiera bity w negacji, więc pierwsza jedynka z nadawanego bajtu traktowana jest jako bit startu, a następnie odbierane są kolejne zanegowane bity.

    Zapewne ... podłączyłeś wyjście z procesora bezpośrednio do RSa w komputerze.
    Procesor nadaje na poziomie 0V/5V, przy czym 0V to logiczne 0, a 5V to logiczna 1.
    Tymczasem komputer spodziewa się transmisji +12V/-12V, przy czym +12V to logiczne 0, a -12V to logiczna 1. Faktyczny próg przełączania odbiornika to ok. 2V, stąd transmisja 0/5V jest odbierana, ale w negacji.
    Klasycznie (i poprawnie) powinieneś użyć MAX232, do testów wystarczy sygnał zanegować na bramce TTL lub na tranzystorze.

    Oczywiście, błąd w połączeniu może być inny, ale skutek jest dokładnie taki, jak opisałem na początku.

    Pozdrawiam
    Paweł

    0
  • #9 02 Paź 2008 13:08
    fazolek
    Poziom 12  

    używam w tej chwili tych samych funkcji i wysyłam uartem na terminal i powiem tak: mam kwarc 16MHz zewnętrzny atmege16 błąd dla BAUD=19200 jest 0,2% i wszystko mi śmiga jak należy więc nie uważam że to błąd w programie.

    Code:

    /*--------------------------------------------------------------------- */
    /*         Deklaracje tablic i zmiennych         */
    /*--------------------------------------------------------------------- */

    char ANSI_NEWLINE[] = {'\n','\r',0};
       // tablica zawiarająca znaki nowej linii

    /*--------------------------------------------------------------------- */
    /*        Definicje stalych i makroinstrukcji         */
    /*--------------------------------------------------------------------- */

    #define F_CPU      16000000
    #define BAUD       19200
    #define MUBRR  F_CPU/16/BAUD-1
    #define UART_MAX_GETSTR 64
    #define PRINT(p)   UART_putstr_P(PSTR(p))
    #define CLEAR()      UART_putstr_P(ANSI_CLEAR)
    #define NEWLINE()   UART_putstr(ANSI_NEWLINE)



    int main(void)
    {
    char bufor[UART_MAX_GETSTR+1];

    init_USART(MUBRR);
    DDRC=0xff;

    /*--------------------------------------------------------------------- */
    /*                        KOMENDA ATE0                 */
    /*--------------------------------------------------------------------- */
    PRINT("ate0");
    NEWLINE();
    do{
    UART_getstr(bufor);
    }
    while(strcmp(bufor,"OK",2)!=0);
    PORTC=0xff;
    while(1);
    }


    No i jak nic zapalają mi się wszystkie diody w porcie C jak tylko w terminalu wpisze OK. Problem jest ze sprzętem.

    0
  • #10 02 Paź 2008 13:29
    hotdog
    Poziom 26  

    to myślę że miałeś źle fusebity ustawione, albo źle zadeklarowaną częstotliwość w programie. Program myślał że będzie pracował z częstotliwością 8MHz obliczył stałą do UARTU dla 8MHz, a program działa na procku np na 4MHz. Dlatego po wymianie kwarcu na większy/mniejszy lub zmianie częstotliwości oscylatora wewnętrznego trzeba przekompilować program z nową częstotliwością.

    0
  • #11 02 Paź 2008 13:49
    _StinG_
    Poziom 13  

    mm_pawel napisał:

    Zapewne ... podłączyłeś wyjście z procesora bezpośrednio do RSa w komputerze.


    A więc... nie mam bezpośrednio, tylko przez układ max232, inna propozycja dlaczego mogło by sie tak dziać? Z resztą te bity nie są zanegowane... Na pierwszy rzut oka też tak pomyślałem, ale wystarczy tylko lepiej popatrzyć i widać, że tak nie jest...

    hotdog napisał:

    Czy odpowiedzi są deterministyczne?


    Tak, za każdym razem otrzymuję tą samą odpowiedź...

    hotdog napisał:

    to myślę że miałeś źle fusebity ustawione, albo źle zadeklarowaną częstotliwość w programie. Program myślał że będzie pracował z częstotliwością 8MHz obliczył stałą do UARTU dla 8MHz, a program działa na procku np na 4MHz. Dlatego po wymianie kwarcu na większy/mniejszy lub zmianie częstotliwości oscylatora wewnętrznego trzeba przekompilować program z nową częstotliwością.


    Fusy też dobrze, bo kilka razy sprawdzałem... Poza tym mam podłączoną diodę która na starcie zapala sie na 1s. Gdyby była różnica duża (np. 2 krotna) to by było to zauważalne.

    Niestety niee mam możliwości sprawdzić teraz tych rozwiązań od strony praktycznej, ale jak tylko będę mógł to to zrobię i dam znać.

    Jak są jeszcze jakieś propozycje to słucham.
    Pozdrawiam
    Paweł

    0
  • #12 02 Paź 2008 14:19
    mm_pawel
    Poziom 10  

    Bity są zanegowane.

    Tylko pamiętaj, że pierwsza jedynka z bajtu jest odbierana jako bit startu. (a zera przed tą jedynką są pomijane)

    Podałeś np.
    1011101 [5D] ] E 1000101

    E jest nadawane w kolejności od najmłodszego bitu

    1010001

    a faktycznie, zakładając nadawanie 8 bitów i dopisując bit startu (0) i stopu (1)

    0 10100010 1

    co po negacji wygląda nastepująco

    1 01011101 0

    komputer odbiera traktując pierwsze 0 jako bit startu

    0 10111010

    a więc po zapisaniu od najstarszego do najmłodszego bitu

    0101 1101 czyli 5D które dostałeś

    Ta analiza zgadza się dla wszystkich podanych przypadków.


    Oczywiście, nie wiem co jest przyczyną negowania bitów, ale na 99% tak właśnie jest. I robi to hardware a nie soft, bo nie byłoby tych przesunięć.

    Pozdrawiam
    Paweł

    0
  • #13 02 Paź 2008 14:51
    skynet_2
    Poziom 26  

    źle obliczasz MUBRR

    twoja funkcja

    Code:
    F_CPU/16/BAUD-1

    popraw na
    Code:
    F_CPU/(16ul*baud)-1

    dlatego ci nie działa.

    0
  • #14 02 Paź 2008 18:19
    fazolek
    Poziom 12  

    skynet_2 wklep to w kalkulator i porównaj wyniki ;D

    Code:
     F_CPU/16/BAUD-1 
    jest OK.

    0
  • #15 02 Paź 2008 18:58
    skynet_2
    Poziom 26  

    faktycznie to samo, nawet przeprogramowałem atmege i działa heh :D

    0
  • #16 02 Paź 2008 19:45
    _StinG_
    Poziom 13  

    Drogi Pawle, swoją odpowiedzią rozbiłeś mnie na kawałki ;) analizując to co napisałeś, faktycznie możesz mieć rację z logicznego punktu widzenia, tylko teraz co zrobić, żeby tak się nie działo.
    Sprawa wygląda tak:
    do MAX232 mam podłączone odpowiednie kondensatory (po 10uF) i odpowiednio do pinów 7-8 sygnał z RS232 i do pinów 15-16, mam podpięte odpowiednie piny z atmegi8. Sprawdziłem o co chodziło z kwarcem i się okazało, że mam złe kondensatory podpięte (oznaczenie 333 a powinno być 33) nowe dopiero sprawdzę zaraz.

    skynet:
    ja to proste makro znalazłem na stronie producenta więc raczej powinno być ok :), a poza tym można to prosto matematycznie rozwikłać. wystarczy napiszać sobie taki 3-piętrowy ułamek i już widać, że wszystko się zgadza :) tak czy inaczej dzięki za odp.


    A tak dla ciekawostki dodam, że jak wysyłam do uP to znaczki zmienia w tej samej zależności.

    0
  • #17 02 Paź 2008 22:32
    skynet_2
    Poziom 26  

    Cytat:
    do MAX232 mam podłączone odpowiednie kondensatory (po 10uF) i odpowiednio do pinów 7-8 sygnał z RS232 i do pinów 15-16, mam podpięte odpowiednie piny z atmegi8. Sprawdziłem o co chodziło z kwarcem i się okazało, że mam złe kondensatory podpięte (oznaczenie 333 a powinno być 33) nowe dopiero sprawdzę zaraz.

    rozumiem że 7 i 8 z RS232 czyli PC, piny 15,16 to zasilanie, powinieneś podpiąć µC do 9 i 10, więc już wiadomo co ci neguje poprostu włączasz i wylączasz MAX232, który nie neguje ci sygnału. I kolega mm_pawel słusznie zauważył że występuje negacja a raczej jej brak.

    17 strona datasheeta
    http://www.alldatasheet.com/datasheet-pdf/pdf/73047/MAXIM/MAX232.html

    edit: pozwól że spytam gdzie podlutowałeś zasilanie

    :D

    0
  • #18 02 Paź 2008 22:54
    mm_pawel
    Poziom 10  

    Witam

    Właśnie też się przyglądałem temu połączeniu i zgodziłbym sie z tobą skynet, gdyby nie

    _StinG_ napisał:

    A tak dla ciekawostki dodam, że jak wysyłam do uP to znaczki zmienia w tej samej zależności.


    Coś podejrzewam, że nogi od procesora podłączone są prawidłowo, natomiast brakuje zasilania MAX232.

    A więc wniosek ten sam:
    podlutuj 15 i 16 pod Gnd i +5V.

    0
  • #19 02 Paź 2008 23:03
    skynet_2
    Poziom 26  

    mm_pawel napisał:
    Witam

    Właśnie też się przyglądałem temu połączeniu i zgodziłbym sie z tobą skynet, gdyby nie

    _StinG_ napisał:

    A tak dla ciekawostki dodam, że jak wysyłam do uP to znaczki zmienia w tej samej zależności.


    Coś podejrzewam, że nogi od procesora podłączone są prawidłowo, natomiast brakuje zasilania MAX232.

    A więc wniosek ten sam:
    podlutuj 15 i 16 pod Gnd i +5V.


    nie wiem jak się zachowuje MAX232 bez zasilania ;).

    Pobierz sobie datasheeta, linka podałem wcześniej bo w atmedze16 jest tylko 1 USART :D

    0
  • #20 03 Paź 2008 00:36
    _StinG_
    Poziom 13  

    Kurcze... sorry chłopaki, faktycznie pomyłka moja. Ja źle poprostu napisałem... oczywiście Vcc i GND mam do 15 i 16 a uC mam podłączone do 9 i 10 pinu, jeszcze raz przepraszam za zamieszanie ;)
    A jak nie podłączysz mu zasilania to dziwne, przypadkowe znaczki potrafi wysłać :P to już wiem :)

    Kurcze i problem nierozwiązany dalej :)

    0
  • #21 03 Paź 2008 01:08
    mm_pawel
    Poziom 10  

    Witam

    Zmierz napięci na pinach MAX232 (gdy procesor nic nie nadaje)
    2 -> powinno być ok. 8V
    6 -> powinno być -8V
    10 -> 5V
    7 -> -8V


    Jeżeli brak napięć na pinach 2,6 - może źle przypiąłeś kondensatory do MAX?


    Jeżeli wszystko jest w porządku, to mam pytanie o RS w komputerze. Czy to jest na płycie czy jakaś przejściówka. Może tam jest problem?
    Sprawdź napięcie na wyjściu - czyli jeżeli jesteś dołączony to na pinie 8 MAXa - też powinno być -8V.
    Pozdrawiam
    Paweł

    0
  • #22 03 Paź 2008 07:06
    skynet_2
    Poziom 26  

    jeszcze możesz sprawdzić MAX'a po odłączeniu od µC zwierając piny 9 i 10, wtedy układ powinien odbijać wszystko co do niego wyślesz z PC.
    np.
    wysyłasz "a"
    odbierasz "a"

    0
  • #23 03 Paź 2008 07:12
    _StinG_
    Poziom 13  

    Paweł: Nie wiem czy to wina kondensatorów, ale na pewno takich napięć nie ma. Na szybko zasiliłem samego maxa (i odłączyłem, i od portu, i od procka kabelki sygnałowe)
    wynik:
    2- 9,75
    6- -9,43
    10- 0,14
    7- -9,42
    9- 5

    *Z tym że 9 i 10 mogą być odwrotnie, bo z pamięci pisałem :P

    Skynet: Już tak zrobiłem wieki temu ;) wysyłał i odbierał to samo.

    0
  • #24 03 Paź 2008 07:29
    skynet_2
    Poziom 26  

    Cytat:
    wynik:
    7- -9,4...
    8- 0
    9*- 1,5...
    10*- 5


    więc układ działa

    _StinG_ napisał:
    Skynet: Już tak zrobiłem wieki temu wysyłał i odbierał to samo.


    jak wysyłasz i odbierasz to samo, to max232 działa poprawnie.

    więc jedyny problem to chyba µC, tylko już nie mam pomysłu gdzie leży problem.

    edit:

    spróbuj jeszcze dodać ul na końcu
    Code:
    #define F_CPU      16000000

    Code:
    #define F_CPU      16000000ul

    jeszcze można by
    Code:
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

    na
    Code:
    UCSRC = (1<<URSEL)|(3<<UCSZ0);

    da ci to 1 bit stopu zamiast 2.

    0
  • #25 03 Paź 2008 08:12
    mm_pawel
    Poziom 10  

    Sprawdź te napięcia jeszcze raz, przy podłączonym procesorze i komputerze.
    Napięcia 2 i 6 są poprawne

    Podaj napięcia na pinach: 10, 7, 8, 9

    A może posiadasz oscyloskop? będzie prościej

    0
  • #26 03 Paź 2008 08:21
    wojnar
    Poziom 16  

    _StinG_ napisał:
    ...
    Sprawa wygląda tak:
    do MAX232 mam podłączone odpowiednie kondensatory (po 10uF) ...

    Przepraszam, że się wtrącam, bo z daleka nie mam takiej wiedzy jak niektórzy tu, ale nie idą mi te kondensatory. Wdg. datasheeta ma być po 1M dla 232 a 0.1M dla 232A.
    Czy przypadkowo tu nie jest problem?

    0
  • #27 03 Paź 2008 08:25
    skynet_2
    Poziom 26  

    jeszcze raz będe przynudzał ale zrób mi przyjemność, skompiluj ten kod i przeprogramuj swoją atmegę16, teraz napisz czy otrzymujesz znak co sekunde i czy to jest 'a'.
    Terminal ustaw baud 9600, 1bit stopu, brak parzystości.

    Code:
    #define F_CPU 8000000UL
    

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

    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH=(unsigned char)((F_CPU/16/baud-1)>>8);
    UBRRL=(unsigned char)(F_CPU/16/baud-1);
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL)|(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;
    }

    int main(void)
    {
    USART_Init(9600);
    while(1){
    USART_Transmit('a');
    _delay_ms(1000);
    }
    }


    poprostu chce być pewiem że to nie jest atmega.

    0
  • #28 03 Paź 2008 19:00
    _StinG_
    Poziom 13  

    Paweł: napięcia pomierzę za chwilę, bo mi się kabelek łączący od tego ciągłego rozłączania złamał :P
    Skynet: Zamiast 'a', odsyła 'O'
    Więc jeśli to działało u Ciebie, to nie wiem co już robić (mam nadzieję, że te napięcia będą niepoprawne ;) )

    chyba moja atmega8 mnie nie lubi xD

    0
  • #29 03 Paź 2008 19:20
    hotdog
    Poziom 26  

    możesz też jeszcze sprawdzić port w kompie dla 100% pewności. Połącz 2 i 3 pin (np zworką idzie, trzeba tylko lekko piny zgiąć) gniazda rs232. Wtedy jak odpalisz terminal to masz echo. Co wyślesz powinieneś dostać z powrotem. Wątpię że to jest to ale zawsze lepiej sprawdzić, tym bardziej jak to nie wymaga praktycznie żadnej pracy...

    0
  • #30 03 Paź 2008 19:51
    skynet_2
    Poziom 26  

    _StinG_ napisał:
    Skynet: Zamiast 'a', odsyła 'O'

    odsyla co sekundę czy wolniej/szybciej jeśli co sekundę to atmega jest 100% OK.

    ustawiałeś fusy na zewnętrzny rezonator ? bo z wewnętrznego zawsze będzie 1MHz.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo