RTV forum PL | NewsGroups PL

Odbieranie danych z UART w ATmega16 na zestawie AVT-992 dziwne zachowanie diod PD0 i PD6.

AVR, UART

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Odbieranie danych z UART w ATmega16 na zestawie AVT-992 dziwne zachowanie diod PD0 i PD6.

Umpa
Guest

Wed May 12, 2004 12:46 pm   



Witam,

Pisze program, ktory na razie
ma odbierac dane z UART.
Procesor: Atmel AVR ATmega16.
Uzywam zestawu uruchomieniowego AVT-992.
Kabel null-modem.

Co jest nie tak ?

Podlaczylem do LEDow nastepujace
piny:
- PD0,
- PD1,
- PD6 -- na przemian swieci/nie swieci (sterowanie
z funkcji obslugi przerwania SIG_UART_RECV).

Uruchamiam hyperterminal pod windows
(wylaczam sprzetowa kontrole przeplywu).

Pisze na klawiaturze -- nic.

Klikam ikonke telefonu z podniesiona sluchawka:
dioda PD0 zmienia swoj stan.

Klikam ikonke telefonu z opuszczona sluchawka:
dioda PD0 zmienia swoj stan, dioda PD6 zmienia swoj stan.

Klikam ikonke telefonu z podniesiona sluchawka:
dioda PD0 zmienia swoj stan.

i tak caly czas.


Oto fragmenty programu:

UART.h:
----------

#ifndef _UART_H_
#define _UART_H_

enum {
RECVBUF_MAX = 16,
FCPU = 8000000,
VUART = 57600,
VUBRR = FCPU / (VUART * 16) - 1
};

void initUART(void);

#endif



UART.c:
----------

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <string.h>
#include "uart.h"

void initUART(void)
{
DDRD |= 64; /* dioda informacyjna */

/* ustawienie predkosci transmisji */
UBRRH = (unsigned char)(VUBRR >> Cool;
UBRRL = (unsigned char)VUBRR;

/* zezwolenie na przerwania od odbiornika i nadajnika */
UCSRB = (1 << RXCIE) | (1 << TXCIE) | (1 << RXEN);

/* ustawienie formatu ramki: 8, 1 stop */
UCSRC = (1 << UCSZ1) || (1 << UCSZ0);

/* zezwolenie na przerwania */
sei();
}


char recvBuf[RECVBUF_USER_MAX] = "\0";
volatile char *recvBufPtr = recvBuf;
volatile int flagaaa = 0;

/* SIG_UART_RECV: obsluguje odbiornik
*/
SIGNAL (SIG_UART_RECV)
{
if (flagaaa == 0)
sbi(PORTD, PD6), flagaaa = 1;
else
cbi(PORTD, PD6), flagaaa = 0;

if (recvBufPtr - recvBuf < RECVBUF_MAX)
*recvBufPtr++ = UDR;
}

Umpa
Guest

Wed May 12, 2004 1:38 pm   



Eksperyment:

Wysylam znak "a":

Zwarlem PD0 i PD1: nic nie otrzymano,

Rozwarlem PD0 i PD1: otrzymalem znak o kodzie 79.


Wyslalem znak "b":

Zwarlem PD0 i PD1: nic nie otrzymano,

Rozwarlem PD0 i PD1: otrzymalem znak o kodzie 16.

Jurek Szczesiul
Guest

Wed May 12, 2004 4:36 pm   



Wed, 12 May 2004 15:46:36 +0200, na pl.misc.elektronika, Umpa napisał(a):

Quote:
FCPU = 8000000,

Pytanie #1 - to fcpu oznacza wewnetrzny oscylator ?
Jesli tak, to czy wstawiles odpowiedni kalibrator
( domyslnie zawsze jest uzyty dla 1 MHz, dla innych f
program musi sam o to zadbac ).

--
Pozdrowienia
Jurek Szczesiul

Umpa
Guest

Wed May 12, 2004 4:57 pm   



Quote:
FCPU = 8000000,

Pytanie #1 - to fcpu oznacza wewnetrzny oscylator ?
Jesli tak, to czy wstawiles odpowiedni kalibrator
( domyslnie zawsze jest uzyty dla 1 MHz, dla innych f
program musi sam o to zadbac ).

Zewnetrzny.

Obecnie mam zewnetrzny oscylator 11059000 Hz
podlaczony do XTAL1 i 2 (+ kondensatory).

Mam programator Combo3.
W ustawieniach w programie od programatora
jest najwyzszy XTAL 3-8MHz. Ja mam oscylator
ponad 11MHz. Nie wiem co ustawic.

W chwili obecnej cos moge przetransmitowac
z komputera do procesora, ale otrzymuje inne
znaki -- zapewne zle dostrojona czestotliwosc
kwarcu.

Nie wiem za bardzo co poustawiac.

Umpa.

EM
Guest

Thu May 13, 2004 9:42 am   



Quote:
W chwili obecnej cos moge przetransmitowac
z komputera do procesora, ale otrzymuje inne
znaki -- zapewne zle dostrojona czestotliwosc
kwarcu.

Nie wiem za bardzo co poustawiac.
No to pewnie powinieneś ustawić właśnie:

FCPU = 11059000
Pozdr
EM

Umpa
Guest

Thu May 13, 2004 9:58 am   



Quote:
Nie wiem za bardzo co poustawiac.
No to pewnie powinieneś ustawić właśnie:
FCPU = 11059000

Oczywiscie ustawilem prawidlowo FCPU.
Zamieszczony program to stara wersja.

Niemniej interesuje mnie czy musze ustawic
jakies bity fuse, aby UART dzialal z zewnetrznym
oscylatorem. A jesli mam ustawic XTAL, to
w programie od Combo3 max. jest XTAL3-8 MHz,
a ja mam kwarc ponad 11MHz.

Umpa.

elektroda NewsGroups Forum Index - Elektronika Polska - Odbieranie danych z UART w ATmega16 na zestawie AVT-992 dziwne zachowanie diod PD0 i PD6.

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map