buthus
17.04.2007, 12:08
Hallo zusammen,
ich bin seit wenigen Tagen stolzer Besitzer eines STK500 und eines Atmega32. Diesen kleinen Baustein moechte ich nun in Betrieb nehmen und muss leider folgendes Problem feststellen:
Schreibe ich eine Zahl via HTerm an meinen Baustein, empfaengt er die Falsche Zahl. Schreibe ich eine Zahl vom Baustein auf mein Terminal, ist sie richtig. An was kann das liegen?
Baud-Rate und 8N1 sind korrekt eingestellt, folgendes Programm wird verwendet (und via AVR8 Burn-O-Mat auf den Baustein gebracht)
#include <avr/io.h>
#include <inttypes.h>
/* frequency of 1Mhz, internal oscillator. */
#define F_CPU 1000000UL
/* baud rate */
#define BAUD 9600UL
#define UBBR_BAUD ((F_CPU/(16L*BAUD))-1)
/* initialize USART */
void uart_init(void)
{
/* specify baud rate */
UBRRH = (uint8_t)(UBBR_BAUD>>8);
UBRRL = (uint8_t)(UBBR_BAUD);
/* activate receiver and transmitter */
UCSRB = (1<<RXEN) | (1<<TXEN);
/* 8N1 asynchronous */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
int main(void)
{
uint8_t buffer;
// portB -> outputs
DDRB=0xff;
PORTB=0xff;
// inizialize UART
uart_init();
while (1)
{
// receive message
while (!(UCSRA & (1<<RXC)));
buffer = (UDR); // *
// buffer = (buffer - 0x80); // **
// wait until write buffer is free
while ( !( UCSRA & (1<<UDRE)) );
UDR = buffer;
}
return 0;
}
Ergebnisse:
- Ich schreibe eine 1 (0x31) zum Baustein, Baustein zeigt mir 0xB1 an
- Ich ersetze die * Zeile durch die ** Zeile und bekomme als Antwort auf die 1 (0x31) eine 0xF1
Ich komm grad irgendwie nicht mehr ganz mit ... vll. kann mir jemand Helfen (Hoffentlich nur ein kleines Problem :-) )
Mit freundliche Gruessen
Florian
ich bin seit wenigen Tagen stolzer Besitzer eines STK500 und eines Atmega32. Diesen kleinen Baustein moechte ich nun in Betrieb nehmen und muss leider folgendes Problem feststellen:
Schreibe ich eine Zahl via HTerm an meinen Baustein, empfaengt er die Falsche Zahl. Schreibe ich eine Zahl vom Baustein auf mein Terminal, ist sie richtig. An was kann das liegen?
Baud-Rate und 8N1 sind korrekt eingestellt, folgendes Programm wird verwendet (und via AVR8 Burn-O-Mat auf den Baustein gebracht)
#include <avr/io.h>
#include <inttypes.h>
/* frequency of 1Mhz, internal oscillator. */
#define F_CPU 1000000UL
/* baud rate */
#define BAUD 9600UL
#define UBBR_BAUD ((F_CPU/(16L*BAUD))-1)
/* initialize USART */
void uart_init(void)
{
/* specify baud rate */
UBRRH = (uint8_t)(UBBR_BAUD>>8);
UBRRL = (uint8_t)(UBBR_BAUD);
/* activate receiver and transmitter */
UCSRB = (1<<RXEN) | (1<<TXEN);
/* 8N1 asynchronous */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
int main(void)
{
uint8_t buffer;
// portB -> outputs
DDRB=0xff;
PORTB=0xff;
// inizialize UART
uart_init();
while (1)
{
// receive message
while (!(UCSRA & (1<<RXC)));
buffer = (UDR); // *
// buffer = (buffer - 0x80); // **
// wait until write buffer is free
while ( !( UCSRA & (1<<UDRE)) );
UDR = buffer;
}
return 0;
}
Ergebnisse:
- Ich schreibe eine 1 (0x31) zum Baustein, Baustein zeigt mir 0xB1 an
- Ich ersetze die * Zeile durch die ** Zeile und bekomme als Antwort auf die 1 (0x31) eine 0xF1
Ich komm grad irgendwie nicht mehr ganz mit ... vll. kann mir jemand Helfen (Hoffentlich nur ein kleines Problem :-) )
Mit freundliche Gruessen
Florian