Willst du nicht kurz mal das Echo anpassen und laufen lassen ?
Wenn das funzt, brauchen wir uns um die Hardware und Kabeln keine Gedanken mehr zu machen
https://www.roboternetz.de/wiki/pmwi...sComVergleich2
Druckbare Version
Willst du nicht kurz mal das Echo anpassen und laufen lassen ?
Wenn das funzt, brauchen wir uns um die Hardware und Kabeln keine Gedanken mehr zu machen
https://www.roboternetz.de/wiki/pmwi...sComVergleich2
Mach ich gerne..
Hatte ich vergessen zu erwähnen dass der MC die Daten empfängt?
Wenn ja, SORRY.
Hier der neue Code,
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 7372800
#define USART_BAUD_RATE 115200
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)
volatile static uint8_t data;
void USART_init(void){
UBRRH = 0;
UBRRL = (uint8_t) USART_BAUD_SELECT;
/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
data = UDR;
}
void USART_transmit(uint8_t c){
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}
void USART_transmit_string(uint8_t *string){
while(!(UCSRA & (1<<UDRE)));
while( *string){ USART_transmit (*string++); }
}
SIGNAL( SIG_USART_RECV )
{
data = UDR;
}
int main (void)
{
// D A T E N R I C H T U N G :
//===============================================
// PORTA Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRA = 0b11111111; //
PORTA = 0b00000000; //
// PORTB Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRB = 0b00000000; //
PORTB = 0b00000000; //
// PORTC Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRC = 0b00000000; //
PORTC = 0b11111111; //
// PORTD Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRD = 0b11111111; //
PORTD = 0b00000000; //
USART_init();
USART_transmit_string("USART INIT - OK ");
sei();
uint8_t data_alt;
while (1) {
PORTA = UCSRA;
PORTD = data;
if( data != data_alt ){
USART_transmit(data);
data_alt = data;
}
}
}
Mach ich gerne..
Hatte ich vergessen zu erwähnen dass der MC die Daten empfängt?
Wenn ja, SORRY.
Hier der neue Code,
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 7372800
#define USART_BAUD_RATE 115200
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)
volatile static uint8_t data;
void USART_init(void){
UBRRH = 0;
UBRRL = (uint8_t) USART_BAUD_SELECT;
/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
data = UDR;
}
void USART_transmit(uint8_t c){
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}
void USART_transmit_string(uint8_t *string){
while(!(UCSRA & (1<<UDRE)));
while( *string){ USART_transmit (*string++); }
}
SIGNAL( SIG_USART_RECV )
{
data = UDR;
}
int main (void)
{
// D A T E N R I C H T U N G :
//===============================================
// PORTA Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRA = 0b11111111; //
PORTA = 0b00000000; //
// PORTB Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRB = 0b00000000; //
PORTB = 0b00000000; //
// PORTC Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRC = 0b00000000; //
PORTC = 0b11111111; //
// PORTD Pin: 76543210 ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
DDRD = 0b11111111; //
PORTD = 0b00000000; //
USART_init();
USART_transmit_string("USART INIT - OK ");
sei();
uint8_t data_alt;
while (1) {
PORTA = UCSRA;
PORTD = data;
if( data != data_alt ){
USART_transmit(data);
data_alt = data;
}
}
}
Ist der Watchdog deaktiviert ? Ich sag dir ehrlich, mir fällt nicht mehr viel ein.
Den Watchdog hab ich nochnie hergenommen....
was kann das blos sein?....
Jaja, aber im Programm wird er nicht deaktiviert, vielleicht aber mit den Fuses ?Zitat:
Zitat von Kaiser-F
Wozu ist denn das data_alt? Das verwendest du uninitialisiert.
Versuch mal nen poll-Betrien also Receive ohne Interrupt zu nutzen.
Ansonsten fällt mir nur ein, daß es eine Silicon-Bug sein könnte. Evtl sagt ds Datenblatt oder die Errata zu deinem AVR was dazu, aber an so war denkt man natürlich nicht gerne...
Der Watchdog ist das WDT-BIT,
Da war KEIN Häckchen drinnen, also unprogrammed.
Wenn ich diese Bit setze, dann tut er andauernd reseten, anscheinend weil der Watchdog dann nochnicht richtig eingestellt ist....
Ich werd noch verrückt.... das ist bestimmt wieder so ne Kleinigkeit mir großen Folgen ](*,)
Ich muss mich bei euch recht herzlich für eure große Geduld bedanken!
Ist ehrlich ein feiner Zug von euch!
@SprinterSB
Ich seh da grad im Datasheet was von "safety level". Muß mir erst zusammenklamüsern, was es damit auf sich hat
Das ist sicher: Wenn wir's dann wissen, werden wir uns alle mit der Faust auf's Hirn klatschen und mit Asche bestreuen.Zitat:
Zitat von Kaiser-F