Zdravim, používam GPS modul a atmega8 spojené sériovkou na určenie polohy, no dnes mi nejakým zvláštnym spôsobom atmelko prestal rozumieť… z GPSky mi chodia data v poriadku(odsledované z hyperterminalu) s parametrami prenosu 9600baud, 1 stop bit, žiadna parita. Atmel dnes však rozoznáva samé nezmysly… čím môže byť spôsobená chybná komunikácia, keď na pin 2 samotného atmelu chodia data v poriadku, no atmel to vidí trochu inak?.. Atmelov USART mám nakonfigurovaný takto:
#include<avr/io.h>
#include<stdint.h>
#include<stdlib.h>
#include<avr/interrupt.h>
#define FOSC 8000000// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
ISR(USART_RXC_vect)
{
prijateserial = UDR;
}
void usartinit()
{
/* Set baud rate /
unsigned int ubrr = MYUBRR;
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/ Enable receiver and transmitter /
UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
/ Set frame format: asynchronous, no parity, 8data, 1stop bit */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
void init()
{
//nastavenie portov
DDRC = 0xFF; // port C vsetky vystupy
PORTC = 0x00; //vsetky vystupy na nulu - niesu pouzite
DDRD = 0x42; // PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
// I O I I I I O I
// 0 1 0 0 0 0 1 0
PORTD = 0x00; // vystupy 0 vstupy vyp pullup
DDRB = 0x10; // SPI Port inicializ�cia
// NC , NC, SCK MISO, MOSI, SS , NC, NC
// PB7, PB6, PB5, PB4, PB3, PB2 , PB1, PB0
// I I I 0 I I I I
// 0 0 0 1 0 0 0 0
SPCR = (1<<SPIE)|(1<<SPE)|(1<<DORD)|(0<<MSTR)|(0<<CPOL)|(0<<CPHA);
PORTB = 0xFF; // v�etky vystupy 1, vstupy maj�
// pullup
usartinit();
PORTD |= 0b01000000; //tymto vypnem reset GPS modulu
sei();
}
int main()
{
init();
while(1)
{
_delay_ms(1000);
}
}
administrator: přejmenováno z "Atmega8 USART problém"