loukumas
07.08.2008, 12:43
Hallo Leute,
ich habe eine Schaltung mit dem AT90CAN128 und habe eine CAN-Schnittstelle zusammengestellt. Ich hab den Code bzw. die lib. von www.kreatives-chaos.de genutzt. Klappt eigentlich auch ganz gut. Ich habe aber das Problem, dass mein Controller dauernd Nachrichten rausschickt, obwohl er die Nachricht eigentlich nur einmal senden sollte. Anbei mein Code. Er soll eine Nachricht schicken, dann soll die LED dauerhaft blinken. Das tut sie auch, aber wenn man am Scope den Ausgang misst, stellt man fest dass er immer weiter CAN-Nachrichten raushaut.
Hat jemand ne Idee wie es funktioniert, dass man nur eine Nachricht rausschickt????????
CODE:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>
#include "can.h"
int main(void)
{
DDRA |= (1<<PA1);
static tCAN msg;
msg.id = 0x0DC;
msg.flags.rtr = 0;
msg.flags.extended = 0;
msg.length = 4;
msg.data[0] = 0x0;
msg.data[1] = 0xfe;
msg.data[2] = 0xcb;
msg.data[3] = 0xa5;
can_set_mode(Normal_MODE);
can_init(BITRATE_100_KBPS);
if(can_check_free_buffer())
can_send_message(&msg);
while (1)
{
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x02;
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x00;
//while (1) {
}
}
Wäre super, wenn jemand ne Idee hätte.
Servus Uli
ich habe eine Schaltung mit dem AT90CAN128 und habe eine CAN-Schnittstelle zusammengestellt. Ich hab den Code bzw. die lib. von www.kreatives-chaos.de genutzt. Klappt eigentlich auch ganz gut. Ich habe aber das Problem, dass mein Controller dauernd Nachrichten rausschickt, obwohl er die Nachricht eigentlich nur einmal senden sollte. Anbei mein Code. Er soll eine Nachricht schicken, dann soll die LED dauerhaft blinken. Das tut sie auch, aber wenn man am Scope den Ausgang misst, stellt man fest dass er immer weiter CAN-Nachrichten raushaut.
Hat jemand ne Idee wie es funktioniert, dass man nur eine Nachricht rausschickt????????
CODE:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>
#include "can.h"
int main(void)
{
DDRA |= (1<<PA1);
static tCAN msg;
msg.id = 0x0DC;
msg.flags.rtr = 0;
msg.flags.extended = 0;
msg.length = 4;
msg.data[0] = 0x0;
msg.data[1] = 0xfe;
msg.data[2] = 0xcb;
msg.data[3] = 0xa5;
can_set_mode(Normal_MODE);
can_init(BITRATE_100_KBPS);
if(can_check_free_buffer())
can_send_message(&msg);
while (1)
{
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x02;
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x00;
//while (1) {
}
}
Wäre super, wenn jemand ne Idee hätte.
Servus Uli