Bonjour,
Je cherche à communiquer avec mon atmega 162 par la liaison série, jusqu'au moment où il m'est apparu que l'engin à deux UART. C'est parfait, c'est ce que je voulais, mais du coup, je suis perdu :s
J'arrivais à faire ma communication avec un atmega 16 (un seul UART) et je suis reparti de mon programme en le modifiant pour prendre en compte mon deuxième uart, sans succès. Voila mon code.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
/* Prototypes */
void InitUART (unsigned char baudrate);
unsigned char ReceiveByte (void);
void TransmitByte (unsigned char data);
/* Main - simple program that recieves a character then
transmits back the next character. An example would be if you send in an A, the chip will return a B */
int
main (void)
{
unsigned char i;
InitUART (51); /* Set the baudrate to 2400 bps using a 8MHz crystal */
while (1)
{
//TransmitByte (ReceiveByte () + 1); /* Echo the received character + 1. Example send in A then send out B */
TransmitByte('a');
//usart_puts(&s[0]);
PORTA = 0x00;
PORTB = 0x00;
//for(int i =0; i<50000; i++){}*/
_delay_ms(1000);
PORTA = 0xFF;
PORTB = 0x00;
_delay_ms(1000);
//for (i = 0; i < 200; i++);
}
}
/* Initialize UART */
void
InitUART (unsigned char baudrate)
{
/* Set the baud rate */
UBRR0L = baudrate;
/* Enable UART receiver and transmitter */
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
/* 8 data bits, 1 stop bit */
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
}
/* Read and write functions */
unsigned char
ReceiveByte (void)
{
/* Wait for incomming data */
while (!(UCSR0A & (1 << RXC0)));
/* Return the data */
return UDR0;
}
void
TransmitByte (unsigned char data)
{
/* Wait for empty transmit buffer */
while (!(UCSR0A & (1 << UDRE0)));
/* Start transmittion */
UDR0 = data;
}
C'est relativement simple, car dans la majeure partie des cas, il suffisait de rajouter un 0 à la fin, genre UDR devient UDR0 mais ca veut pas. Je n'ai rien sur mon pc alors qu'il est sencé m'envoyer un 'a' toutes les secondes...
A force d'être le nez sur le code, je dois rater une erreur grossière d'où mon appel à l'aide.
Merci d'avance de votre coup de main !!
Black