Forum: Mikrocontroller und Digitale Elektronik Tx Rx Pins AT90CAN128


von CAN (Gast)


Lesenswert?

Hallo,

nach einigen erfolglosen versuchen daten mit der canlib von 
kreatives-chaos zu empfangen habe ich bei der fehlersuche mal die Tx und 
Rx Pins direkt am controller gemessen (nicht can_h und can_l am 
mcp2551). ist es normal das dort der tx pin immer high und rx immer low 
ist? leider nur mit dem multimeter gemessen.

von Jens B. (nixiefreak)


Lesenswert?

Ernst gemeint? Das muss mit einem Oszilloskop gemessen werden, das die 
notwendige Zeitauflösung hat, sonst zeigt dein Multimeter einfach einen 
effektiven Gleichspannungswert an.

Gruß
Jens

von cskulkw (Gast)


Lesenswert?

CAN schrieb:
> ist es normal das dort der tx pin immer high und rx immer low
>
> ist? leider nur mit dem multimeter gemessen.

Also mit einem Multimeter gemessen, sollte der rx-Pin ebenfalls "logisch 
1" sein.

Das wäre nicht in Ordnung.

Aber mit dem Mulitimeter wirst Du die CAN-Botschaften nie wirklich 
wahrnehmen können.

Wie debuggst Du? mit Print ausgaben auf COM?

von CAN (Gast)


Lesenswert?

das ich mit einem multimeter keine can nachrichten "sehen" kann ist mir 
schon klar. ich hatte auch ursprünglich mit dem open bench logic sniffer 
messen wollen. allerdings zeigt auch dieser einen dauerhaften high pegel 
auf tx und low auf rx. ganz gleich ob ich sende oder nicht. leider habe 
ich wenig vertrauen in diesen billig analyser, weswegen ich noch mal mit 
dem multimeter am pin war.

die debug ausgaben habe ich tatsächlich über den usart ausgeben wollen.

ich hätte eigentlich erwartet das beide pinne am controller low sind 
wenn nichts auf dem bus passiert und nur für die dauer des senden bzw 
empfangens high impulse führen.

aber wenn wirklich beide pinne high pegel haben sollten steckt der 
fehler wohl nicht in der software.

von CAN (Gast)


Lesenswert?

habe grade noch mal geschaut ob irgendwo eine brücke oder ähnliches 
übersehen wurde. es ist aber alles in ordnung. wenn ich dem controller 
sage er soll den port d auf eingang setzen und ihn ansonsten nackig 
lasse sind auch beide pins (rx, tx) wie erwartet low.

die hardware scheint also zu funktionieren.

sobald ich den can bus mit der can lib initialisiere habe ich wieder das 
oben bereits beschriebene bild.

hier mal der testcode:
1
#ifndef F_CPU
2
3
#define F_CPU 16000000    // do NOT append UL to this number
4
5
#endif
6
#include <stdint.h>
7
#include <stdlib.h>
8
#include <avr/io.h>
9
#include <avr/interrupt.h>
10
#include <avr/pgmspace.h>
11
#include "uart.h"
12
#include "can.h"
13
#include "config.h"
14
#include <util/delay.h> 
15
16
#define UART_BAUD_RATE 500000
17
18
 
19
int main(void)
20
{  
21
  unsigned int c;
22
  uart1_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));
23
  can_init(BITRATE_125_KBPS);
24
  can_filter_t filter = {
25
    .id = 0,
26
    .mask = 0,
27
    .flags = {
28
      .rtr = 0,
29
      .extended = 0
30
    }
31
  };
32
  can_set_filter(0, &filter);
33
  int i;  
34
  sei();
35
  
36
    while(1)
37
    {
38
    c = uart1_getc();
39
        if ( c & UART_NO_DATA ) {
40
            /* 
41
             * no data available from UART 
42
             */
43
        } else {
44
      uart1_puts("Gateway vorhanden");
45
      //dummy nachricht
46
      can_t msg;
47
      msg.id = 1;
48
      msg.flags.rtr = 0;
49
      msg.flags.extended = 0;
50
      msg.length = 4;
51
      msg.data[0] = 0x01;
52
      msg.data[1] = 0x02;
53
      msg.data[2] = 0x03;
54
      msg.data[3] = 0x04;
55
      can_send_message(&msg);
56
     }
57
    if(can_check_message()) {
58
      can_t msg;
59
      can_get_message(&msg);
60
      uart1_puts("ID: ");
61
      uart1_putc(msg.id);
62
      uart1_puts("Length: ");
63
      uart1_putc(msg.length);
64
      uart1_puts("Data: ");
65
      for(i = 0; i <= msg.length; i++) {
66
        uart1_putc(msg.data[i]);
67
      }
68
    }
69
    }
70
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.