Witam.
Mam nadzieję, że się nie narażę tym tematem, ponieważ był już wielokrotnie opisywany - jednak uzmysławia to jak wiele problemów może wyniknąć przy obsłudze jednej rzeczy.
Sprawa jest prosta, napisany program w WinAVR20070525 nie obsługuje portu USART w mikrokontrolerze ATmega8515. Układ jest podłączony do COM'a poprzez inwerter MAX232. Podczas nadawania na wyjściu MAX'a pojawiają się jakieś dane, jednak w HyperTerminal nic nie widać. Kod wygląda następująco:
Co tutaj jest źle ustawione. Połączenie kabel i płytka są sprawne. Napisałem program w Bascom'ie i działa. Teraz próbuję w C i coś nie idzie. Podłączony zewnętrzny kwarc 11.0592MHz.
Poniżej zamieszczam konfigurację FuseBitów:
Mam nadzieję, że się nie narażę tym tematem, ponieważ był już wielokrotnie opisywany - jednak uzmysławia to jak wiele problemów może wyniknąć przy obsłudze jednej rzeczy.
Sprawa jest prosta, napisany program w WinAVR20070525 nie obsługuje portu USART w mikrokontrolerze ATmega8515. Układ jest podłączony do COM'a poprzez inwerter MAX232. Podczas nadawania na wyjściu MAX'a pojawiają się jakieś dane, jednak w HyperTerminal nic nie widać. Kod wygląda następująco:
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay_basic.h>
//definicja RS232
//UCSRA
#define RXC 7
#define TXC 6
#define UDRE 5
#define FE 4
#define DOR 3
#define PE 2
#define U2X 1
#define MPCM 0
//UCSRB
#define RXCIE 7
#define TXCIE 6
#define UDRIE 5
#define RXEN 4
#define TXEN 3
#define UCSZ2 2
#define RXB8 1
#define TXB8 0
//UCSRC
#define URSEL 7
#define UMSEL 6
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
#define UCPOL 0
void nadaj_USART(uint8_t dana)
{
while( !( UCSRA & (1<<UDRE) ) ); //czekaj na wyslanie poprzedniej danej
UDR = dana;
}
uint8_t odbierz_USART(void)
{
while( !(UCSRA&(1<<RXC)) ); //czekaj na odebranie danej
return UDR;
}
int main(void)
{
//volatile uint8_t dana = 0x66;
uint8_t tab_char[] = { 0x97, 0x98, 0x99, 0x9A };
uint8_t i;
//inicjalizacja portów
DDRA = 0x00; //1 - wyjscie , 0 - wejscie
PORTA = 0xff; //z podciagnietymi wejsciami
DDRB = 0x00;
PORTB = 0xff;
DDRC = 0xff;
PORTC = 0xff;
DDRD = 0x72; //RxD - jako wyjscie, PD4 - PD6 - wyjscia 0111 0010
PORTD = 0xff;
//inicjalizacja RS232
UCSRC = (1<<UPM1) | (1<<UCSZ1) | (1<<UCSZ0); //asynch, parzystosc, 1 stop bit, 8bit data,
UBRRL = 143; //baudrate => 143 = 4800 dla 11059200
UCSRB = (1<<RXEN) | (1<<TXEN);
for(;;)
{
for (i=0; i<4; i++)
{
PORTC = tab_char[i];
nadaj_USART(tab_char[i]);
}
}
return 0;
}
Co tutaj jest źle ustawione. Połączenie kabel i płytka są sprawne. Napisałem program w Bascom'ie i działa. Teraz próbuję w C i coś nie idzie. Podłączony zewnętrzny kwarc 11.0592MHz.
Poniżej zamieszczam konfigurację FuseBitów: