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; }