AVR, UART, zewnetrzny oscylator

Witam,

Programuje UART.

Mam procesor AVR ATmega16. 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.

Prosze o podpowiedz co i jak poustawiac, aby UART zaczal pracowac z moim kwarcem.

Oto fragment kodu programu:

UART.h:

----------

#ifndef _UART_H_ #define _UART_H_

enum { RECVBUF_MAX = 16, FCPU = 11059000, 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) { /* ustawienie predkosci transmisji */ UBRRH = (unsigned char)(VUBRR >> 8); 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;

/* SIG_UART_RECV: obsluguje odbiornik */ SIGNAL (SIG_UART_RECV) { if (recvBufPtr - recvBuf < RECVBUF_MAX) *recvBufPtr++ = UDR; }

Reply to
invalid unparseable
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.