Silence07
23.09.2007, 13:48
Hy
ich habe folgenden Code auf deinem Mega8 laufen. PWM funktioniert auch wunderbar aber jedesmal, wenn ich neue Werte per RS-232 (Hterm in Hex) senden will, bleibt das Prog hängen.
ich finde den Fehler nicht!! könnt ihr mir helfen?
#define F_CPU 8000000UL // MP-Takt
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#define BAUD 19200UL //Baundrate definieren
#define UBRR_BAUD ((F_CPU)/(16*(BAUD))-1) //Autoberechnung bei Änderung des MP-Takt
char out[15];
int in = 1;
int Zahl = 15;
long int i = 1;
int n = 1;
int Daten =100;
// Ausgaberoutinen
int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
int uart_puts( char* str )
{
while( *str )
uart_putc( *str++ );
return 0;
}
int wait()
{
for (i=0;i<200000;)
{
i=i+1;
}
}
// Main-Funktion
int main (void)
{
// Programm
// RS232 aktivieren
UCSRB |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ; // UART TX, RX einschalten
UCSRC |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0 ) | ( 1<<UPM1 ); // Asynchron 8N1, Parity even
UBRRH = (uint8_t) (UBRR_BAUD>>8); // USART Baud
UBRRL = (uint8_t) UBRR_BAUD;
TCCR1A = (1 << WGM11) | (1 << WGM10) | ( 1 << COM1A1);
TCCR1B = ( 1 << CS11) ;
OCR1A = 0;
sei();
DDRB = 0xFF;
for (;;)
{
while (!(UCSRA & (1<<UDRE)));
UDR = Daten;
OCR1A = Daten;
wait();
Daten=Daten+20;
}
}
ISR(SIG_USART_RECV)
{
Daten = UDR;
}
ich habe folgenden Code auf deinem Mega8 laufen. PWM funktioniert auch wunderbar aber jedesmal, wenn ich neue Werte per RS-232 (Hterm in Hex) senden will, bleibt das Prog hängen.
ich finde den Fehler nicht!! könnt ihr mir helfen?
#define F_CPU 8000000UL // MP-Takt
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#define BAUD 19200UL //Baundrate definieren
#define UBRR_BAUD ((F_CPU)/(16*(BAUD))-1) //Autoberechnung bei Änderung des MP-Takt
char out[15];
int in = 1;
int Zahl = 15;
long int i = 1;
int n = 1;
int Daten =100;
// Ausgaberoutinen
int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
int uart_puts( char* str )
{
while( *str )
uart_putc( *str++ );
return 0;
}
int wait()
{
for (i=0;i<200000;)
{
i=i+1;
}
}
// Main-Funktion
int main (void)
{
// Programm
// RS232 aktivieren
UCSRB |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ; // UART TX, RX einschalten
UCSRC |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0 ) | ( 1<<UPM1 ); // Asynchron 8N1, Parity even
UBRRH = (uint8_t) (UBRR_BAUD>>8); // USART Baud
UBRRL = (uint8_t) UBRR_BAUD;
TCCR1A = (1 << WGM11) | (1 << WGM10) | ( 1 << COM1A1);
TCCR1B = ( 1 << CS11) ;
OCR1A = 0;
sei();
DDRB = 0xFF;
for (;;)
{
while (!(UCSRA & (1<<UDRE)));
UDR = Daten;
OCR1A = Daten;
wait();
Daten=Daten+20;
}
}
ISR(SIG_USART_RECV)
{
Daten = UDR;
}