Hi Hubert,
danke für dein Code, aber funktioniert nicht bei mir trotz OCRA anpassung 
Mal paar fragen dazu:
1. Hier wird der Ausgang für UART Signale gewählt oder?
Code:
ISR(USART_RXC_vect){
rxwert= UDR;
PORTB=(1<<PB0);
}
2. Mit "break" wird doch das Programm angehalten und springt nicht wieder zur Hauptschleife oder?
Code:
switch(rxwert){
case 0x38 :
OCR1A=470;
break;
Ich hab dein Programm mal geändert für eine Led ansteuerrung.
Siehe Code. Wenn ich Taster PD2 drücke geht Lampe PD5 an und aus.
Wenn ich jetzt über Hyberterminal Taste stücke, geht an PB0 eine Led dauernt an und die funktion über normalen Taster PD2 funktioniert nicht mehr. Hängt sich das Programm jetzt auf vielleicht wegen "break" oder stimmt die einstellungen von UART nicht?
Code:
#include <avr/io.h>
#include <stdbool.h>
#include <stdlib.h>
#include <avr/io.h>
#include <AVR/iom8.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#define F_CPU 8000000 // clock
#define BAUD 9600
#define bauddivider (unsigned int)(F_CPU / BAUD / 16 - 0.5)
volatile unsigned char rxwert=0x30;
ISR(USART_RXC_vect){
rxwert= UDR;
PORTB=(1<<PB0);
}
void usart_init(void){
UBRRL = bauddivider; //set baud rate
UBRRH = bauddivider >> 8;
UCSRB = (1<<RXCIE)|(1<<RXEN);
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
int main (void)
{
usart_init();
//*** LED ***
DDRB |= (1<<PB0); /* Pin PB0 als Ausgang für UART */
DDRD |= (1<<PD5); /* Pin PD5 als Ausgang für Led */
//*** Taster ***
DDRD &= ~ (1<<PD2); /* Pin D2 als Eingang */
PORTD |= (1<<PD2); /* Pull Up von PIN D2 aktivieren */
sei();
while(1){
if(rxwert==0x30){
if (!( PIND & (1<<PIND2))) /* mache was wenn PinD2 low ist */
{
PORTD |= (1<<PD5); /* Setzt Pin PD5 auf High */
}
else {
PORTD &= ~ (1<<PD5); /* Setzt Pin PD5 wieder auf low */
}
}
switch(rxwert){
case 0x38 :
PORTD |= (1<<PD5); /* Setzt Pin PD5 auf High */
break;
case 0x32 :
PORTD &= ~ (1<<PD5); /* Setzt Pin PD5 wieder auf low */
break;
}
}
}
vajk, danke für dein Hinweiß. Hab es mir aufgeschrieben
Lesezeichen